Обновление биоса через IPMI, часть 2

Я тут вроде как недавно писал про то, как создать iso-образ для обновления, но в процессе использования этой инструкции мои коллеги столкнулись с проблемой: на некоторых матерях\серверах все доходит до запуска прошивальщика, но он необычно быстро «что-то делает» (буквально за 30 секунд вместо привычных 5 минут) и автоматом ребутает сервер, версия биоса при этом естественно не обновляется.

Мои коллеги решили эту проблему в лоб: пишем тот же образ на флешку, идем к серверу, грузимся с флешки и все проходит штатно.
А на это посмотрел, пожал плечами и сказал «ну раз вас все устраивает — не буду мешать».

В общим коллеги поувольнялись, а мне приспичило вот обязательно обновить биос на одном, отдельно взятом сервере. Я взял тот свой образ, по своей инструкции положил на него нужные файлики, собрал iso, написал «flash.bat прошивка.bin», начался процесс, похожий на стандартную прошивку, я пошел за кофе, а вернувшись меньше чем через минуту увидел на экране уже загружающийся сервер. Сразу вспомнил своих коллег с флешкой, зашел в биос и убедился что ничего не обновилось, расстроился, но делать флэшку категорически нехотелось (ведь у меня нет правильной инструкции для этого).

Загрузился еще раз со своего образа, запустил батник еще раз, внимательно посмотрел на то, что происходил, попытался вдумчиво прочитать и осознать вывод, но сервер опять ушел в ребут. Третий раз забутался с образа (благо сервер не на «5 минут из продакшена для обновления выводили», а планировали пустить в эксплуатацию позже), запустил батник, и вместо вдумчивого чтения вывода занялся тыканьем в PrtSc, потом спокойно почитал текст со скринов, понял что прошивальщику не нравиться некий FDT. Опросил всех вокруг и выяснил что никто про такое не слышал. Почитал еще более внимательно скрины и догадался что это «Flash Descriptor Table», про который снова никто ничего не слышал и не знает. Загуглил пару досовских команд, еще раз посмотрел в .bat-файл и прозрел.

Эти «странные» люди из супермикры командой fdt (полностью команду не привожу, боюсь что ее параметры могут плавать от версии к версии) меняют файл c:\autoexec.bat (и это при том, что в Readme рядом с прошивкой написанно: «2. extract the files from the BIOS package to a DOS bootable device (such as a bootable USB stick, or CD«) и ребутаются даже не задумываясь о том, что дос этот может работать из оперативки загружаясь каждый раз с RO хранилища.

Проблема решается тем, что перед командами

yukra-ThinkPad-X230 data # umount /mnt
yukra-ThinkPad-X230 data # gzip fdboot.img 
yukra-ThinkPad-X230 data # mv fdboot.img.gz fdboot.img

(смотри ссылку выше) мы приводим файл autoexec.bat к виду

cd c:\BIOS\X11SSH-F
flash.bat x11ssh7.309

(естественно с поправкой на ваши версии и пути).

После этого все загрузилось и прошилось.
И да, сервер лежал в трех метрах от меня и все это время гудел куллерами :)

Q-Logic 5800 / 5802 — поиск порта по WWN

Поскольку редко пользуюсь, постоянно забываю как это делается.
Собственно у нас есть некое устройство, мы хотим найти порт, в который физически подключено оно, но не хотим лазить по ЦОДу и отслеживать оптику глазками, а маркировке мы не доверяем.
Первое — нужно узнать WWN устройства, например на HUAWEI S2200T:

admin:/> showfcmode 
============================================================================================================
                                           FC Port Topology Mode
------------------------------------------------------------------------------------------------------------
  Controller ID    Interface Module ID    Port ID    WWN                 Current Mode      Configured Mode  
------------------------------------------------------------------------------------------------------------
  A                0                      P0         2000d4b110ae8525    Loop              AUTO             
  A                0                      P1         2001d4b110ae8525    Point to Point    AUTO             
  A                0                      P2         2002d4b110ae8525    Point to Point    AUTO             
  A                0                      P3         2003d4b110ae8525    Loop              AUTO             
  B                0                      P0         2010d4b110ae8525    Loop              AUTO             
  B                0                      P1         2011d4b110ae8525    Point to Point    AUTO             
  B                0                      P2         2012d4b110ae8525    Point to Point    AUTO             
  B                0                      P3         2013d4b110ae8525    Loop              AUTO             
============================================================================================================

или HUAWEI 5300 V3:

admin:/>show port general physical_type=FC

  ID              Health Status  Running Status  Type       Working Rate(Mbps)  WWN               Role         Working Mode  Configured Mode  Enabled  
  --------------  -------------  --------------  ---------  ------------------  ----------------  -----------  ------------  ---------------  -------  
  CTE0.A.IOM0.P0  Normal         Link Up         Host Port  8000                2000f098388a53d6  INI and TGT  Fabric        Auto-Adapt       Yes      
  CTE0.A.IOM0.P1  Normal         Link Down       Host Port  --                  2001f098388a53d6  INI and TGT  --            Auto-Adapt       Yes      
  CTE0.A.IOM0.P2  Normal         Link Down       Host Port  --                  2002f098388a53d6  INI and TGT  --            Auto-Adapt       Yes      
  CTE0.A.IOM0.P3  Normal         Link Down       Host Port  --                  2003f098388a53d6  INI and TGT  --            Auto-Adapt       Yes      
  CTE0.B.IOM0.P0  Normal         Link Up         Host Port  8000                2010f098388a53d6  INI and TGT  Fabric        Auto-Adapt       Yes      
  CTE0.B.IOM0.P1  Normal         Link Down       Host Port  --                  2011f098388a53d6  INI and TGT  --            Auto-Adapt       Yes      
  CTE0.B.IOM0.P2  Normal         Link Down       Host Port  --                  2012f098388a53d6  INI and TGT  --            Auto-Adapt       Yes      
  CTE0.B.IOM0.P3  Normal         Link Down       Host Port  --                  2013f098388a53d6  INI and TGT  --            Auto-Adapt       Yes      
admin:/>

Смотрим нужные нам WWN, заходим на qlogic, первый делом убеждаемся что порт вообще в этой фабрике:

SANbox-2 #> fcping 2001d4b110ae8525 count 5

  28 bytes from local switch to 20:01:d4:b1:10:ae:85:25  time = 2000 usec
  28 bytes from local switch to 20:01:d4:b1:10:ae:85:25  time = 2000 usec
  28 bytes from local switch to 20:01:d4:b1:10:ae:85:25  time = 2000 usec
  28 bytes from local switch to 20:01:d4:b1:10:ae:85:25  time = 2000 usec
  28 bytes from local switch to 20:01:d4:b1:10:ae:85:25  time = 1000 usec

SANbox-2 #> 

Теперь делаем «show ns all», копируем вывод в текстовый файлик и ищем наш WWM, запоминаем id порта и домена.

SANbox #>  show ns all 

  Seq Domain     Port   Port
  No  ID         ID     Type COS PortWWN                 NodeWWN
  --- ------     ------ ---- --- -------                 -------
  1   1 (0x1)    010100 N    3   20:00:f0:98:38:8a:53:f3 21:00:f0:98:38:8a:53:f3
  2   1 (0x1)    010200 N    3   21:00:00:24:ff:89:ce:3b 20:00:00:24:ff:89:ce:3b
  3   1 (0x1)    010300 N    3   21:00:00:24:ff:89:cb:e4 20:00:00:24:ff:89:cb:e4
  4   1 (0x1)    010400 N    3   21:00:00:24:ff:77:56:82 20:00:00:24:ff:77:56:82
  5   1 (0x1)    010500 N    3   21:00:00:24:ff:77:55:a3 20:00:00:24:ff:77:55:a3
  6   1 (0x1)    010700 N    3   21:00:00:24:ff:4e:98:83 20:00:00:24:ff:4e:98:83
  7   1 (0x1)    010800 N    3   20:11:d4:b1:10:ae:85:25 21:00:d4:b1:10:ae:85:25
  8   1 (0x1)    010a00 N    3   20:00:f0:98:38:8a:53:d6 21:00:f0:98:38:8a:53:d6

  Seq Domain     Port   Port
  No  ID         ID     Type COS PortWWN                 NodeWWN
  --- ------     ------ ---- --- -------                 -------
  1   2 (0x2)    020100 N    3   20:10:f0:98:38:8a:53:f3 21:00:f0:98:38:8a:53:f3
  2   2 (0x2)    020200 N    3   21:00:00:24:ff:89:ce:3a 20:00:00:24:ff:89:ce:3a
  3   2 (0x2)    020300 N    3   21:00:00:24:ff:89:cb:e5 20:00:00:24:ff:89:cb:e5
  4   2 (0x2)    020400 N    3   21:00:00:24:ff:77:56:83 20:00:00:24:ff:77:56:83
  5   2 (0x2)    020500 N    3   21:00:00:24:ff:77:55:a2 20:00:00:24:ff:77:55:a2
  6   2 (0x2)    020600 N    3   21:00:00:24:ff:41:f6:dd 20:00:00:24:ff:41:f6:dd
  7   2 (0x2)    020700 N    3   21:00:00:24:ff:4e:98:82 20:00:00:24:ff:4e:98:82
  8   2 (0x2)    020800 N    3   20:01:d4:b1:10:ae:85:25 21:00:d4:b1:10:ae:85:25  <=== Вот оно. Восьмой порт во втором домене. 
  9   2 (0x2)    020a00 N    3   20:10:f0:98:38:8a:53:d6 21:00:f0:98:38:8a:53:d6

  Seq Domain     Port   Port
  No  ID         ID     Type COS PortWWN                 NodeWWN
  --- ------     ------ ---- --- -------                 -------
  1   98 (0x62)  620000 N    3   20:35:00:80:e5:2d:73:26 20:04:00:80:e5:2d:73:26
  2   98 (0x62)  620100 N    3   21:00:00:24:ff:5c:4d:f9 20:00:00:24:ff:5c:4d:f9
  3   98 (0x62)  620200 N    3   21:00:00:24:ff:4b:c8:14 20:00:00:24:ff:4b:c8:14
  4   98 (0x62)  620300 N    2,3 10:00:00:90:fa:3a:8d:26 20:00:00:90:fa:3a:8d:26
  5   98 (0x62)  620400 N    3   21:00:00:24:ff:5c:4e:60 20:00:00:24:ff:5c:4e:60
  6   98 (0x62)  620500 N    3   21:00:00:24:ff:5c:dc:56 20:00:00:24:ff:5c:dc:56
  7   98 (0x62)  620600 N    3   21:00:00:24:ff:54:84:da 20:00:00:24:ff:54:84:da
  8   98 (0x62)  620700 N    3   21:00:00:24:ff:35:4c:f0 20:00:00:24:ff:35:4c:f0
  9   98 (0x62)  620800 N    3   20:35:00:80:e5:3f:4d:ec 20:04:00:80:e5:3f:4d:ec
  10  98 (0x62)  620e00 N    3   21:00:00:24:ff:35:4c:f3 20:00:00:24:ff:35:4c:f3
  11  98 (0x62)  620f00 N    3   21:00:00:24:ff:2f:8d:bc 20:00:00:24:ff:2f:8d:bc
  12  98 (0x62)  621000 N    3   21:00:00:24:ff:35:4c:fc 20:00:00:24:ff:35:4c:fc
  13  98 (0x62)  621300 N    3   21:00:00:24:ff:07:8e:d1 20:00:00:24:ff:07:8e:d1

  Seq Domain     Port   Port
  No  ID         ID     Type COS PortWWN                 NodeWWN
  --- ------     ------ ---- --- -------                 -------
  1   99 (0x63)  630000 N    3   20:34:00:80:e5:2d:73:26 20:04:00:80:e5:2d:73:26
  2   99 (0x63)  630100 N    3   21:00:00:24:ff:5c:4d:f8 20:00:00:24:ff:5c:4d:f8
  3   99 (0x63)  630200 N    3   21:00:00:24:ff:4b:c8:15 20:00:00:24:ff:4b:c8:15
  4   99 (0x63)  630400 N    3   21:00:00:24:ff:5c:4e:61 20:00:00:24:ff:5c:4e:61
  5   99 (0x63)  630500 N    3   21:00:00:24:ff:5c:dc:57 20:00:00:24:ff:5c:dc:57
  6   99 (0x63)  630600 N    3   21:00:00:24:ff:54:84:db 20:00:00:24:ff:54:84:db
  7   99 (0x63)  630700 N    3   21:00:00:24:ff:35:4c:f1 20:00:00:24:ff:35:4c:f1
  8   99 (0x63)  630800 N    3   20:34:00:80:e5:3f:4d:ec 20:04:00:80:e5:3f:4d:ec
  9   99 (0x63)  630a00 N    3   21:00:00:24:ff:89:cc:c8 20:00:00:24:ff:89:cc:c8
  10  99 (0x63)  630c00 N    3   21:00:00:24:ff:41:f6:dc 20:00:00:24:ff:41:f6:dc
  11  99 (0x63)  630e00 N    3   21:00:00:24:ff:35:4c:f2 20:00:00:24:ff:35:4c:f2
  12  99 (0x63)  630f00 N    3   21:00:00:24:ff:2f:8d:bd 20:00:00:24:ff:2f:8d:bd
  13  99 (0x63)  631000 N    3   21:00:00:24:ff:35:4c:fd 20:00:00:24:ff:35:4c:fd
  14  99 (0x63)  631300 N    3   21:00:00:24:ff:35:59:69 20:00:00:24:ff:35:59:69

  Total: 44

SANbox #> 

А теперь «show fabric» и по Domain id определяем конкретную железку и конкретный порт:

SANbox #> show fabric  

  Domain           1  (0x01)
  WWN              10:00:00:c0:dd:18:e4:f9
  SymbolicName     SANbox
  HostName         d778
  EthIPv4Address   192.168.33.233
  EthIPv6Address   <undefined>

  Domain           2  (0x02) <=== Второй домен.
  WWN              10:00:00:c0:dd:13:42:f0
  SymbolicName     SANbox-2
  HostName         d777
  EthIPv4Address   192.168.33.232
  EthIPv6Address   <undefined>

  Domain           98 (0x62)
  WWN              10:00:00:c0:dd:24:64:6d
  SymbolicName     SANbox
  HostName         d384
  EthIPv4Address   192.168.33.29
  EthIPv6Address   fe80::2c0:ddff:fe24:646d

  Domain          *99 (0x63)
  WWN              10:00:00:c0:dd:24:64:5f
  SymbolicName     SANbox
  HostName         d393.colo.logol.ru
  EthIPv4Address   192.168.33.28
  EthIPv6Address   <undefined>

  * indicates principal switch

SANbox #> 

Для успокоения совести можно зайти на нужную железку и проверить:

SANbox-2 #> show topology 8

  Local Link Information
  ----------------------

  PortNumber 8
  PortID     020800
  PortWWN    20:08:00:c0:dd:13:42:f0
  PortType   F

  Remote Link Information
  -----------------------

  Device 0

    PortID      020800
    PortWWN     20:01:d4:b1:10:ae:85:25
    NodeWWN     21:00:d4:b1:10:ae:85:25
    PortType    N
    Description HUAWEI   S2200T           (Rev. 2105)
    IPAddress   <undefined>

SANbox-2 #> 

Все ок, WWN совпадает. Можно идти спокойно декометировать.

ntp и блокировка портов

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

[root@localhost ~]# ntpq -p 
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 sip.dicode.nl   .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp.luna.nl     .INIT.          16 u    -   64    0    0.000    0.000   0.000
 metronoom.dmz.c .INIT.          16 u    -   64    0    0.000    0.000   0.000
 server1.bertold .INIT.          16 u    -   64    0    0.000    0.000   0.000

ntpdate тоже не работает:

[root@localhost ~]# ntpdate pool.ntp.org
13 Feb 11:16:33 ntpdate[16114]: no server suitable for synchronization found
[root@localhost ~]# 

Однако дебаг работает нормально:

[root@localhost ~]# ntpdate -d pool.ntp.org 
13 Feb 11:17:18 ntpdate[16209]: ntpdate 4.2.6p5@1.2349-o Mon Feb  6 07:22:46 UTC 2017 (1)
Looking for host pool.ntp.org and service ntp
host found : backup.kabelnetveendam.nl
transmit(213.109.127.82)
receive(213.109.127.82)
...
reference time:    dc4be672.223c708d  Mon, Feb 13 2017 11:01:54.133
originate timestamp: dc4bea0f.6d4c2184  Mon, Feb 13 2017 11:17:19.426
transmit timestamp:  dc4bea0f.6d238c2e  Mon, Feb 13 2017 11:17:19.426
filter delay:  0.02826  0.02809  0.02814  0.02835 
         0.00000  0.00000  0.00000  0.00000 
filter offset: -0.00049 -0.00073 -0.00082 -0.00077
         0.000000 0.000000 0.000000 0.000000
delay 0.02809, dispersion 0.00009
offset -0.000738

13 Feb 11:17:19 ntpdate[16209]: adjust time server 5.79.108.34 offset -0.000738 sec
[root@localhost ~]#  

Взял tcpdump, повтыкал пару минут и понял что при наличии опции ‘-d’ запросы уходит с непривилегированного порта, а без этой опции со 123 порта и ответ мне не приходит.

[root@localhost ~]# tcpdump host A.B.C.D -nn & ntpdate A.B.C.D > /dev/null 
[5] 16694
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
11:22:41.771719 IP X.Y.Z.A.123 > A.B.C.D.123: NTPv4, Client, length 48
11:22:41.771722 IP X.Y.Z.A.123 > A.B.C.D.123: NTPv4, Client, length 48
...
11:22:44.771655 IP X.Y.Z.A.123 > A.B.C.D.123: NTPv4, Client, length 48
11:22:44.771662 IP X.Y.Z.A.123 > A.B.C.D.123: NTPv4, Client, length 48
11:22:44.771645 IP X.Y.Z.A.123 > A.B.C.D.123: NTPv4, Client, length 48
13 Feb 11:22:45 ntpdate[16695]: no server suitable for synchronization found
[root@localhost ~]# tcpdump host A.B.C.D -nn & ntpdate -d A.B.C.D > /dev/null 
[6] 16697
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
host found : sip.dicode.nl
11:22:51.724108 IP X.Y.Z.A.59690 > A.B.C.D.123: NTPv4, Client, length 48
11:22:51.724112 IP X.Y.Z.A.59690 > A.B.C.D.123: NTPv4, Client, length 48
11:22:51.724115 IP X.Y.Z.A.59690 > A.B.C.D.123: NTPv4, Client, length 48
11:22:51.724118 IP X.Y.Z.A.59690 > A.B.C.D.123: NTPv4, Client, length 48
...
11:22:51.736426 IP A.B.C.D.123 > X.Y.Z.A.59690: NTPv4, Server, length 48
11:22:51.736435 IP A.B.C.D.123 > X.Y.Z.A.59690: NTPv4, Server, length 48
11:22:51.736422 IP A.B.C.D.123 > X.Y.Z.A.59690: NTPv4, Server, length 48
[root@localhost ~]# 

Уже было думал поднимать vpn только ради синхронизации времени, но потом подумал немного, почитал «man ntpd», «man ntp.conf» и «man ntpdate» и таки нашел нужную опцию (а заодно выяснил почему ntpdate с разных портов пакеты отправляет):

-u Direct ntpdate to use an unprivileged port for outgoing packets. This is most useful when behind a firewall that blocks incoming traffic to privileged ports, and you want to synchronize with hosts beyond the firewall. Note that the -d option always uses unprivileged ports.

В общем добавляем «ntpdate -u» в крон и радуемся жизни (костыль конечно, но меньший, чем поднимать vpn только ради синхронизации времени)

ssh ControlMaster и Port forwarding

Шел 2017 год. Я уже лет 15 администрировал linux, и как минимум лет 8 это было основной и почти единственной вещью, за которую я получал деньги.

Вчера я узнал о замечательной штуке: опция «ControlMaster» к ssh-клиенту. Эта штука работает примерно так: от ssh-клиента отфоркивается (через вызов clone) процесс, который «встает» между ssh-клиентом и ssh-сервером на удаленной машине. Принимает запрос аутентификации от сервера, перенаправляет его клиенту, получает ответ от клиента, устанавливает соединение и дальше прогоняет весь трафик через себя. Все это делается через создание локального сокета по адресу «ControlPath» из конфига клиента (или по адресу по умолчанию).

Пока что назначение всех этих действия пока не очень понятно наверное, да? Так вот, самое интересное начинается когда вы закрываете соединение с удаленным сервером или хотите установить еще одно соединение из соседнего шела (да, не всегда на целевом сервере есть screen\tmux). Если вы закрываете ssh клиент (нажимаете Ctrl+D или пишете exit в консоли), то соединение «ssh-клиент <=> локальный сокет» закрывается, а соединение «отфоркнутый процесс <=> удаленный сервер» остается висеть. Если после этого вы хотите установить новое соединение с тем же сервером(не важно закрыли вы первное или нет), то клиент ищет сокет с именем нужного сервера (параметр ControlPath), соединяется с ним и вы уже авторизованны. Нет, соединения не «мешают» друг другу, то есть они независимые, но при этом не происходит соединения нового коннекта к ssh-серверу, не запрашивается авторизация и не остаются записи в логах ssh-сервера и тп. Соединение будет висеть «ControlPersist» времени.

Собственно все хорошо, замечательно и удобно, но внимательный читатель может спросить меня «а причем тут порт-форвардинг?», который вместе с этой штукой тоже отлично работает. Отвечаю: у меня иногда бывает задача «сходить на виндовый сервер, который в защищенной сети, но рядом есть машина с доступным ssh». Обычно я делаю что-то типа «ssh SERVER_NAME -L 3389:10.0.0.5:3389» и потом «rdesktop 127.1». Вот и сегодня делаю — захожу, все ок. Поработал, закрываю rdesktop, закрываю ssh, нажимаю стрелку вверх и правлю предыдущую команду, вместо «-L 3389:10.0.0.5:3389» вписываю «-L 3389:10.0.0.6:3389», запускаю rdesktop и попадаю на сервер, с которого только что вышел. Сначала не понял что именно произошло и почему «сервер выглядит не так, как должен», потом вернулся в консольку с ssh-клиентом и заметил

mux_client_forward: forwarding request failed: Port forwarding failed
muxclient: master forward request failed
bind: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 3389

Потом покопался у себя в системе и понял что виновен ControlMaster и заодно покопался в том, как именно работает эта магия.
Зы что-бы закрыть установленное ранее таким образом соединение нужно выполнить на своей машине команду «ssh -O exit <нужный сервер>«, при этом текущие соединения к этому серверу (которые установлены через ControlMaster закроются с сообщением «Shared connection to X closed.»

Зы ssh клиент можно обмануть сделав симлинк с «ожимаемого имени сокета» на другой аналогичный сокет.

debian8 sysctl.conf

Чем больше я вожусь с дебианом, тем больше складывается впечатление что systemd они себе впилили «не совсем добровольно и чисто для галочки».
В данном случае потребовалось добавить строчку «net.ipv4.netfilter.ip_conntrack_max = 1548576».

Добавил, делаю «sysctl -p» — работает. Ребутаюсь — значение откатывается на дефолт. Делаю «sysctl -p» — снова работает.

В итоге решилось созданием файла /etc/systemd/system/systemd-sysctl.service

[Unit]
Description=Apply Kernel Variables
Documentation=man:systemd-sysctl.service(8) man:sysctl.d(5)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service
After=systemd-modules-load.service
After=network.target
Before=sysinit.target shutdown.target
ConditionPathIsReadWrite=/proc/sys/

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/lib/systemd/systemd-sysctl

[Install]
WantedBy=multi-user.target

и командой «systemctl daemon-reload && systemctl enable systemd-sysctl.service»

UPD Это «немножко» неверно. Не смотри сюда, смотри туда

Установка proxmox через PXE

Примерная последовательность команд для перепаковки образа proxmox для установки через PXE

# mount proxmox-ve_4.2-725d76f0-28.iso /mnt/iso/  -o loop
# mkdir tmp
# cd tmp/
# cp /mnt/iso/boot/initrd.img .

# file initrd.img 
initrd.img: gzip compressed data, from Unix, last modified: Tue Apr 26 17:29:33 2016, max compression
# gzip -d -S ".img" ./initrd.img
# mkdir initrd_tmp
# cd initrd_tmp/
# cpio -i -d < ../initrd
# cp ../../proxmox-ve_4.2-725d76f0-28.iso proxmox.iso
# find . | cpio -H newc -o > ../initrd_new
# cd ..
# ls -lah 
итого 864M
drwxr-xr-x  3 root root 4,0K Июн 16 10:29 .
drwxr-xr-x  3 root root 4,0K Июн 16 10:22 ..
-r--r--r--  1 root root  83M Июн 16 10:23 initrd
-rw-r--r--  1 root root 782M Июн 16 10:29 initrd_new
drwxr-xr-x 13 root root 4,0K Июн 16 10:28 initrd_tmp

# file initrd*
initrd:     ASCII cpio archive (SVR4 with no CRC)
initrd_new: ASCII cpio archive (SVR4 with no CRC)
initrd_tmp: directory

# mv initrd_new initrd
# gzip -9 -S ".img" initrd

Кусок конфига pxelinux:

    LABEL Proxmox-4.2
        menu label Proxmox-4.2
        kernel proxmox-ve-42/linux26
        append = initrd=proxmox-ve-42/initrd.img vga=791 video=vesafb:ywrap,mtrr ramdisk_size=16777216 splash=verbose

Debian iptables

В Centos есть файлик /etc/sysconfig/iptables, в который можно написать свои правила, и они будут работать после ребута.
В debian\ubuntu же все советуют написать скрипт из 3 строк и положить его в /etc/network/if-pre-up.d/ или в /etc/network/if-up.d/
В скрипте нужно вызвать iptables-restore. Так же по желанию можно написать еще 1 скрипт, положить его в /etc/network/if-down.d/ и сделать так, что бы он сохранял текущие настройки iptables перед выключением (вызываем iptables-save).

Мне всегда казалось это не логичным. Как мол так, проприетарщики(CentOS\RedHat) уже давно пришли к тому, что одни и теже настройки хранятся в одном и том же месте(это конечно все можно поменять, но 100% «чужих» хостов, которые я видел настроенны «по умолчанию» в этом плане), а в кругом свободном дебиане и убунте (которая впереди планеты всей … во всяком случае пытается быть) каждый админ сам себе костылик пишет. И вот сегодня я подумал «ээй чувак, у тебя ведь есть сюстемД, наверника так всеми нелюбимый Поттентинг уже подумал о тебе и сделал ‘единообразно’, посмотри же уже наконец в гугле» и полез в гугл с тематическими запросами.

Оказывается да, уже сделал, но не Поттентинг, а !!!! (в случае если мы говорим про дебиан8), положил его в universe/admin, и назвал iptables-persistent. Ставим его и у нас, как у нормальных людей (это я сейчас про CentOS) появляется отдельный сервис, отвечающий за фаервол. Называется он правда не iptables как в CentOS а netfilter-persistent, но зато все как мы любим: на любой системе единый для всех файл (точнее 2: /etc/iptables/rules.v4 и /etc/iptables/rules.v6). Пишем туда свои правила, включаем сервис (systemctl enable netfilter-persistent.service), ребутаемся и забываем об аде в виде «тут правила лежат в /etc/iptables.rules, а там в /etc/iptables.up»

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

iso образ для обновления биоса через IPMI

Некоторые ipmi не умеют грузить .img и хотят обязательно валидный iso. В таком случае берем первый попавшийся iso с DOS’ом, например этот, и делаем примерно так:
yukra-ThinkPad-X230 ~ # mount -r freedos.iso /mnt/
yukra-ThinkPad-X230 ~ # mkdir /tmp/1
yukra-ThinkPad-X230 ~ # cd /tmp/1
yukra-ThinkPad-X230 1 # cp -r /mnt/* .
yukra-ThinkPad-X230 1 # umount /mnt
yukra-ThinkPad-X230 1 # cd isolinux/data/
yukra-ThinkPad-X230 data # mv fdboot.img fdboot.img.gz
yukra-ThinkPad-X230 data # gzip -d fdboot.img.gz
yukra-ThinkPad-X230 data # mount -o loop,offset=512 fdboot.img /mnt/
yukra-ThinkPad-X230 data # cd /mnt/bios/
yukra-ThinkPad-X230 bios # rm -rf *
<Кладем сюда нужные файлы>
yukra-ThinkPad-X230 bios # cd /tmp/1/isolinux/data/
yukra-ThinkPad-X230 data # umount /mnt
yukra-ThinkPad-X230 data # gzip fdboot.img
yukra-ThinkPad-X230 data # mv fdboot.img.gz fdboot.img
yukra-ThinkPad-X230 data # cd /tmp/1
yukra-ThinkPad-X230 1 # mkisofs -o /tmp/output.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .
I: -input-charset not specified, using utf-8 (detected in locale settings)
genisoimage: Directories too deep for './freedos/setup/odin/help/docinfo/bi/nls' (7) max is 6; ignored - continuing.
genisoimage: To include the complete directory tree,
genisoimage: use Rock Ridge extensions via -R or -r,
genisoimage: or allow deep ISO9660 directory nesting via -D.
Size of boot image is 4 sectors -> No emulation
60.19% done, estimate finish Thu Mar 10 11:50:06 2016
Total translation table size: 2048
Total rockridge attributes bytes: 0
Total directory bytes: 80156
Path table size(bytes): 442
Max brk space used 5f000
8315 extents written (16 MB)
yukra-ThinkPad-X230 1 #
[/code]

QLogic E_Port not supported on remote port. Reconfigure remote switch to connect.

  Alarm Msg: [A][1004.0008][Port: 16][Eport Isolating due to ELP Incompatibility]
  Alarm Msg: [A][1004.0032][Port: 16][E_Port not supported on remote port. Reconfigure remote switch to connect.]

Оказывается нельзя взять 2 «любых» FC-свича, кинуть между ними линк и «все заработает». Например выдержка из даташита 3810 Fibre Channel Switch:

Port Types
• All ports are universal, auto-discovering, and self-
configuring, assuming the following states: F_Port,
FL_Port, G_Port, GL_Port, TR_Port (E_Ports not
included—single-switch environments only)

arp таблица по SNMP

OID — .1.3.6.1.2.1.17.7.1.2.2.1.2

Пример запроса и ответа:

$ snmpwalk -v 2c -c public -OnQ 192.168.1.13 .1.3.6.1.2.1.17.7.1.2.2.1.2 | head
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.12.41.60.129.58 = 29
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.21.93.15.135.0 = 38
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.21.93.15.135.3 = 38
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.21.93.15.135.4 = 38
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.22.62.23.213.41 = 11
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.22.62.76.224.134 = 11
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.37.144.2.76.76 = 30
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.37.144.2.76.118 = 27
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.37.144.2.76.248 = 25
.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.37.144.2.77.152 = 17

Пример перлятины для разбора:
#!/usr/bin/perl
$format =
"vlan = %u mac = " . join( ":", map { "%02x" } 1 .. 6 ) . " port = %u\n";
while () {
( $oid, $port ) = split(/(?<=\S)\s*=\s*(?=\S)/); $port || die "Invalid line: '$_'\n"; printf( $format, ( split( /\./, $oid ) )[ 14 .. 20 ], $port ); }[/code] Ну и готовый пример [code]$ echo -e ".1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.37.144.2.76.118 = 27\n.1.3.6.1.2.1.17.7.1.2.2.1.2.2.0.37.144.2.76.248 = 25" | ./mac.pl vlan = 2 mac = 00:25:90:02:4c:76 port = 27 vlan = 2 mac = 00:25:90:02:4c:f8 port = 25[/code] И да, vlan и порт у кого-то это влан и порт, а у кого-то индекс влана и индекс порта во внутреннем представлении железки. Смотрите доку вашего вендора.

Subscribe to RSS Feed