SlackWare - минимальная установка |
---|
Навеяло: SlackWare - minimal install
Автор: pilgrim
Выражаю особую благодарность bormant за верно указанное направление мысли:).
В данной статье попытаемся собрать минимальную комплектацию SlackWare 14.1 для работы на слабых компьютерах. Хочется отметить, что указанный способ рекомендуется применять пользователям, которые уже имеют некоторый опыт общения со SlackWare и Linux в целом. И не потому, что нижеописанное будет трудно для восприятия новичками. Причина в том, что система будет практически чистой в софтверном плане, а зная политику SlackWare в плане самостоятельной установки зависимостей, новичку будет несколько сложно установить и настроить какое-либо программное обеспечение.
Следующие пакеты отмечены установщиком, как обязательные к установке для SlackWare 14.1:
a/aaa_base a/aaa_elflibs a/acl a/attr a/bash a/bin a/coreutils a/cxxlibs a/dcron * a/devs a/e2fsprogs a/elvis * a/etc a/grep a/gzip a/kernel-firmware * a/kernel-modules-smp a/kmod a/less * a/openssl-solibs a/pkgtools a/procps a/sed a/shadow a/sharutils * a/sysvinit a/sysvinit-scripts a/tar a/udev a/util-linux a/xz
Пакеты, помеченные как «расширяющие возможности (опциональные)» установщиком SkackWare:
a/getty-ps *
a/aaa_terminfo a/bzip2 ! a/dialog a/findutils a/gawk a/kernel-huge-smp a/lilo a/logrotate a/pciutils a/sysklogd a/sysvinit-functions a/usbutils a/which ap/diffutils ap/mc ap/slackpkg l/glibc ! n/dhcpcd (если если адреса в сети раздаются DHCP) n/gnupg n/iputils n/net-tools n/network-scripts n/openssh ! n/wget
Ниже описаны несколько путей определения зависимостей программ, установленных в системе.
1. С помощью ldd
Выводит список разделяемых библиотек приложения
root@slack-test:~# which mc /usr/bin/mc root@slack-test:~# ldd /usr/bin/mc linux-gate.so.1 (0xffffe000) libslang.so.2 => /usr/lib/libslang.so.2 (0xb75bf000) libgpm.so.2 => /lib/libgpm.so.2 (0xb75b9000) libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb75b5000) libdl.so.2 => /lib/libdl.so.2 (0xb75b0000) libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb7481000) libpthread.so.0 => /lib/libpthread.so.0 (0xb7467000) libc.so.6 => /lib/libc.so.6 (0xb72dc000) libm.so.6 => /lib/libm.so.6 (0xb729a000) libncurses.so.5 => /lib/libncurses.so.5 (0xb724c000) /lib/ld-linux.so.2 (0xb7700000)
или проще:
root@slack-test:~# ldd $(which mc) linux-gate.so.1 (0xffffe000) libslang.so.2 => /usr/lib/libslang.so.2 (0xb75bc000) libgpm.so.2 => /lib/libgpm.so.2 (0xb75b6000) libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb75b2000) libdl.so.2 => /lib/libdl.so.2 (0xb75ad000) libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb747e000) libpthread.so.0 => /lib/libpthread.so.0 (0xb7464000) libc.so.6 => /lib/libc.so.6 (0xb72d9000) libm.so.6 => /lib/libm.so.6 (0xb7297000) libncurses.so.5 => /lib/libncurses.so.5 (0xb7249000) /lib/ld-linux.so.2 (0xb76fd000)
2. С помощью tracepkg.
tracepkg - bash-сценарий, который с помощью ldd перечитывает директорию /var/log/packages. Страница автора.
3. С помощью objdump.
Еще один метод поиска информации. С его помощью можно получить больше информации, нежели чем с ldd, за счет дополнительного использования grep,sed,gawk. Необходимые разделяемые библиотеки помечены, как NEEDED.
root@slack-test:~# objdump -x $(which mc) | grep NEEDED NEEDED libslang.so.2 NEEDED libgpm.so.2 NEEDED libgmodule-2.0.so.0 NEEDED libdl.so.2 NEEDED libglib-2.0.so.0 NEEDED libpthread.so.0 NEEDED libc.so.6
4. Поиск установленных библиотек.
Проводится также по soname библиотеки.
root@slack-test:/# grep -FR /libmpc.so.2 /var/log/packages /var/log/packages/libmpc-0.8.2-i486-2:usr/lib/libmpc.so.2.0.0
5. Проверка существует ли библиотека физически.
root@slack-test:/# ls -l /lib/libc.so.6 lrwxrwxrwx 1 root root 12 Jan 8 03:14 /lib/libc.so.6 -> libc-2.17.so*
6. Как и приложения, сами библиотеки могут зависеть от других библиотек, что проверяется аналогично:
root@slack-test:/# ldd /lib/libc.so.6 /lib/ld-linux.so.2 (0xb773a000) linux-gate.so.1 (0xffffe000)
Примечание: список директорий расположения разделяемых библиотек в конкретной системе можно увидеть в /etc/ld.so.conf
Как известно, рекомендуется устанавливать smp версии ядер, которые поддерживают мультиядерность современных процессоров, однако, если вы обладатель старинного одноядерного Celeron'а или Pentium III/IV - лучше устанавливать ядра nosmp, поскольку ваш процессор может и не знать о существовании i686
Для установки NOSMP выбираем:
a/kernel-modules вместо a/kernel-modules-smp a/kernel-huge вместо a/kernel-huge-smp
Следующая задача - переход на generic ядро. Что это такое можно почитать здесь и здесь.
Наша система довольно минималистична, а по сему нужно будет доставить несколько пакетов, а именно:
a/cpio a/kernel-generic a/mkinitrd l/mpfr
mkinitrd -c -k 3.10.17 -m ext4 -f ext4 -r /dev/sda2
или
/usr/share/mkinitrd/mkinitrd_command_generator.sh -r | bash
В /etc/lilo.conf вносим следующие изменения (!будьте внимательны!):
# Linux bootable partition config begins image = /boot/vmlinuz-huge-3.10.17 root = /dev/sda2 label = slacky-huge read-only # Partitions should be mounted read-only for checking image = /boot/vmlinuz-generic-3.10.17 initrd = /boot/initrd.gz root = /dev/sda2 label = slacky-generic read-only # Linux bootable partition config ends
Если у вас Slackware 14.1 и новее, пакеты ядра устанавливают на свои ядра символьные ссылки /boot/vmlinuz-huge, /boot/vmlinuz-generic-smp, /boot/vmlinuz-generic, их можно использовать в строках image. Дополнительный плюс – если обновится ядро, не придется править lilo.conf, только пересобрать initrd для ядра generic.
lilo
После перезагрузки выбираем пункт slacky-generic, ну или тот, который указан у вас.
Работоспособную версию с huge лучше оставить.
Подключить generic-ядро возможно и помимо предшествующей установки ядра-huge, установив соответствующие зависимости. Однако, если в дальнейшем при загрузке ОС вылетает kernel panic - 80%, к ядру не подключен модуль работы с ext4, не видны sata-интерфейсы и т. д. В таком случае загружаемся с установочного диска SlackWare 14.1 до вывода приглашения. Наша задача проделать те же действия, что описаны выше, но для этого нужно подключиться к системе на жестком диске:
mount /dev/sda2 /mnt for d in dev proc sys; do mount --bind /$d /mnt/$d; done chroot /mnt
А дальше продолжаем с пункта Создание образа начальной загрузки ядра.
При замене на generic-ядро я получил задействованной всего лишь 38 Мб ОЗУ, против 83 Мб при huge-ядре.
Обсуждаем статью