CRUX Handbook 2.3

ВЕРСИЯ 2.3

2006-04-21

Это руководство охватывает установку конфигурацию и администрирование CRUX. Учтите, что это руководство описывает только особенности CRUX. Для более подробной информации о Linux обратитесь к Linux Documentation Project.


Содержание

1. Предисловие
2. Введение
2.1. Что такое CRUX?
2.2. Почему именно CRUX?
2.3. Лицензия
2.3.1. Пакеты
2.3.2. Скрипты сборки
2.3.3. НИКАКИХ ГАРАНТИЙ
3. Установка CRUX
3.1. Поддерживаемое аппаратное обеспечение
3.2. Установка с CD-ROM
3.3. Обновление с CD-ROM
3.4. Альтернативные методы установки
3.4.1. Сборка вашего собственного загрузочного ядра
3.4.2. Установка по сети
4. Система пакетов
4.1. Введение
4.2. Использование системы пакетов
4.2.1. Установка пакета
4.2.2. Обновление пакета
4.2.3. Удаление пакета
4.2.4. Запрос к базе пакетов
4.3. Управление пакетами с помощью prt-get
4.4. Сборка пакетов
4.5. Требования к пакетам
4.5.1. Общие требования
4.5.2. Директории
4.5.3. Удаление лишних файлов
4.5.4. Pkgfile
4.5.4.1 Заголовок файла Pkgfile
5. Система портов
5.1. Введение
5.1.1. Что такое порт?
5.1.2. Что такое система портов?
5.1.3. Коллекция портов
5.1.3.1. Официальные коллекции 'core', 'opt' и 'xorg'
5.1.3.2. Коллекция 'contrib', поддерживаемая пользователями
5.1.3.3. Индивидуальные коллекции от пользователей CRUX
5.2. Использование системы портов
5.2.1. Синхронизация Вашей локальной структуры портов
5.2.2. Просмотр локальных портов
5.2.3. Просмотр различий версий
5.2.4. Сборка и установка пакета
5.2.5. Активация коллекции 'contrib'
5.2.6. Дополнительные инструменты
5.2.6.1. Сборка портов непривелегированным пользователем
5.2.6.2. Полезные скрипты
6. Конфигурация
6.1. Скрипты инициализации
6.1.1. Уровни запуска
6.1.2. Расположение
6.1.3. Конфигурационные переменные в /etc/rc.conf
6.1.4. Конфигурация сети
6.2. Пароли
6.3. Обновление ядра
7. Дополнение
7.1. Возможные проблемы
7.2. Установка GRUB
7.2.1. Предосторожности
7.2.2. Установка

1. Предисловие

Автор этого руководства - Per Liden. Robert McMeekin перевел его в формат DocBook, CRUX team разработали wiki-версию. На русский язык это руководство перевел Михаил Поздняков, дополнил Артём Кирюшкин. Кроме этого многие люди давали советы по улучшению этого документа.

2. Введение

2.1. Что такое CRUX?

CRUX - это легкий, дистрибутив Linux, оптимизированный под платформу i686, и ориентированный на опытных пользователей. Основная цель этого дистрибутива это - “сделать его простым”, основываясь на простой системе пакетов - tar.gz, BSD-подобных скриптов инициализации, относительно небольшой коллекции готовых пакетов. Второй целью было - использование новых возможностей Linux, а также последнего инструментария и библиотек. Кроме этого, CRUX имеет систему портов, которая позволяет легко устанавливать и обновлять приложения.

2.2. Почему именно CRUX?

На сегодняшний день существует множество различных дистрибутивов Linux, так чем же этот дистрибутив лучше остальных? Конечно, все что будет сказано ниже - дело вкуса. Но я могу объяснить свой выбор и возможно мы придем к общему мнению, а может быть и нет... Во-первых, я хотел создать дистрибутив интуитивно понятный от начала до конца. Далее, я хотел, чтобы мои пакеты являлись стабильными версиями ПО, а не какими-нибудь альфа-бета-релизами. Я хочу, чтобы имелась возможность легкого создания новых и обновления старых пакетов (чтобы обновить пакет CRUX'a, нужно просто набрать pkgmk -d -u). Я хотел, чтобы пакеты были оптимизированы под мой процессор (имеется ввиду архитектура -march=i686). Я не хочу, чтобы в моей файловой системе были файлы, которыми я никогда не буду пользоваться (имеется ввиду /usr/doc/*, и т.д.). Если мне потребуется больше информации о программном обеспечении, чем я могу найти в man'ах, то я ее смогу найти в Интернете. И, наконец, я хотел использовать новые возможности, предлагаемые в новых версиях ядра Linux. (имеется ввиду udev, inotify, reiserfs, ext3fs, xfs и т.д).

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

2.3. Лицензия

2.3.1. Пакеты

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

2.3.2. Скрипты сборки

Все скрипты сборки пакетов в CRUX'е (для категорий пакетов core и opt) принадлежат © 2000-2007 Per Liden и команде развития CRUX и лицензируются посредством GNU General Public License.

2.3.3. НИКАКИХ ГАРАНТИЙ

CRUX распространяется в надежде на то, что он пригоден к использованию, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; т.е. нет никаких гарантий, что этот дистрибутив является ПРИГОДНЫМ К ПРОДАЖЕ или ПРИГОДЕН ДЛЯ КАКОЙ-ЛИБО СПЕЦИФИЧЕСКОЙ ЦЕЛИ. Используйте его на СВОЙ СТРАХ И РИСК.

3. Установка CRUX

3.1. Поддерживаемое аппаратное обеспечение

Пакеты, содержащиеся в официальной версии ISO-имиджа CRUX, скомпилированны с оптимизацией под процессоры архитектуры i686 (Pentium-Pro/Celeron/Pentium-II или выше). Не пытайтесь установить CRUX на i586 (Pentium, AMD K6/K6-II/K6-III) или ниже, потому что это просто не будет работать. Чтобы установить CRUX на i586, вы должны скачать ISO-имидж CRUX'а для платформы i586.

Ядро, используемое при установки, т.е. при загрузке с ISO-имиджа CRUX (El Torito), скомпилировано с поддержкой следующих дисковых и USB контроллеров:

ПодсистемаДрайвера включенные в загрузочное ядро
IDE Generic PCI IDE chipset
SATAServerWorks Frodo/Apple K2, Intel PIIX/ICH, Promise, Silicon Image, VIA, VITESSE VSC-7174
SCSI7000FASST, ACARD, Adaptec AACRAID, Adaptec AIC7xxx, Adaptec AIC79xx U320, AdvanSys, Always IN2000, AMI MegaRAID, BusLogic, Compaq Fibre Channel, NCR5380/53c400, IBM ServeRAID, SYM53C8XX, Tekram DC390(T) and Am53/79C974
USBUSB device filesystem, EHCI HCD (USB 2.0) support, UHCI (Intel PIIX4, VIA, ...) support, OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support, USB Mass Storage support, USB Human Interface Device (full HID) support, HID input layer support

Прежде чем устанавливать CRUX, убедитесь, что ваш дисковый контроллер содержится в вышеприведенном списке. Если ваше аппаратное обеспечение не поддерживается, или у вас возникли проблемы при установке CRUX, то вы сможете найти решение в разделе 3.4, “Альтернативные методы установки”.

3.2. Установка с CD-ROM

  1. Скачайте ISO-имидж CRUX'а (crux-2.3.iso). Чтобы проверить, правильно ли скачался имидж, вычислите с помощью команды md5sum контрольную сумму имиджа.

    $ md5sum crux-2.3.iso

    Сравните результат с файлом crux-2.3.md5sum, который находится в той же директории сайта, что и сам ISO-имидж. Если контрольные суммы совпадают, то это значит, что закачка прошла успешно, и вы можете записать имидж на CD-диск.

  2. ISO имидж является загрузочным, просто вставьте установочный диск с CRUX'ом и перегрузите компьютер.

    [Note] Примечание (от переводчика)

    Чтобы загрузиться с CD, убедитесь что в BIOS'е, в разделе о устройствах с которых возможна загрузка, CD-ROM опрашивается раньше чем HDD.

    Когда загрузитесь с CD нажмите Enter (возможно, вам придётся исправить параметр root= в зависимости от конфигурации вашего компьютера).

  3. Войдите в систему как root (пароль не требуется).

  4. Если необходимо, создайте и отформатируйте разделы, на которые вы хотите установить CRUX.

    $ fdisk /dev/hd?
    $ mkreiserfs /dev/hd??
    $ mkswap /dev/hd??
    [Note] Примечание

    Имейте ввиду, что жесткие диски SATA определяются как SCSI-устройства. Т.е. первый диск будет называться не /dev/hda, а /dev/sda. За более подробной информацией о соглашениях по обозначениям жёстких дисков обращайтесь к этому HOWTO.

    Размер выделяемого дискового пространства зависит от того, сколько пакетов вы собираетесь установить. Я бы рекомендовал выделить под корневой раздел не менее 1Gb (CRUX, в зависимости от конфигурации, будет использовать приблизительно 200MB-500MB).

    Рекомендуется использование ReiserFS, хотя CRUX поддерживает также и Ext2fs/Ext3fs, XFS и JFS. Кроме того, я настоятельно рекомендую отделить системные разделы от пользовательских данных, т.е. использовать разные разделы для /home (и возможно /var). Это значительно облегчит вам жизнь, если вы решите обновить/переустановить/удалить вашу систему.

    [Note]Примечание

    Убедитесь, что в BIOS'е опция "Virus Protection" ОТКЛЮЧЕНА (DISABLED), поскольку эта опция может помешать корректно создать разделы с помощью fdisk.

  5. Подмонтируйте раздел, на который вы хотите установить дистрибутив.

    $ mount /dev/hd?? /mnt

    Если вы хотите использовать для системы больше, чем один раздел, их также необходимо предварительно подмонтировать. Например, если вы хотите отделить раздел для /home или /var, сделайте:

    $ mkdir /mnt/var
    $ mount /dev/hd?? /mnt/var
  6. Активируйте swap раздел(ы).

    $ swapon /dev/hd??
  7. Чтобы начать установку пакетов наберите setup. Скрипт спросит, где вы смонтировали корневой раздел будущей системы, а также какие пакеты вы хотите установить. Просто выберите пакеты, которые вы хотите установить. Однако, я бы рекомендовал установить все пакеты, помеченные как core.

    После того, как все пакеты будут установлены, скрипт setup покажет лог процесса инсталляции. Убедитесь, что последняя строка лога гласит: “0 error(s)” (0 ошибок).

    Если позже вы обнаружили, что вам необходимо установить дополнительные пакеты, то просто подмонтируйте CD-диск с CRUX, и, используя команду pkgadd, доставьте необходимые пакеты.

    [Note]Примечание

    При установке пакетов зависимости не проверяются. Это значит, что понимание того, что для установки пакета exim, вам также потребуется установить пакет db, лежит целиком на вас.

    Скриншоты скрипта setup

  8. Теперь настало время собрать ядро и выполнить основные шаги конфигурации системы. При компиляции ядра системе необходимо, чтобы вы были в “chroot”-среде только что установленной системы CRUX.

    $ mount --bind /dev /mnt/dev
    $ mount --bind /tmp /mnt/tmp
    $ mount -t proc proc /mnt/proc
    $ mount -t sysfs none /mnt/sys
    $ chroot /mnt /bin/bash
  9. [Note]Примечание

    Для создания chroot-среды существует короткая команда: setup-chroot. Она сразу выполняет все эти шаги.

  10. Установите пароль для пользователя root.

    $ passwd
  11. Отредактируйте /etc/fstab, чтобы сконфигурировать ваши файловые системы. Доступные редакторы vim и nano.

  12. Отредактируйте /etc/rc.conf, чтобы определить шрифт (font), раскладку (keyboard), временную зону (timezone), имя хоста (hostname) и запускаемые службы (services). Более подробно о переменных в /etc/rc.conf смотри в разделе “Конфигурационные переменные в /etc/rc.conf”.

  13. Отредактируйте /etc/rc.d/net, /etc/hosts и /etc/resolv.conf, чтобы настроить сетевое окружение (IP-адрес/шлюз/имя машины/домен/DNS).

  14. Перейдите в директорию /usr/src/linux-2.6.20.3, чтобы настроить и откомпилировать ядро.

    $ cd /usr/src/linux-2.6.20.3
    $ make menuconfig
    $ make all
    $ make modules_install
    $ cp arch/i386/boot/bzImage /boot/vmlinuz
    $ cp System.map /boot
    
  15. Отредактируйте /etc/lilo.conf, чтобы определить где находится скомпилированное ядро, и запустите lilo, чтобы его активизировать.

  16. Удалите CD-диск из вашего привода и загрузитесь с вашего HDD.

Если Вы хотите вместо Lilo использовать GRUB (который включен в ISO-имидж), предварительно ознакомтесь с инструкцией по установке в приложении этого документа.

3.3. Обновление с CD-ROM

  1. Скачайте ISO-имидж CRUX'а (crux-2.3.iso). Чтобы проверить, правильно ли скачался имидж, вычислите с помощью команды md5sum контрольную сумму имиджа.

    $ md5sum crux-2.3.iso

    Сравните результат с файлом crux-2.3.md5sum, который находится в той же директории сайта, что и сам ISO-имидж. Если контрольные суммы совпадают, то это значит, что закачка прошла успешно, и вы можете записать имидж на CD-диск.

  2. ISO имидж является загрузочным, просто вставьте установочный диск с CRUX'ом и перегрузите компьютер.

    [Note] Примечание (от переводчика)

    Чтобы загрузиться с CD, убедитесь что в BIOS'е, в разделе об устройствах, с которых возможна загрузка, CD-ROM опрашивается раньше чем HDD.

    Когда загрузитесь с CD, нажмите Enter (возможно, вам придётся исправить параметр root= в зависимости от конфигурации вашего компьютера).

  3. Войдите в систему как root (пароль не требуется).

  4. Смонтируйте ваш корневой раздел CRUX.

    $ mount /dev/hd?? /mnt

    Если ваша система занимает больше одного раздела, то остальные разделы также необходимо предварительно подмонтировать. Например, если у вас имеется отдельный раздел для /var, сделайте:

    $ mkdir /mnt/var
    $ mount /dev/hd?? /mnt/var
  5. Активируйте swap раздел(ы).

    $ swapon /dev/hd??
  6. Чтобы начать установку пакетов наберите setup. Скрипт спросит, где вы смонтировали корневой раздел будущей системы, а также какие пакеты вы хотите обновить. Хорошей идей будет обновить все пакеты, в противном случае позже вы можете столкнуться с проблемами, например, если новая версия библиотеки не обладает 100%-ной обратной совместимостью.

    [Note]Примечание

    Скрипт setup использует /etc/pkgadd.conf той системы, на которую происходит установка, чтобы определить, какие файлы необходимо обновить, а какие не изменять. Файлы, которые не надо обновлять, содержаться в /var/lib/pkg/rejected/ (“Обновление пакета”).

    После того, как все пакеты обновятся, скрипт setup покажет лог процесса инсталляции. Убедитесь, что последняя строка лога гласит: “0 error(s)” (0 ошибок).

    Если позже вы обнаружили, что вам нужны дополнительные пакеты, то вы можете просто подмонтировать CD-диск с CRUX и, используя команду pkgadd, установить их (например, pkgadd /mnt/crux/opt/package#1.0-1.pkg.tar.gz).

  7. Теперь настало время скомпилировать ядро. Для этого системе необходимо, чтобы вы были в “chroot”-среде только что установленной системы CRUX.

    $ mount --bind /dev /mnt/dev
    $ mount --bind /tmp /mnt/tmp
    $ mount -t proc proc /mnt/proc
    $ mount -t sysfs none /mnt/sys
    $ chroot /mnt /bin/bash
  8. [Note]Примечание

    Для создания chroot-среды существует короткая команда: setup-chroot. Она сразу выполняет все эти шаги.

  9. Перейдите в /usr/src/linux-2.6.20.3, сконфигурируйте и скомпилируйте новое ядро.

  10. При необходимости отредактируйте /etc/fstab.

    [Note]Важно

    Если Вы обновляете CRUX 2.1 до CRUX 2.3, то вы должны отредактировать описание всех устройств disk/cdrom/floppy в файле /etc/fstab. Начиная с версии 2.2, CRUX не использует схему имён devfs (/dev/discs/discX/partY). Два примера: /dev/hda1 определяет первый раздел на master-диске первого IDE-канала (стандартная шина IDE ATA) и /dev/sda2 определяет второй раздел на первом SCSI или SATA - диске.

    udev читает файлы из /sys/* и /proc/*. Убедитесь, что эти псевдофайловые системы разрешены в конфигурации вашего ядра и доступны при загрузке системы. Также учтите, что в отличии от devfs, udev не монтирует автоматически /dev/pts. Терминальные приложения, такие как xterm(1), не будут работать, если вы забудете её подмонтировать. Если Вы хотите, чтобы udev определяла подключаемые к USB устройства, то подмонтируйте /proc/bus/usb. Мы настоятельно рекомендуем вам проверить ваш fstab-файл.

# <dev> <dir>         <type> <options> <dump> <pass>
[..]
devpts  /dev/pts      devpts defaults  0      0
sysfs   /sys          sysfs  defaults  0      0
proc    /proc         proc   defaults  0      0
usb     /proc/bus/usb usbfs  defaults  0      0
  • Отредактируйте /etc/lilo.conf чтобы определить, где находится скомпилированное ядро, и запустите lilo, чтобы его активизировать.

  • Удалите CD-диск из вашего привода и загрузитесь с вашего HDD.

  • Если вы планируете использовать GRUB вместо lilo (который включен в ISO-имидж), предварительно ознакомьтесь с инструкцией по установке в приложении этого документа.

    3.4. Алтернативные методы установки

    3.4.1. Сборка вашего собственного загрузочного ядра

    Если вы не можете установить CRUX с CD-ROM'а, потому что что ваше аппаратное обеспечение не поддерживается загрузочным ядром, то вы сможете скомпилировать ваше собственное ядро и добавить в него поддержку того оборудования, которое вам необходимо. Для этого вам понадобится 1.44Mb дискета, доступ к уже установленной любой Linux-системе и записанный на CD ISO-имидж CRUX'а. Также вам понадобятся основные знания по конфигурированию и компиляции ядра.

    1. Соберите новое ядро с поддержкой вашего аппаратного обеспечения. В качестве начальной точки используйте конфигурацию уже существующего ядра (вы можете его найти здесь) и добавьте поддержку необходимого вам оборудования. Если ядро получится слишком большое, то вы можете удалить драйвера для SCSI и USB (в том случае, конечно, если они вам не нужны), только не удаляйте никаких опций связанных с файловыми системами.

    2. Скачайте утилиту для создания загрузочных дискет и распакуйте ее.

    3. Перейдите в директорию mkbootfloppy и запустите (от пользователя root) скрипт mkbootfloppy. Для этого скрипта нужно указать один аргумент - где находится ядро, которое вы хотите использовать для образа дискеты. Прежде чем начать, убедитесь, что к разделу /mnt не подмонтированно ни одно устройство, поскольку этот скрипт mkbootfloppy будет использовать эту директорию как точку монтирования.

      $ cd mkbootfloppy
      $ ./mkbootfloppy /path/to/linux/kernel/arch/i386/boot/bzImage
      1440+0 records in
      1440+0 records out
      mke2fs 1.27 (8-Mar-2002)
      Added CRUX *
    4. Запишите полученный имидж boot.img на дискету.

      $ dd if=boot.img of=/dev/fd0
    5. Вставьте дискету и CD-диск с дистрибутивом CRUX в компьютер, на который вы хотите установить систему и перегрузитесь.

    6. Установите CRUX.

    3.4.2. Установка по сети

    Если у вас нет CD-райтера, или вы не можете загрузиться, используя CD-ROM, или по каким-либо другим причинам не можете произвести установку обычными методами, описанными в (“Установка с CD-ROM”), обратитесь к HOWTO установка CRUX через NFS Юргена Дауберта (Jьrgen Daubert).

    4. Система пакетов

    4.1. Введение

    Система пакетов (pkgutils) легка для понимания, все пакеты - это обычные tar.gz файлы (т.е. без каких-либо мета-данных). При названии пакета используется следующее соглашение <name>#<version>-<release>.pkg.tar.gz, где <name> название программы, <version> версия программы и <release> версия пакета. Расширение pkg.tar.gz (вместо обычного tar.gz) используется для того чтобы показать, что это не просто tar.gz файл, а tar.gz, который предназначен для установки с помощью утилиты pkgadd. Такой способ позволит легко отделить прочие tar.gz файлы.

    Имеется набор утилит для управления пакетами - pkgadd(8), pkgrm(8), pkginfo(8) и pkgmk(8). С их помощью вы можете устанавливать, удалять, проверять и создавать пакеты, а также производить запросы к базе данных пакетов.

    Когда пакет установлен с использованием утилиты pkgadd, к базе данных пакетов, хранящейся в /var/lib/pkg/db, добавляется новая запись. Основная система пакетов не производит никаких проверок зависимостей между пакетами, поэтому вы не получите никаких предупреждений, если установите пакет, который требует предварительной установки других пакетов.

    Следующие разделы кратко описывают использование утилит по работе с пакетами. Более подробную информацию вы сможете найти в соответствующих страницах руководства (в man'ах).

    4.2. Использование системы пакетов

    4.2.1. Установка пакета

    Установка пакета производится с помощью команды pkgadd. Для этой утилиты необходимо указать по крайней мере один аргумент - пакет, который вы хотите установить. Например:

    $ pkgadd bash#2.05-1.pkg.tar.gz

    Во время установки менеджер пакетов предварительно проверит, не будут ли перезаписаны уже установленные файлы. Если обнаружатся конфликты, то утилита pkgadd аварийно завершит свою работу, и пакет не будет установлен. Сообщение об ошибке выведет список файлов, из-за которых произошел конфликт. Например:

    $ pkgadd bash#2.05-1.pkg.tar.gz
    bin/sh
    usr/man/man1/sh.1.gz
    pkgadd error: listed file(s) already installed (use -f to ignore and overwrite)

    Для того чтобы во время установки файлы, вызывающие конфликт, были перезаписаны, вы можете использовать ключ -f (или --force). Например:

    $ pkgadd -f bash#2.05-1.pkg.tar.gz

    Ситема пакетов работает таким образом, что файл может принадлежать только одному пакету. Если установка происходила с ключом, позволяющем перезаписать файлы, то конфликтные файлы после установки будут принадлежать пакету, который был установлен последним. Тем не менее директории могут принадлежать более чем одному пакету.

    [Warning]Предупреждение

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

    Как уже говорилось выше, пакет не содержит никаких мета-данных. Вместо них менеджер пакетов использует имя файла для определения имени пакета и его версии. Так, при установке пакета, который называется bash#2.05-1.pkg.tar.gz менеджер пакетов установит, что пакет называется bash и имеет версию 2.05-1. Если утилита pkgadd не сможет распознать имя файла (например нет символа #, или имя файла не заканчивается на .pkg.tar.gz) утилита выведет сообщение об аварийном завершении работы, и пакет не будет установлен.

    4.2.2. Обновление пакета

    Обновление пакета производится с помощью утилиты pkgadd с ключом -u. Например:

    $ pkgadd -u bash#2.05-1.pkg.tar.gz

    Эта команда заменит ранее установленный пакет bash на новый. Если в системе не было пакета bash, то утилита pkgadd выдаст сообщение об ошибке. Для системы пакетов не имеет значения номер версии пакета, поэтому вы можете "обновить" пакет версии 2.05-1 на пакет версии 2.04-1 (или даже на саму версию 2.05-1). Установленный пакет будет просто заменён тем пакетом, который будет указан.

    Обновление пакета можно сравнить с действием команд pkgrm и команда pkgadd, запущенных по очереди, с одним большим исключением. Когда вы обновляете пакет (pkgadd -u) вы имеете возможность не заменять некоторые файлы, которые были ранее установленны. Это может пригодиться, если вы не хотите обновлять файлы конфигурации и журналы событий.

    Когда вы выполняете команду pkgadd, предварительно считывается файл /etc/pkgadd.conf. Этот файл содержит правила, описывающие, как вести себя утилите pkgadd при проведении обновления. Правило состоит из трех составляющих: событие (event), шаблон (pattern) и действие (action). Событие описывает, в какой ситуации будет применятся правило. В настоящий момент поддерживается только одно событие - UPGRADE. Шаблон - это регулярное выражение, которое описывает шаблон для имени файлов, к которому будет применено действие при возникновении события UPGRADE, действие описывается YES или NO. Разрешается определить более одного правила для одного события, в этом случае правило стоящее первым будет иметь более низкий приоритет, чем правило стоящее после него. Например:

    #
    # /etc/pkgadd.conf: pkgadd(8) configuration
    #
    
    UPGRADE         ^etc/.*$                NO
    UPGRADE         ^var/log/.*$            NO
    UPGRADE         ^etc/X11/.*$            YES
    UPGRADE         ^etc/X11/xorg.conf$    NO
    
    # End of file

    Следуя описанному выше примеру, утилита pkgadd никогда не будет обновлять файлы в директориях /etc/ или /var/log/ (включая поддиректории), за исключением файлов из поддиректории /etc/X11/ (включая поддиректории), исключение составит только файл /etc/X11/xorg.conf. Правило, применяемое по умолчанию - обновлять все, а исключения из этого правила как раз таки и описываются в этом файле.

    [Note]Примечание

    Шаблон не должен начинаться с “/” поскольку относится к файлам из пакета, а к файлам на диске.

    Если pkgadd найдёт файл, который не должен обновляться, он устанавит его в /var/lib/pkg/rejected/. Файлы из этой директории никогда не добавляются в базу данных о пакетах. Пользователь потом может сам решать, использовать новый файл и/или удалить его вручную. Другая возможность - использовать rejmerge. Для каждого запрещенного файла из /var/lib/pkg/rejected/, rejmerge покажет различия между установленной версией файла и файлом который был отвергнут при обновлении. Пользователь может сам выбрать - оставить существующую версию, обновить до версии, которая была отвергнута, или выполнить слияние этих двух файлов. Например, (использованный выше пример /etc/pkgadd.conf):

    $ pkgadd -u bash#2.05-1.pkg.tar.gz
    pkgadd: rejecting etc/profile, keeping existing version
    $ ls /var/lib/pkg/rejected/
    etc/
    $ ls /var/lib/pkg/rejected/etc/
    profile

    4.2.3. Удаление пакета

    Удаление пакета производится с помощью pkgrm. Для нее необходимо ввести один аргумент - имя пакета, который вы собираетесь удалить. Например:

    $ pkgrm bash
    [Warning]Предупреждение

    Эта команда удалит все файлы, принадлежащие пакету, не задавая никаких вопросов. Дважды подумайте, прежде чем делать это, также убедитесь, что в имени пакета не сделали ошибки, поскольку это может привести к удалению совершенно других файлов (например, вы можете ошибиться и набрать glib как glibc).

    4.2.4. Запрос к базе пакетов

    Запросы к базе пакетов производятся с помощью утилиты pkginfo. Эта утилита имеет несколько параметров, для формирования различных запросов.

    ПараметрОписание
    -i, --installed Список установленных пакетов и их версий.
    -l, --list package|file Список файлов принадлежащих указанному пакету (package) или содержащихся в файле (file)
    -o, --owner pattern Список владельцев файлов, соответствующих шаблону (pattern).

    Пример:

    $ pkginfo -i
    audiofile 0.2.3-1
    autoconf 2.52-1
    automake 1.5-1
    <...>
    xmms 1.2.7-1
    zip 2.3-1
    zlib 1.1.4-1
    $ pkginfo -l bash
    bin/
    bin/bash
    bin/sh
    etc/
    etc/profile
    usr/
    usr/man/
    usr/man/man1/
    usr/man/man1/bash.1.gz
    usr/man/man1/sh.1.gz
    $ pkginfo -l grep#2.5-1.pkg.tar.gz
    usr/
    usr/bin/
    usr/bin/egrep
    usr/bin/fgrep
    usr/bin/grep
    usr/man/
    usr/man/man1/
    usr/man/man1/egrep.1.gz
    usr/man/man1/fgrep.1.gz
    usr/man/man1/grep.1.gz
    $ pkginfo -o bin/ls
    e2fsprogs  usr/bin/lsattr
    fileutils  bin/ls
    modutils   sbin/lsmod

    4.3. Внешний интерфейс управления пакетами: prt-get

    После предъявления различных требований к управлению пакетами в CRUX, группа пользователей начала обсуждение более продвинутого внешнего интерфейса управления по сравнению с pkgutils, с отслеживанием зависимостей и поддержкой больших объёмов установок. Результатом усилий общества стал prt-get, инструмент, который предоставляет больше возможностей, чем pkgutils, сохраняя при этом их характер и мощь. Главными особенностями являются

    • Отслеживание зависимостей
    • Журналирование сборок
    • Мощный поиск и функциональность запросов

    В настоящее время prt-get является официальным проектом и инструментом, принадлежащим проекту CRUX.

    Полное описание может быть найдено в Руководстве пользователя prt-get

    4.4. Создание пакета

    Создание пакетов производится с помощью команды pkgmk. Эта утилита использует файл Pkgfile, который содержит информацию о пакете (название(name), версию(version), и т.д.), а также команды, которые необходимо выполнить для компиляции пакета. Если быть более точным, то Pkgfile - это bash(1)-скрипт, в котором определены некоторые переменные (name, version, release и source) и функция (build). Ниже приведен пример того, как может выглядеть Pkgfile. Он показывает, как собрать пакет для утилиты grep(1). Некоторые комментарии добавлены для пояснения.

    # Определение имени пакета.
    name=grep
    
    # Определение версии пакета.
    version=2.4.2
    
    # Определение релиза (выпуска) пакета.
    release=1
    
    # Месторасположение исходных файлов для пакета.
    source=(ftp://ftp.ibiblio.org/pub/gnu/$name/$name-$version.tar.gz)
    
    # Приведенная ниже функция build(), будет вызываться утилитой pkgmk
    # когда все файлы будут распакованы.
    build() {
       # Первое, что мы должны сделать - это перейти в директорию с исходными кодами.
       cd $name-$version
    
       # Запуск скрипта конфигурации с необходимыми аргументами.
       # В нашем случае мы разместим исполняемые файлы в директорию /usr/bin и
       # и отключим NLS.
       ./configure --prefix=/usr --disable-nls
    
       # Компиляция.
       make
    
       # Устанавливаем файлы, НО не в директорию /usr, вместо этого
       # мы перенаправляем все файлы в  $PKG/usr посредством переменной DESTDIR.
       # Переменная $PKG указывает временную директорию
       # которая в последствии будет использоваться для создания tar.gz-файла. Учтите, что
       # переменная DESTDIR не всегда используется в  Makefiles'ах, иногда используется переменная prefix
       # или ROOT и т.п.. Вы должны предварительно изучить Makefile, чтобы
       # определить какая переменная используется. Некоторые Makefile'ы вообще не поддерживают перенаправление.
       # В этих случаях придется писать patch-файл, что включить такую поддержку.
       make DESTDIR=$PKG install
    
       # Удаление ненужных файлов, в нашем случае это info-страницы.
       rm -rf $PKG/usr/info
    }

    В реальной жизни вы не будете включать все эти комментарии, поэтому реальный Pkgfile для grep(1) выглядит следующим образом:

    # $Id: package.xml,v 1.5 2005/03/27 21:36:13 per Exp $
    # Maintainer: Per Liden <per@fukt.bth.se>
    
    name=grep
    version=2.4.2
    release=1
    source=(ftp://ftp.ibiblio.org/pub/gnu/$name/$name-$version.tar.gz)
    
    build() {
      cd $name-$version
      ./configure --prefix=/usr --disable-nls
      make
      make DESTDIR=$PKG install
      rm -rf $PKG/usr/info
    }
    [Note]Примечание

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

    Когда выполение функции build() завершится, директория $PKG будет собрана в пакет, называемый <name>#<version>-<release>.pkg.tar.gz. Перед тем, как создание пакета будет завершено, pkgmk сверит содержащиеся в пакете файлы с содержанием файла .footprint. Если этот файл не существует, то пакет будет создан, а проверка будет пропущена. Файл .footprint будет содержать список файлов которые должны быть в пакете, если он был успешно собран, или список всех файлов которые были установлены в директорию $PKG (если файл .footprint уже не существовал). Если обнаружится несоответствие, то проверка прервётся, и будет выдано сообщение об ошибке. Вам не нужно писать файл .footprint вручную. Когда пакет будет обновлён, и вам будет нужно обновить содержимое файла .footprint просто выполните команду pkgmk -uf. Эта проверка позволит убедиться в том, что пересборка пакета прошла, как ожидалось.

    Если сборка пакета произошла без ошибок, то можно установить пакет посредством утилиты pkgadd. Я настоятельно рекомендую просматривать Pkgfile других пакетов, поскольку просмотр примеров - это хороший способ научиться самостоятельно писать Pkgfile.

    4.5. Требования к пакетам

    4.5.1. Общие требования

    • Название пакета должно быть всегда в нижнем регистре (например, name=eterm - правильно, а name=Eterm - неправильно). Когда пакет добавляется к системе портов CRUX, то директория в структуре портов должна называться так же, как пакет, т.е. /usr/ports/???/eterm.

    • Не совмещайте несколько разных программ/библиотек в одном пакете. Создайте несколько отдельных пакетов.

    4.5.2. Директории

    • Все пакеты должны устанавливаться в свои директории. В случае необходимости можно отойти от этого правила. Но, по возможности, старайтесь придерживаться следующей структуры каталогов.

      ДиреторияОписание
      /usr/bin/Пользовательские бинарные команды/приложения
      /usr/sbin/Системные бинарники (например, демоны)
      /usr/lib/Библиотеки
      /usr/include/Header-файлы
      /usr/lib/<prog>/Плагины, дополнения и т.п.
      /usr/man/Страницы руководств (man'ы)
      /usr/share/<prog>/Дополнительные данные
      /usr/etc/<prog>/Файлы конфигурации
      /etc/Файлы конфигурации для системного ПО (демоны, и т.д)
    • /usr/X11R6 и /usr/???/X11 зарезервированы специально для X11. X-ориентированные программы, которые не поставляются вместе с X11, должны быть размещены в /usr, а НЕ в /usr/X11R6 или /usr/???/X11.

    • /opt директория зарезервирована для ручной сборки/установки приложений. Пакеты никогда не должны использовать эту директорию.

    • /usr/libexec/ НЕ используется в CRUX, поэтому пакеты также не должны ничего устанавливать в эту директорию. Для установки используйте /usr/lib/<prog>/.

    3.4.3. Удаление лишних файлов

    • Пакет не должен содержать “лишних файлов”. Это различные info-страницы и другая online-документация, исключение составляют только man'ы (т.е. usr/doc/*, README, *.info, *.html, и т.д.).

    • Файлы относящиеся к NLS (поддержка национальных языков), всегда, где это возможно, используйте --disable-nls.

    • Бесполезные или устаревшие бинарные файлы (т.к. /usr/games/banner и /sbin/mkfs.minix).

    4.5.4. Pkgfile

    • Не добавляйте новых переменных в Pkgfile. Очень редко добавление новых переменных может привести к повышению читабельности или повысить качество пакета. Более того, только переменные name, version, release и source будут гарантировано работать в будущих версиях pkgmk. Кроме того, объявление собственных переменных может привести к конфликту с внутренними переменными pkgmk.

    • Используйте переменные $name и $version для облегчения обновления/поддержки пакета. Например, source=(http://xyz.org/$name-$version.tar.gz), лучше чем source=(http://xyz.org/myprog-1.0.3.tar.gz) поскольку, URL будет автоматически изменяться в зависимости от переменной $version.

    • Запомните, что переменная source - это массив, т.е. всегда объявляйте эту переменную как source=(...) и никогда НЕ объявляйте как source=...

    4.5.4.1 Заголовок файла Pkgfile

    Заголовок может содержать следующие поля:

    Название Значение
    Description Краткое описание описание пакета; так, как оно есть
    Maintainer Ваше полное имя и e-mail адрес, можете скрыть его, если желаете
    Packager Полное имя разработчика пакета и его e-mail адрес
    URL WEB-страница с более подробной информацией о пакете
    Depends on Список пакетов, от которых зависит натоящий пакет (разделённых пробелом или запятой)

    Если зависимости отсутствуют, поле Depends on можно опустить; поле Packager можно опустить, если тот кто разработал порт и его сопровождает - один человек.

    Пример заголовка

    # Description: Terminal based IRC client for UNIX systems
    # URL: http://www.irssi.org/
    # Maintainer: Jukka Heino, jukka at karsikkopuu dot net
    # Packager: Daniel K. Gebhart, dkg at con-fuse dot org
    # Depends on: glib
    

    5. Система портов

    5.1. Введение

    5.1.1. Что такое порт?

    Порт - это директория, содержащая файлы, необходимые для сборки пакета с помощью утилиты pkgmk. Это значит, что директория содержит по крайней мере следующие файлы: Pkgfile (который содержит сценарий сборки пакета) и .footprint (который используется для проверки возможности отката и содержит список файлов, которые должны получиться после сборки пакета). Кроме этого, порт может содержать патчи и/или другие файлы, необходимые для сборки пакета. Важно понимать, что исходные коды программы не обязательно должны содержаться в директории порта. Вместо этого, в файле Pkgfile может содержаться URL, который будет указывать на источник, откуда можно скачать необходимые файлы.

    Слово port (порт) позаимствовано из мира BSD-систем, где слово port означает программу которая была портирована на систему или платформу. Это слово может ввести в небольшое заблуждение, так как для большинства программ не требуется портирование для запуска в системе CRUX (и на Linux в принципе).

    5.1.2. Что такое система портов?

    Термин Ports System (система портов) означает CVS-репозиторий, содержащий порты и клиентскую программу, которая может загружать порты с этого CVS-репозитория. Для пользователей CRUX имеется утилита ports(8) позволяющая скачивать порты из CVS-репозитория и размещать их в директории /usr/ports/. Утилита ports использует rsync(1) для скачивания / синхронизирования портов.

    5.1.3. Коллекции портов

    Порты CRUX собраны в так называемые коллекции. Существует три различных уровня портов:

    5.1.3.1. Официальные коллекции 'core', 'opt' и 'xorg'

    core, opt и xorg - это три основных коллекции CRUX. Эти коллекции поддерживаются разработчиками CRUX, которые обеспечивают их совместимость и хорошую совместную работу. Также эти три коллекции доступны в CRUX по умолчанию.

    5.1.3.2. Коллекция 'contrib'

    Коллекция contrib это относительно новые порты, предоставленные опытными разработчиками портов, часть из которых разрабатываются коммандой разработчиков CRUX, а часть - обычными пользователями. Цель этой коллекции - уменьшить число дублирующих портов в индивидуальных коллекциях. Если Вы можете регулярно поддерживать порт, то Вы можете принять участие в формировании коллекции contrib.

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

    5.1.3.3. Индивидуальные коллекции от пользователей CRUX

    Используя HttpUp, каждый пользователь может опубликовать свои собственные порты; необходимое требование - это наличие хостинга для размещения портов. Публикация портов - это один из самых простых путей помочь сообществу CRUX.

    5.2. Использование системы портов

    5.2.1. Синхронизация Вашей локальной структуры портов

    Когда CRUX только установлен, локальная структура портов (/usr/ports/) пуста. Для того чтобы получить структуру портов, необходимо запустить утилиту ports с ключом -u. Например:

    $ ports -u

    Ключ -u означает обновить, и указывает утилите ports соединиться с CVS-репозиторий и скачать новые и обновленные порты. Вывод этой утилиты будет выглядеть примерно вот так:

    Updating file list from crux.nu::ports/crux-2.3/core/
    Updating collection ports/crux-2.3/core/
    ...
    Updating file list from crux.nu::ports/crux-2.3/opt/
    Updating collection ports/crux-2.3/opt/
    ...
    Updating file list from crux.nu::ports/crux-2.3/xorg/
    Updating collection ports/crux-2.3/xorg/
    ...
    Finished successfully
    

    Вывод зависит от того, какие файлы были скачены, обновлены и/или удалены.

    5.2.2. Просмотр локальных портов

    Когда локальная структура портов обновлена, директория /usr/ports/ содержит две категории пакетов , core и opt. В каждой из этих директорий содержаться порты. Вы можете просто выбрать необходимую директорию, для того, чтобы найти тот порт из имеющихся, который вам нужен.

    $ cd /usr/ports/core/
    $ ls
     autoconf/    gdbm/               ncurses/        sendmail/
     automake/    gettext/            net-tools/      shadow/
     bash/        glibc/              netkit-base/    slocate/
     bc/          grep/               netkit-ftp/     strace/
     bin86/       groff/              netkit-telnet/  sysfsutils/
     bindutils/   grub/               nfs-utils/      sysklogd/
     binutils/    gzip/               openssh/        sysvinit/
     bison/       hdparm/             openssl/        tar/
     bzip2/       hotplug/            patch/          tcp_wrappers/
     coreutils/   httpup/             pciutils/       tcsh/
     cpio/        iptables/           perl/           time/
     curl/        jfsutils/           pkg-config/     traceroute/
     db/          kbd/                pkgutils/       udev/
     dcron/       less/               portmap/        unzip/
     dhcpcd/      libstdc++-compat/   ports/          usbutils/
     diffutils/   libtool/            ppp/            util-linux/
     e2fsprogs/   libusb/             procps/         vim/
     ed/          lilo/               prt-get/        wget/
     expat/       m4/                 psmisc/         which/
     file/        make/               rc/             xfsprogs/
     filesystem/  man/                rdate/          zip/
     findutils/   man-pages/          readline/       zlib/
     flex/        mktemp/             reiserfsprogs/
     gawk/        module-init-tools/  rsync/
     gcc/         nasm/               sed/

    Вы также можете использовать ports с ключом -l, для просмотра локальных портов. Например:

    $ ports -l
     core/autoconf
     core/automake
     core/bash
     core/bc
     core/bin86
     core/bindutils
     core/binutils
    ...

    Если вы ищете определённый пакет, то может быть проще использовать следующий способ: ports -l | grep sendmail, чтобы выяснить, доступен ли порт и в какой категории он находится.

    5.2.3. Просмотр различий версий

    Для того, чтобы найти отличия в структуре имеющихся портов и установленными (например более новый), вы можете использовать ключ -d. Если версии отличаются, то вывод команды будет приблизительно вот такой:

    $ ports -d
     Collection  Name     Port     Installed
     core        glibc    2.3.6-3   2.3.6-2
     opt         gtk      2.8.12-1  2.8.11-1

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

    $ ports -d
    No differences found

    5.2.4. Сборка и установка пакета

    Для того, чтобы собрать и установить пакет из порта, необходимо перейти в необходимую директорию из структуры портов и использовать утилиту pkgmk для его сборки. Например:

    $ cd /usr/ports/core/gawk
    $ pkgmk -d

    Ключ -d означает скачать недостающие исходные файлы и указывает утилите pkgmk скачать исходники указанные в Pkgfile (если, исходные тексты программы уже скачены, то эта опция игнорируется). После того как все файлы будут загружены, начнётся сборка пакета. Если пакет был успешно собран, то вы можете использовать утилиту pkgadd для его обновления или установки. Например:

    $ pkgadd gawk#3.1.5-3.pkg.tar.gz

    Для того, чтобы слегка упростить эти два шага, вы можете использовать ключи -i (для установки) или -u (для обновления). Например:

    $ pkgmk -d -i

    или

    $ pkgmk -d -u

    Это позволит скачать, собрать и установить/обновить пакет. Учтите, что пакет будет установлен/обновлен только если процедура сборки прошла успешно.

    5.2.5. Активация коллекции 'contrib'

    Как уже говорилось выше, коллеция 'contrib' содержит полезные порты от опытных разработчиков. Поскольку эти порты не предоставлены командой разработчиков CRUX, при использовании этих портов вам нужно быть несколько более критичными к их качеству и безопасности. Хотя, многие порты коллекции 'contrib' предоставлены очень уважаемыми членами сообщества.

    чтобы активировать коллекцию 'contrib', нужно выполнить следующие действия:

    $ cd /etc/ports
    $ mv contrib.rsync.inactive contrib.rsync
    

    Чтобы prt-get знала, что Вы хотите использовать дерево contrib, необходимо отредактировать файл /etc/prt-get.conf и раскомментировать строку prtdir /usr/ports/contrib (i.e. т.е. удалить символ комментария в начале строки. После этого файл должен выглядеть примерно вот так:

    ###
    ### prt-get conf
    ###
    
    # note: the order matters: the package found first is used
    prtdir /usr/ports/core
    prtdir /usr/ports/opt
    
    # the folloing line enables the user maintained contrib collection
    prtdir /usr/ports/contrib
    

    Теперь запустите ports -u, после чего вы сможете использовать порты из коллекции contrib.

    5.2.6. Дополнительные инструменты

    5.2.6.1. Сборка портов непривелегированным пользователем

    Обычно сборка портов требует root-привелегий. Это небезопасно, поскольку злонамеренно или просто плохо спроектированный порт может повредить вашу систему. Команда fakeroot предоставляет возможность сборки портов обычным пользователем. Вы всегда должны использовать fakeroot, особенно, когда собираете пакеты из репозиториев, созданных пользователями.

    $ fakeroot pkgmk -d
    

    Вы также можете сделать, чтобы prt-get использовал fakeroot. На сайте CRUX имеется руководство о том, как этого добиться.

    5.2.6.2. Полезные скрипты

    Существует много задач, касающихся управления пакетами и портами, которые могут быть выполнены в несколько шагов стандартными средствами CRUX, описанными выше. Порт prt-utils из репозитория opt содержит коллекцию таких скриптов. Использование этих скриптов описано в соответствующих man-ах. В разделе документации сайта CRUX есть обзор всех скриптов в prt-utils.

    6. Конфигурация

    6.1. Скрипт инициализации

    6.1.1. Уровни запуска

    В CRUX'е используются следующие уровни запуска (определенные в /etc/inittab).

    УровеньОписание
    0Halt (остановка)
    1 (S)Single-user Mode (однопользовательский режим)
    2Multi-user Mode (многопользовательский режим)
    3-5Not used (не используются)
    6Reboot (перезагрузка)

    6.1.2. Расположение

    Скрипты инициализации, используемые в CRUX, выдержаны в стиле BSD (в противоположность SysV-стилю) и имеют следующее расположение.

    ФайлОписание
    /etc/rcСкрипт загрузки системы
    /etc/rc.singleСкрипт загрузки системы в однопользовательском режиме
    /etc/rc.modulesСкрипт подгрузки модулей
    /etc/rc.multiСкрипт загрузки системы в многопользовательском режим
    /etc/rc.localСкрипт загрузки системы локального многопользовательского режима (пустой по умолчанию)
    /etc/rc.shutdownСкрипт выключения системы
    /etc/rc.confКонфигурация системы
    /etc/rc.d/Директория со скриптами запуска/остановки служб

    Вы можете редактировать файлы /etc/rc.modules, /etc/rc.local и /etc/rc.conf в соответствии с вашими нуждами.

    6.1.3. Конфигурационные переменные в /etc/rc.conf

    В файле /etc/rc.conf вы можете встретить следующие переменные.

    ПеременнаяОписание
    FONT

    Определяет, какой консольный шрифт будет использоваться системой при загрузке. Переменная должна содержать аргументы для setfont(1). Доступные шрифты находятся в /usr/share/kbd/consolefonts/.

    Например: FONT=default

    KEYMAP

    Определяет, какая раскладка клавиатуры будет использоваться системой при загрузке. Переменная должна содержать аргументы для loadkeys(1). Доступные раскладки клавиатуры находятся в /usr/share/kbd/keymaps/.

    Например: KEYMAP=sv-latin1

    TIMEZONE

    Определяет, какая временная зона будет использоваться системой. Доступные системы находятся в /usr/share/zoneinfo/.

    Например: TIMEZONE=Asia/Almaty

    HOSTNAME

    Определяет имя хоста.

    Например: HOSTNAME=pluto

    SERVICES

    Определяет, какие службы должны запускаться при загрузке системы. Службы, определенные в этом массиве, должны иметь соответствующие скрипты запуска/остановки в /etc/rc.d/. Когда загружается система в многопользовательском режиме, все перечисленные скрипты будут по очереди выполнены с аргументом start. Когда система выгружается или переходит в однопользовательский режим, перечисленные скрипты будут выполнены в обратном порядке с аргументом stop.

    Например: SERVICES=(crond identd sshd sendmail)

    6.1.4. Настройка сети

    Настройка сети находится в скрипте /etc/rc.d/net. Для активизации сети необходимо добавить скритп net в массив SERVICES, определенный в /etc/rc.conf. По умолчанию этот скрипт содержит настройки только для интерфейса lo и статический IP-адрес для eth0. Если хотите настроить другие сетевые интерфейсы (eth1, eth2, и так далее) то вы должны добавить дополнительные команды ip(8). Например:

    #!/bin/sh
    #
    # /etc/rc.d/net: start/stop network
    #
    
    case $1 in
    start)
    	# loopback
    	/sbin/ip addr add 127.0.0.1/8 dev lo broadcast + scope host
    	/sbin/ip link set lo up
    	# ethernet
    	/sbin/ip addr add 192.168.1.100/24 dev eth0 broadcast +
    	/sbin/ip link set eth0 up
    	# default route
    	/sbin/ip route add default via 192.168.1.1
    	;;
    stop)
    	/sbin/ip route del default
    	/sbin/ip link set eth0 down
    	/sbin/ip addr del 192.168.1.100/24 dev eth0
    	/sbin/ip link set lo down
    	/sbin/ip addr del 127.0.0.1/8 dev lo
    	;;
    restart)
    	$0 stop
    	$0 start
    	;;
    *)
    	echo "usage: $0 [start|stop|restart]"
    	;;
    esac
    
    # End of file

    Если вы хотите настроить ваши сетевые интерфейсы с использованием DHCP, то используйте команду dhcpcd(8) (вместо ip(8)). Например:

    #!/bin/sh
    #
    # /etc/rc.d/net: start/stop network
    #
    
    case $1 in
    start)
    	# loopback
    	/sbin/ip addr add 127.0.0.1/8 dev lo broadcast + scope host
    	/sbin/ip link set lo up
    	# ethernet
    	/sbin/dhcpcd -t 10 -h $HOSTNAME eth0
    	;;
    stop)
    	/usr/bin/killall -q /sbin/dhcpcd
    	/sbin/ip link set lo down
    	/sbin/ip addr del 127.0.0.1/8 dev lo
    	;;
    restart)
    	$0 stop
    	$0 start
    	;;
    *)
    	echo "usage: $0 [start|stop|restart]"
    	;;
    esac
    
    # End of file
    [Note] Примечание

    Релизы CRUX до 2.3 использовали команды ifconfig(8) и route(8) для инициализации сети; ниже мы приводим в качестве примера образцы предыдущих версий.

    Ручное конфигурирование ip (CRUX < 2.3):

    #!/bin/sh
    #
    # /etc/rc.d/net: start/stop network
    #
    
    case $1 in
    start)
            /sbin/ifconfig lo 127.0.0.1
            /sbin/ifconfig eth0 195.38.1.140 netmask 255.255.255.224
            /sbin/ifconfig eth1 192.168.0.1 netmask 255.255.255.0
            /sbin/route add default gw 195.38.1.129
            ;;
    stop)
            /sbin/ifconfig eth1 down
            /sbin/ifconfig eth0 down
            /sbin/ifconfig lo down
            ;;
    restart)
            $0 stop
            $0 start
            ;;
    *)
            echo "usage: $0 [start|stop|restart]"
            ;;
    esac
    
    # End of file

    Конфигурирование DHCP (CRUX < 2.3):

    #!/bin/sh
    #
    # /etc/rc.d/net: start/stop network
    #
    
    case $1 in
    start)
            /sbin/ifconfig lo 127.0.0.1
            /sbin/dhcpcd eth0 [add additional options if needed]
            ;;
    stop)
            killall -q /sbin/dhcpcd
            /sbin/ifconfig lo down
            ;;
    restart)
            $0 stop
            $0 start
            ;;
    *)
            echo "usage: $0 [start|stop|restart]"
            ;;
    esac
    
    # End of file

    6.2. Пароли

    В CRUX по умолчанию используются пароли MD5SUM. Но этот алгоритм может быть выключен, если вы хотите вместо него использовать традиционные пароли, зашифрованные алгоритмом DES. Учтите, что использование DES для шифрования паролей намного НЕ безопаснее. Чтобы отключить алгоритм MD5SUM для паролей, измените переменную MD5_CRYPT_ENAB в /etc/login.defs значение no.

    В будующем запомните, что при компиляции програм, которые используют функцию crypt(3) для аутентификации пользователей, вы должны быть уверены, что эта программа связана с библиотекой libcrypt (т.е. при линковке используется -lcrypt) которая содержит версию MD5SUM в функции crypt (эта функция также поддерживает пароли, зашифрованные алгоритмом DES).

    6.3. Обновление ядра

    Исходные коды ядра, находящиеся в /usr/src/linux-2.6.20.3/ не устанавливаются с помощью утилиты pkgadd. Если вы решили обновить ваше ядро, вы можете просто вручную заменить исходные коды ядра на более новые (или разместить их где-нибудь в другом месте). Эти изменения не повлияют как на базу данных пакетов (поскольку при установке ядра не использовалась утилита pkgadd), так и на хэдер-файлы ядра, находящиеся в /usr/include/linux и /usr/include/asm, поскольку они не являются символическими ссылками на исходные коды ядра, а вместо этого содержат копии хэдер-файлов.

    7. Дополнение

    7.1. Возможные проблемы

    Многие проблемы описаны в FAQ (русский перевод доступен по этому адресу), если у вас возникла проблема, то обратитесь к этому документу, очень вероятно, что Вы найдете там решение своей проблемы.

    Если же у Вас после прочтения FAQ остались вопросы, то Вы можете задать его кому-нибудь из списка рассылки или на IRC-канале. Более подробную информацию об этом Вы можете найти на странице Сообщества на нашем сайте.

    7.2. Установка GRUB

    7.2.1. Предосторожности

    Установка нового менеджера загрузки подобна