Product SiteDocumentation Site

16.3. Собственный репозиторий

Одним из преимуществ работы работы с Gear и Hasher является автоматическое ведение собственного репозитория пакетов, собираемых в системе. Каталог с установочными пакетами и с пакетами с исходниками находится в специальной директории ~/hasher/repo/:
@user
[user@VM ~]$ tree ~/hasher/repo/
/home/user/hasher/repo/
├── SRPMS.hasher
│   ├── autoenv-pkg-1.0-alt1.src.rpm
│   ├── autoenv-pkg-1.1-alt1.src.rpm
│   ├── double-1.0-alt1.src.rpm
│   ├── gdb-check-pkg-1.0-alt1.src.rpm
│   ├── GNU_picture-1.0-alt1.src.rpm
│   ├── hello-upgrade-1.0-alt1.src.rpm
│   ├── inc-1.0-alt1.src.rpm
│   ├── Multilab-1.0-alt1.src.rpm
│   ├── not-null-pkg-1.0-alt1.src.rpm
│   ├── null-pkg-1.0-alt1.src.rpm
│   ├── pkg-ncurses-1.0-alt1.src.rpm
│   ├── regex-pkg-1.0-alt1.src.rpm
│   ├── sheepcounter-0.0-alt1.src.rpm
│   ├── sheepcounter-1.0-alt1.src.rpm
│   ├── sheepcounter-pkg-1.0-alt1.src.rpm
│   ├── strace-pkg-1.0-alt1.src.rpm
│   ├── syscall-1.0-alt1.src.rpm
│   ├── syscall-1.1-alt1.src.rpm
│   ├── syscall-1.2-alt1.src.rpm
│   ├── syscall-1.3-alt1.src.rpm
│   ├── todo-pkg-1.0-alt1.src.rpm
│   └── Weatherminal-1.0-alt1.src.rpm
└── x86_64
   └── RPMS.hasher
       ├── autoenv-pkg-1.0-alt1.x86_64.rpm
       ├── autoenv-pkg-1.1-alt1.x86_64.rpm
       ├── autoenv-pkg-debuginfo-1.0-alt1.x86_64.rpm
       ├── autoenv-pkg-debuginfo-1.1-alt1.x86_64.rpm
       ├── double-1.0-alt1.x86_64.rpm
       ├── double-second-1.0-alt1.x86_64.rpm
       ├── gdb-check-pkg-1.0-alt1.x86_64.rpm
       ├── gdb-check-pkg-debuginfo-1.0-alt1.x86_64.rpm
       ├── GNU_picture-1.0-alt1.x86_64.rpm
       ├── GNU_picture-data-1.0-alt1.noarch.rpm
       ├── GNU_picture-data-1.0-alt1.x86_64.rpm
       ├── GNU_picture-debuginfo-1.0-alt1.x86_64.rpm
       ├── hello-upgrade-1.0-alt1.x86_64.rpm
       ├── hello-upgrade-debuginfo-1.0-alt1.x86_64.rpm
       ├── inc-1.0-alt1.x86_64.rpm
       ├── inc-debuginfo-1.0-alt1.x86_64.rpm
       ├── Multilab-1.0-alt1.x86_64.rpm
       ├── Multilab-debuginfo-1.0-alt1.x86_64.rpm
       ├── not-null-pkg-1.0-alt1.x86_64.rpm
       ├── null-pkg-1.0-alt1.x86_64.rpm
       ├── pkg-ncurses-1.0-alt1.x86_64.rpm
       ├── pkg-ncurses-debuginfo-1.0-alt1.x86_64.rpm
       ├── regex-pkg-1.0-alt1.x86_64.rpm
       ├── regex-pkg-debuginfo-1.0-alt1.x86_64.rpm
       ├── sheepcounter-0.0-alt1.x86_64.rpm
       ├── sheepcounter-1.0-alt1.x86_64.rpm
       ├── sheepcounter-debuginfo-0.0-alt1.x86_64.rpm
       ├── sheepcounter-debuginfo-1.0-alt1.x86_64.rpm
       ├── sheepcounter-pkg-1.0-alt1.x86_64.rpm
       ├── sheepcounter-pkg-debuginfo-1.0-alt1.x86_64.rpm
       ├── strace-pkg-1.0-alt1.x86_64.rpm
       ├── strace-pkg-debuginfo-1.0-alt1.x86_64.rpm
       ├── syscall-1.0-alt1.x86_64.rpm
       ├── syscall-1.1-alt1.x86_64.rpm
       ├── syscall-1.2-alt1.x86_64.rpm
       ├── syscall-1.3-alt1.x86_64.rpm
       ├── syscall-debuginfo-1.0-alt1.x86_64.rpm
       ├── syscall-debuginfo-1.1-alt1.x86_64.rpm
       ├── syscall-debuginfo-1.2-alt1.x86_64.rpm
       ├── syscall-debuginfo-1.3-alt1.x86_64.rpm
       ├── todo-pkg-1.0-alt1.x86_64.rpm
       └── Weatherminal-1.0-alt1.x86_64.rpm

4 directories, 64 files
[user@VM ~]$
При успешной пересборке пакета с помощью hasher в чистом окружении (не изнутри hasher с помощью rpmbuild, а через Gear (gear-hsh) или с помощью hsh <name.src.rpm>) содержимое этих каталогов автоматически обновляется:
@user
[user@VM ~]$ ls -la ~/hasher/repo/x86_64/RPMS.hasher/null-pkg-1.0-alt1.x86_64.rpm
-rw-r--r-- 1 user_b user_b 1377 июл  9 21:13 /home/user/hasher/repo/x86_64/RPMS.hasher/null-pkg-1.0-alt1.x86_64.rpm

[user@VM ~]$ hsh ~/hasher/repo/SRPMS.hasher/null-pkg-1.0-alt1.src.rpm
<86>Aug 23 08:29:47 userdel[1115812]: delete user 'rooter'
<86>Aug 23 08:29:47 userdel[1115812]: removed group 'rooter' owned by 'rooter'
<86>Aug 23 08:29:48 groupadd[1115819]: group added to /etc/group: name=rooter, GID=1003
<86>Aug 23 08:29:48 groupadd[1115819]: group added to /etc/gshadow: name=rooter
<86>Aug 23 08:29:48 groupadd[1115819]: new group: name=rooter, GID=1003
<86>Aug 23 08:29:48 useradd[1115825]: new user: name=rooter, UID=1003, GID=1003, home=/root, shell=/bin/bash, from=none
<86>Aug 23 08:29:48 userdel[1115835]: delete user 'builder'
<86>Aug 23 08:29:48 userdel[1115835]: removed group 'builder' owned by 'builder'
<86>Aug 23 08:29:48 userdel[1115835]: removed shadow group 'builder' owned by 'builder'
<86>Aug 23 08:29:49 groupadd[1115842]: group added to /etc/group: name=builder, GID=1004
<86>Aug 23 08:29:49 groupadd[1115842]: group added to /etc/gshadow: name=builder
<86>Aug 23 08:29:49 groupadd[1115842]: new group: name=builder, GID=1004
<86>Aug 23 08:29:49 useradd[1115848]: new user: name=builder, UID=1004, GID=1004, home=/usr/src, shell=/bin/bash, from=none
Building target platforms: x86_64
Building for target x86_64
Wrote: /usr/src/in/nosrpm/null-pkg-1.0-alt1.src.rpm (w1.gzdio)
Installing null-pkg-1.0-alt1.src.rpm
Building target platforms: x86_64
Building for target x86_64
Processing files: null-pkg-1.0-alt1
Wrote: /usr/src/RPM/SRPMS/null-pkg-1.0-alt1.src.rpm (w2.lzdio)
Wrote: /usr/src/RPM/RPMS/x86_64/null-pkg-1.0-alt1.x86_64.rpm (w2.lzdio)
0.01user 0.01system 0:00.02elapsed 96%CPU (0avgtext+0avgdata 5900maxresident)k
0inputs+40outputs (0major+1010minor)pagefaults 0swaps

[user@VM ~]$ ls -la ~/hasher/repo/x86_64/RPMS.hasher/null-pkg-1.0-alt1.x86_64.rpm
-rw-r--r-- 1 user_d user_d 1377 авг 23 11:29 /home/user/hasher/repo/x86_64/RPMS.hasher/null-pkg-1.0-alt1.x86_64.rpm
[user@VM ~]$
Каталог /home/user/hasher/repo может вполне выступать в качестве дополнительного репозитория пакетов системы. Обновление из такого репозитория будет происходить даже при совпадении версий: в пакете зафиксировано время сборки, и более новым считается собранный позже.
Все пути к преднастроенным репозиториям, используемым в системе, хранятся в файлах /etc/apt/sources.list и /etc/apt/sources.list/*.list. Формат описания репозитория в файле следующий:
  • способ организации (тип) репозитория;
  • (необязательный) ключ, которым подписаны индексы;
  • URL хранилища;
  • архитектура;
  • раздел.
@user
[user@VM ~]$ cat /etc/apt/sources.list
# Local package resource list for APT goes here.
# To inspect package defined part, see /etc/apt/sources.list.d/*.list

[user@VM ~]$ ls /etc/apt/sources.list.d/
alt.list  heanet.list  ipsl.list  yandex.list

[user@VM ~]$ cat /etc/apt/sources.list.d/alt.list
# ftp.altlinux.org (ALT Linux, Moscow)

# ALT Platform 11
#rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64 classic
#rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64-i586 classic
#rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/noarch classic

rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64 classic
rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64-i586 classic
rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/noarch classic

#rpm [p11] rsync://ftp.altlinux.org/ALTLinux p11/branch/x86_64 classic
#rpm [p11] rsync://ftp.altlinux.org/ALTLinux p11/branch/x86_64-i586 classic
#rpm [p11] rsync://ftp.altlinux.org/ALTLinux p11/branch/noarch classic

[user@VM ~]$
Локальный репозиторий — например, для разработчика, который что-то правит в пакете и тут же проверяет результат — можно оформить прямо в каталоге /home/user/hasher/repo: добавить его в список доступных репозиториев напрямую, с типом rpm-dir (репозиторий без индекса):
@user
[user@VM ~]$ su -
Password:
[root@VM ~]# vim /etc/apt/sources.list
[root@VM ~]#
выход
[user@VM ~]$ cat /etc/apt/sources.list
# Local package resource list for APT goes here.
# To inspect package defined part, see /etc/apt/sources.list.d/*.list

rpm-dir file:///home/user/hasher repo/x86_64 hasher
[user@VM ~]$
Теперь можно пользоваться репозиторием, как и другими — устанавливать пакеты с помощью пакетных менеджеров:
@root
[root@VM ~]# apt-repo
rpm-dir file:///home/user/hasher repo/x86_64 hasher
rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64 classic
rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64-i586 classic
rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/noarch classic

[root@VM ~]# apt-get install not-null-pkg
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие НОВЫЕ пакеты будут установлены:
 not-null-pkg
0 будет обновлено, 1 новых установлено, 0 пакетов будет удалено и 60 не будет обновлено.
Необходимо получить 0B/1845B архивов.
После распаковки потребуется дополнительно 29B дискового пространства.
Совершаем изменения...
Подготовка...            #################################################################### [100%]
Обновление / установка...
1: not-null-pkg-1.0-alt1 #################################################################### [100%]
Завершено.
[root@VM ~]# not-null-pkg
This is not null pkg
[root@VM ~]#
Этот репозиторий по умолчанию уже включён в сам hasher, именно поэтому только что собранные пакеты можно немедленно устанавливать с помощью hsh-install.