Perl – sprawdzanie poprawności argumentów podanych do skryptu

Jednym z podstawowych problemów jest walidacja danych podanych przez użytkownika do skryptu. Walidacji powinny być podane nawet opcje wywołania skryptów. Czyli powinniśmy prawdzić, czy faktycznie dana opcja, której użył użytkownik istnieje. Mój sposób na to jest prosty:

sub usage(); ## prototype of usage() function

usage() if (! GetOptions( …. ))

usage() if ($usage);

ps. tak, stworzyłem podstronę Sztuczki -> Perl, na której będę podsumowywał moje nalepsze praktyki ;). Nie jestem ekspertem ale ma to mi pozwolić lepiej zarządzać moją wiedzą…

Linux – logrotate – kilka mało używanych opcji choć przydatnych

Probując rozwiązac pewien problem przeglądałem sobie opcje konfiguracje programu logrotate.  Zauważyłem kilka ciekawych opcji, z których do tej pory nie korzystałem. Więc tak, program można uruchomić z opcją -d (debug), wtedy program nic nie będzie robił, tylko pokaże co chciałby zrobić, np:

rotating pattern: /var/log/rpmpkgs  weekly (no old logs will be kept)
empty log files are not rotated, old logs are removed
considering log /var/log/rpmpkgs
log does not need rotating

rotating pattern: /var/log/wtmp  monthly (1 rotations)
empty log files are rotated, only log files >= 1048576 bytes are rotated, old logs are removed
considering log /var/log/wtmp
log does not need rotating

Inną ciekawą opcją jest możliwość wstawiania daty w nazwę zamiast kolejnych numerów: dateext, kolejna to maxage która powoduje usunięcie logów po określonej ilości dni (nie ilości rotacji!). Musze tylko sprawdzić jak to działa z delaycompress 😀

Linux – sfdisk i zabezpieczenie listy partycji na dyskach

Proste polecenie dodane do crona (patrz niżej) pozwala zapisać aktualną listę partycji do plików. Pliki w formacie dump-a z polecenia sfdisk mogą być wykorzystane do otworzenia układu partycji.

for DISK in `sfdisk -l 2>/dev/null  | grep Disk | sed 's/[:\/]/ /g' | awk '{ print $3}'`;do sfdisk -d /dev/$DISK > /backups/disks_layout/${DISK}.out;  done

W moim przypadku uzyskujemy pliki:

[root@centos storage1]# ls -l /backups/disks_layout/
total 12
-rw-r--r-- 1 root root 412 Jul 13 19:31 hda.out
-rw-r--r-- 1 root root 251 Jul 13 19:31 sda.out
-rw-r--r-- 1 root root 250 Jul 13 19:31 sdb.out

a przykładowy plik ma postać:

[root@centos storage1]# cat sdb.out
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=       63, size=2930272002, Id= c
/dev/sdb2 : start=        0, size=        0, Id= 0
/dev/sdb3 : start=        0, size=        0, Id= 0
/dev/sdb4 : start=        0, size=        0, Id= 0

Linux – lista dysków twardych w systemie

Przygotowując się do najgorszego należy widzieć jakie dyski mamy w systemie (by móc później otworzyć taką samą konfuracje dysków), tylko jak to sprawdzić? Najprościej użyć fdisk -l ;). Jeżeli nie podamy urządzenia, które nas intersuje, wylistuje informację o wszystkich dyskach!

[root@centos data1]# fdisk -l | grep "Disk"
Disk /dev/hda: 40.0 GB, 40020664320 bytes
Disk /dev/sda: 1500.2 GB, 1500299395072 bytes
Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes

Wynik polecenia proponowałbym zapisywać na twardy dysk co jakiś czas (np. raz w tygodniu) i umiesczać w backupie. Pozwoli nam to w najgorszym przypadku odczytać plik z kopii zapasowej, na jego podstawie stworzyć tablicę partycji i wtedy można już używać Baculy ;).

Linux: Bacula – bscan – przykład

[root@centos storage1]# bscan -v -m FileStorage_USBDisk2 -V  USB2Volume002
bscan: butil.c:281 Using device: "FileStorage_USBDisk2" for reading.
13-Jul 07:41 bscan JobId 0: Ready to read from volume "USB2Volume002" on device "FileStorage_USBDisk2" (/backups/bacula/storages/storage1).
bscan: bscan.c:308 Using Database: bacula, User: bacula
bscan: bscan.c:450 Pool record for File found in DB.
bscan: bscan.c:464 Pool type "Backup" is OK.
bscan: bscan.c:474 Media record for USB2Volume002 found in DB.
bscan: bscan.c:492 Media type "File" is OK.
bscan: bscan.c:502 VOL_LABEL: OK for Volume: USB2Volume002
bscan: bscan.c:520 SOS_LABEL: Found Job record for JobId: 6
13-Jul 07:43 bscan JobId 0: End of Volume at file 0 on device "FileStorage_USBDisk2" (/backups/bacula/storages/storage1), Volume "USB2Volume002"
bscan: bscan.c:337-6 ========== JobId=0 ========
bscan: bscan.c:337-6 ========== JobId=6 ========
bscan: bscan.c:342 Create JobMedia for Job BackupLaptopCzz60610.2010-07-13_06.12.01_12
bscan: bscan.c:966 Updated Media record at end of Volume: USB2Volume002
13-Jul 07:43 bscan JobId 0: End of all volumes.
bscan: bscan.c:966 Updated Media record at end of Volume: USB2Volume002
bscan: bscan.c:637 End of all Volumes. VolFiles=0 VolBlocks=0 VolBytes=50,084,965
Records would have been added or updated in the catalog:
1 Media
1 Pool
1 Job
397 File
[root@centos storage1]#

Linux: CentOS 5 i Bacula

CentOS to system operacyjny, który jest przekompilowaną komercyjną wersją dystrybucji RedHat Enterprise (z pewnymi wyjątkami). Jako że RedHat Enterprise  jest powszechnie używany postanowiłem zainstalować CentOS-a ;). Niestety brakuje w nim dużo oprogramowania dostępnego w normalnych dystrybucjach :/ Jakby ktoś szukał Baculi, znajdzie pod adresem: http://www.pramberger.at/peter/services/repository/rhel5/ (będzie działać także w CentOS-ie).