[Решено] SlackBuild : пара вопросов

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

Аватара пользователя
UnixNoob
Сообщения: 210
ОС: Slackware

[Решено] SlackBuild : пара вопросов

Сообщение UnixNoob »

Привет. Дошли у меня руки до разборки структуры слакбилдов, но в руководстве ответы я не нашел. Хотелось бы понять о чем мне надо почитать чтобы с этим разобраться.

1. Очистка библиотек,бинарных файлов, сжатие манов и info pages.
В руководстве оно выглядит так:

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

#Чистим библиотеки и бинарные файлы
( cd $PKG
find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneded 2> /dev/null
)

#Сжимаем маны, если есть.
if [ -d $PKG/usr/man ]; then
( cd $PKG/usr/man
find . -type f -exec gzip -9 {} \;
for i in $(find . -type 1) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done
)
fi

#Сжимаем info pages, если есть, и стираем файл dir
if [ -d $PKG/usr/info ]; then
gzip -9 $PKG/usr/info/*.info
rm-f $PKG/usr/info/dir
fi
В готовых встречается такое:

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

find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ 
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true 
В каком объеме стоит выполнять данные шаги и стоит ли в целом?
Я так понимаю надо про команду xargs и strip почитать, тогда все это станет понятно?

2. Перепаковка *-bin.zip
Куда мне нужно посмотреть, чтобы понять какой список команд выполняется для установки? И что за доп. файлы создаются? Где про это почитать можно?
Примерно такого плана команды:

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

install -D -m 644 ${CWD}/${APP}.desktop \
  ${PKG}/usr/share/applications/${APP}.desktop

install -D -m 644 ${CWD}/${APP}.png ${PKG}/usr/share/pixmaps/${APP}.png

install -D -m 755 ${CWD}/${APP}.sh ${PKG}/usr/bin/${APP}
А то в итоге не ясно что за файд .desktop и почему его автор slackbuild'a создавал. Программа о которой идет речь выше NetBeans,но я думаю я с похожим столкнусь не один раз. Вопросы больше для понимания, пока я воспользуюсь готовым слакбилдом, но версия софта обновилась,к примеру,а слакбилд не обновляют, тут мне эти знания и помогут.
Последний раз редактировалось UnixNoob 26.11.2020 21:26, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17499
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: SlackBuild : пара вопросов

Сообщение Bizdelnick »

UnixNoob писал:
21.11.2020 18:11
В готовых встречается такое
Это эквивалентно пункту «Чистим библиотеки и бинарные файлы», только более грамотно, без лишних телодвижений (хотя я бы, как минимум, ещё добавил для find -type f, да и одним грепом обошёлся). Пляски с cd в сабшелле и двойным обходом каталогов явно не от большого ума писавшего руководство появились.
Добавлено (19:01):
UnixNoob писал:
21.11.2020 18:11
не ясно что за файд .desktop и почему его автор slackbuild'a создавал
https://specifications.freedesktop.org/desktop-entry-spec/latest/
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1283

Re: SlackBuild : пара вопросов

Сообщение bormant »

1. man find; man xargs в помощь.

Первый фрагмент
( ... ) в скобках работает сабшелл

cd $PKG перейдёт в каталог, путь к которому в переменной PKG, временный каталог, где строится дерево файлов будущего пакета

find . даст список всех файлов ниже текущего каталога (.), по конвееру (|) этот список уйдёт xargs

xargs file вызовет для каждого элемента списка (суть для каждого файла) утилиту file, результат по конвееру уйдет

grep executable, в списке останутся только строки, содержащие executable, по конвееру уйдёт

grep ELF, в списке останутся строки, содержащие ELF, по конвееру уйдет

cut -f 1 -d :, в каждой строке останется 1-е поле, считая по разделителю ":" (это имена файлов), по конвееру уйдёт

xargs strip --strip-unneeded, будет вызван strip - - strip-unneeded со списком файлов (или его частями нужное количество раз) (т.е. обработан каждый файл в списке),

2> /dev/null, стандартный поток ошибок будет перенаправлен в /dev/null

Вторая строка проделает то же самое для "shared object".
| grep -e "executable" -e "shared object" |
Позволит оставить в одном списке и те, и другие за один вызов.
Добавлено (19:53):
Чуть менее подробно про страницы руководств:
Если есть каталог $PKG/usr/man в сабшелле перейти в него (cd),
find . -type f -exec gzip -9 {} \;
для каждого файла (-type f) от текущего каталога (.) выполнить (-exec) gzip - 9 имя_файла ({})

Если в каталоге были симлинки (type -l, это L малая, не 1), нужно перелинковать их с имя_файла на имя_файла.gz и назвать с суффиксом .gz.

Про файлы .info
Они в одном каталоге, сжать их можно обойдясь глобингом *.info. Лишний файлик dir просто удаляем.
Добавлено (19:55):
man install
если кратко, mkdir, cp, chmod в одном флаконе.
Последний раз редактировалось bormant 21.11.2020 20:12, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1283

Re: SlackBuild : пара вопросов

Сообщение bormant »

Bizdelnick писал:
21.11.2020 18:58
Пляски с cd в сабшелле и двойным обходом каталогов явно не от большого ума писавшего руководство появились.
Это про перелинковку манов?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17499
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: SlackBuild : пара вопросов

Сообщение Bizdelnick »

bormant писал(а):
21.11.2020 20:00
Это про перелинковку манов?
Изначально нет, но и там, в общем-то, то же самое. Ещё и опечатка: -type 1 вместо -type l.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 210
ОС: Slackware

Re: SlackBuild : пара вопросов

Сообщение UnixNoob »

bormant
спасибо за подробный ответ. Я основы знаю bash'a, пытаюсь временами ABS читать, но идет трудновато.
Почитаю тогда про не знакомые команды, xargs и strip я раньше не встречал.

Вы еще не подскажете, как можно отладкой заниматься скриптов?
А то у меня терминал закрывался, при запуске не из под root и пакет не собирался, а я только заглянув в папку понимал примерно где что-то не так. Сообщений при этом об ошибках не было.
bormant писал(а):
21.11.2020 19:27
man install
если кратко, mkdir, cp, chmod в одном флаконе.
Ну с пунктом .sh понятно наверно, этот самый .sh был и на сайте, с первым по ссылку примерно понятно, что это.
Не ясно что за строчка с .png тогда. Но может чтение мана по install подскажет.
Я не стал с исходников собирать, т.к там для сборки Ant используется, и меня смутило что и автор slackbuild не стал с исходников пытаться собирать.
Bizdelnick писал:
21.11.2020 20:24
Ещё и опечатка: -type 1 вместо -type l.
Это я опечатался, плохо видно было l это или 1. Буду знать.
Bizdelnick писал:
21.11.2020 18:58
Пляски с cd в сабшелле и двойным обходом каталогов явно не от большого ума писавшего руководство появились.
Это я оценить не могу. В целом тяжеловато воспринимается новичком куча переменных, не смотря на то, что с комментариями шагов все в целом понятно, что происходит. Думаю со временем это пройдет.
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1283

Re: SlackBuild : пара вопросов

Сообщение bormant »

Эти три команды install копируют внутрь дерева будущего пакета
1) ярлык .desktop туда, где в системе лежат ярлыки,
2) иконку .png туда, где в системе лежат иконки
3) сценарий запуска .sh туда, где в системе лежат исполняемый файлы

install — это команда такая, такая же как mkdir, cp, chmod, подробнее в man install.
Добавлено (08:51):
.png этот упомянут в качестве иконки внутри .desktop файла. Не будет .png на месте, будет показываться в меню и в ярлыке крестик вместо иконки.
Добавлено (08:57):
>терминал закрывался
Это при запуске из ФМ? Запускайте из уже открытого терминала.

Про отладку сценариев:
https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 210
ОС: Slackware

Re: SlackBuild : пара вопросов

Сообщение UnixNoob »

bormant писал(а):
22.11.2020 08:48
Это при запуске из ФМ? Запускайте из уже открытого терминала.
Нет, с открытого терминала,но от пользователя. Я хотел,чтобы он написал о не достаточных прав,а он закрывал терминал. А от рута все в порядке. set -e вроде как должна останавливать в случае не удачи, а не закрывать.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17499
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: SlackBuild : пара вопросов

Сообщение Bizdelnick »

UnixNoob писал:
22.11.2020 11:55
Я хотел,чтобы он написал о не достаточных прав,а он закрывал терминал.
А как Вы, собственно, запускали скрипт? Такое могло происходить, только если Вы делали source или exec. Запускайте обычным образом, без извращений.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 210
ОС: Slackware

Re: SlackBuild : пара вопросов

Сообщение UnixNoob »

Bizdelnick писал:
22.11.2020 14:48
Запускайте обычным образом, без извращений.
А что вы называете обычным?
Я читал что можно запускать указывая полный путь, используя source, еще можно указав оболочку bash и название скрипта.
А что не так с source? Почти везде предлагают его.

Еще мне стало интересно, что является более правильным, изменение прав после извлечения исходников в руководстве представлено так:

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

# Change to the application source directory
cd $APP-$VERSION || exit 1
 
# Change ownership and permissions if necessary
# This may not be needed in some source tarballs, but it never hurts
chown -R root:root .
chmod -R u+w,go+r-w,a-s .
а в готовых я в основном вижу подобное:

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

chown -R root:root .

find -L . \
  \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
    -o -perm 511 \) -exec chmod 755 {} \; -o \
  \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
    -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;

А что будет более грамотным?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17499
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: SlackBuild : пара вопросов

Сообщение Bizdelnick »

UnixNoob писал:
22.11.2020 15:17
А что не так с source? Почти везде предлагают его.
Не знаю, кто Вам такое предложил. В этом случае скрипт не запускается в новом экземпляре оболочки, а интерпретируется прямо в текущей. Это имеет смысл делать, когда в текущей оболочке нужен доступ к определённым в скрипте переменным или функциям.
Если в скрипте, который Вы засорсили, делается set -e, то любая ошибка после этого приведёт к завершению процесса оболочки. Это точно не то, что Вам надо в интерактивной сессии. Явный выход (exit, logout), прописанный в скрипте, также завершит оболочку.
Добавлено (15:52):
UnixNoob писал:
22.11.2020 15:17
А что будет более грамотным?
В зависимости от ситуации. Первый вариант лучше тем, что проще. А вообще надо смотреть, какие в действительности нужны разрешения на файлы в каждом конкретном случае. 755/644 не всегда допустимы, кое-что надо прятать хотя бы от others (приватные ключи, например). Ну и не знаю, как принято в slackware, но вообще для большинства демонов обычно создаются системные учётки, чтобы не гонять их под root, и таким учёткам надо давать права на запись к файлам в /var, например.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1283

Re: SlackBuild : пара вопросов

Сообщение bormant »

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

Про изменение прав — примерно одно и то же по результату.
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 210
ОС: Slackware

Re: SlackBuild : пара вопросов

Сообщение UnixNoob »

bormant писал(а):
22.11.2020 16:26
Про source — это вы что-то не так прочитали.
source используют только тогда, когда нужно изменить текущий сеанс. Запуск слакбилда к этим случаям не относится.
Bizdelnick писал:
22.11.2020 15:42
Не знаю, кто Вам такое предложил. В этом случае скрипт не запускается в новом экземпляре оболочки, а интерпретируется прямо в текущей. Это имеет смысл делать, когда в текущей оболочке нужен доступ к определённым в скрипте переменным или функциям.
Хм, кажется я понял что не так. Обычно source-вариант предлагается в обучающих статьях, где используется ввод с консоли или чтение с консоли, поэтому я решил что он так и должен запускаться.
В ABS не помню что про запуск указано, посмотрю еще раз.
Спасибо сказали: