diff --git a/_posts/2014-03-06-site-changes.html b/_posts/2014-03-06-site-changes.html index 9988d37..a3b32e6 100644 --- a/_posts/2014-03-06-site-changes.html +++ b/_posts/2014-03-06-site-changes.html @@ -2,7 +2,7 @@ category: en type: paper layout: paper -tags: сайт, github pages +tags: site, github pages title: Site changes short: site-changes description: I decided to change my site. You may find short list of changes below. diff --git a/_posts/2014-03-23-creating-custom-repo.html b/_posts/2014-03-23-creating-custom-repo.html new file mode 100644 index 0000000..e733632 --- /dev/null +++ b/_posts/2014-03-23-creating-custom-repo.html @@ -0,0 +1,143 @@ +--- +category: en +type: paper +layout: paper +tags: archlinux, configuration, linux +title: Creating own repository +short: creating-custom-repo +description: It is a short paper devoted to creation own ArchLinux repository. +--- +
First find a server and desire to have sex with it. It is recommended to use Archlinux on it, but it is not necessarily - because you may create special root for Archlinux. Also you need two packages, devtools
and pacman
:
devtools is script set for building automation in the clean chroot. I think most of Arch maintainers use it.
+Let's create working directories:
+{% highlight bash %} +mkdir -p ~/arch/repo/{i686,x86_64} +mkdir -p ~/arch/{prepare,root,staging} +{% endhighlight %} +~/arch/repo/{i686,x86_64}
are directories for repository, ~/arch/prepare
is directory where compiled packages will be stored, ~/arch/root
is one where clean chroot will be created, ~/arch/staging
is one where packages will be built.
Create directory, share it (using ftp, for example). It has two subdirectories - i686
and x86_64
- for each architecture respectively. And fill them with a set of packages.
Updating repository may be split into the following steps:
+Download source tarballs from AUR:
+{% highlight bash %} +cd ~/arch/staging +yaourt -G package-name +{% endhighlight %} + +Build each package automatically:
+{% highlight bash %} +func_build() { + PREPARE="$1" + ROOT="$2" + if grep "arch=('any')" PKGBUILD -q; then + /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" + else + /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" + /usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" + fi + /usr/bin/cp *.pkg.tar.xz "${PREPARE}" +} + +# building +/usr/bin/cd "${STAGINGDIR}" +/usr/bin/find -name PKGBUILD -type f -execdir func_build "${PREPAREDIR}" "${ROOTDIR}" \; +{% endhighlight %} +It is recommended to add the following lines to /etc/sudoers
:
It is recommended to configure gpg-agent.
+ +Here is a function for removal packages from database and repository:
+{% highlight bash %} +func_remove() { + DBPATH="$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}* +} +{% endhighlight %} +i686
repository update:
x86_64
repository update:
Here is the script. Download source tarballs and run script (editing variables if it is necessary).
+ +Just add following lines to /etc/pacman.conf
:
Для начала находим сервер и желание с ним заниматься сексом. Для простоты, лучше, чтобы там стоял Archlinux, хотя, это и не совсем обязательно (можно создать отдельный корень под Arch). Из пакетов, пожалуй, нам понадобится только два, devtools
и сам pacman
:
devtools - набор скриптов, предназначенный для автоматизации сборки пакетов в чистом чруте. Думаю, большинство мейнтейнеров Arch'а пользуются им.
+Создадим рабочие директории:
+{% highlight bash %} +mkdir -p ~/arch/repo/{i686,x86_64} +mkdir -p ~/arch/{prepare,root,staging} +{% endhighlight %} +Директории ~/arch/repo/{i686,x86_64}
для самого репозитория, ~/arch/prepare
- директория, где будут лежать собранные пакеты, ~/arch/root
- директория, где будет создан чистый чрут для сборки, ~/arch/staging
- директория, откуда будут собираться пакеты.
Создаем директорию, расшариваем ее (например, по ftp). В ней две субдиректории - i686
и x86_64
, для каждого типа архитектур соответственно. И наполняем их набором пакетов по Вашему усмотрению.
Процесс обновления репозитория можно разбить на следующие части:
+Теперь по шагам.
+ +Скачаем исходники для всех нужных пакетов из AUR'а:
+{% highlight bash %} +cd ~/arch/staging +yaourt -G package-name +{% endhighlight %} + +Автоматически соберем каждый пакет:
+{% highlight bash %} +func_build() { + PREPARE="$1" + ROOT="$2" + if grep "arch=('any')" PKGBUILD -q; then + /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" + else + /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" + /usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" + fi + /usr/bin/cp *.pkg.tar.xz "${PREPARE}" +} + +# building +/usr/bin/cd "${STAGINGDIR}" +/usr/bin/find -name PKGBUILD -type f -execdir func_build "${PREPAREDIR}" "${ROOTDIR}" \; +{% endhighlight %} +Для удобства рекомендую добавить в файл /etc/sudoers
следующие строки:
Для удобства рекомендую настроить gpg-agent.
+ +Функция для удаления пакетов из базы данных и из репозитория:
+{% highlight bash %} +func_remove() { + DBPATH="$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}* +} +{% endhighlight %} +Обновление репозитория i686
:
Обновление репозитория x86_64
:
Скрипт целиком. Скачиваем исходники для пакетов, запускаем скрипт (при необходимости, редактируем переменные) и радуемся жизни.
+ +Просто добавляем в файл /etc/pacman.conf
следующие строки: