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

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

Разбить на страницы
Показывать лекцию целиком

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

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

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

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

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

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

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

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

    В командах перед именем параметра указывается пространство имен модуля, к которому относится параметр, например, semsys для изменения параметров подсистемы семафоров в приведенном ниже примере:

    set semsys:seminfo_semmni=100

    Следующие пространства имен являются общими для всех платформ под 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> - установить параметр ядра в указанное значение; если параметр относится к конкретному модулю, в команде следует указать явно этот модуль (см. выше пример с установкой параметров семафоров в ядре).
  • Некоторые настраиваемые параметры ядра

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

    Основным параметром является 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. Кроме того, значение max_nprocs влияет на:

  • вычисление размеров кэша имен каталогов (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, размещенным на http://docs.sun.com.

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

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

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

    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)
    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

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

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

    set semsys:seminfo_semmni=101
    set semsys:seminfo_semopm=101

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

    modload misc/ipc
    sysdef 
    *
    * IPC Semaphores
    *
      	101 	semaphore identifiers (SEMMNI)
      	60 	semaphores in system (SEMMNS)
      	30 	undo structures in system (SEMMNU)
      	25 	max semaphores per id (SEMMSL)
      	101 	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)
    *

    Вывод sysdef в этом примере сильно сокращен.

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

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

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

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

    Программа prtconf выдает информацию о конфигурации системы в том виде, в котором она иерархически представлена в системе; с помощью prtconf можно выяснить, "увидела" ли система то или иное устройство.

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

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

    При загрузке ядро системы в состоянии выполнить автоматическую самонастройку, определяя, какие именно устройства подключены к системе. Если вы подключили любое новое устройство к компьютеру (например, новый накопитель), и оно в настоящее время не видно ядру, следует создать файл /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.

    Компиляция, установка пакетов, управление пакетами, применение пакетов обновлений

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

    Например, требуется найти более наглядное средство наблюдения за процессами, чем ищем 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

    Ошибка (сообщение ERROR в 6-й строке листинга) вызвана тем, что мы поторопились ввести 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. Его надо покупать отдельно, это можно сделать со страницы http://wwws.sun.com/software/sundev/suncc/buy/index.html.

    Компания Sun предоставляет возможность использовать ее компилятор С в течение 60 дней бесплатно. Для этого с той же страницы надо загрузить trial-версию. Она является полнофункциональной - просто при установке следует выбрать вариант установки trial, и временный серийный номер продукта будет сгенерирован автоматически.

    Кроме коммерческого компилятора можно работать с бесплатной версией GNU C под Solaris. Ее можно получить с http://www.sunfreeware.com или найти через центральный портал проекта GNU gnu.org. GNU C можно загрузить в виде пакета gcc.

    Загрузим файл gcc_small-3.3.2-sol9-intel-local.gz и установим пакет 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]:

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

    Если необходимо, то можно получить довольно много бесплатного программного обеспечения под Solaris со страницы http://www.sun.com/bigadmin/features/articles/x86_desktop.html.

    Затем его можно установить вышеописанным образом.

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

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

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

    pkginfo
    application 	SMCtop 	top
    system 	SUNW1251f 	Russian 1251 fonts
    ALE 	SUNW5ttf 	Traditional Chinese BIG5 True Type 
    Fonts Package
    ALE 	SUNW5xmft 	Traditional Chinese (BIG5) X Window
    s 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)

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

    Чтобы узнать, изменялись ли файлы установленных пакетов с момента их установки, используйте 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 указано, в какой каталог установлена программа, можно искать в нем нужную программу, чтобы понять, в какой каталог она установлена (если установлена вообще).

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

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

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

    Можно также устанавливать обновления системы с помощью Solaris Management Console. Это делается через пункт "Patches" (подробности см. в лекции 16).

    Для того чтобы узнать точно версию вашей системы 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 в Solаris имеется программа gpatch (GNU Patch), которая, в отличие от традиционной команды patch, строго соответствует стандарту POSIX и несколько по-другому интерпретирует ключи и обрабатывает полные имена файлов в файлах заплаток. Применяйте ту программу, которая требуется согласно описанию заплатки ; в трудных случаях имеет смысл изучить раздел Compatibility issues в man gpatch.

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

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

    Страницы:

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

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

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

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

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

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

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

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

    В командах перед именем параметра указывается пространство имен модуля, к которому относится параметр, например, semsys для изменения параметров подсистемы семафоров в приведенном ниже примере:

    set semsys:seminfo_semmni=100

    Следующие пространства имен являются общими для всех платформ под 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> - установить параметр ядра в указанное значение; если параметр относится к конкретному модулю, в команде следует указать явно этот модуль (см. выше пример с установкой параметров семафоров в ядре).
  • Некоторые настраиваемые параметры ядра

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

    Основным параметром является 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. Кроме того, значение max_nprocs влияет на:

  • вычисление размеров кэша имен каталогов (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, размещенным на http://docs.sun.com.

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

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

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

    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)
    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

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

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

    set semsys:seminfo_semmni=101
    set semsys:seminfo_semopm=101

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

    modload misc/ipc
    sysdef 
    *
    * IPC Semaphores
    *
      	101 	semaphore identifiers (SEMMNI)
      	60 	semaphores in system (SEMMNS)
      	30 	undo structures in system (SEMMNU)
      	25 	max semaphores per id (SEMMSL)
      	101 	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)
    *

    Вывод sysdef в этом примере сильно сокращен.

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

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

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

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

    Программа prtconf выдает информацию о конфигурации системы в том виде, в котором она иерархически представлена в системе; с помощью prtconf можно выяснить, "увидела" ли система то или иное устройство.

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

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

    При загрузке ядро системы в состоянии выполнить автоматическую самонастройку, определяя, какие именно устройства подключены к системе. Если вы подключили любое новое устройство к компьютеру (например, новый накопитель), и оно в настоящее время не видно ядру, следует создать файл /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.

    Компиляция, установка пакетов, управление пакетами, применение пакетов обновлений

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

    Например, требуется найти более наглядное средство наблюдения за процессами, чем ищем 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

    Ошибка (сообщение ERROR в 6-й строке листинга) вызвана тем, что мы поторопились ввести 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. Его надо покупать отдельно, это можно сделать со страницы http://wwws.sun.com/software/sundev/suncc/buy/index.html.

    Компания Sun предоставляет возможность использовать ее компилятор С в течение 60 дней бесплатно. Для этого с той же страницы надо загрузить trial-версию. Она является полнофункциональной - просто при установке следует выбрать вариант установки trial, и временный серийный номер продукта будет сгенерирован автоматически.

    Кроме коммерческого компилятора можно работать с бесплатной версией GNU C под Solaris. Ее можно получить с http://www.sunfreeware.com или найти через центральный портал проекта GNU gnu.org. GNU C можно загрузить в виде пакета gcc.

    Загрузим файл gcc_small-3.3.2-sol9-intel-local.gz и установим пакет 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]:

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

    Если необходимо, то можно получить довольно много бесплатного программного обеспечения под Solaris со страницы http://www.sun.com/bigadmin/features/articles/x86_desktop.html.

    Затем его можно установить вышеописанным образом.

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

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

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

    pkginfo
    application 	SMCtop 	top
    system 	SUNW1251f 	Russian 1251 fonts
    ALE 	SUNW5ttf 	Traditional Chinese BIG5 True Type 
    Fonts Package
    ALE 	SUNW5xmft 	Traditional Chinese (BIG5) X Window
    s 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)

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

    Чтобы узнать, изменялись ли файлы установленных пакетов с момента их установки, используйте 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 указано, в какой каталог установлена программа, можно искать в нем нужную программу, чтобы понять, в какой каталог она установлена (если установлена вообще).

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

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

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

    Можно также устанавливать обновления системы с помощью Solaris Management Console. Это делается через пункт "Patches" (подробности см. в лекции 16).

    Для того чтобы узнать точно версию вашей системы 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 в Solаris имеется программа gpatch (GNU Patch), которая, в отличие от традиционной команды patch, строго соответствует стандарту POSIX и несколько по-другому интерпретирует ключи и обрабатывает полные имена файлов в файлах заплаток. Применяйте ту программу, которая требуется согласно описанию заплатки ; в трудных случаях имеет смысл изучить раздел Compatibility issues в man gpatch.

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

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

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