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

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модератор: SLEDopit

Ответить
Аватара пользователя
sunjob
Сообщения: 324
Контактная информация:

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

Сообщение sunjob »

добрый день!

вводная:

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)

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

спасибо
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

Взгляните в man installpkg, там есть интересная опция -tagfile:
-tagfile /somedir/tagfile
Specify a different file to use for package priorities (in this example, /somedir/tagfile will be used). The default is "tagfile" in the package's directory.

На великом и могучем это значит следующее: "Указывает другой файл для приоритетов пакетов (в данном примере будет использован /somedir/tagfile). По умолчанию это "tagfile" в каталоге пакетов". Актуальный русскоязычный man в 14.2 есть из коробки, остальные могут (для поддерживаемых в данный момент выпусков Slackware) получить его там: http://slint.fr. Тегфайл имеет простейший формат: одна строка -- один пакет и его приоритет.
А вот за использование таким образом глоббинга в doinst.sh надо отрывать голову :) Просто оставьте работу по генерации оного makepkg, и он сгенерирует doinst.sh с правильными ссылками.
P.S. Пакеты содержат одинаковые файлы?
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 324
Контактная информация:

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

Сообщение sunjob »

> получить его там: http://slint.fr
прикольненько : Эта страница ещё не существует...
дак вы мне предлагаете наполнить отсебя эту вики? :о)

> отрывать голову
еще интересненько, кому? :о)

> он сгенерирует doinst.sh с правильными ссылками
БЛИН... да вот он и генерирует такой код... я же для чего приводил в начале ТО ЧТО ПИШЕМ в слакбилде и ЧТО ФОРМИРУЕТ мейкпкг... :о)

про ТЕГФАЙЛ - пока еще не понял... в 2-3х словах можно поподробнее?

спасибо
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

sunjob писал(а):
11.01.2017 00:22
прикольненько

http://www.linuxquestions.org/questions/sl...tml#post5645424
Didier начал переводить сайт на DokuWiki, старая версия теперь тут: http://slint.fr/old.

sunjob писал(а):
11.01.2017 00:22
он сгенерирует doinst.sh с правильными ссылками
БЛИН... да вот он и генерирует такой код... я же для чего приводил в начале ТО ЧТО ПИШЕМ в слакбилде и ЧТО ФОРМИРУЕТ мейкпкг... :о)

Что-то меня смущает применение ln здесь. Повторяю, это обычно делает makepkg, и в слакбилде нужда делать линки возникает крайне редко.

sunjob писал(а):
11.01.2017 00:22
про ТЕГФАЙЛ - пока еще не понял... в 2-3х словах можно поподробнее?

В каталог с пакетами кладется тегфайл, а в нем - список пакетов, по одному на строку, с тегом ADD после имени пакета через пробел. Потом делаем # installpkg -tagfile /path/to/tagfile *.t?z*.
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 324
Контактная информация:

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

Сообщение sunjob »

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

про tagfile - весьма интересный инструмент, надо изучить

СПАСИБО

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

имеется "стандартненький" такой пользовательский 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 - надо бы вставить последней частью

вопрос: как это сделать, есть какие механизмы?
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

sunjob писал(а):
10.01.2017 22:45
код 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* )

Я ни черта не смыслю в слакопакетах, но если doinst.sh генерится слакбилдом, и получается такой вот результат, значит использовать таким образом глоббинг в слакбилде просто-напросто нельзя (о чём уже и написал yars). Поскольку файлов, соответствующих глобу, на момент генерации doinst.sh нет, он не раскрывается и FILE принимает значение "lib$x/*.so*" (а вот переменная $x должна была в любом случае раскрыться — тут Вы, вероятно, что-то слишком ПРИМЕРНО написали), и в таком виде и подставляется.
А вообще, давайте не ПРИМЕРНЫЕ, а реальные примеры.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 324
Контактная информация:

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

Сообщение sunjob »

... вероятно, что-то слишком ПРИМЕРНО написали ...
... давайте не ПРИМЕРНЫЕ, а реальные примеры ...


да, конечно слишком примерно... пока сам ковырялся в скриптах, выясняя причину, пока форум..., пока время... короче исходный код скрипта уже парепан/причесан и, вродек как, теперь дает ожидаемый результат, какой он был до этого, уже, блин :о) не вспомню ... (позже выяснилось, что это наследие прежнего слакбилда)
но если наткнусь на "собачью порытость", то сделаю выкус с кодом :о)

спасибо

зы
косячных слакбилдов не нашел, все уже парепаны, оставлены только нормальные пакеты... нашел записи в "журнале", очевидность косяка на лицо

Код: Выделить всё

код slackBuild
#
# Link the shared libraries
#
mkdir -p $PKG${TDE}/lib${x}; cd $PKG${TDE}/lib${x}
for FILE in BLAH_BLAH/lib$x/*.so* ; do
ln -sf lib$x$(basename $FILE) .

формирует doinst.sh/АВТООЧИСКУ вообще всего каталога /opt/trinity/lib64/*

( cd opt/trinity/lib64 ; rm -rf *.so* )
( cd opt/trinity/lib64 ; ln -sf tqt3-R14.0.4/lib/*.so* *.so* )


спасибо за помощь
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

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

Сообщение bormant »

sunjob
вы смогли поставить в тупик. Нет, не сутью вопроса, с сутью-то как раз все понятно.
Просто вопрос задан на пачке форумов. Отвечать на всех одним и тем же -- хм, фигня какая-то.

Из того, что мне известно на момент написания этого сообщения, могу сказать следующее.

1) "тема" к "проблеме" отношения не имеет.
Общий посыл: иногда нужно поставить одни пакеты раньше других.
Решение: README. Пример: см. UPGRADE.TXT от 7 до 14.2 -- везде одно и то же, человеческим по фоновому написано:
сначала обновите/поставьте вот эти 5 пакетов, потом все остальное:

Код: Выделить всё

1.  Upgrade your glibc shared libraries.  This is important, or things
    might go haywire during the next part of the upgrade:

    upgradepkg /root/slackware/a/glibc-solibs-*.txz

2.  Upgrade your package utilities and related tools:

    upgradepkg /root/slackware/a/pkgtools-*.txz
    upgradepkg /root/slackware/a/tar-*.txz
    upgradepkg /root/slackware/a/xz-*.txz
    upgradepkg /root/slackware/a/findutils-*.txz


3.  Upgrade everything else (and install new packages):

    upgradepkg --install-new /root/slackware/*/*.t?z

2) "проблема" в кривых как турецкая сабля пакетах
Дело в следующем:

2.1) пакеты Slackware несут в себе сценарий install/doinst.sh, который исполняется пакетным менеджером после распаковки пакета в ФС;

2.2) сценарии doinst.sh в примере сделаны криво
суть:
-- есть незащищенный фрагмент, который должен сделать симлинки на библиотеки из одного места в другое
-- в источнике библиотек не оказалось по той или иной причине
-- в источнике библиотек не оказалось, и "for FILE in blah/*.so.*; do" дает создать симлинк, содержащий целью дикую карту
-- makepkg проходит по симлинкам и пишет в "inslall/doinst.sh" код создания симлинка по перечню симлинков -- получить цель, записать

Код: Выделить всё

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

Естественно, там, откуда это формируется, никакие маски недопустимы.
Естественно, в том, что сформировано, никакие маски недопустимы.
Естественно, обсуждаем мы внутреннюю разработку и способы исправления ошибки потенциального разработчика пакета (потенциального мейнтейнера пакета) Slackware.

Естественно, что контролировать это должен автор SlackBuild-а, но у ТС пока не получается.

2.3) предпринята попытка полечить следствия (порядок установки), а не причину (кривое локальное дерево пакета)

2.4) самая мякотка будет при удалении пакета с таким doinst.sh

Еще раз, суть темы -- это не использование Slackware, это попытка стать сопровождающим своих пакетов.
Пока что неудачная (есть желание, не хватает знаний, нет понимания, навыков -- но это всё преходяще).
По сути проблемы ответы даны на одном из профильных форумов: slackware.ru. Копировать это всюду -- нет ни сил ни желания.
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 324
Контактная информация:

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

Сообщение sunjob »

уважаемый бормант!

вы смогли поставить в тупик

- а то!!! надеюсь это не запрещено задавать детские вопросы и получать на них взрослые ответы!

1. изначально меня интересовало именно то, что было заявлено в теме, были заданы именно соотве. вопросы итд. итп
2. да, по ходу суть разговора была смещена, а что в этом такого плохого? уточняющие вопросы - уточняющие ответы, кот. помогли проблему рассмотреть более глубоко и правильно!
3. да, я публикую свои вопросы на нескольких форумах! даже для ребенка - очевидно, что так ответЯт и бОльше и бЫстрее и бОлее полно итд итп (добавить по вкусу)
форумы для этого и существуют...
4.
Копировать это всюду
это то зачем? можно - вставить ссылку! (это, надеюсь, не криминал)
5.
стать сопровождающим своих пакетов.
- не своих а чужих, своими они становятся после полного переписывания!!! :о)

сразу вспомнил КВН...
- капитан козлов...
- не козлов, а игроков


спасибо форуму за помощь
мой низкий поклон...
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Ответить