... не соотвествует стандартам
? Многое:
... успешно запустился на
. Теперь любой deb ...
Моими стараниями количество desktop-ов в организации, работающих под Ubuntu приближается к 10 шт. В дальнейшем их станет больше. Возникает проблема установки дополнительных программ и обновления существующих. Качать пакеты индивидуально для каждого компьютера — долго и не экономит интернет-трафик. Решение заключается в установке одного из кеширующих прокси серверов для deb пакетов. Например apt-cacher, преимущество которого в том что не надо изменять урлы репозитариев, а только настройки прокси-сервера для пакетной системы apt. Описывать установку и настройку apt-cacher на debian или любой debian-based операционной системе, в том числе на ubuntu, я не буду. Во-первых это элементарно, во-вторых уже не раз описано, например здесь. К тому же у меня нет серверов на ubuntu, зато есть сервера на slackware. Вот и займемся установкой apt-cacher на slackware 12.
Сначала посмотрим на зависимости пакета:
maxim@ubuntu:~$ apt-cache depends apt-cacher
apt-cacher
Зависит: perl
Зависит: bzip2
Зависит: libwww-perl
Предлагает: libdbd-sqlite3-perl
Радует что apt-cacher написан на perl. Нам понадобится perl библиотека libwww-perl. Установим её на slackware с помошью утилиты cpan2tgz. Можно почитать подробнее про использование cpan2tgz.
root@darkstar:~# cpan2tgz LWP
С зависимостями разобрались, теперь на ubuntu скачиваем deb пакет apt-cacher:
maxim@ubuntu:~$ aptitude download apt-cacher
Получили файл apt-cacher_1.5.3_all.deb. Далее устанавливаем программу, если у вас её ещё нет, для преобразования пакетов в разные форматы — alien:
maxim@ubuntu:~$ sudo aptitude install alien
Преобразуем deb пакет в tgz пакет:
maxim@ubuntu:~$ sudo alien --to-tgz -k apt-cacher_1.5.3_all.deb
Получили файл apt-cacher-1.5.3.tgz. Изучим его содержимое:
maxim@ubuntu:~$ tar -tzf apt-cacher-1.5.3.tgz
./
./usr/
./usr/sbin/
./usr/sbin/apt-cacher
./usr/share/
./usr/share/man/
./usr/share/man/man1/
./usr/share/man/man1/apt-cacher.1.gz
./usr/share/apt-cacher/
./usr/share/apt-cacher/apt-cacher-precache.pl
./usr/share/apt-cacher/apt-cacher.pl
./usr/share/apt-cacher/apt-proxy-to-apt-cacher
./usr/share/apt-cacher/apt-cacher
./usr/share/apt-cacher/apt-cacher-report.pl
./usr/share/apt-cacher/apt-cacher-lib.pl
./usr/share/apt-cacher/remove.pl
./usr/share/apt-cacher/apt-cacher-format-transition.pl
./usr/share/apt-cacher/apt-cacher-import.pl
./usr/share/apt-cacher/upgrade.pl
./usr/share/apt-cacher/apt-cacher-lib-cs.pl
./usr/share/apt-cacher/install.pl
./usr/share/apt-cacher/apt-cacher-cleanup.pl
./usr/share/doc/
./usr/share/doc/apt-cacher/
./usr/share/doc/apt-cacher/copyright
./usr/share/doc/apt-cacher/NEWS.Debian.gz
./usr/share/doc/apt-cacher/changelog.gz
./usr/share/doc/apt-cacher/README.Debian.gz
./etc/
./etc/init.d/
./etc/init.d/apt-cacher
./etc/default/
./etc/default/apt-cacher
./etc/apt-cacher/
./etc/apt-cacher/checksumming.conf
./etc/apt-cacher/apt-cacher.conf
./etc/apt-cacher/apache.conf
./etc/logrotate.d/
./etc/logrotate.d/apt-cacher
./etc/cron.daily/
./etc/cron.daily/apt-cacher
Что же тут не соотвествует стандартам slackware? Многое:
- Страницы руководств man должны храниться в /usr/man, а не в /usr/share/man. К счастью в slackware уже есть символическая ссылка /usr/share/man на /usr/man.
- Документация програм должна хранится в /usr/doc, а не в /usr/share/doc. Опять же аналогичная спасительная символическая ссылка уже есть.
- Стартовые скрипты sysvinit должны храниться в /etc/rc.d/init.d, а не в /etc/init.d. А вот такого симлинка нет, не беда, создаем его сами:
root@darkstar:~# ln -s /etc/rc.d/init.d /etc/init.d
Остальное вроде в порядке. Копируем tgz пакет на slackware сервер и устанавливаем его:
root@darkstar:~# installpkg apt-cacher-1.5.3.tgz
Просматриваем файл /etc/apt-cacher/apt-cacher.conf и видим, что сервер будет запускаться под пользователем и группой www-data. На данный момент в slackware их не существует, исправляем ситуацию:
root@darkstar:~# groupadd www-data
root@darkstar:~# useradd -g www-data www-data
Прописываем в файле /etc/default/apt-cacher значение параметра AUTOSTART=1 и пробуем запустить прокси-сервер apt-cacher:
root@darkstar:~# /etc/rc.d/init.d/apt-cacher start
Starting Apt-Cacher: apt-cacher/etc/rc.d/init.d/apt-cacher: line 26: start-stop-daemon: command not found
Твою мать! В стартовом скрипте используется дебиановская утилита start-stop-daemon, которой нет в slackware. Далее у нас два пути: переписать стартовый скрипт с использованием slackware-way утилит или установить утилиту start-stop-daemon. Системный администратор не программист :-), поэтому ничего переписывать не будем, а будем устанавливать утилиту. Возвращаемся в ubuntu и обнаруживаем, что start-stop-daemon почему-то находится в deb пакете dpkg. Ну да нам все равно, идем по проторенному пути:
maxim@ubuntu:~$ aptitude download dpkg
maxim@ubuntu:~$ sudo alien --to-tgz -k dpkg_1.13.22ubuntu7_i386.deb
Опять копируем полученный пакет на slackware, устанавливаем его и пытаемся снова запустить прокси-сервер apt-cacher:
root@darkstar:~# installpkg dpkg-1.13.22ubuntu7.tgz
root@darkstar:~# /etc/rc.d/init.d/apt-cacher start
Starting Apt-Cacher: apt-cacher/usr/sbin/apt-cacher: No cache_dir directory!
Уже лучше, предыдущей ошибки уже нет, но прокси-сервер все равно не стартует. На этот раз он жалуется на нехватку каких-то директорий. Похоже, что на ubuntu эти директории создаются из инсталяционного скрипта в в deb пакете. Но alien при конвертировании пакета нас честно предупреждает что инсталяционные скрипты не конвертируются. Хорошо. Начинаем внимательнее изучать содержимое deb пакета, для этого него извлекаем управляющие скрипты:
maxim@ubuntu:~$ dpkg -e apt-cacher_1.5.3_all.deb
И обнаруживаем в извлеченном файле DEBIAN/postinst следующие строчки:
echo "Running apt-cacher's install script..."
/usr/share/apt-cacher/install.pl
Понятно, вот чего нам не хватало, запускаем этот скрипт на slackware вручную:
root@darkstar:~# /usr/share/apt-cacher/install.pl
Assuming www-data is the user ID used to run apt-cacher
Doing mkdir(/var/cache/apt-cacher, 0755)
Doing mkdir(/var/log/apt-cacher, 0755)
Doing mkdir(/var/cache/apt-cacher/private, 0755)
Doing mkdir(/var/cache/apt-cacher/import, 0755)
Doing mkdir(/var/cache/apt-cacher/packages, 0755)
Doing mkdir(/var/cache/apt-cacher/headers, 0755)
Doing mkdir(/var/cache/apt-cacher/temp, 0755)
Скрипт отработал успешно и создал необходимые системные директории. В очередной раз пробуем запустить прокси-сервер apt-cacher:
root@darkstar:~# /etc/rc.d/init.d/apt-cacher start
Starting Apt-Cacher: apt-cacher.
Кешируюший прокси-сервер для deb пакетов apt-cacher, после доработки напильником :-), успешно запустился на slackware. Теперь любой deb пакет будет скачиваться только один раз. При повторной установке на другом компьютере пакет будет браться из кеша, что увелит скорость скачивания и съэкономит трафик.
... >
Все пакеты дистрибутива
Как прочитать имя slackware пакета? Как правильно назвать slackware пакет?
Синтаксис имени slackware пакета:
{program}-{version}-{arch}-{build}{tag}.tgz
Где:
Пример: ipcad-3.7.3-i486-2nmu_slack11.0.tgz
Это пакет с программой IPCAD (сбор статистики по трафику) версии 3.7.3, собранный и оптимизированный под архитектуру процессора intel 486. Сборщик пакета — некто nmu. Пакет собран для Slackware 11. Версия сборки пакета — 2.
В завершение несколько советов по работе с slackware пакетами.
Как узнать, какая версия slackware установлена?
cat /etc/slackware-version
Как получить список установленных пакетов в slackware?
ls -1 /var/log/packages
Как получить список 10-и последних установленных пакетов в slackware?
ls -t1 /var/log/packages | head
Как получить список файлов в файле пакета slackware?
tar -tzf имя_пакета.tgz
Как получить список файлов в установленном пакете slackware?
cat /var/log/packages/имя_пакета
Как определить к какому из пакетов slackware принадлежит данный файл?
cd /var/log/packages; grep path/to/file *
Надо указать абсолютный путь к файлу, но без начального слеша, пример:
cd /var/log/packages; grep bin/chmod *
coreutils-6.9-i486-1:bin/chmod
Как узнать какой пакет нужно установить чтобы появился нужный файл?
Перестать выпендриваться с командной строкой и воспользоваться поиском на сайте http://packages.slackware.it