Могу ли я отключить все справочные страницы?

13

Конкретно на Raspbian Wheezy (Raspbian Wheezy), но также и вообще, можно ли отключить все страницы man?

Это будет означать отсутствие сохраненных man-страниц, никаких «триггеров обработки для man-db», и так далее, и тому подобное. Поскольку справочные страницы всегда доступны в Интернете, мне не нужно их устанавливать, и их создание и хранение кажется ненужным.

Soumya
источник
Боюсь, вы, вероятно, застряли так далеко, как сами руководства - они являются частью программ, которые они используют.
Шадур
6
Конечно, есть лучшие кандидаты для экономии места, чем справочные страницы?
Джейсонвриан
Я мог бы представить конфигурацию инструмента упаковки, чтобы отбрасывать все файлы, отмеченные как документы и / или файлы, соответствующие регулярному выражению. Я не знаю о реализации этой концепции, хотя.
Павел Шимерда
Вы только сэкономите, что, 1% пространства (вероятно, на самом деле меньше)? Возможно, еще немного, если вы тоже подавите /usr/share/doc.
Жиль "ТАК - перестань быть злым"

Ответы:

15

У меня возникла противоположная проблема на образе Debian 8, который кто-то собрал для Wandboard. Я пытался найти страницу руководства для некоторых пакетов, которые уже были установлены, и заметил, что после установки новых пакетов страницы руководства отсутствовали, даже если они присутствовали в файле deb.

Затем я нашел этот файл 01_nodoc в /etc/dpkg/dpkg.conf.d, который представляет собой простое решение первоначального вопроса о том, как сэкономить место, удаляя страницы руководства и локали, а также файлы с авторскими правами, где пространство стоит дорого (например, встроено системы).

# /etc/dpkg/dpkg.conf.d/01_nodoc

# Delete locales
path-exclude=/usr/share/locale/*

# Delete man pages
path-exclude=/usr/share/man/*

# Delete docs
path-exclude=/usr/share/doc/*
path-include=/usr/share/doc/*/copyright
Space Saver
источник
Еще один полезный ответ - по адресу askubuntu.com/a/401144/162384 , который - в дополнение к прекрасному примеру - указывает на документы: wiki.ubuntu.com/ReducingDiskFootprint#Documentation
berto
6

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

Если то, что вы делаете, - это создание специализированного устройства, один из подходов, который вы можете использовать, - это создать отдельные этапы сборки и развертывания для устройства. То есть вы устанавливаете все нужные вам пакеты в отдельной среде сборки (на другой SD-карте или эмулированном RPi), а затем копируете только то, что хотите иметь в рабочей среде, из рабочей среды в производственную среду. На этом этапе вы можете пропустить справочные страницы и все остальное, что не нужно в производстве.

Чтобы выбрать обновленную ОС или исправления безопасности, вы обновляете или перестраиваете среду сборки и снова копируете (или rsync) в рабочую среду.

Это немного больше работы, но дает вам очень управляемое производственное устройство по сравнению с входом в систему и выполнением обновлений непосредственно на нем.

Эндрю МакГиннесс
источник
5

Ну, не зная, в каком дистрибутиве работает ваш RPi, я не могу помочь вам с точными командами, но вы, вероятно, можете удалить man-dbпакет, который содержит как manутилиту, так и различные справочные страницы. Однако удаление всех man-страниц потребовало бы удаления каждой man-страницы из каждого пакета - я не могу себе представить, что это стоит вашего времени, только чтобы сэкономить KiBs места.

Если вы действительно этого хотите, то вам необходимо пересобрать каждый пакет; в таких дистрибутивах, как Archlinux или Gentoo, это не обязательно невозможно, но все еще довольно утомительно. На других менее «практических» дистрибутивах вы можете найти эту задачу невероятно сложной.

HalosGhost
источник
2
apt-get remove --purge man-dbтакже деинсталлировать debhelperэто не нужно?
rubo77
4
$ cat /etc/apt/apt.conf.d/90debsums 
DPkg::Post-Invoke { "if [ -x /usr/bin/debsums ]; then /usr/bin/debsums --generate=nocheck -sp /var/cache/apt/archives; fi"; };

Пакет debsumsустанавливает действие для автоматической генерации списков md5sum для пакетов после установки пакета, не имея собственного файла md5sums.

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

Чтобы получить справочные страницы и пакеты-владельцы, вам нужно просканировать все /var/lib/dpkg/info/PACKAGENAME.listфайлы.

Вам следует обновить *.listфайлы, чтобы больше не упоминать удаленные man-страницы.

localepurgeчастично делает это тоже. Цитируется из apt-cache show localepurge:

Это скрипт для восстановления дискового пространства, потраченного впустую из-за ненужных локалей, локализаций Gnome / KDE и локализованных man-страниц. В зависимости от установки можно сэкономить около 200, 300 или даже более мегабайт дискового пространства, выделенного для локализации, которую вы, скорее всего, никогда не будете использовать. Он запускается автоматически после завершения любых действий по установке.

Самая важная цитата:

Пожалуйста, воздержитесь от сообщений о любых таких ошибках, обвиняя localepurge, если вы сломаете свою систему, используя ее. Если вы не знаете, что делаете, и не можете самостоятельно справиться с возникшей поломкой, просто не используйте этот пакет.

;-D

Так что просто сделайте полную резервную копию и попробуйте написать свой manpagekiller...


источник
1
Это решение я тоже имел в виду (плюс не устанавливать man-db). Я бы добавил обработчик post-invoke /etc/dpkg.cfg.dчерез APT, а не через APT, для обработки прямых вызовов dpkg.
Жиль "ТАК - перестань быть злым"
Отлично! По каждому пакету (на .deb) действие dpkgдаже будет проще, чем после установки, aptпотому что у вас будет имя пакета, и вам не нужно *.listбудет снова и снова сканировать все файлы на manpages. Я просто забыл, что dpkg
Хммм ... но обработка пакетов, устанавливаемых раньше, чем этот обработчик, все равно потребует сканирования *.listфайлов. Тем не менее, dpkgкрюк после вызова - лучшее место для запуска этого действия.