Текст книги "Linux From Scratch"
Автор книги: Gerard Beekmans
Жанр:
ОС и Сети
сообщить о нарушении
Текущая страница: 13 (всего у книги 18 страниц)
Теперь, когда все установлено, надо сконфигурировать программы для их корректного запуска.
Конфигурация VIM
По умолчанию vim запускается в режиме совместимости с vi. Некоторым это нравиться, но нам надо запускать vim в режиме vim (иначе мы бы не включили vim в описание, а оставили бы vi). Создайте /root/.vimrc запустив следующее:
cat > /root/.vimrc << «EOF»
" Begin /root/.vimrc
set nocompatible
set bs=2
" End /root/.vimrc
EOF
Конфигурация Glibc
Нам надо создать новый файл /etc/nsswitch.conf запустив следующее:
cat > /etc/nsswitch.conf << «EOF»
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
publickey: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: db files
# End /etc/nsswitch.conf
EOF
Скрипт tzselect должен быть запущен, и вы должны ответить на вопрос о вашей временной зоне. Когда ответите, скрипт возьмет значение вашего местоположения из файла.
Создайте /etc/localtime симлинк на:
ln -sf ../usr/share/zoneinfo/
tzselect's должно иметь значение, типа EST5EDT or Canada/Eastern.
Команда на создание симлинка должна быть типа такой:
ln -sf ../usr/share/zoneinfo/EST5EDT /etc/localtime
Или:
ln -sf ../usr/share/zoneinfo/Canada/Eastern /etc/localtime
Конфигурация Dinamic Loader
По умолчанию Dinamic Loader (/lib/ld-linux.so.2) производит поиск в /lib и /usr/lib на предмет наличия dinamic libraries для программ, которые в них нуждаются. Однако, если dinamic libraries находятся в других директориях, вы должны добавить их в файл /etc/ld.so.conf, чтобы Dinamic Loader смог их найти. Две директории общеизвестны для дополнительных библиотек: /usr/local/lib и /opt/lib поэтому мы добавим эти директории в пути поиска Dinamic Loader: Создайте новый файл /etc/ld.so.conf следующей командой:
cat > /etc/ld.so.conf << «EOF»
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
# End /etc/ld.so.conf
EOF
Конфигурация Sysklogd
Создайте новый файл /etc/syslog.conf используя следующее:
cat > /etc/syslog.conf << «EOF»
# Begin /etc/syslog.conf
auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *
# End /etc/syslog.conf
EOF
Конфигурация теневых паролей (Shadow Password Suite)
Этот пакет содержит утилиты для изменения пользовательских паролей, добавления или удаления пользователей и групп и все в этом духе. Мы не хотим разъяснять вам, что есть теневые пароли. Полное разъяснение вы получите прочитав соответствующий HOWTO поставляемый вместе с Shadow Password Suite Надо запомнить только одну вещь: если вы хотите использовать теневые пароли, то убедитесь, что ваши программы (например xdm, ftp daemons, pop3 daemons) способны работать с ними (являются ли программы shadow-compliant). Это все, что нам надо знать. Для включения механизма теневых паролей запустите следующую команду:
/usr/sbin/pwconv
Конфигурация Sysvinit
Создайте новый файл /etc/inittab запустив следующее:
cat > /etc/inittab << «EOF»
# Begin /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc sysinit
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
# End /etc/inittab
EOF
Конфигурируем клавиатуру
Ничего не раздражает в LINUX так, как неправильно настроенная клавиатура (раскладка, keymap). Если вы хотите использовать раскладку по умолчанию (US keyboard) вы можете пропустить эту часть. US keymap используется по умолчанию. Для установки keymap нужной раскладки, создайте симлинк /usr/share/kbd/keymaps/defkeymap.map.gz используя следующую команду:
ln -s
Замените путем к вашему map файлу. Для примера, если у вас немецкая раскладка запустите следующее:
ln -s i386/qwerty/nl.map.gz /usr/share/kbd/keymaps/defkeymap.map.gz
Вторая часть конфигурации раскладки заключается в компиляции раскладки прямо в ядро. В этом случае раскладка клавиатуры будет работать корректно даже в режиме maintenance (когда ядро получает команду init=/bin/sh), для которого сценарии загрузки не выполняются.
Запустите следующую команду для того, что бы пропатчить ядро на предмет правильной раскладки. Вы должны выполнить эту команду до того как вы распакуете новое ядро.
loadkeys -m /usr/share/kbd/keymaps/defkeymap.map.gz >
/usr/src/linux/drivers/char/defkeymap.c
Создание файлов /var/run/utmp, /var/log/wtmp and /var/log/btmp
Таким программам как login, shutdown, uptime и другие требуется читать и записывать данные в /var/run/utmp, /var/log/btmp и /var/log/wtmp. Эти файлы содержат информацию о том, кто в текущий момент залогинен в системе. Они так же содержат информацию о моменте последней загрузки и shutdown, и записи о неудачных попытках входа в систему.
Создайте эти файлы и установите на них следующие права доступа:
touch /var/run/utmp /var/log/{btmp,lastlog,wtmp} &&
chmod 644 /var/run/utmp /var/log/{btmp,lastlog,wtmp}
Установка пароля пользователя root
Придумайте пароль для пользователя root и установите его следующей командой:
passwd root
Глава 7. Конфигурация загрузочных скриптов
ВведениеЭта глава описывает конфигурацию скриптов, о которых было рассказано в 6 главе. Большинство из тех скриптов будут работать и без дополнительных настроек, но некоторые требуют дополнительной конфигурации, т.к. они зависят он аппаратной конфигурации.
Как взаимодействует процесс загрузки со скриптами?LINUX использует специальную возможность загрузки именуемой SysVinit Она основана на концепции runlevels. Они могут различаться от системы к системе, но это будет работать в дистрибутиве <вставьте его имя здесь> и в системах типа LFS. LFS имеет собственный путь в конфигурации, но мы уважаем стандарты.
SysVinit (мы называем init с этого места) работает используя схему runlevels. Всего их 7 (от 0 до 6). Может быть и более чем 7, но они создаются в отдельных случаях и в обычных системах не работают. Страница man для init описывает такие случаи. Каждый из уровней runlevels соответствует необходимым вещам, которые компьютер должен выполнить при загрузке этого уровня (runlevels). По умолчанию используется уровень 3 (runlevels). Далее приводится описание каждого уровня (runlevels) и небольшое описание:
0: halt the computer – выключить компьютер 1: single-user mode – однопользовательский режим 2: multi-user mode without networking – многопользовательский режим без сети 3: multi-user mode with networking – многопользовательский режим с сетевыми установками 4: зарезервирован для создания, своего иначе используется так, как 3 5: Также как 4, только с использованием GUI входа в систему (например X'ы xdm или KDE's kdm) 6: перезагрузка компьютера
Команда для изменения runlevels – init
Директории, находящиеся в поддиректории /etc/rc.d выглядят как /rc?.d, где d-это номер runlevel и rcsysinit.d который содержит число символических ссылок. Некоторые начинаются на К, другие на S, и все из них имеют двухсимольную цифру, следующую после начальной буквы. Буква К означает останов (kill) службы, а S означает запуск службы. Число после буквы означает порядок, в котором скрипты будут запускаться. Числа могут иметь значения от 00 до 99, и чем меньше число, тем раньше запуститься скрипт. Когда init переключается на другой уровень, то службы предназначенные для одного runlevel`a убиваются, и другие запускаются.
Главные скрипты располагаются в директории /etc/rc.d/init.d. Они выполняют всю работу и все симлинки указывают на них. Симлинки для запуска и остановки указывают на скрипт в директории /etc/rc.d/init.d с таким же именем. Поэтому скрипты могут быть вызваны с различными параметрами, например start, stop, restart, reload, status. Когда скрипту передается аргумент stop, то вызывается К симлинк. Когда скрипту передается аргумент start, то вызывается S симлинк.
Есть только одно исключение. симлинки начинающиеся с S в директориях rc0.d и rc6.d не могут быть запущены никогда. Они могут бать вызваны только с параметром stop для остановки чего либо. Логика состоит в том, что если вы перезапустили или остановили систему, вам не надо запускать что либо, а только остановить систему.
Здесь предоставлены описания аргументов, передаваемых в скрипты, и заставляющих их выполнять что либо:
start: Запуск службы
stop: Останов службы
restart: Перезагрузка службы. Сначала останов службы, потом запуск.
reload: Обновить конфигурацию службы. Используется когда конфигурационный файл данной службы был изменен. Перезапуск службы не требуется.
status: Опросить службу. Выдается информация о том, запущена служба или нет, ее PIDs.
Почувствуйте свободу в создании собственных процессов загрузки (на вашей собственной системе LFS). Все поля, данные здесь – лишь примеры, о том, как лучше сделать (если вы знаете, что вам надо – сделайте так, как вы хотите).
Настройка скрипта setclockСкрипт setclock считывает информацию о времени из BIOS компьютера и конвертирует его во время вашего часового пояса используя файл /etc/localtime (если значение в BIOS соответствует GMT) или нет (если значение в BIOS соответствует местному времени). Само ничего не конфигурируется (это вам не винда), поэтому лезем править сами:
Измените значение переменной UTC отличной от (нуля) в случае, если ваши часы не установлены по времени GMT.
Создайте файл /etc/sysconfig/clock запустив следующую команду:
cat > /etc/sysconfig/clock << «EOF»
# Begin /etc/sysconfig/clock
UTC=1
# End /etc/sysconfig/clock
EOF
Теперь вы можете посмотреть на неплохие примеры, позволяющие лучше понять механизм установки временной зоны на LFS http://hints.linuxfromscratch.org/hints/time.txt. Там объясняются такие понятия как timezones, UTC, и переменная окружения TZ.
Что надо для загрузки loadkeys скриптов?Если вы решили вкомпилить вашу раскладку (keymap) напрямую в ядро, вернитесь в конец 6-й главы, где вам четко сказано, что не требуется его (скрипт) запускать, если вы уже вкомпилили раскладку (keymap) в ядро. Но вы можете запустить крипт если хотите – ничего страшного. Это может потребоваться в случае, если у вас есть несколько разных ядер, и вы не помните: вкомпилировали-ли вы в каждое ядро раскладку.
Если вы решили, что вам это не надо, или вы не хотите использовать скрипт loadkeys удалите этот /etc/rc.d/rcsysinit.d/S70loadkeys симлинк.
Настройка скрипта sysklogdСкрипт sysklogd вызывает программу syslogd с опцией –m 0 Эта опция выключает периодические записи mark в лог файлы каждые 20 минут (значение по умолчанию). Если вы хотите включить периодические записи mark подредактируйте скрипт sysklogd на предмет необходимых изменений. Смотрите man syslogd для более детальной информации.
Конфигурация скриптов localnet.Частью установки скриптов, относящихся к localnet, является установка имени компьютера. Это требуется для правильной настройки /etc/sysconfig/network.
Создайте файл /etc/sysconfig/network file и введите имя компьютера запустив следующее:
echo «HOSTNAME=lfs» > /etc/sysconfig/network
«lfs» может быть заменено другим именем компьютера (как захотите, мы используем для примера имя lfs. Вам не надо вводить полное имя FQDN (Fully Qualified Domain Name).Эта информация будет храниться в файле /etc/hosts. Мы запишем ее позже.
Cоздание файла /etc/hostsЕсли сетевая карта сконфигурирована, то вы должны определить IP адрес для системы и возможные алиасы (дополнительные имена) для использования в файле /etc/hosts. Синтаксис следующий:
Убедитесь, что введенный IP адрес системы является частью правильного адресного пространства, типа:
Class Networks A 10.0.0.0 B 172.16.0.0 through 172.31.0.0 C 192.168.0.0 through 192.168.255.0
Правильный IP адрес может быть 192.168.1.1. Правильное полное имя системы для этого IP может быть www.linuxfromscratch.org.
Если вы не хотите использовать сетевую карту, то вы таки должны ввести полное имя системы (FQDN)для правильной работы некоторых программ.
Если у вас не планируется использование сетевой карты, создайте следующий файл: /etc/hosts запустив команду:
cat > /etc/hosts << «EOF»
# Begin /etc/hosts (no network card version)
127.0.0.1 www.mydomain.com
# End /etc/hosts (no network card version)
EOF
Если у вас есть сетевая карта и она настроена, или вы планируете использовать сетевую карту, то создайте следующий файл /etc/hosts, используя такую команду:
cat > /etc/hosts << «EOF»
# Begin /etc/hosts (network card version)
127.0.0.1 localhost.localdomain localhost
192.168.1.1 www.mydomain.org
# End /etc/hosts (network card version)
EOF
Естественно, адрес 192.168.1.1 и www.mydomain.org надо заменить на адрес и имя, которое вам больше нравится (или требуется ввести адрес и имя, которое попросил ввести сетевой/системный администратор и планируется, что эта машина будет частью существующей сети.
Настройка сетевых скриптовЭта часть нужна для настройки сетевой карты.
Если у вас нет сетевой карты, вам не требуется создавать или настраивать файлы, относящиеся к сетевой карте. В этом случае удалите симлинк network из всех директорий (/etc/rc.d/rc*.d)
Настройка шлюза по умолчанию.
Если ваш компьютер является частью сети вам потребуется указать шлюз используемый по умолчанию для вашего компьютера. Это делается добавлением следующих значений в файл /etc/sysconfig/network. Запустите такую команду:
cat >> /etc/sysconfig/network << «EOF»
GATEWAY=192.168.1.2
GATEWAY_IF=eth0
EOF
Значения для GATEWAY и GATEWAY_IF надо изменить на установки вашей сети. GATEWAY должен содержать IP адрес шлюза по умолчанию, и GATEWAY_IF указывать на интерфейс сетевой карты через который использовать доступ к шлюзу по умолчанию.
Создание конфигурационных файлов для сетевой карты
Какой сетевой интерфейс будет запускаться и останавливаться сетевыми скриптами зависит от файлов расположенных в директории /etc/sysconfig/network-devices. Эта директория должна содержать файлы в формате ifconfig.xyz, где xyz– имя сетевого интерфейса (например eth0 или eth0:1).
Если вы решили переименовать или переместить директорию /etc/sysconfig/network-devices , убедитесь, что вы поправили файлы в /etc/sysconfig/rc на предмет новых путей к сетевым устройствам в скриптах.
Теперь, новые файлы созданные в директории /etc/sysconfig/network-devices содержат следующее. Этой командой создадим пример файла ifconfig.eth0 Now, new files are created in that directory containing the following. :
cat > /etc/sysconfig/network-devices/ifconfig.eth0 << «EOF»
ONBOOT=yes
IP=192.168.1.1
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
EOF
Естественно, значения этих переменных должны быть изменены в каждом файле на правильные настройки. Если переменная ONBOOT установлена yes, то скрипт выполнится при загрузке системы. Если установлено что нить отличное от yes, то скрипт не выполнится.
Глава 8. Делаем систему LFS загрузочной.
ВведениеЭта глава описывает шаги, необходимые для того, чтобы сделать вашу систему загрузочной. Здесь рассказывается о создании файла fstab, компиляции нового ядра для LFS системы, добавления необходимых значений в LILO, дабы вы увидели в строке приглашения возможность выбора LFS системы из списка.
Создание файла /etc/fstabСистема должна знать о разделах, которые есть в системе и о порядке их монтирования. Все разделы и порядок их монтирования перечисляется в файле /etc/fstab. Создадим такой файл /etc/fstab содержащий следующее:
cat > /etc/fstab << «EOF»
# Begin /etc/fstab
# filesystem mount-point fs-type options dump fsck-order
/dev/*LFS* / *fs-type* defaults 1 1
/dev/*swap* swap swap pri=1 0 0
proc /proc proc defaults 0 0
# End /etc/fstab
EOF
*LFS*, *swap* and *fs-type* должны быть заменены правильными значениями (например /dev/hda2, /dev/hda5 и reiserfs).
Когда добавляется раздел reiserfs, то значение 1 1 в конце строки должно быть заменено на 0 0.
Для более детальной информации значения полей в файле fstab смотрите man 5 fstab.
Рассмотрим другие строки, которые, возможно, вам придется добавить в ваш файл fstab . Для примера рассмотрим возможность включения devpts:
devpts /dev/pts devpts gid=4,mode=620 0 0
Другой пример, строка, позволяющая использовать устройства USB :
usbdevfs /proc/bus/usb usbdevfs defaults 0 0
Обе опции будут работать только в случае, если вы вкомпилировали в ядро возможность подключения данных устройств.
Установка ядра Linux-2.4.19Приблизительное время компиляции со всеми опциями по умолчанию: 4.20 SBU Необходимое дисковое пространство со всеми опциями по умолчанию: 181 MB
Построение ядра включает в себя несколько шагов: конфигурация и компиляция ядра. Есть несколько путей для конфигурации ядра. Если вам не нравится путь, описываемый здесь, то читайте README поставляемый с исходниками нового ядра, и ищите другие опции.
Необходимые телодвижения, которые вы должны совершить, это взять файл .config из дистрибутива исходников ядра и скопировать его в $LFS/usr/src/linux-2.4.19. В этом случае вам нет необходимости конфигурировать отдельные опции, и воспользоваться значениями по умолчанию. Если вы хотите сделать так, то сначала запустите команду make mrproper затем скопируйте файл .config снова, и запустите make menuconfig; далее запустите команду make oldconfig (может быть лучше в некоторых ситуациях. Смотрите README для более детальной информации по использованию make oldconfig).
Если вы внимательно используете модули для ядра, то вы должны подправить файл /etc/modules.conf. Информация имеющая отношение к модулям и конфигурации ядра в основном находится в документации к ядру, которая находится в каталоге /usr/src/linux-2.4.19/Documentation. Страница man page по modules.conf и файлы документации kernel HOWTO в http://www.tldp.org/HOWTO/Kernel-HOWTO.html могут также быть полезными.
Необходимо запустить следующие команды для построения нового ядра:
make mrproper && make menuconfig && make dep && make bzImage && make modules && make modules_install && cp arch/i386/boot/bzImage /boot/lfskernel && cp System.map /boot
Примечание: путь arch/i386/boot/bzImage может различаться в зависимости от платформы.
Зависимости Linux
Последняя проверка на версии 2.4.17.
Bash: sh Binutils: ar, as, ld, nm, objcopy Fileutils: cp, ln, mkdir, mv, rm, touch Findutils: find, xargs Gcc: cc1, collect2, cpp0, gcc Grep: grep Gzip: gzip Make: make Gawk: awk Modutils: depmod, genksyms Net-tools: dnsdomainname, hostname Sed: sed Sh-utils: basename, date, expr, pwd, stty, uname, whoami, yes Textutils: cat, md5sum, sort, tail
Делаем систему LFS загрузочной.Для того, что бы иметь возможность запускать LFS систему мы должны обновить наш загрузчик. Мы предполагаем, что ваша системы использует Lilo (наиболее распространенный загрузчик на данный момент).
Мы не будем запускать программу lilo из-под chroot. Запуск lilo под chroot может вызвать фатальные последствия с уничтожением или повреждением MBR, и мы будем использовать загрузочную дискету для запуска любых LFS систем .
Первое, мы должны выйти из режима chroot и скопировать файл ядра lfskernel в основную систему :
logout
cp $LFS/boot/lfskernel /boot
Следующий шаг – добавление записи в файл /etc/lilo.conf дабы мы могли выбрать нашу LFS систему при загрузке компьютера:
cat >> /etc/lilo.conf << «EOF»
image=/boot/lfskernel
label=lfs
root=
read-only
EOF
Значение
Так же, если вы используете reiserfs для основного раздела, что значение read-only надо заменить на read-write.
Теперь обновим загрузчик запустив следующее:
/sbin/lilo -v
Последний шаг – синхронизация конфигурации lilo на дискете и на LFS системе:
cp /etc/lilo.conf $LFS/etc && cp $(grep «image.*=» /etc/lilo.conf | cut -f 2 -d "=") $LFS/boot