diff --git a/_posts/2014-03-23-creating-custom-repo.html b/_posts/2014-03-23-creating-custom-repo.html index dadf01d..1532087 100644 --- a/_posts/2014-03-23-creating-custom-repo.html +++ b/_posts/2014-03-23-creating-custom-repo.html @@ -29,7 +29,7 @@ mkdir -p ~/arch/{prepare,root,staging}
  • Packages signing.
  • Creating the list of packages.
  • Repository update: -
    1. Removal old packages from database and repository.
    2. +
      1. Removal old packages from repository.
      2. Copying new packages
      3. Repository update.
      @@ -49,15 +49,21 @@ yaourt -G package-name func_build() { PREPARE="$1" ROOT="$2" - if grep "arch=('any')" PKGBUILD -q; then - /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" + eval $(/usr/bin/grep 'arch=' PKGBUILD) + if echo ${arch} | /usr/bin/grep any -q; then + /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c else - if grep "lib32" PKGBUILD -q; then - /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" - /usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" + eval $(/usr/bin/grep 'pkgname=' PKGBUILD) + if echo ${pkgname} | /usr/bin/grep lib32 -q; then + /usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" -c else - /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" - /usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" + if /usr/bin/grep "lib32" PKGBUILD -q; then + /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 /usr/bin/cp *.pkg.tar.xz "${PREPARE}" @@ -78,10 +84,13 @@ username ALL=NOPASSWD: /usr/bin/multilib-staging-build

      Packages signing

      {% highlight bash %} # signing -cd "${PREPAREDIR}" -for PACKAGE in $(/usr/bin/ls *.pkg.tar.xz); do - /usr/bin/gpg -b ${PACKAGE} -done +if [ ${USEGPG} == "yes" ]; then + echo "[II] Signing" + cd "${PREPAREDIR}" + for PACKAGE in $(/usr/bin/find . -name '*.pkg.tar.xz'); do + /usr/bin/gpg -b ${PACKAGE} + done +fi {% endhighlight %}

      It is recommended to configure gpg-agent.

      @@ -89,47 +98,48 @@ done {% highlight bash %} # creating packages list cd "${PREPAREDIR}" -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") -echo "=> i686 packages: \n${i686_PACKAGES}" -echo "=> x86_64 packages: \n${x86_64_PACKAGES}" +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') +echo -e "[II] => i686 packages: \n${i686_PACKAGES}" +echo -e "[II] => x86_64 packages: \n${x86_64_PACKAGES}" {% endhighlight %}

      Repository update

      Here is a function for removal packages from database and repository:

      {% highlight bash %} func_remove() { - DBNAME="$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}* + PKGNAME="$1" + /usr/bin/rm -f ${PKGNAME}-[0-9]* } export -f func_remove {% endhighlight %}

      i686 repository update:

      {% highlight bash %} # updating i686 repo +echo "[II] Updating i686 repo" cd "${REPODIR}/i686" 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/.$//') - /usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${DBNAME}" "${PKGNAME}"" \; - /usr/bin/cp "${PREPAREDIR}/${PACKAGE}"{,.sig} . + /usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${PKGNAME}"" \; + /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 -/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 %}

      x86_64 repository update:

      {% highlight bash %} # updating x86_64 repo +echo "[II] Updating x86_64 repo" cd "${REPODIR}/x86_64" 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/.$//') - /usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${DBNAME}" "${PKGNAME}"" \; - /usr/bin/cp "${PREPAREDIR}/${PACKAGE}"{,.sig} . + /usr/bin/find -name "${PKGNAME}"'*.pkg.tar.xz' -type f -exec /usr/bin/bash -c "func_remove "${PKGNAME}"" \; + /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 -/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 %}

      Cleaning

      diff --git a/ru/_posts/2014-03-23-creating-custom-repo.html b/ru/_posts/2014-03-23-creating-custom-repo.html index 634da78..4f6b3ec 100644 --- a/ru/_posts/2014-03-23-creating-custom-repo.html +++ b/ru/_posts/2014-03-23-creating-custom-repo.html @@ -29,7 +29,7 @@ mkdir -p ~/arch/{prepare,root,staging}
    3. Подписывание пакетов.
    4. Создание списка пакетов.
    5. Обновление репозиториев: -
      1. Удаление старых пакетов из базы и репозитория.
      2. +
        1. Удаление старых пакетов из репозитория.
        2. Копирование новых пакетов.
        3. Обновление базы.
        @@ -50,15 +50,21 @@ yaourt -G package-name func_build() { PREPARE="$1" ROOT="$2" - if grep "arch=('any')" PKGBUILD -q; then - /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" + eval $(/usr/bin/grep 'arch=' PKGBUILD) + if echo ${arch} | /usr/bin/grep any -q; then + /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c else - if grep "lib32" PKGBUILD -q; then - /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" - /usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" + eval $(/usr/bin/grep 'pkgname=' PKGBUILD) + if echo ${pkgname} | /usr/bin/grep lib32 -q; then + /usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" -c else - /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" - /usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" + if /usr/bin/grep "lib32" PKGBUILD -q; then + /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 /usr/bin/cp *.pkg.tar.xz "${PREPARE}" @@ -79,10 +85,13 @@ username ALL=NOPASSWD: /usr/bin/multilib-staging-build

        Подпись пакетов

        {% highlight bash %} # signing -cd "${PREPAREDIR}" -for PACKAGE in $(/usr/bin/ls *.pkg.tar.xz); do - /usr/bin/gpg -b ${PACKAGE} -done +if [ ${USEGPG} == "yes" ]; then + echo "[II] Signing" + cd "${PREPAREDIR}" + for PACKAGE in $(/usr/bin/find . -name '*.pkg.tar.xz'); do + /usr/bin/gpg -b ${PACKAGE} + done +fi {% endhighlight %}

        Для удобства рекомендую настроить gpg-agent.

        @@ -90,20 +99,17 @@ done {% highlight bash %} # creating packages list cd "${PREPAREDIR}" -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") -echo "=> i686 packages: \n${i686_PACKAGES}" -echo "=> x86_64 packages: \n${x86_64_PACKAGES}" +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') +echo -e "[II] => i686 packages: \n${i686_PACKAGES}" +echo -e "[II] => x86_64 packages: \n${x86_64_PACKAGES}" {% endhighlight %}

        Обновление репозиториев

        Функция для удаления пакетов из базы данных и из репозитория:

        {% highlight bash %} func_remove() { - DBNAME="$1" - PKGNAME="$2" - /usr/bin/repo-remove ${DBNAME}.db.tar.gz ${PKGNAME} - /usr/bin/repo-remove ${DBNAME}.files.tar.gz ${PKGNAME} + PKGNAME="$1" /usr/bin/rm -f ${PKGNAME}* } export -f func_remove @@ -111,26 +117,30 @@ export -f func_remove

        Обновление репозитория i686:

        {% highlight bash %} # updating i686 repo +echo "[II] Updating i686 repo" cd "${REPODIR}/i686" 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/.$//') - /usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${DBNAME}" "${PKGNAME}"" \; - /usr/bin/cp "${PREPAREDIR}/${PACKAGE}"{,.sig} . + /usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${PKGNAME}"" \; + /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 -/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 %}

        Обновление репозитория x86_64:

        {% highlight bash %} # updating x86_64 repo +echo "[II] Updating x86_64 repo" cd "${REPODIR}/x86_64" 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/.$//') - /usr/bin/find -name "${PKGNAME}*.pkg.tar.xz" -type f -exec /usr/bin/bash -c "func_remove "${DBNAME}" "${PKGNAME}"" \; - /usr/bin/cp "${PREPAREDIR}/${PACKAGE}"{,.sig} . + /usr/bin/find -name "${PKGNAME}"'*.pkg.tar.xz' -type f -exec /usr/bin/bash -c "func_remove "${PKGNAME}"" \; + /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 -/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 %}

        Очистка