edited post about custom repo

This commit is contained in:
arcan1s 2014-04-09 17:17:29 +04:00
parent 39924108bd
commit 58cc67f059
2 changed files with 77 additions and 57 deletions

View File

@ -29,7 +29,7 @@ mkdir -p ~/arch/{prepare,root,staging}
<li>Packages signing.</li> <li>Packages signing.</li>
<li>Creating the list of packages.</li> <li>Creating the list of packages.</li>
<li>Repository update: <li>Repository update:
<ol><li>Removal old packages from database and repository.</li> <ol><li>Removal old packages from repository.</li>
<li>Copying new packages</li> <li>Copying new packages</li>
<li>Repository update.</li></ol> <li>Repository update.</li></ol>
</li> </li>
@ -49,15 +49,21 @@ yaourt -G package-name
func_build() { func_build() {
PREPARE="$1" PREPARE="$1"
ROOT="$2" ROOT="$2"
if grep "arch=('any')" PKGBUILD -q; then eval $(/usr/bin/grep 'arch=' PKGBUILD)
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" if echo ${arch} | /usr/bin/grep any -q; then
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c
else else
if grep "lib32" PKGBUILD -q; then eval $(/usr/bin/grep 'pkgname=' PKGBUILD)
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" if echo ${pkgname} | /usr/bin/grep lib32 -q; then
/usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" /usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" -c
else else
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" if /usr/bin/grep "lib32" PKGBUILD -q; then
/usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c
/usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" -c
else
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c
/usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" -c
fi
fi fi
fi fi
/usr/bin/cp *.pkg.tar.xz "${PREPARE}" /usr/bin/cp *.pkg.tar.xz "${PREPARE}"
@ -78,10 +84,13 @@ username ALL=NOPASSWD: /usr/bin/multilib-staging-build
<h3><a name="signing" class="anchor" href="#signing"><span class="octicon octicon-link"></span></a>Packages signing</h3> <h3><a name="signing" class="anchor" href="#signing"><span class="octicon octicon-link"></span></a>Packages signing</h3>
{% highlight bash %} {% highlight bash %}
# signing # signing
if [ ${USEGPG} == "yes" ]; then
echo "[II] Signing"
cd "${PREPAREDIR}" cd "${PREPAREDIR}"
for PACKAGE in $(/usr/bin/ls *.pkg.tar.xz); do for PACKAGE in $(/usr/bin/find . -name '*.pkg.tar.xz'); do
/usr/bin/gpg -b ${PACKAGE} /usr/bin/gpg -b ${PACKAGE}
done done
fi
{% endhighlight %} {% endhighlight %}
<p align="justify">It is recommended to configure <a href="https://wiki.archlinux.org/index.php/GPG#gpg-agent">gpg-agent</a>.</p> <p align="justify">It is recommended to configure <a href="https://wiki.archlinux.org/index.php/GPG#gpg-agent">gpg-agent</a>.</p>
@ -89,47 +98,48 @@ done
{% highlight bash %} {% highlight bash %}
# creating packages list # creating packages list
cd "${PREPAREDIR}" cd "${PREPAREDIR}"
i686_PACKAGES=$(/usr/bin/find * -name "*-i686.pkg.tar.xz" -o -name "*-any.pkg.tar.xz") i686_PACKAGES=$(/usr/bin/find * -name '*-i686.pkg.tar.xz' -o -name '*-any.pkg.tar.xz')
x86_64_PACKAGES=$(/usr/bin/find * -name "*-x86_64.pkg.tar.xz" -o -name "*-any.pkg.tar.xz") x86_64_PACKAGES=$(/usr/bin/find * -name '*-x86_64.pkg.tar.xz' -o -name '*-any.pkg.tar.xz')
echo "=> i686 packages: \n${i686_PACKAGES}" echo -e "[II] => i686 packages: \n${i686_PACKAGES}"
echo "=> x86_64 packages: \n${x86_64_PACKAGES}" echo -e "[II] => x86_64 packages: \n${x86_64_PACKAGES}"
{% endhighlight %} {% endhighlight %}
<h3><a name="updating" class="anchor" href="#updating"><span class="octicon octicon-link"></span></a>Repository update</h3> <h3><a name="updating" class="anchor" href="#updating"><span class="octicon octicon-link"></span></a>Repository update</h3>
<p align="justify">Here is a function for removal packages from database and repository:</p> <p align="justify">Here is a function for removal packages from database and repository:</p>
{% highlight bash %} {% highlight bash %}
func_remove() { func_remove() {
DBNAME="$1" PKGNAME="$1"
PKGNAME="$2" /usr/bin/rm -f ${PKGNAME}-[0-9]*
/usr/bin/repo-remove ${DBNAME}.db.tar.gz ${PKGNAME}
/usr/bin/repo-remove ${DBNAME}.files.tar.gz ${PKGNAME}
/usr/bin/rm -f ${PKGNAME}*
} }
export -f func_remove export -f func_remove
{% endhighlight %} {% endhighlight %}
<p align="justify"><code>i686</code> repository update:</p> <p align="justify"><code>i686</code> repository update:</p>
{% highlight bash %} {% highlight bash %}
# updating i686 repo # updating i686 repo
echo "[II] Updating i686 repo"
cd "${REPODIR}/i686" cd "${REPODIR}/i686"
for PACKAGE in ${i686_PACKAGES}; do for PACKAGE in ${i686_PACKAGES}; do
PKGNAME=$(echo ${PACKAGE} | /usr/bin/awk -F '-' '{for(i=1; i<=NF-3;i++) {printf("%s-", $i);}}' | /usr/bin/sed 's/.$//') PKGNAME=$(echo ${PACKAGE} | /usr/bin/awk -F '-' '{for(i=1; i<=NF-3;i++) {printf("%s-", $i);}}' | /usr/bin/sed 's/.$//')
/usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${DBNAME}" "${PKGNAME}"" \; /usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${PKGNAME}"" \;
/usr/bin/cp "${PREPAREDIR}/${PACKAGE}"{,.sig} . /usr/bin/cp "${PREPAREDIR}/${PACKAGE}" .
[ ${USEGPG} == "yes" ] && /usr/bin/cp "${PREPAREDIR}/${PACKAGE}.sig" .
/usr/bin/repo-add --new ${DBNAME}.db.tar.gz "${PACKAGE}"
/usr/bin/repo-add --new --files ${DBNAME}.files.tar.gz "${PACKAGE}"
done done
/usr/bin/repo-add --new ${DBNAME}.db.tar.gz *.pkg.tar.xz
/usr/bin/repo-add --new --files ${DBNAME}.files.tar.gz *.pkg.tar.xz
{% endhighlight %} {% endhighlight %}
<p align="justify"><code>x86_64</code> repository update:</p> <p align="justify"><code>x86_64</code> repository update:</p>
{% highlight bash %} {% highlight bash %}
# updating x86_64 repo # updating x86_64 repo
echo "[II] Updating x86_64 repo"
cd "${REPODIR}/x86_64" cd "${REPODIR}/x86_64"
for PACKAGE in ${x86_64_PACKAGES}; do for PACKAGE in ${x86_64_PACKAGES}; do
PKGNAME=$(echo ${PACKAGE} | /usr/bin/awk -F '-' '{for(i=1; i<=NF-3;i++) {printf("%s-", $i);}}' | /usr/bin/sed 's/.$//') PKGNAME=$(echo ${PACKAGE} | /usr/bin/awk -F '-' '{for(i=1; i<=NF-3;i++) {printf("%s-", $i);}}' | /usr/bin/sed 's/.$//')
/usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${DBNAME}" "${PKGNAME}"" \; /usr/bin/find -name "${PKGNAME}"'*.pkg.tar.xz' -type f -exec /usr/bin/bash -c "func_remove "${PKGNAME}"" \;
/usr/bin/cp "${PREPAREDIR}/${PACKAGE}"{,.sig} . /usr/bin/cp "${PREPAREDIR}/${PACKAGE}" .
[ ${USEGPG} == "yes" ] && /usr/bin/cp "${PREPAREDIR}/${PACKAGE}.sig" .
/usr/bin/repo-add --new ${DBNAME}.db.tar.gz "${PACKAGE}"
/usr/bin/repo-add --new --files ${DBNAME}.files.tar.gz "${PACKAGE}"
done done
/usr/bin/repo-add --new ${DBNAME}.db.tar.gz *.pkg.tar.xz
/usr/bin/repo-add --new --files ${DBNAME}.files.tar.gz *.pkg.tar.xz
{% endhighlight %} {% endhighlight %}
<h3><a name="clear" class="anchor" href="#clear"><span class="octicon octicon-link"></span></a>Cleaning</h3> <h3><a name="clear" class="anchor" href="#clear"><span class="octicon octicon-link"></span></a>Cleaning</h3>

View File

@ -29,7 +29,7 @@ mkdir -p ~/arch/{prepare,root,staging}
<li>Подписывание пакетов.</li> <li>Подписывание пакетов.</li>
<li>Создание списка пакетов.</li> <li>Создание списка пакетов.</li>
<li>Обновление репозиториев: <li>Обновление репозиториев:
<ol><li>Удаление старых пакетов из базы и репозитория.</li> <ol><li>Удаление старых пакетов из репозитория.</li>
<li>Копирование новых пакетов.</li> <li>Копирование новых пакетов.</li>
<li>Обновление базы.</li></ol> <li>Обновление базы.</li></ol>
</li> </li>
@ -50,15 +50,21 @@ yaourt -G package-name
func_build() { func_build() {
PREPARE="$1" PREPARE="$1"
ROOT="$2" ROOT="$2"
if grep "arch=('any')" PKGBUILD -q; then eval $(/usr/bin/grep 'arch=' PKGBUILD)
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" if echo ${arch} | /usr/bin/grep any -q; then
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c
else else
if grep "lib32" PKGBUILD -q; then eval $(/usr/bin/grep 'pkgname=' PKGBUILD)
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" if echo ${pkgname} | /usr/bin/grep lib32 -q; then
/usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" /usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" -c
else else
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" if /usr/bin/grep "lib32" PKGBUILD -q; then
/usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c
/usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" -c
else
/usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c
/usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" -c
fi
fi fi
fi fi
/usr/bin/cp *.pkg.tar.xz "${PREPARE}" /usr/bin/cp *.pkg.tar.xz "${PREPARE}"
@ -79,10 +85,13 @@ username ALL=NOPASSWD: /usr/bin/multilib-staging-build
<h3><a name="signing" class="anchor" href="#signing"><span class="octicon octicon-link"></span></a>Подпись пакетов</h3> <h3><a name="signing" class="anchor" href="#signing"><span class="octicon octicon-link"></span></a>Подпись пакетов</h3>
{% highlight bash %} {% highlight bash %}
# signing # signing
if [ ${USEGPG} == "yes" ]; then
echo "[II] Signing"
cd "${PREPAREDIR}" cd "${PREPAREDIR}"
for PACKAGE in $(/usr/bin/ls *.pkg.tar.xz); do for PACKAGE in $(/usr/bin/find . -name '*.pkg.tar.xz'); do
/usr/bin/gpg -b ${PACKAGE} /usr/bin/gpg -b ${PACKAGE}
done done
fi
{% endhighlight %} {% endhighlight %}
<p align="justify">Для удобства рекомендую настроить <a href="https://wiki.archlinux.org/index.php/GPG#gpg-agent">gpg-agent</a>.</p> <p align="justify">Для удобства рекомендую настроить <a href="https://wiki.archlinux.org/index.php/GPG#gpg-agent">gpg-agent</a>.</p>
@ -90,20 +99,17 @@ done
{% highlight bash %} {% highlight bash %}
# creating packages list # creating packages list
cd "${PREPAREDIR}" cd "${PREPAREDIR}"
i686_PACKAGES=$(/usr/bin/find * -name "*-i686.pkg.tar.xz" -o -name "*-any.pkg.tar.xz") i686_PACKAGES=$(/usr/bin/find * -name '*-i686.pkg.tar.xz' -o -name '*-any.pkg.tar.xz')
x86_64_PACKAGES=$(/usr/bin/find * -name "*-x86_64.pkg.tar.xz" -o -name "*-any.pkg.tar.xz") x86_64_PACKAGES=$(/usr/bin/find * -name '*-x86_64.pkg.tar.xz' -o -name '*-any.pkg.tar.xz')
echo "=> i686 packages: \n${i686_PACKAGES}" echo -e "[II] => i686 packages: \n${i686_PACKAGES}"
echo "=> x86_64 packages: \n${x86_64_PACKAGES}" echo -e "[II] => x86_64 packages: \n${x86_64_PACKAGES}"
{% endhighlight %} {% endhighlight %}
<h3><a name="updating" class="anchor" href="#updating"><span class="octicon octicon-link"></span></a>Обновление репозиториев</h3> <h3><a name="updating" class="anchor" href="#updating"><span class="octicon octicon-link"></span></a>Обновление репозиториев</h3>
<p align="justify">Функция для удаления пакетов из базы данных и из репозитория:</p> <p align="justify">Функция для удаления пакетов из базы данных и из репозитория:</p>
{% highlight bash %} {% highlight bash %}
func_remove() { func_remove() {
DBNAME="$1" PKGNAME="$1"
PKGNAME="$2"
/usr/bin/repo-remove ${DBNAME}.db.tar.gz ${PKGNAME}
/usr/bin/repo-remove ${DBNAME}.files.tar.gz ${PKGNAME}
/usr/bin/rm -f ${PKGNAME}* /usr/bin/rm -f ${PKGNAME}*
} }
export -f func_remove export -f func_remove
@ -111,26 +117,30 @@ export -f func_remove
<p align="justify">Обновление репозитория <code>i686</code>:</p> <p align="justify">Обновление репозитория <code>i686</code>:</p>
{% highlight bash %} {% highlight bash %}
# updating i686 repo # updating i686 repo
echo "[II] Updating i686 repo"
cd "${REPODIR}/i686" cd "${REPODIR}/i686"
for PACKAGE in ${i686_PACKAGES}; do for PACKAGE in ${i686_PACKAGES}; do
PKGNAME=$(echo ${PACKAGE} | /usr/bin/awk -F '-' '{for(i=1; i<=NF-3;i++) {printf("%s-", $i);}}' | /usr/bin/sed 's/.$//') PKGNAME=$(echo ${PACKAGE} | /usr/bin/awk -F '-' '{for(i=1; i<=NF-3;i++) {printf("%s-", $i);}}' | /usr/bin/sed 's/.$//')
/usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${DBNAME}" "${PKGNAME}"" \; /usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${PKGNAME}"" \;
/usr/bin/cp "${PREPAREDIR}/${PACKAGE}"{,.sig} . /usr/bin/cp "${PREPAREDIR}/${PACKAGE}" .
[ ${USEGPG} == "yes" ] && /usr/bin/cp "${PREPAREDIR}/${PACKAGE}.sig" .
/usr/bin/repo-add --new ${DBNAME}.db.tar.gz "${PACKAGE}"
/usr/bin/repo-add --new --files ${DBNAME}.files.tar.gz "${PACKAGE}"
done done
/usr/bin/repo-add --new ${DBNAME}.db.tar.gz *.pkg.tar.xz
/usr/bin/repo-add --new --files ${DBNAME}.files.tar.gz *.pkg.tar.xz
{% endhighlight %} {% endhighlight %}
<p align="justify">Обновление репозитория <code>x86_64</code>:</p> <p align="justify">Обновление репозитория <code>x86_64</code>:</p>
{% highlight bash %} {% highlight bash %}
# updating x86_64 repo # updating x86_64 repo
echo "[II] Updating x86_64 repo"
cd "${REPODIR}/x86_64" cd "${REPODIR}/x86_64"
for PACKAGE in ${x86_64_PACKAGES}; do for PACKAGE in ${x86_64_PACKAGES}; do
PKGNAME=$(echo ${PACKAGE} | /usr/bin/awk -F '-' '{for(i=1; i<=NF-3;i++) {printf("%s-", $i);}}' | /usr/bin/sed 's/.$//') PKGNAME=$(echo ${PACKAGE} | /usr/bin/awk -F '-' '{for(i=1; i<=NF-3;i++) {printf("%s-", $i);}}' | /usr/bin/sed 's/.$//')
/usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${DBNAME}" "${PKGNAME}"" \; /usr/bin/find -name "${PKGNAME}"'*.pkg.tar.xz' -type f -exec /usr/bin/bash -c "func_remove "${PKGNAME}"" \;
/usr/bin/cp "${PREPAREDIR}/${PACKAGE}"{,.sig} . /usr/bin/cp "${PREPAREDIR}/${PACKAGE}" .
[ ${USEGPG} == "yes" ] && /usr/bin/cp "${PREPAREDIR}/${PACKAGE}.sig" .
/usr/bin/repo-add --new ${DBNAME}.db.tar.gz "${PACKAGE}"
/usr/bin/repo-add --new --files ${DBNAME}.files.tar.gz "${PACKAGE}"
done done
/usr/bin/repo-add --new ${DBNAME}.db.tar.gz *.pkg.tar.xz
/usr/bin/repo-add --new --files ${DBNAME}.files.tar.gz *.pkg.tar.xz
{% endhighlight %} {% endhighlight %}
<h3><a name="clear" class="anchor" href="#clear"><span class="octicon octicon-link"></span></a>Очистка</h3> <h3><a name="clear" class="anchor" href="#clear"><span class="octicon octicon-link"></span></a>Очистка</h3>