• Linux i konsole szeregowe

    Jakie konsole jakie szeregowe ma system?

    Teoretycznie wszystkie pliki /dev/ttyS* są konsolami, jednak nie wszystkie są prawdziwe, cześć z nich po prostu rezerwują miejsce.

    Prawdziwe możemy znaleźć przeszukując dmesg (ale pamiętać należy ze ten bufor jest cały czas nadpisywany więc może kłamać)

    [root@server1 ~]# dmesg | grep tty
    [    0.000000] console [tty0] enabled
    [    0.842783] 00:05: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
    [    0.863343] 00:06: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A
    

    Czy port szeregowy pracuje naprawdę, możemy użyć programu setserial:

    [root@server1 ~]# setserial -g /dev/ttyS[0123]
    /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
    /dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
    /dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
    /dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
    

    Programy do pracy z konsolami szeregowymi to np. minicom.


  • Linux: dodawanie dysków online

    Cała sztuka polega na przeskanowaniu jeszcze raz magistrali scsi. Możesz wykonać to następującą komendą:

     for HOST in `ls /sys/class/scsi_host/`; do echo "Scanning $HOST"; echo "- - -" > /sys/class/scsi_host/$HOST/scan;  done
    

    Efekt w logu jest następujący

    Jan  4 05:48:08 master1 kernel: sd 2:0:2:0: [sdc] Cache data unavailable
    Jan  4 05:48:08 master1 kernel: sd 2:0:2:0: [sdc] Assuming drive cache: write through
    Jan  4 05:48:08 master1 kernel: sdc: sdc1
    

    Następnie należy po prostu sformatować dysk :).


  • puppet: hash i templates

    Wykorzystanie hash-y jest bardzo wygodne, gdyż pozwala utrzymać strukturę danych z informacją o ich wykorzystaniu. Wyobraźmy sobie, że chcemy zarządzać plikiem /etc/exports zarządzającym wyeksportowanymi systemami plików. Niech nasz hash opisujący udostępniane pliki ma postać:

    	$fs= 
    	{		
    		"/export/repos/"  =>
    			{
    				"10.40.0.20" => 
    				{ 
    					"server"  => "10.40.0.20",
    					"options" => "ro",
    				},				
    			},
    		"/export/ks" =>
    			{
    
    				"10.40.0.20" => 
    					{ 
    						"server"  => "10.40.0.20",
    						"options" => "ro",
    					},				
    			
    
    				"10.40.0.21" => 
    					{
    						"server" => "10.40.0.21",
    						"options" => "rw",
    					},
    			},
    
    	}	
    

    Wtedy template może wyglądać następująco:

    <% @fs.each do |fs_key, fs_machines| %>
    <%= fs_key %> <% fs_machines.each do |machine, options| %> <%= machine %>(<%= options['options'] %>) <% end %> 
    <% end %>
    

  • Puppet i hiera: debugowanie

    Hiera czyli hierarchiczna baza danych bardzo często używana jest razem z puppetem. Jak sprawdzić jakie dane ona przekaże do puppeta? Spójrz na przykłady poniżej:

    [root@master1 ~]# hiera -d classes environment=lab1
    DEBUG: Sat Dec 20 18:59:05 -0500 2014: Hiera YAML backend starting
    DEBUG: Sat Dec 20 18:59:05 -0500 2014: Looking up classes in YAML backend
    DEBUG: Sat Dec 20 18:59:05 -0500 2014: Looking for data source lab1
    DEBUG: Sat Dec 20 18:59:05 -0500 2014: Found classes in lab1
    ["u4y_base"]
    

    albo przykład bardziej skomplikowany:

    [root@master1 node]# hiera -d classes environment=lab1 ::fqdn=master1
    DEBUG: Wed Feb 11 19:53:03 +0100 2015: Hiera YAML backend starting
    DEBUG: Wed Feb 11 19:53:03 +0100 2015: Looking up classes in YAML backend
    DEBUG: Wed Feb 11 19:53:03 +0100 2015: Looking for data source lab1/node/master1
    DEBUG: Wed Feb 11 19:53:03 +0100 2015: Found classes in lab1/node/master1
    ["apache",
     "firewall_trojans_ignore",
     "u4y_dhcpd",
     "u4y_dhcpd::c_dhcp_client_firewall",
     "u4y_dns_server",
     "u4y_firewall",
     "u4y_nfs",
     "u4y_nfs::c_server_firewall",
     "u4y_host",
     "u4y_repo_sync",
     "u4y_host::c_install",
     "u4y_pxelinux",
     "u4y_pxelinux::c_centos",
     "u4y_firewall::c_service",
     "u4y_puppet_server",
     "u4y_kickstart_server",
     "u4y_kickstart_server::c_kickstart_file",
     "u4y_repo_sync::c_centos6",
     "u4y_repo_sync::c_centos7",
     "u4y_tftp_server",
     "u4y_users::c_users",
     "u4y_sshd",
     "u4y_packages::c_packages",
     "u4y_selinux"]
    
    

  • VIOS: Link aggregation

    Aby utworzyć urządzenie Link Aggregation ent5 z adapterami fizycznej sieci Ethernet ent3 i ent4 oraz adapterem zapasowym ent2, należy wpisać następującą komendę:

    mkvdev -lnagg ent3,ent4 -attr backup_adapter=ent2
    
    ent5 available
    

    Aby dodać adapter ent8 do Link Aggregation ent5 należy wykonać polecenie:

    cfglnagg -add ent5 ent8
    

    Więcej: http://www-01.ibm.com/support/knowledgecenter/8205-E6D/p7hcg/cfglnagg.htm?cp=8205-E6D%2F0-8-3-8-2-17


  • SVN: Tworzenie backupów i odtwarzanie repozytoriów

    Tworzenie backupów repozytoriów SVN

    Backup tworzymy korzystając z polecenia svnadmin dump:

    svnadmin dump path_to_repo > backup_file 
    

    Prawdzimy przykład:

    svnadmin dump /data/svn/repos/unix_admin/ | gzip -9 > ./unix_admin_20141010_2039.dump.gz
    

    Przydatną opcją jest -q (quite) powodująca wyświetlanie tylko komunikatów błędów.

    Odtwarzanie repozytoriów SVN

    Jak już mamy zainstalowany pakiet subversion i skonfigurowany główny katalog repozytoriów, poszczególne
    projekty możemy odtworzyć korzystając z polecenia:

    svnadmin load path_or_repo < backup_file
    

    Prawdziwy przykład:

    svnadmin load /data/svn/repos/unix_admin/ < unix_admin_20141010_2039.dump
    

  • VIOS, AIX i wirtualizacja sieci czyli sea – shared ethernet adapter

    Tworzenie SEA (Sherad Ethernet Adapter)

    Do stworzenia SEA adaptera potrzebujemy:

    • fizycznego adaptera, do którego podłączymy się, oznaczmy go PHYS
    • wirtualnego adaptera, oznaczmy go VIRT
    • domyślny VLAN ID, oznaczmy go VLAN
    mkvdev -sea PHYS -vadapter VIRT -default VIRT -defaultid VLAN
    

    SEA z kanałem kontrolnym w środowisku dual VIOS

    Jeżeli używamy dwóch VIOSów, możemy stworzyć konfigurację, w której jeden SEA na jednym VIOSie pracuje w standby i bierze ruch z drugiego, gdy pojawią się jakieś problemy.
    Tworzymy wtedy prywatny kanał komunikacji (przy wykorzystaniu virtualnego interfejsu i dedykowanego VLAN-a). Komenda tworząca w tym wypadku adapter SEA to:

    mkvdev -sea PHYS -vadapter VIRT -default VIRT -defaultid VLAN -attr ha_mode=auto ctl_chan=CONT
    

    Gdzie PHYS, VIRT VLAN to znane wcześniej nam oznaczenia intefesjów ale pojawiają się nowe wartości: –attr ha_mode=auto (VIOSy między sobą decydują który interface jest zapasowy
    a który podstawowy oraz ctl_chan=CONT, który określa wirtualny interfejs do komunikacji między VIOSami.

    np:

    mkvdev -sea ent4 -vadapter ent6 -default ent6 -defaultid=1 -attr ha_mode=auto ctl_chan=ent5
    

    Manualny failover w tym wypadku można osiągnąć przez:

    chdev -dev ent20 -attr ha_mode=standby 
    
    chdev -dev ent20 -attr ha_mode=auto 
    

  • Mapowanie dysków dla lparów w środowisku 2 VIOSów i kilku Frame-ów

    Przed mapowaniem – prechecks

    Sprawdzenie czy LUN-y są zmapowane do wszystkich VIOSów

    W przypadku używania LPM (Live Partition Mobility) należy sprawdzić czy dyski są zmapowane do wszystkich VIOSów (na wszystkich Frame-ach).

    Przygotowanie

    Sprawdzenie czy dyski nie są już zmapowane (przez pomyłkę) do innego LPARA

    Można to wykonać na dwa sposoby, jeden bardziej oficialny (przejrzeć mapowanie dysków)

    lsmap -all | grep -p hdiskXX
    

    Drugi to użycie nieudokumentowanego polecenia lqueryvg:

    lqueryvg -Atp hdisk1
    
    root@vio1:/ #lqueryvg -Atp hdisk1
    0516-320 lqueryvg: Physical volume hdisk1 is not 
    asigned   to  a volume group.
    0516-066 lqueryvg: Physical volume is not a volume group member.
    Check the physical volume name specified.
    

    Usunięcie rezerwacji dysków

    Jeżeli używamy 2 VIOSów do dostarczania dysków wirtualnych, należy usunąć rezerwacje dysków:

    chdev -l hdisk1 -a reserve_lock=no
    chdev -l hdisk1 -a reserve_lock=no  -P
    

    Sprawdzenie nazwy vhost (aby zmapować do poprawnego lpara)

    Dyski mapujemy do urządzenia vhostX ale dla jednego lpara może być kilka vhost-ów więc należy znależć ten poprawny.
    Komenda lsmap -all podaje do jakiego lpara jest przypisany vhost ale: podawany jest lpar_id czyli numer a nie nazwa lpar-a, a dodatkowo jest to numer szestnakowy.

    Jak zamienić liczby szesnastowe na dziesiętne? To jest dość proste (więcej w tym wpisie):

    ziutus@sv21 [/home/ziutus]# perl -e "printf(\"0x%08x\n\", 69)"
    0x00000045
    
    [0]$ perl -e "printf(\"%d\n\", 0x00000045)"
    69
    

    Mapowanie – działania na VIOS

    Aby zmapować potrzebujesz posiadać następujące informacje:

    • vhostX – Virtualny adapter (jest on przypisywany do lpara, ale może być ich kilka)
    • hdiskName – jeżeli jest używany PowerPath, należy znależć najpierw dysk w systemie, który został udostępniony,
    • Docelową nazwę – jeżeli są jakieś schematy nazw używane, należy nową nazwę utworzyć zgodnie z nią,

    Mapowanie

    VIOS A

    #mkvdev -vdev hdisk1 -vadapter vhost1 -dev vioaclivtd
    

    VIOS B

    #mkvdev -vdev hdisk2 -vadapter vhost1 -dev viobclivtd
    

    Mapowanie – działania na VIOC

    Wyszukanie nowych urządzeń

    #cfgmgr
    
    root@test-lpar:/ #lspv
    hdisk0          0004a256f06e0c6e      rootvg        active
    hdisk1          0004a25613b2835e      datavg
    hdisk2          0004a2561da57f13      None
    root@cli1:/ #
    

    W wyniku pojawi się nowy disk nie przypisany do żadnej grupy.

    Sprawdzanie czy dysk jest dostarczany z dwóch VIOSów

    root@test-lpar:/ #lspath -l hdisk2
    Enabled hdisk2 vscsi1
    Enabled hdisk2 vscsi2
    

    Sprawdzenie piorytetów dysków

    Należy sprawdzić piorytety dostępu do dysków w zależności od urządzenia vscsi (VIOS-a)

    # lspath -AE -l hdisk2 -p vscsi1
       priority 1 Priority True
    # lspath -AE -l hdisk2 -p vscsi2
       priority 1 Priority True
    

    Korekta piorytetów (jeżeli są jednakowe)

     # chpath -l hdisk2 -a priority=1 -p vscsi1
     # chpath -l hdisk2 -a priority=2 -p vscsi2
    

    Usuwanie mapowania

    Usuwanie mapowania przez podanie fizycznego dysku:

    rmvdev -vdev hdisk3
    

    Usuwanie mapowania przez podanie wirtualnego dysku:

    rmvdev -vtd wd_c3_hd3
    

  • AIX, VIOS i NPIV

    Przegląd możliwości NPIV

    Do przeglądania ilości dostępnych wirtualnych adapterów „Fibre Channel” służy polecenie lsnports.

    $ lsnports
    name physloc fabric tports aports swwpns awwpns
    fcs3 U789D.001.DQDYKYW-P1-C6-T2 1 64 63 2048 2046
    

    Gdzie:

    • fabric – if 0 – no support of NPIV, if 1 – NPIV is supported,
    • tports – maximum number of virtual Fibre Channel (NPIV) adapters per physical Fibre Channel port
    • aports – Display number of available physical ports
    • swwpns – Maximum number of WWPNs supported by the physical Fibre Channel port
    • awwpns – Display total numbers of WWPNs that physical port support.

    Przegląd mapowania

    Wszystkie mapowania możemy przejrzeć korzystając z polecenia:

    lsmap -npiv -all
    

    Jeżeli interesuje nas konkretny interface:

    lsmap -vadapter vfchost0 -npiv 
    

    Wyjaśnienie wyniku polecenia

    lsmap -vadapter vfchost0 -npiv 
    
    Name          Physloc                            ClntID ClntName       ClntOS
    ------------- ---------------------------------- ------ -------------- -------
    vfchost0      U8203.E4A.05A6DD1-V1-C41                3 mylpar6        AIX
    
    Status:LOGGED_IN
    FC name:fcs1                    FC loc code:U789C.001.DQDH231-C3-T2
    Ports logged in:2
    Flags:a
    VFC client name:fcs0            VFC client DRC:U8203.E4A.05A6DD1-V3-C41-T1
    

    Znaczenie statusu i flag:

    1. Status:LOGGED_IN, Flags: a – wirtualny adapter jest zmapowany do fizycznego adaptera, powiązany klient jest uruchomiony.
    2. Status:NOT_LOGGED_IN, Flags:1 – wirtualny adapter nie jest zmapowany do fizycznego adaptera,
    3. Status:NOT_LOGGED_IN, Flags:4 – powiązany klient nie jest uruchomiony (a wirtualny adapter jest powiązany do fizycznego adaptera),

    Dodanie nowego vfchost-a do adaptera

    Map adapter vfchost2 to adapter fcs1

    vfcmap -vadapter vfchost2 -fcp fcs1
    

    Sprawdzamy status:

    lsmap -vadapter vfchost2 -npiv 
    

    Usunięcie mapowania

    vfcmap -vadapter vfchost0 -fcp
    

    Wylistowanie wszystkich wirtualnych portów

    hscroot@hmc: lsnportlogin -m pserver --filter "lpar_ids=12"
    lpar_name=mylpar,lpar_id=12,profile_name=default,slot_num=51,wwpn=c050726670a0002c,wwpn_status=1,logged_in=vios,wwpn_status_reason=null
    lpar_name=mylpar,lpar_id=12,profile_name=default,slot_num=51,wwpn=c050726670a0002d,wwpn_status=1,logged_in=vios,wwpn_status_reason=null
    lpar_name=mylpar,lpar_id=12,profile_name=default,slot_num=52,wwpn=c050726670a0002e,wwpn_status=1,logged_in=vios,wwpn_status_reason=null
    lpar_name=mylpar,lpar_id=12,profile_name=default,slot_num=52,wwpn=c050726670a0002f,wwpn_status=1,logged_in=vios,wwpn_status_reason=null
    

    Lub jeżeli chcemy wylistować dane dotyczące kilku lparów:

    hscroot@hmc: lsnportlogin -m pserver --filter "\"lpar_ids=12,13\""
    

    Zalogowanie wirtualnego portu

    Zalogowanie wszystkich wirtualnych adapterów LPAR-a o ID 12 do SAN-a

    chnportlogin -o login -m pserver --id 12
    

    Wylogowanie wirtualnego portu

    Wylogowanie wszystkich wirtualnych portów z SAN-a należących do lpar-u numer 12

    chnportlogin -o logout -m pserver --id 12