Можете ли вы определить, какие пакеты вообще не используются при запуске определенной программы
Я хочу создать пользовательский дистрибутив сервера Ubuntu, который автоматически устанавливает и запускает определенную программу только на целевом компьютере. Я нашел очень хорошее руководство здесь:
Как создать настроенный сервер Ubuntu ISO
Я хочу удалить все суеты, которые идут с обычной установкой, есть ли способ, которым я могу определить, какие пакеты вообще не используются, чтобы я мог удалить их из моего дистрибутива?
Напомним, что если вы следуете руководству, упомянутому выше, и используете Ubuntu 14.04, воспользуйтесь следующей ссылкой, чтобы исправить ошибку с помощью kickstart (у меня недостаточно репутации, чтобы добавить ее в комментарии, так что если вы это сделаете,, пожалуйста, сделай)
1 ответ
Вы можете проверить, какие файлы были доступны программе, используя strace
:
-e trace=file
Trace all system calls which take a file name as an
argument. You can think of this as an abbreviation
for -e trace=open,stat,chmod,unlink,... which is
useful to seeing what files the process is
referencing. Furthermore, using the abbreviation
will ensure that you don't accidentally forget to
include a call like lstat in the list. Betchya
woulda forgot that one.
Итак, что-то вроде:
$ strace -fe trace=file -o log /bin/bash -c ''
$ awk -F\" '!a[$2]++&&/\//{print $2}' log | xargs dpkg -S 2>/dev/null | awk -F: '!a[$1]++{print $1}'
bash
libtinfo5
libc6
Будьте осторожны: этот вывод не особенно полезен, так или иначе:
- Он не говорит вам, какие пакеты не используются командой, потому что использование может быть каким-то иным способом, нежели доступ к файлу (или, возможно, он получил доступ к файлу, который был создан пакетом, но не записан в
dpkg
база данных). - Он не говорит вам, какие пакеты не могли быть использованы пакетом. Например, если я запустил интерактивный сеанс bash, количество пакетов намного выше, в основном из-за того, что подсчитываются скрипты завершения, предоставляемые этими пакетами. В список даже входит GRUB! И GRUB явно не нужен bash.
Что вы должны сделать, это начать с ubuntu-minimal
и установите только те вещи, которые необходимы программе для выполнения сверх этого (вы будете знать, какие из них необходимы, когда программа умрет от загадочных ошибок).