LINUX.ORG.RU

slackware - установка пакетов в определенной последовательности

 ,


0

2

добрый день!

вводная:

1. идет сборка большого списка пакетов (и установка в систему)

2. пакеты складируются в свой подкаталог (типа $PKG)

пока идет процесс «сборка и сопутствующая установка» - все нормально (никаких казусов)

проблема - установка «на конечной» машине

обычная установка/обновление ВСЕГО этого зоопарка обычно у слакварщиков делается что-то типа (ну или подобное)

sudo /sbin/upgradepkg --reinstall --install-new $PKG/*.t?z
sudo /sbin/upgradepkg             --install-new $PKG/*.t?z

или что-то такое (взято как пример)

#!/bin/sh
for dir in a ap d e f k kde l n t tcl x xap y ; do
( cd $dir ; upgradepkg --install-new *.tgz )
done 

есть пакет, который ставится первым (или около того) !!! НО !!! в списке, при использовании шаблона «*.t?z» он будет в конце, и, соотв. ставиться/обновляться он будет позже...

далее код и описание относительно этого пакета

код slackBuild-а (код ПРИМЕРНЫЙ, дающий примерное представление)

mkdir -p LIB; cd LIB
for FILE in lib$x/*.so* ; do
ln -sf      lib$x/$(basename $FILE) .

дает код doinst.sh в пакете (код, так же, ПРИМЕРНЫЙ)

( cd LIB ; rm -rf *.so*             )
( cd LIB ; ln -sf lib$x/*.so* *.so* )

если пакеты буду ставиться НЕ ПО СПИСКУ, то данный пакет, устанавливаясь позже «все прочих» - просто напросто нахрен удалит ВСЁ из каталога LIB, уже установленных до этого файлов

итак: можно разбить на группы и ставить последовательно, как тут

#!/bin/sh
for dir in a ap d e f k kde l n t tcl x xap y ; do
( cd $dir ; upgradepkg --install-new *.tgz )
done 

но мне удобно хранить все в одном каталоге

пока решаю обычным списком и скриптом, который ставит пакеты в нужной последовательности

вопрос:

- кто как решает данную проблему?

- проблема ли эта?!

- свои мысли по этому поводу

- только станд. команды (installpkg, upgradepkg, removepkg)

можно ключ. словами, ссылками

спасибо


Не надо делать такой doinst.sh. Сделайте нужные ссылки руками, «makepkg -l y» сделает правильный doinst.sh. Удаления ссылок по маске в нем не будет.
Ставить пакет раньше других нужно только если библиотеки/файлы нужны для вызываемых из doinst.sh утилит.

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от bormant

Не надо делать такой doinst.sh

ну, блин, прям за идиота меня держите :о)))

я же написал, что ЭТО РЕАКЦИЯ упаковщика на соотв. изготовление ссылок

причем - такой код формируется «стандартно по умолчания»... в слакбилде создаем каталог «в пакете», идем в него и создаем соотв. ссылки - на что «упаковщик» делает станадртный код

( cd LIB ; rm -rf *.so*             )
sunjob ()
Ответ на: комментарий от bormant
Если же утилиты пакета нужны другим для установки, пишем в инструкции:
# upgradepkg --install-new first-*t?z
# upgradepkg --install-new *.t?z

такой подход нестыкуется с моей философией :о) для чего необходимо переименовывать все пакеты по соотв. маске...

что есть полный гемор (имхо, и не пытайтесь переубедить)

мне комфортнее, все таки «как сейчас настроено»

- все пакеты с нормальными-правильными именами

- все в одном месте

- для установки в опр. последовательности используется отдельный скрипт (ну и соотв. пакеты кот. необходимо ставить в опр. порядке лежат в отд. подкаталоге)

- по мне все просто, понятно, логично

да, за ответы спасибо

(я вам в личку писал на другом форуме, вы мне уже что ни-будь ответили бы - ДА или НЕТ)

sunjob ()
Ответ на: комментарий от sunjob

Нормальный makepkg. Просто то, что делает SlackBuild, и то, что окажется в результате в doinst.sh, ОЧЕНЬ сильно отличается, проверьте сами...

Если остались подозрения, готов продолжить обсуждение на slackware.ru, там, полагаю, это будет уместнее.

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от sunjob

Упаковщик (makepkg) никогда не добавляет в doinst.sh код с масками. Если у вас подобное получилось, показывайте
1) код, создавший дерево с ссылками,
2) код, упаковавший его в пакет,
3) версию и md5 /sbin/makepkg.

bormant ★★★★★ ()

Если у тебя пакет при установке удаляет чужие файлы, нужно думать не о том, как его устанавливать раньше других, а о том, как сделать нормальный пакет, и как не допускать появления ничего подобного в дальнейшем. Мне кажется, так.

Citramonum ★★ ()

ВОПРОС ПО ХОДУ

имеется «стандартненький» такой пользовательский doinst.sh (кот. заготовкой лежит рядом со slackBuild-ом)

#
# ldconfig
#
if [ -x sbin/ldconfig ]; then
chroot . /sbin/ldconfig 2> /dev/null
fi

#
# Update the desktop database:
#
if [ -x usr/bin/update-desktop-database ]; then
chroot . /usr/bin/update-desktop-database usr/share/applications > /dev/null 2>&1
fi

#
# Update hicolor theme cache:
#
if [ -d usr/share/icons/hicolor        ]; then
if [ -x /usr/bin/gtk-update-icon-cache ]; then
  chroot . /usr/bin/gtk-update-icon-cache -f -t usr/share/icons/hicolor 1> /dev/null 2> /dev/null
fi
fi

#
# Update the mime database:
#
if [ -x usr/bin/update-mime-database ]; then
chroot . /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1
fi

по ходу в slackBuild-e делаются к.л. манипуляции, в результате makepkg формирует doinst.sh с содержанием

#
# ldconfig
#
if [ -x sbin/ldconfig ]; then
chroot . /sbin/ldconfig 2> /dev/null
fi

#
# Update the desktop database:
#
if [ -x usr/bin/update-desktop-database ]; then
chroot . /usr/bin/update-desktop-database usr/share/applications > /dev/null 2>&1
fi

#
# Update hicolor theme cache:
#
if [ -d usr/share/icons/hicolor        ]; then
if [ -x /usr/bin/gtk-update-icon-cache ]; then
  chroot . /usr/bin/gtk-update-icon-cache -f -t usr/share/icons/hicolor 1> /dev/null 2> /dev/null
fi
fi

#
# Update the mime database:
#
if [ -x usr/bin/update-mime-database ]; then
chroot . /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1
fi

#
# далее то, что навертели в slackBuild
#

( cd usr/bin ; rm -rf uic3-qt4 )
( cd usr/bin ; ln -sf /usr/lib64/qt-4.8.7/bin/uic3 uic3-qt4 )
( cd usr/bin ; rm -rf xmlpatternsvalidator-qt4 )
( cd usr/bin ; ln -sf /usr/lib64/qt-4.8.7/bin/xmlpatternsvalidator xmlpatternsvalidator-qt4 )
( cd usr/bin ; rm -rf qttracereplay-qt4 )
( cd usr/bin ; ln -sf /usr/lib64/qt-4.8.7/bin/qttracereplay qttracereplay-qt4 )
( cd usr/bin ; rm -rf uic-qt4 )
... бла бла бла

но, по идее «верхнюю часть, т.е. то, что было в пользовательском doinst.sh - надо бы вставить последней частью

вопрос: как это сделать, есть какие механизмы?

sunjob ()

ТС на slackware.ru:

первым делом рихтую под себя весь ЭТО, блин, долбанный код, писанный непойми кем, непроверенный и выложенный на slackbuilds.org ...

Язабан.

ashot ★★ ()
Ответ на: комментарий от ashot

's/забан/ ....., .... (q) С.В.Лавров/' Товарищи модераторы, забаньте ashot-а, он сам просил, забыл пароль выложить, но склероз же не злостное нарушение, закроем на это глаза.

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 1)