пятница, 10 марта 2017 г.

Вопросы-пожелания

Вопросы - пожелания можно оставлять здесь.
Может вместе разберемся

Читать дальше......

вторник, 28 мая 2013 г.

Установка VIOs командой installios с HMC

Всегда знал, что так можно. Пробовал даже когда-то установку с сидюка VIOs, вставленного в дисковод HMC этой командой. И вот понадобилось вместо диска воспользоваться образом VIOs на NFS. Натолкнулся на пару проблем.

Начнем с того, что такое installios:

На HMC есть nimol, или Network Install Manager On Linux. Он там не поднят все время - HMC может его поднять для выполнения сетевой установки LPAR и положить после этого обратно.
Именно это и делает команда installios. Параметры ей можно не указывать - она снабжена интерфейсом и сама спросит все что ей нужно.

Первый вопрос в том, где HMC возьмет ресурсы для сетевой установки?
man installios предлагает такие варианты:

-d     Specifies  the  path  to  installation  images. Either /dev/cdrom or the path to a system backup of the Virtual I/O Server created by the backupios command. The path may also specify a
              remote location mountable by NFS such as hostname:/path_to_backup 

С диском все более или менее понятно - вставляем в дисковод HMC дистрибутив или загрузочный бэкап VIOs'а (что, кстати, одно и то же), HMC поднимает nimol, экспортирует сидюк, грузит LPAR, а дальше все как с обычным NIM'ом.

Что же касается NFS и команды backupios, то тут важно понимать, что не любой бэкап VIOs'а годится. Читаем man backupios (на VIOs'е):

       If the -file flag is specified, the backupios
       command creates a system backup image to the path
       specified. The file system must be mounted and
       writable by the Virtual I/O Server root user prior
       to running the backupios command (see mount command
       for details). Backing up the Virtual I/O Server to
       a remote file system will create the
       nim_resources.tar image in the directory you
       specify. The Virtual I/O Server must have root
       write access to the server on which the backup will
       be created. This backup can be reinstalled from the
       HMC using the installios command.


То есть используем флаг -file <куда лить бэкап>. Можно для этого смонтировать NFSку в режиме rw, а можно сохранить бэкап прямо в /home/padmin и потом унести.
Заодно добавим флаг -nosvg, чтобы не сохранять сведения о других VG (они в VIOs'е называются Storage Pool'ами) и флаг -nomedialib, чтобы не сохранять репозитарий виртуальных сидюков. То есть команда будет выглядеть как-то так:

$   backupios -file /home/padmin/viosbackup -nosvg -nomedialib

На выходе в папке(!) /home/padmin/viosbackup получим 

$ ls -l viosbackup
total 6999048
-rw-r--r--    1 root     staff    3583508480 May 27 18:38 nim_resources.tar
$

Вот этот nim_resources.tar нам и нужен - нам же ясно сказали:
"This backup can be reinstalled from the
       HMC using the installios command."


Кладем его на какую-нибудь NFS и не забываем, что если эта NFS на AIX'е, то необходимо, чтобы HMC резолвилась по какому-нибудь имени на этом AIX'е (через /etc/hosts например). Иначе увидим permission denied при попытке ее смонтировать на Linux (а на HMC, как все мы знаем, Linux)

Второй вопрос в том, как HMC будет загружать LPAR по сети. 
А ответ лежит рядом в этом блоге -> lpar_netboot или как не влипнуть в меню SMS
Собственно этот вопрос в практическом смысле нас не волнует, так как все будет сделано автоматически за нас.

Ну и пользуемся:
А, нет, стоп...
Счастья не случилось, при загрузке LPAR завис с кодом 608:

0608

Explanation

Attempting to retrieve the client.info file with tftp. Note: Note that a flashing 608 indicates multiple attempt(s) to retrieve the client_info file are occurring.
 Лечится, если в качестве gateway указать IP-адрес самой HMC.
Вот теперь пользуемся:


hscroot@vHMC:~&gt; installios

The following objects of type "managed system" were found.  Please select one:

1. BENDER
2. NIM
3. LEELA

Enter a number (1-4): 3

The following objects of type "virtual I/O server partition" were found.  Please select one:

1. vios1

Enter a number: 1

The following objects of type "profile" were found.  Please select one:

1. normal

Enter a number: 1
Enter the source of the installation images [/dev/cdrom]: 192.168.1.222:/vios22
Enter the client's intended IP address: 192.168.1.61
Enter the client's intended subnet mask: 255.255.255.0
Enter the client's gateway: 192.168.1.252                       <----HMC's IP!!!
(Note: To use the adapter's default setting, enter 'default' for speed)
Enter the client's speed [100]: 100
Enter the client's duplex [full]: full
Enter the numeric VLAN tag priority for the client (0 to 7), 0=none [0]:
Enter the numeric VLAN tag identifier for the client (0 to 4094), 0=none [0]:
Would you like to configure the client's network after the
 installation [yes]/no? no
Please select an adapter you would like to use for this installation.
(WARNING: The client IP address must be reachable through this adapter!
1. eth1 192.168.1.252
2. eth2 10.0.0.183
Enter a number (1-2): 1

Retrieving information for available network adapters
This will take several minutes...


The following objects of type "ethernet adapters" were found.  Please select one:

1. ent U8203.E4A.6549A72-V39-C18-T1 066411026112 /vdevice/l-lan@30000012 n/a virtual
2. ent U8203.E4A.6549A72-V39-C19-T1 066411026113 /vdevice/l-lan@30000013 n/a virtual
3. ent U789C.001.DQD8674-P1-C3-T1 00145e74b49e /pci@800000020000207/ethernet@0 n/a physical
4. ent U789C.001.DQD8674-P1-C3-T2 00145e74b49f /pci@800000020000207/ethernet@0,1 n/a physical

Enter a number (1-4): 3
Here are the values you entered:

managed system = LEELA
virtual I/O server partition = vios1
profile = normal
source = 192.168.1.222:/vios22
IP address = 192.168.1.61
subnet mask = 255.255.255.0
gateway = 192.168.1.252
speed = 100
duplex = full
configure network = no
install interface = eth1
ethernet adapters = 00:14:5e:74:b4:9e

Press enter to proceed or type Ctrl-C to cancel...

nimol_config MESSAGE: Added "REMOTE_ACCESS_METHOD /usr/bin/rsh" to the file "/etc/nimol.conf"
Shutting down xinetd: (waiting for all children to terminate)                                                                                                                                    done
Starting INET services. (xinetd)                                                                                                                                                                 done
Shutting down syslog services                                                                                                                                                                    done
Starting syslog services                                                                                                                                                                         done
nimol_config MESSAGE: Executed /usr/sbin/nimol_bootreplyd -l -d -f /etc/nimoltab -s 192.168.1.252.
nimol_config MESSAGE: Successfully configured NIMOL.
nimol_config MESSAGE: target directory: /extra/default1
nimol_config MESSAGE: Executed /usr/sbin/iptables -I INPUT 1 -s 192.168.1.222 -j ACCEPT.
nimol_config MESSAGE: source directory: /mnt/nimol
nimol_config MESSAGE: Checking /mnt/nimol/nim_resources.tar for existing resources.
nimol_config MESSAGE: Executed /usr/sbin/iptables -D INPUT -s 192.168.1.222 -j ACCEPT.
nimol_config MESSAGE: Added "/extra/default1 *(rw,insecure,no_root_squash)" to the file "/etc/exports"
nimol_config MESSAGE: Successfully created "default1".
nimol_install MESSAGE: The hostname "ioserver" will be used.
nimol_install MESSAGE: Added "CLIENT ioserver" to the file "/etc/nimol.conf"
nimol_install MESSAGE: Added "ioserver:ip=192.168.1.61:ht=ethernet:gw=192.168.1.100:sm=255.255.255.0:bf=ioserver:sa=192.168.1.252:ha=00145e74b49e" to the file "/etc/nimoltab"
nimol_install MESSAGE: Executed kill -HUP 6815.
nimol_install MESSAGE: Created /tftpboot/ioserver.
nimol_install MESSAGE: Executed /sbin/arp -s ioserver 00:14:5e:74:b4:9e -i eth1.
nimol_install MESSAGE: Executed /usr/sbin/iptables -I INPUT 1 -s ioserver -j ACCEPT.
nimol_install MESSAGE: Created /extra/default1/scripts/ioserver.script.
nimol_install MESSAGE: Created /tftpboot/ioserver.info.
nimol_install MESSAGE: Successfully setup ioserver for a NIMOL install
# Connecting to vios1
# Connected
# Checking for power off.
# Power off complete.
# Power on vios1 to Open Firmware.
# Power on complete.
# Client IP address is 192.168.1.61.
# Server IP address is 192.168.1.252.
# Gateway IP address is 192.168.1.100.
# Subnetmask IP address is 255.255.255.0.
# Getting adapter location codes.
# /pci@800000020000207/ethernet@0 ping successful.
# Network booting install adapter.
# bootp sent over network.
# Network boot proceeding, lpar_netboot is exiting.
# Finished.
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:36:45.671298+00:00 ioserver nimol: ,info=LED 610: mount  -r 192.168.1.252:/extra/default1/SPOT/usr /SPOT/usr
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:36:45.879868+00:00 ioserver nimol: ,info=
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:36:46.520782+00:00 ioserver nimol: ,-S,booting,ioserver
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:36:46.738200+00:00 ioserver nimol: ,info=LED 610: mount  192.168.1.252:/extra/default1/mksysb /NIM_BOS_IMAGE
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:36:46.763379+00:00 ioserver nimol: ,info=LED 610: mount  192.168.1.252:/extra/default1/bosinst.data /NIM_BOSINST_DATA
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:36:46.785399+00:00 ioserver nimol: ,info=LED 610: mount  192.168.1.252:/extra/default1/lpp_source /SPOT/usr/sys/inst.images
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:36:46.807126+00:00 ioserver nimol: ,info=
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:43:16.634369+00:00 ioserver nimol: ,-R,success,ioserver
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:43:16.883939+00:00 ioserver nimol: ,info=extract_data_files
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:43:52.739261+00:00 ioserver nimol: ,info=query_disks
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:43:55.601312+00:00 ioserver nimol: ,info=extract_diskette_data
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:43:57.322139+00:00 ioserver nimol: ,info=setting_console
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:43:58.925740+00:00 ioserver nimol: ,info=initialization
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:45:26.323796+00:00 ioserver nimol: ,info=verifying_data_files
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:45:41.509198+00:00 ioserver nimol: ,info=
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:46:08.519224+00:00 ioserver nimol: ,info=BOS install 1% complete : Making boot logical volume.
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:46:16.489403+00:00 ioserver nimol: ,info=BOS install 2% complete : Making paging logical volumes.
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:46:18.310517+00:00 ioserver nimol: ,info=BOS install 3% complete : Making logical volumes.
Tue May 28 11:36:38 2013
-----------/var/log/nimol.log :---------------
2013-05-28T11:46:23.774415+00:00 ioserver nimol: ,info=BOS install 4% complete : .................. ......... ....

Оказывается HMC даже подсовывает нам bosinst.data (почитать можно тут), чтобы установка была тихой и отсчитывает проценты завершения - красота!

И вот буквально вчера...
Оказалось что в релизе 7.7 для HMC v7 появилась графическая менюшка для той же цели (только хотел поворчать, что ее нет).
Кто пробовал?
Читать дальше......

понедельник, 20 мая 2013 г.

Встроенные в AIX группы и юзеры.

Пусть это будет тут, чтоб все знали, что блог еще живой)

Собственно, вопрос заключается в том, какие права и возможности дают встроенные в AIX user и group accounts.
Все что в IBM сочли необходимым описать по теме находится тут (см. system special user accounts). В принципе, этой информации достаточно, чтобы понять, что реально юзабельными группами из них являются system и security(без детального описания получаемых привилегий правда).

Что делать при отсутствии описания?
В большинстве случаев встроенные пользователи и группы - это владение какими-то файлами или папками от какой-то facility. Понять что за права будут у пользователя при добавлении его в группу довольно легко из команды:

find / -group staff(или другая группа)

В данном случае (staff) пользователь не получает толком ничего кроме  чтения папок других пользователей в /home
Точно так же надо поступать с самими встроенными юзерами, только -group замменить на -user

Если в выводе команды нет бинарников - то группа/пользователь нужна просто для содержания(/доступа к) файликов с неким назначением. О назначении можно судить из названия или содержимого файлов/папок.
Есть бинарники - значит пользователь в такой группе получает некоторые права на некоторые действия.
Например:

{lpar1} /etc/security/audit # find / -group audit
/audit
/etc/security/audit
/etc/security/audit/bincmds
/etc/security/audit/events
/etc/security/audit/objects
/etc/security/audit/streamcmds
/usr/lpp/bos/inst_root/audit
/usr/lpp/bos/inst_root/etc/security/audit
/usr/lpp/bos/inst_root/etc/security/audit/bincmds
/usr/lpp/bos/inst_root/etc/security/audit/config
/usr/lpp/bos/inst_root/etc/security/audit/events
/usr/lpp/bos/inst_root/etc/security/audit/objects
/usr/lpp/bos/inst_root/etc/security/audit/streamcmds
/usr/sbin/audit
/usr/sbin/auditbin
/usr/sbin/auditcat
/usr/sbin/auditconv
/usr/sbin/auditmerge
/usr/sbin/auditpr
/usr/sbin/auditselect
/usr/sbin/auditstream
/usr/sbin/lsaudit
/usr/sbin/watch
{lpar1} /etc/security/audit #

{lpar1} / # find / -group audit -type f -exec ls -l {} \;
-rw-r-----    1 root     audit            37 Nov 30 15:05 /etc/security/audit/bincmds
-rw-r-----    1 root     audit         24341 Nov 30 15:45 /etc/security/audit/events
-rw-r-----    1 root     audit           340 Nov 30 15:05 /etc/security/audit/objects
-rw-r-----    1 root     audit            54 Nov 30 15:05 /etc/security/audit/streamcmds
-rw-r-----    1 root     audit            37 Aug  7 2010  /usr/lpp/bos/inst_root/etc/security/audit/bincmds
-rw-r-----    1 root     audit          2460 Aug  7 2010  /usr/lpp/bos/inst_root/etc/security/audit/config
-rw-r-----    1 root     audit         23456 Aug  7 2010  /usr/lpp/bos/inst_root/etc/security/audit/events
-rw-r-----    1 root     audit           340 Aug  7 2010  /usr/lpp/bos/inst_root/etc/security/audit/objects
-rw-r-----    1 root     audit            54 Aug  7 2010  /usr/lpp/bos/inst_root/etc/security/audit/streamcmds
-r-sr-x---    1 root     audit         42916 Apr  3 2012  /usr/sbin/audit
-r-sr-x---    1 root     audit         24250 Mar 27 2012  /usr/sbin/auditbin
-r-sr-x---    1 root     audit         23442 Nov 30 15:05 /usr/sbin/auditcat
-r-sr-x---    1 root     audit         12444 Nov 30 15:05 /usr/sbin/auditconv
-r-sr-x---    1 root     audit         10700 Nov 30 15:05 /usr/sbin/auditmerge
-r-sr-x---    1 root     audit         49648 Nov 30 15:05 /usr/sbin/auditpr
-r-sr-x---    1 root     audit         31186 Nov 30 15:05 /usr/sbin/auditselect
-r-sr-x---    1 root     audit          9420 Mar 27 2012  /usr/sbin/auditstream
-r-sr-xr-x    1 root     audit          4156 Nov 30 15:05 /usr/sbin/lsaudit
-r-sr-x---    1 root     audit         18904 Nov 30 15:05 /usr/sbin/watch
{lpar1} / #
Очевидно, пользователю из этой группы дадут права на просмотр конфигов из /etc/security/audit/
и на запуск команд работы с подсистемой аудита из /usr/sbin
Ну а дальше, конечно, придется идти и читать про аудит =)

На самом деле (как будто все, что было до этого, не на самом деле), если сначала мы бы пошли читать про audit, то там-то и узнали бы, что в AIX есть-таки группа audit и зачем она нужна. Таким образом, чтобы узнать зачем в AIX та или иная группа, надо прочитать по нему всю документацию. Шутка.
Читать дальше......

понедельник, 30 июля 2012 г.

NIM. Как начать


Начнем с определения: NIM в AIX - это программный продукт, позволяющий управлять сетевой установкой Base Operating System (BOS, или по-просту самой OS AIX) и дополнительного софта на одном или нескольких клиентах. NIM поставляется вместе с AIX, покупать или лицензировать что-либо дополнительно не требуется.

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

Создание среды:

Среда NIM включает в себя серверы и клиентские машины. Сервер предоставляет ресурсы -- программы и файлы для установки. Клиент эти ресурсы использует.

Сервером (правильнее будет говорить "сервером ресурсов") может быть любая машина среды.

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

Одна машина в среде особенная - она называется master. Это и есть наш NIM. Он является лишь управлятором процесса установки  неких ресурсов с некоего сервера на неких клиентов. То есть хранить файлы дистрибутива AIX вы можете на на одной машине, ставить AIX на другую машину, а управлять процессом с третьей (она-то и есть NIM master).

Обычно среда NIM довольно проста: Сам master является сервером всех ресурсов, а все остальные машины - всего лишь клиенты. На картинке ниже изображено, почему иногда выгодно на клиентских машинах иметь ресурсы для установки, то есть делать их серверами ресурсов.


Например, LPAR3 является не только клиентом MASTER'a, но и сервером ресурсов. Предполагается, что когда на мастере инициируют установку на LPAR1 или LPAR2, ресурсы лучше всего брать с LPAR3, а не с самого MASTER, так как виртуальная сеть внутри большой машины, очевидно, быстрее.
А вот и основные ресурсы:

Описание ресурсов:

MACHINE:  это одна из машин среды ним. Как видите, каждая машина должна регистрироваться как ресурс на NIM master. Собственно сам master - такой же ресурс, зарегистрированный сам на себе =). Бывает несколько типов ресурса MACHINE. Нам понадобятся только 2 из них:
        - master
        - standalone (именно такими и будут все остальные машины)
Остальные относятся к бездисковым системам, чье применение здесь сомнительно.

NETWORK: у NIM master может быть несколько сетевых адапретов, подключеных к разным broadcast доменам. Каждая сеть - ресурс NETWORK - должна быть определена в конфигурации master'a.

BOOT:  то, с чего начинается загрузка клиента для установки на него AIX. Создавать этот ресурс не нужно. Он делается автоматически в каталоге /tftpboot для каждого клиента на время установки. Клиент по простейшему протоколу bootp запрашивает имя этого файла => NIM его сообщает => клиент выкачивает файл по tftp и грузится с него. Фактически внутри находится ядро AIX и программа его распаковки в RAM.

SPOT:  Shared Product Object Tree. Это маленьких /usr. Тут все необходимые для процесса установки программы. При установке AIX нужно будет создавать rootvg и логические тома в ней, создавать и проверять файловые системы и еще много всего.
Этот /usr самодостаточен и в сочетании с BOOT превращается в своего рода miniAIX в оперативной памяти.
После загрузки из BOOT, клиент монтирует SPOT по NFS (NFS kernel extentions в BOOT присутствуют).
SPOT можно создать из LPP_SOURCE или MKSYSB.

LPP_SOURCE: это пакеты для установки - любые пакеты, которые можно установить в AIX в любом количестве. В нашем случае (напомню, мы пока ставим сам AIX) нужен весь bos - base operating system, то есть все пакеты с диска-дистрибутива.

MKSYSB: системный backup AIX в формате файла (делается командой mksysb)

На NIM бывает еще много ресурсов, но, дабы не усложнять, ограничимся пока этими.



-------------------------------------
СОЗДАНИЕ NIM Master:
-------------------------------------

Для создания master'а нам прежде всего понадобится свежий только_что_установленный AIX. Самый свежий, какой вы можете себе позволить установить. Дело в том, что таковы требования к NIM master - он должен быть новее любого своего клиента.
Вот он, моргает курсором:

#
а вот он же, после установки ssh и bash (это же AIX)):

{nim} / # oslevel -s
7100-01-05-1228
{nim} / #

Далее, с дистрибутива AIX (с первого диска) нужно установить пакет bos.sysmgt.nim.master  

через SMIT




или командой
installp -agXd /dev/cd0 bos.sysmgt.nim.master
где cd0 - дисковод с первым диском дистрибутива AIX.
Проверим после установки:


{nim} / # lslpp -l | grep nim bos.sysmgt.nim.client 7.1.1.16 COMMITTED Network Install Manager -
bos.sysmgt.nim.master 7.1.1.16 COMMITTED Network Install Manager -
bos.sysmgt.nim.spot 7.1.1.15 COMMITTED Network Install Manager - SPOT
bos.sysmgt.nim.client 7.1.1.16 COMMITTED Network Install Manager -

Я немного слукавил здесь. На самом деле, чтобы пакеты NIM тоже были самыми свежими, как и AIX, я сначала установил их, а потом обновил ось до версии 7100-01-05-1228.

Итак, мы поставили свежий AIX [, поднастроили поудобнее], поставили пакет bos.sysmgt.nim.master - и пока больше ничего не делали. Дальше нужно инициализировать среду NIM. Для этого есть 2 пути: относительно длинный и ручной; и короткий автоматический. Ясное дело, короткий путь заманчивее, но для красоты опишу оба. В обоих случаях мы получим настроенный NIM master, готовый к установке на клиент системного бекапа или дистрибутива AIX.

Предполагается, что наш NIM master одновременно и resource server, то есть все ресурсы для установки лежать будут на нем. Сеть настроена на интерфейсе en0. Имена в сети резолвятся через /etc/hosts (это стронгли рекомендед). Заставить машину использовать локальный резолв  хостов можно несколькими способами (перечислены по силе действия от самого сильного):

  • добавить в /etc/environment строку
    NSORDER=local, bind
  • добавить в /etc/netsvc.conf строку
    hosts=local, bind
  • добавить в файл /etc/irs.conf пару строк
    hosts local continue
    hosts dns
Итак...
************************************************
СПОСОБ 1. Он же длинный, чтобы сохранить интригу.

************************************************


Поскольку ресурсы, отдаваемые NIM'ом, будут много весить и доставляться клиентам по TFTP (trivial FTP) и NFS, то удобно создать отдельные файловые системы под все виды ресурсов.

ШАГ 1.

{nim} / # crfs -v jfs2 -g rootvg -a size=64M -m /tftpboot -A yes -p rw -a logname=INLINE
{nim} / # crfs -v jfs2 -g rootvg -a size=4G -m /export/lpp_source -A yes -p rw -a logname=INLINE
{nim} / # crfs -v jfs2 -g rootvg -a size=1G -m /export/spot -A yes -p rw -a logname=INLINE
{nim} / # crfs -v jfs2 -g rootvg -a size=6G -m /export/images -A yes -p rw -a logname=INLINE

Пути /tftpboot и /export стандартны для NIM. Есть несколько команд конфигурирования, которые без спроса используют именно эти пути. Одна из них нам понадобится прямо сейчас (все же не хочется идти по самому длинному пути и делать ну вообще все вручную).
Это nimconfig - она создает несколько первых объектов среды NIM:

  • определяет текущую машину как master 
  • делает ресурс boot в /tftpboot
  • создает объект network
  • создает объект nim_script в /export/nim/scripts
  • запускает сервисы nimesis и nimd на созданном master

ШАГ 2.

{nim} / # nimconfig -a netname=net_192_168_1 -a pif_name=en0 -a netboot_kernel=mp -a cable_type=tp -a client_reg=no
0513-071 The nimesis Subsystem has been added.
0513-071 The nimd Subsystem has been added.
0513-059 The nimesis Subsystem has been started. Subsystem PID is 10944750.
{nim} / #

Или через SMIT - smit nimconfig:


Убедиться в том, что объекты появились, можно командой lsnim - она показывает все, что создавалось в NIM. Посмотреть конкретный объект - ключ -l:

{nim} / # lsnim
master                 machines        master
boot                   resources       boot
nim_script             resources       nim_script
net_192_168_1          networks        ent
{nim} / #
{nim} / # lsnim -l nim_script
nim_script:
   class       = resources
   type        = nim_script
   comments    = directory containing customization scripts created by NIM
   Rstate      = ready for use
   location    = /export/nim/scripts
   alloc_count = 0
   server      = master
   reserved    = yes
{nim} / #

ШАГ 3.
Далее в файлах  /etc/inetd.conf и /etc/services находим строки, относящиеся к bootp и tftp и раскомментариваем их если необходимо. По умолчанию inetd не запускает эти сервисы.

{nim} / # egrep -w 'bootps|tftp' /etc/inetd.conf #bootps  dgram   udp     wait    root    /usr/sbin/bootpd   bootpd /etc/bootptab
#tftp    dgram   udp6    SRC     nobody  /usr/sbin/tftpd    tftpd -n
{nim} / # 
{nim} / # egrep -w 'bootps|tftp' /etc/services
bootps                  67/tcp         # Bootstrap Protocol Server
bootps                  67/udp         # Bootstrap Protocol Server
tftp                    69/udp         # Trivial File Transfer
tftp                    69/tcp         # Trivial File Transfer
............Cropped............
{nim} / # 

В моем случае раскомментарить bootps и tftp пришлось только в файле /etc/inetd.conf
Убрав # в ненужных местах, сохраняем файлы и рестартуем inetd

{nim} / # refresh -s inetd
0513-095 The request for subsystem refresh was completed successfully.
{nim} / #

Убеждаемся, что они запустились

{nim} / # lssrc -ls inetd | egrep 'bootps|tftp'
bootps    /usr/sbin/bootpd        bootpd /etc/bootptab     active
tftp      /usr/sbin/tftpd         tftpd -n                 active
{nim} / #

Еще один момент, связанный с tftp. Поскольку этот протокол не предусматривает никакой аутентификации, то, безопасности ради и красоты для, ограничим его только файловой системой  /tftpboot, написав в файл /etc/tftpaccess.ctl соответствующую строчку. Это не обязательно, но правильно. Должно быть так:

{nim} / # cat /etc/tftpaccess.ctl
#NIM access for network boot
allow:/tftpboot
{nim} / #

Если такого файла нет вообще, то создайте его.
Вообще, про эти сервисы и про то как их дебажить написано в этой книжке с страницы 66

Коль скоро NIM нам нужен для установок, а не "чтобы было"; нужно создать несколько ресурсов для установки. Для начала (первой статьи, которая и так далась не легко) ставить будем AIX, причем двумя способами - из системного бэкапа и из дистрибутива.

ШАГ 4.

Для установки потребуется как минимум (см. "Описание ресурсов" сверху):

  • boot (явно создавать и явно назначать клиенту не нужно - NIM сделает все сам)
  • nim_script (то же самое)
  • spot
  • lpp_source или mksysb 

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

{nim} / # nim -o define -t lpp_source -a server=master -a location=/export/lpp_source/lpp71_00_01 -a source=/dev/cd0 lpp71_00_01
Preparing to copy install images (this will take several minutes)...
/export/lpp_source/lpp5300/sysmgtlib.libraries.apps.5.3.0.40.U
. . .
Now checking for missing install images...
All required install images have been found. This lpp_source is now ready.

/dev/cd0                                            где взять
server=master                                   кто будет resource server'ом
/export/lpp_source/lpp71_00_01      куда положить на выбранном server
lpp71_00_01                                    как назвать

или через SMIT

smit nim -> Perform NIM Administration Tasks -> Manage Resources -> Define a Resource -> lpp_source
или просто smit nim_mkres -> lpp_source




Теперь у нас есть новый ресурс:

{nim} / # lsnim -l lpp71_00_01
lpp_71_00_01:
   class       = resources
   type        = lpp_source
   arch        = power
   Rstate      = ready for use
   prev_state  = ready for use
   location    = /export/lpp_source/lpp71_00_01
   simages     = yes
   alloc_count = 18
   server      = master
{nim} / #
SPOT можно (и нужно) сделать из него:

{nim} / # nim -o define -t spot -a server=master -a location=/export/spot -a source=lpp71_00_01 -a installp_flags=-aQg spot71_00_01_rte
Creating SPOT in "/export/spot" on machine "master" from "lpp71_00_01" ...
Restoring files from BOS image. This may take several minutes ...
Installing filesets ...
..............cropped.............
{nim} / # 

или smit nim_mkres -> spot



rte установку (из дистрибутива) уже можно делать, используя lpp71_00_01 и spot71_00_01_rte

MKSYSB
Для ресурса mksysb понадобится системный бэкап сделаный на понравившемся вам AIX командой mksysb в файл. Именно в файл, а не в iso, например. Далее регистрируем его в NIM master:
{nim} / # nim -o define -t mksysb -a server=master -a location=/resources/images/mk71_00_01 mk71_00_01
/resources/images/mk71_00_01      место расположения на server
mk71_00_01                                   как назвать ресурс (в lsnim будет так отображаться)

или smit nim_mkres -> mksysb



обратите внимание, что в отличие от создания lpp_source, здесь не нужно указывать источник (source). Сам location - это уже скопированный в это место файл mksysb.
Есть и другой вариант, когда mksysb создается на NIM непосредственным резервным копированием одного из клиентов, но этим мы займемся в другой раз.

SPOT должен соответствовать версии AIX, которая будет разворачиваться на клиенте из lpp_source или mksysb. Поэтому для нашего mk71_00_01 нужно сделать свой SPOT с блэкджеком и танцовщицами:

для разнообразия через smit 
smit nim_mkres -> spot

Вооот. Теперь у нас есть два варианта установки клиентов - rte и mksysb.





************************************
СПОСОБ 2. Он же неприлично короткий.
************************************

Наверняка многие слышали про EZNIM - или NIM Easy Setup. Так вот, он слишком много сразу хочет сделать (загляните в smit nim_config или man nim_config). В качестве одного из этапов, эта программа запускает скрипт под названием nim_master_setup - вот он то нам и нужен! Кстати man по нему тоже есть. Он сделает следующее:

1. Если у вас уже есть файловые системы в /export/nim, то возьмет их. Если нет, то создаст в rootvg (при наличии в ней достаточного пространства) или в VG, создаваемой согласно одному из параметров ключа -a:

  • volume_group=vg_name - имя уже существующей VG, в которой нужно создавать файловые системы
  • file_system=fs_name  - уже созданная вами FS (которая находится в уже созданной VG)
  • disk=disk_name  - свободный диск, на котором создастся VG, в которой создастся FS
  • если ни один параметр не задан, то будет использован первый свободный диск, а если таковых нет, то rootvg.

2. Создает системный бекап самого master и делает его своим же ресурсом. Избежать этого можно ключом -B.

3. Создаст lpp_source с устройства (например /dev/cd0) или каталога указанного в параметре -a device=dev_name. Если параметр не указан, то скрипт спросит о месте расположения источника для lpp_source во время исполнения. Не создавать lpp_source можно с ключом -L.
Напомню, что источником для lpp_source для установки AIX может являться содержимое установочного диска, а где оно лежит - на диске или в папке - не особо важно.

4. Создает ресурс SPOT из lpp_source. Использовать этот же SPOT при развертывании созданного во втором пункте mksysb возможно, если у них не отличается номер TL (Technology Level) и SP (ServicePack). Вообще у меня создался только один SPOT, видимо, потому что версии AIX в lpp_source и в mksysb идентичные.

5. и еще чуть чуть =)

И все! Если команда отработала, то NIM environment настроился, нужные строчки в нужных файликах раскомментарились, и ресурсы для устновки создались.
{nim} / # lsnim
master                       machines        master
boot                         resources       boot
nim_script                   resources       nim_script
master_net                   networks        ent
7100-00master_sysb           resources       mksysb
7100-00bid_ow                resources       bosinst_data
710lpp_res                   resources       lpp_source
710spot_res                  resources       spot
basic_res_grp                groups          res_group
{nim} / #

----------------------------------------------------------
Далее опишу саму установку AIX с NIM.
----------------------------------------------------------

Есть два метода - push и pull. Первый позволяет инициировать установку с NIM master и требует дополнительных телодвижений. Рассмотрим его в другой раз.

PULL Установка.

Независимо от того какой способ настройки NIM вы использовали СПОСОБ1 или СПОСОБ2, дальнейшие шаги будут одинаковыми.

1. Наш master ничего не знает о клиентах, но очень этого хочет.
Зарегистрируем какого-нибудь клиента.

2. Скажем NIM master, что этому клиенту надо экспортировать ресурсы и уточним какие (аллоцируем ресурсы)

3. Разрешим загрузку (сделаем фактический экспорт ресурсов)

4. Загрузим клиента в pull установку через SMS-меню.

И... начали

Один:

Добавим клиента в /etc/hosts
{nim} / # echo "192.168.1.21 lpar1" >> /etc/hosts
А теперь зарегистрируем его в NIM master
{nim} / # smit nim
 -> Perform NIM Administration Tasks -> Manage Machines -> Define a Machine  -> Host Name of Machine  [lpar1] ->
Из консоли то же самое можно сделать так:
{nim} / # nim -o define -t standalone  -a if1="master_net lpar1 0" -a cable_type1="tp" -a platform="chrp" lpar1
{nim} / #
Получилось так:
{nim} / # lsnim -l lpar1
lpar1:
   class          = machines
   type           = standalone
   connect        = shell
   platform       = chrp
   netboot_kernel = 64
   if1            = master_net lpar1 0
   cable_type1    = tp
   Cstate         = ready for a NIM operation
   prev_state     = ready for a NIM operation
   Mstate         = not running
{nim} / #

Два:

{nim} / # smit nim
 -> Perform NIM Administration Tasks -> Manage Machines -> Manage Network Install Resource Allocation -> Allocate Network Install Resources -> lpar1 ->
Или из консоли:
{nim} / # nim -o allocate -a spot=710spot_res -a lpp_source=710lpp_res lpar1

{nim} / # lsnim -l lpar1
lpar1:
   class          = machines
   type           = standalone
   connect        = shell
   platform       = chrp
   netboot_kernel = 64
   if1            = master_net lpar1 0
   cable_type1    = tp
   Cstate         = ready for a NIM operation
   prev_state     = ready for a NIM operation
   Mstate         = not running
   lpp_source     = 710lpp_res
   spot           = 710spot_res
   control        = master
   Cstate_result  = reset
{nim} / #
Три:

{nim} / # smit nim
 -> Perform NIM Administration Tasks -> Manage Machines -> Perform Operations on Machines ->
lpar1 -> bos_inst ->

Или:
{nim} / # nim -o bos_inst -a boot_client=no -a accept_licenses=yes lpar1
{nim} / # lsnim -l lpar1
lpar1:
   class          = machines
   type           = standalone
   connect        = shell
   platform       = chrp
   netboot_kernel = 64
   if1            = master_net lpar1 0
   cable_type1    = tp
   Cstate         = BOS installation has been enabled
   prev_state     = ready for a NIM operation
   Mstate         = not running
   boot           = boot
   lpp_source     = 710lpp_res
   nim_script     = nim_script
   spot           = 710spot_res
   control        = master
{nim} / #
Пункт "Source for BOS Runtime Files" может иметь занчения rte, mksysb и spot. Первые два для соответствующей установки. Последний - только для загрузки в maintainance mode.

Все! Можно загружаться.

Четыре.

Как включить lpar в SMS меню, вы наверняка знаете. Сделаем это из CLI HMC:
hscroot@hmc:~> chsysstate -m BENDER -r lpar -n lpar1 -f normal -o on -b sms
hscroot@hmc:~> mkvterm -m BENDER -p lpar1
Наш путь по меню будет такой:
2.   Setup Remote IPL (Initial Program Load) =>
          ?.  Выбираем сетевой адаптер, видящий нужную сеть =>
                    1.   IPv4 - Address Format 123.231.111.222          =>
                               1.   BOOTP  =>
                                          1.   IP Parameters =>
(после настройки нужных параметров можно пингануть NIM master {Server IP}, нажав Esc => 3 => 1)

Жмем "M", чтобы вернуться в главное меню. Затем:

5.   Select Boot Options =>
       1.   Select Install/Boot Device  =>
              6.   Network =>
                      1.   BOOTP  =>
                             ?.    Выберите сетевуху, которую настраивали выше =>
                                     2.   Normal Mode Boot =>
                                            1.   Yes   =>

Результат должен быть таким:
Ой спалился! файл BOOT называется у меня /tftpboot/t1n1. Ну вы понимаете, по моим действиям выше, он должен называться /tftpboot/lpar1. NIM его конечно же по IP адресу подставляет.
Если загрузка не удалась, пишите в комменты - подебажим.

Сбросить ресурсы с клиента можно так:

{nim} / # smit nim
 -> Perform NIM Administration Tasks -> Manage Machines -> Perform Operations on Machines ->
lpar1 -> reset ->
Или так:
{nim} / # nim -o reset -a force=yes lpar1;nim -Fo deallocate -a subclass=all lpar1
{nim} / # lsnim -l lpar1
lpar1:
   class          = machines
   type           = standalone
   connect        = shell
   platform       = chrp
   netboot_kernel = 64
   if1            = master_net lpar1 0
   cable_type1    = tp
   Cstate         = ready for a NIM operation
   prev_state     = BOS installation has been enabled
   Mstate         = not running
   Cstate_result  = reset
{nim} / # 
Вот, собственно, и все!

Если не любите меню SMS, то вам сюда =>lpar_netboot или как не влипнуть в меню SMS<=

Хочется добавить пару слов по поводу *****СПОСОБОВ***** 1 и 2:

- Если вам нужен красиво сконфигурированный NIM master надолго, и вы хотите сами управлять названиями ресурсов и файловых систем, то вам нужен СПОСОБ 1.
- Если же NIM вы поднимаете для каких-то сиюминутных задач, то СПОСОБ 2 может оказаться предпочтительнее, ведь он и правда состоит из одной команды nim_master_setup.


Открываю шампанское... Этот материал был в черновике уже с полгода =)
Гуд лак!



Читать дальше......

понедельник, 2 апреля 2012 г.

Сколько вешать в мегабайтах или VIOS Advisor tool

Зачастую вопрос сайзинга VIOS весьма затруднителен. Ну как же: я доверил виосу, нет, даже двум, обеспечивать мои LPAR'ы дисками и сетью, но как заранее узнать сколько для этого потребуется процессоров и памяти, какие процессоры брать - Dedicated или из Shared pool'а и какой вес задать в случае режима Shared+Uncapped.

Как обычно ответа нет. Ну вернее точного ответа нет. Есть некие формулки по которым можно прикинуть сколько нужно процессоров и памяти для обслуживания виртуального SCSI и SEA и даже с примерами рассчета. Вы можете найти их вот здесь, на инфоцентре по ключевой фразе "planning for the Virtual I/O Server".
Если в кратце, то там дают вот такую табличку.

А потом говорят: Вот, предположим, 5 ваших LPAR'ов хотят виртуальные scsi диски и чтоб по 2000 восьмикилобайтных iops'ов каждый - тогда вам надо 47 000 * 2000 * 5 / 1 650 000 000 = 0.29 ProcessingUnit'ов или PrU. И это для Power5 1.65 GHz. Теперь лихо в знаменателе заменяем 1.65GHz на 4.2GHz (ну мол код то тот же и тактов надо столько же, но у Power6 или 7 тактов в секунду случается больше) и получаем цифру 0.1 PowerШесых PrU.

Для Shared Ethernet Adapter'а там дается схожая схема. Применяем и ее, суммируем полученные данные, накидываем еще немного процессоров (сколько не жалко, чтобы получилось не страшно) и вот он, вот ОН САЙЗИНГ нашей мечты! Допустим получилось 0.7 PrU PowerСедьмого. Некоторые скажут - ну так и отдайте один целый Dedicated процессор!
Почему-то мне больше симпатична мысль сделать VIOS в shared pool'е в режиме Uncapped  с весом, большим чем у других, особенно у тех LPAR'ов которых он обслуживает (ну чтоб он успевал обслужить их, а не они его успевали перегрузить).

С памятью все значительно проще. Вам просто хватит 1GB. И это даже почти не шутка. Вообще, если верить текущей рекомендации, то нужно 3.7 - 4GB Сюда, по всей вероятности заложены возможные нагрузки на VIOS, если он используется для Active Memory Sharing и Live Partition Mobility. И если второе у вас еще и может быть, то в наличии первого я сильно сомневаюсь. В любом случае начать есть с чего.

Именно начать, так как полученные нами величины, это только способ не брать числа с потолка. Дальше мы конечно будем наблюдать на VIOS'е за утилизацией процессоров и за занятой памятью, за очередями к настоящим дискам и за производительностью SEA.
И добавлять... добавлять процессоры и память по мере необходимости.

Вот тут то к нам и приходит интересное средство для... скажем так - постсайзинга. Разработано Nigel'ом Griffiths'ом и называется VIOS Advisor Tool.
Инструмент собирает на работающем VIOS'е метрики утилизации, размеры очередей и т.п., и на основе собранных данных выносит некоторые рекомендации.
Итак, не будем тянуть. От нас требуется следущее:

1. Качаем vios_advisor.zip (Windows, MacOS, Linux...AIX - куда хотите! лишь бы был браузер) и распаковываем его
2. Находим в распакованном файл vios_advisor и копируем в VIOS. Например, так:
scp <folder_with_advisor>/vios_advisor   padmin@<vios_ip>:/home/padmin
3. Идем на VIOS и переходим в root'а командой oem_setup_env
4. Убедившись, что есть права на исполнение запускаем vios_advisor:

# ./vios_advisor 30&

где 30 - это время сбора данных в минутах.
можно запускать на время от 5 до 1440 (24 часа) минут. Рекомендуют интервал в 30.
Программа абсолютно молчалива и после себя оставляет только файлик vios_advisor.xml. Вот его-то мы и тащим обратно на тот хост, где распаковывали vios_advisor.zip, в тот же каталог. Если там уже есть файл с таким именем, то просто заменяем его. Дело за малым:

5. Открываем файл vios_advisor.xml в браузере и видим



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


Приведу еще пару скринов





По-моему, мило =)

Очевидно, многие рекомендации инструмент выдает не на основе измерений, а исходя из некоего best practice. Например, памяти в 3.7GB для этого конкретного VIOS'а явно многовато. Тем не менее НЕ воспользоваться vios_advisor просто как-то странно и неправильно - все очень просто и понятно, а уж делать что-то потом с VIOS'ом или нет, дело ваше.

Кстати, вот тут говорят, что оверхеда от программки копейки:


Попробуйте на своих VIOS'ах, и если не трудно отпишитесь о результатах. Напомню, что анонимные коментарии оставлять можно - регистрация не нужна.
Если что, я не виноват =)

Читать дальше......

вторник, 27 декабря 2011 г.

липкий смит

Часто спрашивают есть ли какой-то список fastpath'ов для SMIT'а. Приходится пожимать плечами и отсылать к гуглу.
Вот загуглил сам в кои то веки.

Список, ясное дело, неполный. Но у вас всегда остается кнопка F8 как средство узнать fastpath диалога, в котором вы находитесь.

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

Огромное количество людей пользуется интерпретатором bash. Чуть меньше людей знают про существование bash_completion (спасибо, Дмитрий). Собственно вот и задача: заставить bash дополнять команду smit необходимым fastpath'ом. Например так:

bash#: smit ls[TAB]

lsattr    lsfs      lslv      lsmntdsk  lsrole    lsvg      lsvg2
lsbackvg  lsgroup   lsmksysb  lspv      lsuser    lsvg1     
bash#: smit ls

или

bash#:  smit ins[TAB]
bash#:  smit install[TAB][TAB]
install            install_bundle     install_update     
install_all        install_latest     installed_license 

Итак, нам понадобится bash (я беру его здесь) и bash_completion (дают тут).

Предположим, мы скачали bash-4.2-5.aix5.1.ppc.rpm и положили в /tmp нашего AIX.
Поставим его:

ksh#:  rpm -ihv /tmp/bash-4*
bash                        ##################################################
ksh#:

Здесь же, в /tmp, у нас лежит bash-completion-1.3.tar.bz2.
Из всего архива нам понадобится только скрипт bash_completion

ksh#: cd /tmp
ksh#: bunzip2 bash-completion-1.3.tar.bz2
ksh#: tar -xvf bash-completion-1.3.tar
ksh#: cp /tmp/bash-completion-1.3/bash_completion /etc

Вот и вся установка. Или почти вся - еще надо заставить скрипт bash_completion запускаться при старте bash. README в нашем /tmp/bash-completion-1.3 говорит:


INSTALLATION

------------

The easiest way to install this software is to use a package; it is available

in many operating system distributions.  The package's name is usually

bash-completion.  Depending on the package, you may still need to source it

from either /etc/bashrc or ~/.bashrc (or any other file sourcing those). You

can do this by simply using:

# Use bash-completion, if available
if [ -f /etc/bash_completion ]; then
  . /etc/bash_completion
fi

Звучит логично - ведь при старте bash выполняется .bashrc. То есть наша задача положить строки 

if [ -f /etc/bash_completion ]; then
  . /etc/bash_completion
fi

в файл .bashrc в домашнем каталоге нужного пользователя (у нас это как обычно root =).
Обратите внимание на пробел между "." и "/etc/bash_completion" - он есть!

Вы можете проверить исполнение скрипта при старте bash просто запустив команду set до и после старта bash. Во втором случае set будет выдавать много функций типа:

quote_readline () 
    local quoted;
    _quote_readline_by_ref "$1" ret;
    printf %s "$ret"
}

Если bash при старте не выдал ошибок и set показывает новые переменные и функции, то bash_completion успешно проинициализировался. Ура!  Если нет - не ура - пишите, разберемся.

Официальный мануал по bash в разделе

8.6 Programmable Completion


рассказывает что при запуске bash_completion выполняется все что лежит в каталоге /etc/bash_completion.d/

Это так называемые COMPSPEC'и - или функции, создающие completion-списки для разных программ. Ксати, когда мы расTARили bash-completion-1.3.tar в /tmp/bash-completion-1.3 появился каталог completions с COMPSPEC'ами для разных утилит - нужные вам можно задействовать скопировав их в /etc/bash_completion.d/



Нам же нужно написать свой COMPSPEC для smit. Но перед этим выполним некоторые подготовительные шаги:



bash#: mkdir /etc/bash_completion.d

bash#: mkdir /etc/bash_completion.d/smit

Качаем файл smit_fastpaths (в нем список fastpath'ов в одну строку, разделенных пробелами), и помещаем его в /etc/bash_completion.d/smit. Напомню, что все в каталоге /etc/bash_completion.d будет исполняться, и, поместив файл с fastpath'ами в подкаталог,  мы защитили его от этого. Вы можете дополнять этот файл своими fastpath'ами.

Далее пишем собственно COMPSPEC и кладем его в /etc/bash_completion.d:
(название любое, право на исполнение не требуется)

bash#: cat /etc/bash_completion.d/smit.sh
_smit()
{
        local args
        args=$(cat /etc/bash_completion.d/smit/smit_fastpaths)
        COMPREPLY=( $(compgen -W "${args}" "${COMP_WORDS[COMP_CWORD]}") )
}
complete -F _smit smit 
bash#:

Думаю нужны некоторые пояснения.
Согласно Bash-Variables:

COMPREPLY
An array variable from which Bash reads the possible completions generated by a shell function invoked by the programmable completion facility
То есть сюда генерируется список дополнений. Массив.

COMP_WORDS
An array variable consisting of the individual words in the current command line. The line is split into words as Readline would split it, using COMP_WORDBREAKS as described above. This variable is available only in shell functions invoked by the programmable completion facilities
А тут уже введенная пользователем строка из массива слов.



COMP_CWORD
An index into ${COMP_WORDS} of the word containing the current cursor position. This variable is available only in shell functions invoked by the programmable completion facilities
Номер слова в COMP_WORDS, на котором стоит курсор в командной строке.


complete

          complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist]
          [-F function] [-C command] [-X filterpat]
          [-P prefix] [-S suffix] name [name ...]
          complete -pr [-DE] [name ...]

Specify how arguments to each name should be completed. Собственно дополняет введенную команду одним из способов. У нас name - это smit, а способ дополнения - функция _smit().



compgen

          compgen [option] [word]
Generate possible completion matches for word according to the options, which may be any option accepted by the complete builtin with the exception of -p and -r, and write the matches to the standard output. Генерирует список дополнений. Ключи те же. Мы используем -W с указанием всего списка вариантов дополнения из файла smit_fastpaths.

Кажется все! Осталось перезапустить shell.


Примерно таким же макаром вы теперь можете дополнять любые команды.
Искушенный читатель может сказать, что нам вовсе не нужен скрипт bash_completion из TAR архива. И будет прав! По сути, все, что приносит нам этот скрипт - это функции для более качественного разбора командной строки, ну и еще несколько мелочей (не поленитесь, загляните в него). Кроме того, это уже написанные COMPSPEC'и для целой кучи команд. То есть мы с вами рассмотрели как добавить функционал дополнения smit в общем случае (кстати, файл smit_fastpaths читатся каждый раз при нажатии [TAB], а значит его можно менять не перезапуская bash).
Если вы решили не пользоваться благами цивилизации в виде bash_completion, то можете просто написать в $HOME/.bashrc что-то вроде:


list=$(cat /home/smit_fastpaths)
complete -W "$list" smit


Это, безусловно, очень статичный метод, но вполне рабочий (не проверял =)


P.S. Напрашиваются дополнения к командам в VIOS'е. Если вам интересно - пишите, попробуем реализовать.


Читать дальше......