Системное администрирование ОС Solaris 10

Настройка ядра, добавление оборудования, установка программ и обновлений

Показывать лекцию целиком

Что настраивать в ядре?

Ядро состоит из статической части и динамической части (модулей). Кроме этого, в ядре располагаются многочисленные таблицы, размер которых задается параметрами ядра. Фактически настройка ядра сводится к следующим задачам:

  • определение (или переопределение) параметров ядра;
  • принудительное добавление указанных модулей в ядро;
  • принудительное запрещение загрузки указанных модулей.
  • Частным случаем задачи (2) является добавление и настройка драйверов устройств.

    Для того, чтобы узнать значения параметров исполняющегося ядра, надо использовать программу sysdef.

    Сейчас мы рассмотрим, как именно следует выполнять эти задачи, включая те или иные команды в файл конфигурации ядра /etc/system.

    Изменение файла /etc/system

    Конфигурация ядра Solaris, которая определяет технические параметры системы, может быть изменена в файле /etc/system. Файл содержит настройки ядра, отличные от принятых по умолчанию. Этот файл используется при загрузке системы. Изменения, внесенные в /etc/system, оказывают действие на конфигурацию ядра после перезагрузки.

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

    Файл /etc/system содержит команды, которые представляют собой список пар имя=значение. Длина команды не должна превышать 80 символов. Строки комментариев начинаются с символа * (звездочка) или # (решетка). Все команды, кроме специально оговариваемых исключений, можно давать в любом регистре, как маленькими, так и большими буквами.

    В командах set в /etc/system имена параметров статической части ядра (т.е. файла unix) указываются без названия модуля, а все остальные – с указанием модуля, к которому относится параметр:

    set maxusers = 50
    set strmod:strmsgsz = 262144

    Для более детального изучения настроек ядра и работы с полным списком настроек имеет смысл обратиться к руководству "Solaris Tunable Parameters Reference Manual" по адресу http://docs.sun.com/app/docs/ doc/817-0404.

    Чтобы проверить, какие значения имеют настраиваемые параметры ядра, следует использовать команду sysdef, которая показывает список обнаруженных устройств, системных устройств, загруженных модулей и значения настраиваемых параметров ядра:

    sysdef | grep stream
    65536 maximum stream message size (STRMSGSZ)

    Можно проверить значения параметров и другим способом, с помощью отладчика mdb, напрямую запросив значение соответствующей переменной в ядре:

    mdb -kw
    Loading modules: [ unix genunix specfs dtrace cpu.generic cpu_
    ms.AuthenticAMD.15 uppc pcplusmp scsi_vhci ufs ip hook neti sctp
    arp usba s1394 fctl nca lofs zfs random audiosup md cpc crypto
    smbsrv fcip fcp logindmux ptm nsctl sdbc sv ii sppp rdc ipc ]
    > strmsgsz/D
    strmsgsz:
    strmsgsz: 65536

    Следующие пространства имен являются общими для всех платформ под Solaris:

  • drv – драйвера устройств;
  • Exec – модули поддержки разных форматов исполняемых файлов, а именно:
  • aoutexec – модуль только для SPARC;
  • coffexec – модуль только для Intel;

    для обеих платформ:

  • elfexec
  • intpexec
  • javaexec
  • fs – модули этого пространства имен – драйверы файловых систем;
  • sched – реализация алгоритма планировщика задач;
  • strmod – модули STREAMS;
  • sys – модули исполнения системных вызовов;
  • misc – другие модули, не попавшие в указанные выше категории.
  • Только для платформы SPARC реализованы модули:

  • dacf – модули автонастройки устройств;
  • cpu – модули процедур ядра, связанных с конкретными процессорами.
  • Фактически каждое пространство имен представляет собой каталог, в котором находится тот или иной модуль, например, модуль ipc находится в пространстве имен misc и располагается в каталоге /kernel/misc.

    Загрузка такого модуля выполняется командой

    modload misc/ipc

    В файле /etc/system допустимы следующие команды:

  • exclude: <namespace>/<modulename> – запрет загрузки модуля;
  • include: <namespace>/<modulename> – разрешение загрузки модуля; любые модули по умолчанию разрешено загружать;
  • forceload: <namespace>/<modulename> – требовать загрузки модуля при инициализации ядра, в отличие от принятой по умолчанию загрузки по мере необходимости;
  • rootdev: <device name> – установить иное устройство для загрузки, чтобы изменить принятое по умолчанию при загрузке или установленное командой boot среды OpenBoot;
  • rootfs: <root filesystem type> – указать тип файловой системы загрузочного устройства;
  • moddir: <first module path>[[{:, }<second ...>]...] – установить список каталогов, в которых следует искать модули для загрузки;
  • set [<module>:]<symbol> {=, |, } [~][-]<value> – установить параметр ядра в указанное значение; если параметр относится к конкретному модулю, в команде следует указать явно этот модуль (см. выше пример с установкой параметров семафоров в ядре).
  • Предположим, мы хотим исключить возможность запуска приложениями пользователей того кода, который находится в пространстве пользовательского стека. Это позволяет избежать запуска нежелательного кода при эксплуатации уязвимостей типа "переполнение буфера". В 64-разрядном ядре Solaris эта настройка включена по умолчанию для всех 64-разрядных приложений, в то время как в 32-разрядном ядре – выключена. Также она выключена в 64-разрядном ядре для 32-разрядных приложений.

    Для включения настройки следует в /etc/system указать

    set noexec_user_stack = 1

    По состоянию на начало 2008 года эта настройка эффективна только для 64-разрядных архитектур SPARC и AMD в системах Solaris 2.6, 7, 8, 9, и 10. В других архитектурах она не повлияет на поведение приложений.

    Некоторые настраиваемые параметры ядра

    Здесь мы рассмотрим параметры, влияющие на максимальное количество процессов, которые можно запустить в системе, и на максимальное количество процессов, которые может запустить один пользователь.

    Основным параметром является maxusers, который влияет на значения параметров max_nprocs и maxuprc.

    Параметр maxusers в прошлом определял максимальное разрешенное количество одновременно работающих в системе пользователей.

    Размер многих таблиц в ядре вычислялся с использованием этого параметра. В настоящее время старое значение этого параметра утратило смысл, но некоторые параметры ядра продолжают базироваться на maxusers. Это максимально допустимое количество процессов в системе, размер структур квотирования в системе и размер кэша имен каталогов (directory name lookup cache – DNLC). По умолчанию maxusers равно меньшему из двух чисел – объему памяти системы в мегабайтах или 2048. Может принимать любое значение от 1 до 2048, при явной установке в /etc/system – от 1 до 4096, но следует указывать разумные значения. Значение maxusers явно мало, если система выдает сообщения

    out of processes

    Значение maxusers по умолчанию, скорее всего, будет велико для систем с малым количеством запущенных процессов и большим объемом памяти – серверов баз данных, вычислительных серверов и т.п.

    Еще одним важным параметром является max_nprocs: он ограничивает максимальное количество процессов, которые можно одновременно запустить в системе, и влияет на вычисление значения maxuprc, а также на:

  • вычисление размеров кэша имен каталогов (DNLC);
  • резервирование структур, обеспечивающих квотирование дискового пространства (если не указано явно значение ndquot );
  • проверку того, что объем памяти, занятый под семафоры, не превышает системных ограничений;
  • настройку подсистемы Hardware Address Translation для систем x86 и sun4m.
  • Значение max_nprocs по умолчанию – 10 + (16 x maxusers), диапазон значений – от 266 до максимально возможного идентификатора процесса ( maxpid ). Изменение этого параметра понадобится, если потребуется запускать более 30 000 процессов одновременно.

    Кроме ограничения на общее количество одновременно запущенных процессов, существует ограничение на количество процессов, запускаемых одним пользователем. Это количество контролируется параметром maxuprc.

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

    Количество процессов, которое имеет право запустить один пользователь, можно только уменьшить; сделать его большим, чем max_nprocs - reserved_procs, нельзя.

    Превышение пользователем ограничения, установленного параметром maxuprc, приводит к выдаче сообщения

    out of per-user processes for uid N

    Для более детального изучения параметров ядра, доступных для настройки, имеет смысл ознакомиться с Solaris Tunable Reference Manual, доступным на docs.sun.com.

    Загрузка модулей

    В зависимости от выполняемых системой задач, некоторые полезные модули могут не загружаться в начале работы системы. Для того, чтобы они точно загружались, следует использовать вышеупомянутые настройки в /etc/system. Если требуется загрузить модуль во время работы системы, не перегружая ее, воспользуйтесь командой modload.

    В Solaris 9 можно было проделать такой эксперимент по загрузке модуля, отвечающего за семафоры в ядре: по умолчанию этот модуль был не загружен

    sysdef | tail -20
    *
    * Streams Tunables
    *
    9 maximum number of pushes allowed (NSTRPUSH)
    65536 maximum stream message size (STRMSGSZ)
    1024 max size of ctl part of message (STRCTLSZ)
    *
    * IPC Messages module is not loaded
    *
    *
    * IPC Semaphores module is not loaded
    *
    *
    * IPC Shared Memory module is not loaded
    *
    *
    * Time Sharing Scheduler Tunables
    *
    60 maximum time sharing user priority (TSMAXUPRI)
    SYS system class name (SYS_NAME)

    Стандартные модули располагаются в подкаталогах каталога /kernel:

    ls -l /kernel
    total 2856
    drwxr-xr-x 2 root sys 512 Мар 17 10:42 dacf
    drwxr-xr-x 2 root sys 3072 Мар 17 11:16 drv
    drwxr-xr-x 2 root sys 512 Мар 17 11:10 exec
    drwxr-xr-x 2 root sys 512 Мар 17 10:52 fs
    -rwxr-xr-x 1 root sys 1438036 Ноя 4 2002 genunix
    drwxr-xr-x 2 root sys 512 Мар 17 11:07 ipp
    drwxr-xr-x 2 root sys 512 Мар 17 10:50 mach
    drwxr-xr-x 3 root sys 1024 Мар 17 11:07 misc
    drwxr-xr-x 2 root sys 512 Мар 17 10:43 sched
    drwxr-xr-x 2 root sys 1024 Мар 17 10:53 strmod
    drwxr-xr-x 2 root sys 512 Мар 17 10:49 sys

    Загружаем модуль командой

    modload /kernel/misc/ipc

    После этого модуль будет загружен и будет отображаться программами мониторинга:

    modinfo | grep ipc
    146 feab6fb2 332 - 1 ipc (common ipc code)

    Для проверки работоспособности модуля поддержки семафоров в Solaris до версии 9 включительно можно было использовать команду

    sysdef:
    sysdef | tail -28
    *
    * IPC Messages
    *
    2048 max message size (MSGMAX)
    4096 max bytes on queue (MSGMNB)
    50 message queue identifiers (MSGMNI)
    40 system message headers (MSGTQL)
    *
    * IPC Semaphores
    *
    100 semaphore identifiers (SEMMNI)
    60 semaphores in system (SEMMNS)
    30 undo structures in system (SEMMNU)
    25 max semaphores per id (SEMMSL)
    100 max operations per semop call (SEMOPM)
    10 max undo entries per process (SEMUME)
    32767 semaphore maximum value (SEMVMX)
    16384 adjust on exit max value (SEMAEM)
    *
    * IPC Shared Memory
    *
    8388608 max shared memory segment size (SHMMAX)
    100 shared memory identifiers (SHMMNI)
    *
    * Time Sharing Scheduler Tunables
    *
    60 maximum time sharing user priority (TSMAXUPRI)
    SYS system class name (SYS_NAME)

    Для выгрузки модуля следует дать команду modunload:

    modunload ipc
    usage: modunload -i <module_id> [-e <exec_file>]
    modunload -i 146
    can't unload the module: Device busy

    Если модуль чем-то занят или его ресурс кем-то использовался ранее и блокировка не снята, удалить модуль не удастся.

    Начиная с Solaris 10, семафоры более не контролируются настройками ядра, управление ими отдано в подсистему управления ресурсами, и их количество можно регулировать для каждого проекта в системе индивидуально.

    Поэтому для проверки, эффективно ли используется /etc/system, воспользуемся нашим примером с установкой параметра noexec_user_stack.

    Проверим значение этого параметра в выполняющемся в данный момент ядре:

    mdb -kw
    Loading modules: [ unix genunix specfs dtrace cpu.generic cpu_
    ms.AuthenticAMD.15 uppc pcplusmp scsi_vhci ufs ip hook neti sctp
    arp usba s1394 fctl nca lofs zfs random audiosup md cpc crypto
    smbsrv fcip fcp logindmux ptm nsctl sdbc sv ii sppp rdc ipc ]
    > noexec_user_stack/D
    noexec_user_stack:
    noexec_user_stack: 0
    ^D

    Изменим файл /etc/system:

    set noexec_user_stack = 1

    После перезагрузки картина будет иной:

    mdb -kw
    Loading modules: [ unix genunix specfs dtrace cpu.generic cpu_
    ms.AuthenticAMD.15 uppc pcplusmp scsi_vhci ufs ip hook neti sctp
    arp usba s1394 fctl nca lofs zfs random audiosup cpc crypto fcip
    ptm nsctl sppp ipc ]
    > noexec_user_stack/D
    noexec_user_stack:
    noexec_user_stack: 1
    ^D

    Получение информации об оборудовании

    Для получения информации об уже установленных устройствах следует пользоваться программами prtconf, sysdef и dmesg.

    Программа prtconf выдает информацию о конфигурации системы в том виде, в котором она иерархически представлена в системе; с помощью prtconf можно выяснить, "увидела" ли система то или иное устройство. Упоминание устройства в выводе prtconf означает только то, что устройство обнаружено среди оборудования компьютера. Это НЕ ЗНАЧИТ, что устройство нормально работает, и тем более не означает, что в системе установлен его драйвер.

    Программа sysdef показывает больше информации о системе: здесь выводится не только список аппаратуры в системе, но и перечень псевдоустройств, загруженных модулей, параметры ядра, информация о разделяемой памяти, семафорах и т.п.

    Программа dmesg выдает сообщения из файла протокола и список устройств, обнаруженных при последней перезагрузке системы. Эти сообщения можно также посмотреть в файле /var/adm/messages.

    Для более детального изучения оборудования компьютера могут пригодиться программы scanpci ( /usr/X11/bin/scanpci – опрос устройств на шине PCI), psrinfo (информация о процессорах компьютера), isainfo (описание аппаратной архитектуры с точки зрения набора команд).

    Команда psrinfo наиболее полезна с ключами -pv:

    psrinfo -pv
    The physical processor has 2 virtual processors (0 1)
    x86 (AuthenticAMD 40F82 family 15 model 72 step 2 clock 1600 MHz)
    AMD Turion(tm) 64 X2 Mobile Technology TL-50

    Следует иметь в виду, что многоядерный процессор виден системе как несколько процессоров (ровно столько, сколько ядер на кристалле). Управлять состоянием процессоров (например, делать часть из них недоступными системе) можно с помощью программы psradm.

    На двухядерном процессоре AMD x64 Turion isainfo выдает такую информацию:

    isainfo -v
    64-bit amd64 applications
    tscp ahf cx16 sse3 sse2 sse fxsr amd_3dnowx amd_3dnow
    amd_mmx mmx cmov amd_sysc cx8 tsc fpu
    32-bit i386 applications
    tscp ahf cx16 sse3 sse2 sse fxsr amd_3dnowx amd_3dnow
    amd_mmx mmx cmov amd_sysc cx8 tsc fpu

    Для получения информации о временно подключаемых устройствах (например, USB-флэш) следует использовать команду

    rmformat -l

    Ключ -l указывать обязательно! Команда rmformat предназначена для форматирования подключенных устройств, и только ключ -l дает возможность просто посмтреть их список без форматирования.

    Подключение нового оборудования

    Задача подключения нового оборудования сводится к двум этапам: загрузке соответствующего драйвера нового устройства в ядро и созданию файла устройства в каталоге /dev. Это справедливо для всех систем UNIX. В Solaris все немного сложнее: как вы помните, сначала надо создать файл устройства в /devices, а затем – соответствующие символические ссылки на него в /dev.

    К счастью, эти задачи можно решать автоматизированно: в Solaris есть утилита devfsadm, которая автоматически распознает свежеподключенные устройства и создает необходимые файлы в /devices и /dev.

    При загрузке ядро системы в состоянии выполнить автоматическую самонастройку, определяя, какие именно устройства подключены к системе. Если вы подключили любое новое устройство к компьютеру и оно в настоящее время не видно ядру (например, новый накопитель), следует создать файл /reconfigure и перезапустить систему:

    touch reconfigure; reboot

    После перезагрузки система увидит новое устройство, если только оно вообще поддерживается данной версией системы.

    Вместо создания файла /reconfigure и перезапуска допустимо при загрузке системы дать команду из строки начального загрузчика:

    boot –r

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

    Начиная с версии Solaris 8 можно добавлять и удалять устройства из системы без ее перезагрузки – для этого служит утилита devfsadm. Ее можно запускать интерактивно, но, если запущен демон автоконфигурации devfsadmd, то изменения будут сделаны автоматически. Программы devfsadm и devfsadmd работают с файлом /etc/path_to_inst, в котором находится список устройств в системе. При добавлении новых устройств записи в файле не перенумеруются, к старым посто добавляются новые.

    В случае, если файл /etc/path_to_inst был удален или неверно отредактирован, система не сможет загрузиться. В этом случае можно загрузиться с CD-ROM и переписать файл с дистрибутивного диска.

    Еще одним важным файлом в контексте разговора об устройствах в Solaris является файл /etc/name_to_major, который служит для отображения имен устройств в major номера файлов устройств; этот файл создается при формировании содержимого каталога /devices, например, при работе devfsadmd.

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

    Порядок установки драйвера нового оборудования

    Установка драйвера производится командой add_drv. После выполнения этой программы файл драйвера будет размещен в соответствующем каталоге (см. таблицу 2.1).

    После установки драйвера следует сообщить системе, что появилось новое устройство, – запустить devfsadm. При этом devfsadm должна создать ссылку из каталога /dev на соответствующее устройство в каталоге /devices.

    Возможно, после этого потребуется загрузить модуль драйвера командой modload. Если устанавливается драйвер сетевого адаптера, надо выполнить команду ifconfig имя_интерфейса plumb, чтобы интерфейс стал доступен для работы; например, для интерфейса vfe0 это будет выглядеть так:

    ifconfig vfe0 plumb
    Каталоги с драйверами в Solaris
    /kernel/drv 32-bit boot device drivers
    /kernel/drv/sparcv9 64-bit SPARC boot device drivers
    /kernel/drv/amd64 64-bit x86 boot device drivers
    /usr/kernel/drv other 32-bit drivers that could potentially be shared between platforms
    /usr/kernel/drv/sparcv9 other 64-bit SPARC drivers that could potentially be shared between platforms
    /usr/kernel/drv/amd64 other 64-bit x86 drivers that could potentially be shared between platforms
    /platform/'uname -i'/kernel/drv 32-bit platform-dependent drivers
    /platform/'uname -i'/kernel/drv/sparcv9 64-bit SPARC platformdependent drivers
    /platform/'uname -i'/kernel/drv/amd64 64-bit x86 platform-dependent drivers

    Некоторые новые устройства, подключаемые к системе, не требуют никакой подобной установки. Например, при подключении внешних USB-накопителей ("флэшек") последние распознаются автоматически как внешние блочные устройства и автоматически монтируются компонентом графической среды (в GNOME – gnome-volume-manager ).

    Установка программ и обновлений

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

    Найти пакет. Например, хочется иметь более наглядное средство наблюдения за процессами, чем ps. На sunfreeware.com ищем top и загружаем его на свой компьютер. Если прямо с sunfreeware его получить не удается, набираем имя файла top-3.5-sol9-intel-local.gz в строке поиска Google и получаем достаточное количество ссылок на ftp-серверы, где он лежит. Такое бывает часто: сервер sunfreeware перегружен и не всегда готов принять посетителя.

    Теперь распаковываем подарочек...

    gunzip top-3.5-sol9-intel-local.gz

    Распакованное представляет собой файл пакета. Надо указать команде pkgadd, что именно отсюда мы будем пакет устанавливать:

    pkgadd -d top-3.5-sol9-intel-local
    The following packages are available:
    1 SMCtop top
    (intel) 3.5
    Select package(s) you wish to process (or 'all' to process
    all packages). (default: all) [?,??,q]: y
    ERROR: Entry does not match available menu selection. Enter the
    number of the menu item you wish to select, or the token which is
    associated with the menu item, or a partial string which uniquely
    identifies the token for the menu item. Enter ?? to reprint the
    menu.
    Select package(s) you wish to process (or 'all' to process
    all packages). (default: all) [?,??,q]: all

    Ошибка вызвана тем, что мы поторопились ввести y в ответ на вопрос: привычка сказывается. Честно напишем all, чтобы установить все программы, которые доступны в пакете. После этого получаем:

    Processing package instance <SMCtop> from </export/home/top-3.5-
    sol9-intel-local>
    top
    (intel) 3.5
    William LeFebvre
    Using </usr/local> as the package base directory.
    ## Processing package information.
    ## Processing system information.
    4 package pathnames are already properly installed.
    ## Verifying disk space requirements.
    ## Checking for conflicts with packages already installed.
    ## Checking for setuid/setgid programs.
    The following files are being installed with setuid and/or setgid
    permissions:
    /usr/local/bin/top <setgid sys>

    Наконец, вопрос, на который как раз следует ответить утвердительно:

    Do you want to install these as setuid/setgid files [y,n,?,q] y
    Installing top as <SMCtop>
    ## Installing part 1 of 1.
    /usr/local/bin/top
    /usr
    /usr/local/doc/top/Changes
    /usr/local/doc/top/FAQ
    /usr/local/doc/top/INSTALL
    /usr/local/doc/top/Porting
    /usr/local/doc/top/README
    /usr/local/doc/top/SYNOPSIS
    /usr/local/man/man1/top.1
    [ verifying class <none> ]
    Installation of <SMCtop> was successful.

    Можно проверить, удачно ли установился пакет, командой

    # pkginfo | grep top
    application SMCtop top
    system SUNWdtcor Solaris Desktop /usr/dt filesystem anchor
    system SUNWdtdst CDE Desktop Applications
    system SUNWdtdte Solaris Desktop Login Environment
    system SUNWdtezt Solaris Desktop Extensions Applications
    system SUNWdthez Desktop Power Pack Help Volumes
    system SUNWdtlog System boot for Desktop Login
    system SUNWdtmaz Desktop Power Pack man pages
    system SUNWeuodf UTF-8 Core OPENLOOK Desktop Files
    system SUNWsadmi Solstice Enterprise Agents 1.0.3 Desktop
    Management Interface

    Как видно, пакетов, в названиях которых имеется подстрока top, установлено немало, и наш свежий – на самом первом месте.

    Удалить пакет можно командой pkgrm, например:

    pkgrm SMCtop.

    Иногда бывает необходимо не просто установить пакет, который получен в виде набора исполняемых файлов и документации, а собрать его из исходных текстов. В этом случае надо следовать инструкциям по установке, которые обычно находятся в файлах README и INSTALL дистрибутива пакета. В любом случае вам понадобится программа make (поставляется в комплекте с Solaris).

    Коммерческая версия компилятора С фирмы Sun в версиях до Solaris 9 включительно не поставлялась с бесплатным набором компакт-дисков дистрибутива Solaris. Его надо было покупать отдельно. Однако начиная с версии Solaris 10, компиляторы с языков C, C++ и FORTRAN входят в бесплатно распространяемый пакет Sun Studio. Этот пакет можно получить бесплатно на диске с дистрибутивом Solaris Express Developer Edition (он устанавливается автоматически при выборе установки в графическом режиме) или загрузить из Сети отдельно. Кроме того, его всегда можно установить с дистрибутивного диска Solaris Express Developer Edition. Имя пакета Sun Studio – SUNWspro.

    В комплект дистрибутива Solaris начиная с версии 10 входит компилятор gcc, но предположим, что мы хотим взять оригинальный пакет с веб-сайта разработчика gcc и загрузим файл gcc_small-3.3.2-sol9-intellocal.gz, после чего установим пакет gcc для последующей компиляции программы из исходных текстов. Разумеется, если у нас уже установлен Sun Studio, мы можем воспользоваться им. Вернемся пока к установке пакетов на примере gcc:

    pkgadd gcc_small-3.3.2-sol9-intel-local.gz
    pkgadd: ERROR: no packages were found in </var/spool/pkg>

    Ошибка: файл пакета сжат, ему требуется декомпрессия, кроме того, имя файла пакета надо указывать с ключом d

    gunzip gcc_small-3.3.2-sol9-intel-local.gz
    ls
    gcc_small-3.3.2-sol9-intel-local
    pkgadd -d gcc_small-3.3.2-sol9-intel-local
    The following packages are available:
    1 SMCgcc gcc
    (intel) 3.3.2
    Select package(s) you wish to process (or 'all' to process
    all packages). (default: all) [?,??,q]:

    Далее действуем, как в предыдущем примере.

    При установке программ из исходных текстов следует руководствоваться инструкциями из файлов README и INSTALL, которые присутствуют в дистрибутиве.

    Проверка содержимого пакетов и перечня установленного ПО

    pkginfo
    application SMCtop top
    system SUNW1251f Russian 1251 fonts
    ALE SUNW5ttf Traditional Chinese BIG5 True Type
    Fonts Package
    ALE SUNW5xmft Traditional Chinese (BIG5) X Windows
    Platform minimum required Fonts Package
    system SUNWGlib GLIB - Library of useful routines f
    or C programming
    system SUNWGtkr GTK - The GIMP Toolkit (Root)
    system SUNWGtku GTK - The GIMP Toolkit (Usr)
    system SUNWTcl Tcl - Tool Command Language
    system SUNWTiff libtiff - library for reading and w
    pkginfo -l SMCtop
    PKGINST: SMCtop
    NAME: top
    CATEGORY: application
    ARCH: intel
    VERSION: 3.5
    BASEDIR: /usr/local
    VENDOR: William LeFebvre
    PSTAMP: Steve Christensen
    INSTDATE: Апр 21 2004 14:47
    EMAIL: steve@smc.vnet.net
    STATUS: completely installed
    FILES: 13 installed pathnames
    4 shared pathnames
    5 directories
    1 executables
    1 setuid/setgid executables
    258 blocks used (approx)

    Загрузка пакетов с BlastWave.org

    Кроме стандартного диспетчера пакетов pkgadd/pkginfo в Solaris допустимо использование диспетчера пакетов стороннего производителя. С веб-сайта blastwave.org можно скачать программу pkg-get, которая служит для автоматического скачивания, удовлетворения зависимостей и установки пакетов и всех пакетов, от которых устанавливаемый пакет зависит. Для корректной работы pkg-get следует выполнить следующее (все делается при работе в роли администратора root ):

  • если требуется использовать прокси-сервер, создать и экспортировать соответствующую переменную среды окружения:
    export http_proxy="http://my.proxy.server.com:3128"
  • установить pkg-ge t с веб-сайта blastwave:
    pkgadd -d http://www.blastwave.org/pkg_get.pkg
  • После того как pkg-get установится ровно так, как было описано в предыдущем разделе, следует открыть страницу с полным списком доступных на blastwave.org пакетов (http://www.blastwave.org/packages.php), найти нужный вам пакет и в окне терминала вашего компьютера дать команду pkg-get -i имя_пакета

    Проверка пакетов ПО с помощью pkgchk

    bash-2.05# pkgchk SMCtop
    bash-2.05#

    Как видим, сообщений от pkgchk не последовало. Отсутствие новостей – лучшие новости. Если программа pkgchk не выдала сообщений, стало быть, проблем нет.

    Можно проверить, изменилось ли содержимое файла пакета с момента его установки:

    pkgchk -p /etc/shadow
    ERROR: /etc/shadow
    modtime <11/04/02 01:06:28 > expected <03/18/04 05:05:29 > actual
    file size <253> expected <298> actual
    file cksum <17353> expected <20785> actual

    Файл изменился с момента установки системы. Это естественно: ведь мы добавили новых пользователей и назначили им пароли.

    Для более подробной информации можно использовать ключ l:

    pkgchk -l -p /etc/shadow
    Pathname: /etc/shadow
    Type: editted file
    Expected mode: 0400
    Expected owner: root
    Expected group: sys
    Referenced by the following packages:
    SUNWcsr
    Current status: installed

    База данных установленных пакетов

    Информация об установленных пакетах сохраняется в файле /var/sadm/install/contents.

    Можно просмотреть его содержимое для изучения того, что именно и куда было установлено при инсталляции пакета. Программа pkgrm использует содержимое этого файла для удаления пакета. Например, взгляните, какие файлы и с какими правами были созданы в результате установки пакета top. Кстати, если имя пакета начинается на SUNW, это значит, что пакет создан компанией Sun Microsystems, а если начало имени пакета иное – то это продукт третьей фирмы. Как видите, последнее относится и к программе top – ведь ее пакет называется SMCtop.

    more /var/sadm/install/contents | grep SMCtop
    /usr/local/bin d none 0755 root bin SMCgcc SMCtop
    /usr/local/bin/top f none 2711 root sys 47348 46603 1081404717 SMCtop
    /usr/local/doc d none 0755 root bin SMCgcc SMCtop
    /usr/local/doc/top d none 0755 root bin SMCtop
    /usr/local/doc/top/Changes f none 0644 root bin 30674 28431 1081404751 SMCtop
    /usr/local/doc/top/FAQ f none 0644 root bin 15167 37360 1081404751 SMCtop
    /usr/local/doc/top/INSTALL f none 0644 root bin 7460 472 1081404751 SMCtop
    /usr/local/doc/top/Porting f none 0644 root bin 7058 38204 1081404751 SMCtop
    /usr/local/doc/top/README f none 0644 root bin 7958 47937 1081404751 SMCtop
    /usr/local/doc/top/SYNOPSIS f none 0644 root bin 2109 45452 1081404751 SMCtop
    /usr/local/man d none 0755 root bin SMCgcc SMCtop
    /usr/local/man/man1 d none 0755 root bin SMCgcc SMCtop
    /usr/local/man/man1/top.1 f none 0644 root bin 12736 8086 1081404723 SMCtop

    Поскольку в файле /var/sadm/install/contents указано, в какой каталог установлена программа, можно искать в нем нужную программу, чтобы понять, в какой каталог она установлена (если установлена вообще).

    Для того, чтобы просмотреть базу данных установленных пакетов, удобно использовать программу pkginfo – стандартный интерфейс получения информации о пакетах.

    В графическом режиме просматривать, устанавливать и удалять пакеты поможет диспетчер пакетов prodreg (рис. 2.1).

    (рис 2.1) Окно программы prodreg

    Установка обновлениий

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

    Для работы с обновлениями и заплатками в Solaris предсмотрен ряд программ: patch, gpatch, patchadd, patchrm, smpatch.

    Кроме того, можно устанавливать обновления системы с использованием Solaris Management Console. Это делается через пункт "Patches", подробности можно почерпнуть из руководства по smc(1M).

    Чтобы точно узнать версию установленной системы Solaris и получить информацию обо всех установленных обновлениях системы, следует использовать команду showrev:

    showrev –a
    Hostname: sola
    Hostid: 284521a
    Release: 5.9
    Kernel architecture: i86pc
    Aplication architecture: i386
    Hardware provider:
    Domain:
    Kernel version: SunOS 5.9 Generic_112234-03 November 2002
    OpenWindows version:
    Solaris X11 Version 6.6.1 16 October 2002
    No patches are installed

    Для изменения текстовых файлов (например, исходных текстов программ или файлов конфигураций) можно применять программу patch, которой нужно два файла: исходный текстовый файл, который надо изменить, и файл заплатки (patch-файл). Файл заплатки обычно имеет формат вывода программы diff, но patch понимает также формат скрипта редактора ed или контекстный вывод diff. Контекстным называется формат вывода, когда в файле различий, создаваемом diff, приводятся не только те строки файлов, которые отличаются друг от друга, но и контекст, в котором они появились (по три строки сверху и снизу от них).

    Типичный файл заплатки для исходного текста или файла конфигурации выглядит так:

    cat system.patch
    --- system Mon May 17 02:15:34 2004
    +++ system.new Tue Jun 22 10:50:48 2004 @@ -76,6 +76,6 @@
    *
    * set test_module:debug = 0x13
    -set semsys:seminfo_semmni=100
    +set semsys:seminfo_semmni=110
    set semsys:seminfo_semopm=100

    Этот файл заплатки system.patch можно "приложить" к старому файлу system для того, чтобы внести в него изменения; предполагается, что старый файл имеет имя, совпадающее с именем в первой строке файла заплатки (то, что написано после --- ):

    patch –i system.patch system

    Кроме программы patch в Solaris имеется программа gpatch (GNU Patch), которая, в отличие от традиционной команды patch, строго соответствует стандарту POSIX и несколько отличается в интерпретации ключей и обработке полных имен файлов в файлах заплаток. Применяйте ту программу, которая требуется согласно описанию заплатки; в трудных случаях имеет смысл изучить раздел Compatibility issues в man gpatch.

    Программы patch и gpatch не предназначены для установки обновлений Solaris, которые Sun Microsystems регулярно выпускает по мере обнаружения ошибок в существующем коде, или для усовершенствования тех или иных системных программ. Для установки обновлений системы, а это – наборы двоичных файлов, используются программы patchadd. Для удаления обновления и возвращения системы в состояние, в котором она пребывала до обновления, применяйте patchrm. Программы patchadd и patchrm работают с Solaris версий 2.x и более новых.

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

    Установка пакетов и обновлений в OpenSolaris

    OpenSolaris — это находящаяся в постоянной разработке версия Solaris, в то время как Solaris 10 — стабильная версия системы. OpenSolaris появился в результате проекта под кодовым названием Indiana; материалы проекта доступны на сайте opensolaris.org. Дистрибутив OpenSolaris можно загрузить с сайта opensolaris.com.

    Систему отличают прежде всего принципиально новая подсистема управления пакетами (IPS — Image Packaging System), значительно улучшенная программа установки и возможность работать с несколькими средами загрузки на одном физическом разделе диска (загружая в разное время системы с разными версиями пакетов и/или ядра).

    IPS подобна диспетчеру пакетов в Debian GNU/Linux – т.е. устанавливается только базовая версия системы, а все необходимые пакеты следует установить через сеть из репозитория. Последний может находиться как на сайте pkg.opensolaris.org, так и в вашей локальной сети. Локальный репозиторий, разумеется, будет требовать регулярного обновления.

    Обновления ядра также доступны через репозиторий.

    Диспетчер пакетов устанавливает пакеты на файловую систему ZFS, и широко использует ее функциональность в части создания снимков при установке новых пакетов – для возможности быстрого возврата к тому состоянию системы, которое было до установки пакета.

    Для загрузки пакета из репозитория и управления им в OpenSolaris следует использовать команду pkg.

    Вернуться к учебному плану