MS-Beer

Да създадем файл с произволно съдържание

Понякога се налага да разполагаме с някакъв голям или малък файл за някаква проба или тест или каквото и да е. В случая ни трябва файл с размер 1GB, не ни интересува какво има в него и какъв е този файл, единствено размера има значение!

dd if=/dev/zero of=testfile bs=1МБ count=1024

Това ще снесе файл с име testfile в текущата директория, ще бъде с размер точно 1GB.

Нещо за софтуерния RAID1 в линукс

Конфигурирането на RAID1 по време на инсталацията е лесно и бързо, но има нещо важно, което лесно може да се пропусне – конфигурирането на Grub да зарежда от двата диска в масива:

Спира се Grub менюто с c и пишем горе долу това:
grub> root (hd1,0)
grub> setup (hd1)
grub> root (hd0,0)
grub> setup (hd0)

След това ESC и зареждането продължава нормално.

Другият вариант на същото е за случаите, в които нямаме достъп “на живо” до компютъра:
# grub
grub> device (hd0) /dev/sda
grub> device (hd1) /dev/sdb
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> quit

Палите свещичка и рестартирате.

Бърз начин да затрием цял диск

Ето и най-бързия начин да погубите информацията на диска си:
dd if=/dev/zero of=/dev/sda bs=1M
Ще покрие целия диск с нули, включително boot-сектор, всички налични тялове и т.н.
Като вариант може вместо /dev/zero да се ползва /dev/random, което ще напълни диска с произволно генерирана информация вместо “нули”.

ZFS – сканиране за грешки

Как ползвате fsck на ZFS файлова система? Май никак. Или поне никога не се е налагало да пишете root паролата преди зареждането на операционната система, за да може диска да бъде сканиран. ZFS е винаги чиста дори след спиране на тока. Информацията е винаги непокътната. За хората, които се притесняват, все пак има каква команда да изпълните и да се уверите, че всичко е наред с файловата система.
За разлика от fsck, която трябва да се пуска само на немонтиран дял, тази работи и на монтирани и работещи дялове:
# zpool scrub mypool
Ще провери чексумите на всичката съхранена информация и ще възстанови, ако има какво.
Лошото обаче е, че предизвиква доста сериозна дискова активност, така че внимавайте с това.
В случай на нужда, сканирането може да се прекрати с:
# zpool scrub -s mypool

Да забраним Google Talk

Ако някой има нужда да забрани Google Talk покаквато и да е причина, ето как става:
Прави се DNS запис за chatenabled.mail.google.com, който сочи примерно към 127.0.0.1.
Сега когато си отворите пощата, Gtalk аплетчето няма да се свързва.

Arris Cornerstone 1500 CMTS

Arris Cornerstone 1000/1100/1500 са бриджове и могат да работят само като такива.
Пускам конфигурацията на една такава машинка заедно с решението на проблем, който срещнах по време на експлоатация:

[Cornerstone] remote1> putmng display
$ box
name "Cornerstone"
high-temp-threshold 55
$ admin
sw-server-ip-addr 172.16.1.2
provisioning-control use-nvram
$ ip-level
config-ip-address 10.10.255.254
config-ip-subnet 255.255.0.0
config-ip-gateway 10.10.0.1
$ admin
config-tftp-ip-addr 172.16.1.2
time-rfc868-addr 172.16.1.2
time-offset 7200
time-sntp-addr 172.16.1.2
$ downstream
frequency 400000000
modulation qam256
power 530
$ upstream-specific/4
frequency 32000000
power 0
$ upstream-specific/5
frequency 27000000
power 20
$ upstream-specific/6
frequency 27000000
power 0
$ upstream-specific/7
frequency 27000000
power 0
$ cable-level
admin-status up
$ forwarder
proxy-arp enable
$ admin
bootp-relay-control relay-tagging-enabled
$ bootp-modify/1
server-ip-addr 172.16.1.2
status active
$ ip-level
dns-control enabled
$ dns-modify/1
server-ip-addr 172.16.1.10
status active
$ dns-modify/2
server-ip-addr 172.16.1.20
status active
$ ip-level
dns-domain-name "cornerstone.kamenitza.org"
$ accounts
inactivity-timer 60
$ cable-level
concatenation-control disabled
$ admin
ssh-control enabled
ssh-host-key-bits 1024
ssh-server-key-bits 2048
$ cable-level
cpe-active-default enabled

172.16.1.2 – DHCP, TFTP, NTP, DAYTIME сървър
10.10.255.254 – IP адреса на CMTS-а
10.10.1.1 – IP адреса на аксес рутера, към който е закачен CMTS-a

Топологията е горе долу такава:
DHCP--->ROUTER--->CMTS--->Cable Modems

Доста странен проблем се получи в тази ситуация – клиентите (CPE-тата) получаваха коректни настройки от DHCP сървъра, но нямаха мрежова свързаност?!
WTF!? ще си кажете…
Щом получават настройките – те ги получават по мрежата, значи няма как да не работи!

При всеки мрежовата свързаност се възстановяваше веднага след като напиша:
# arping 1.2.3.4
на рутера към който е закачен CMTS-a. Това е ИП адреса на мрежовата карта на клиента, не на кабелния модем.
Значи нещо се дъни най-вероятно на второ ниво!?
Какво ли не правих – пускане и спиране на proxyarp на CMTS-a, пускане и спиране на dhcprelay на рутера – никаква промяна.

Реших проблема по възможно най-простия и дървен начин:
#!/bin/bash
i=2
while [ $i -lt 255 ]
do
/sbin/arping -q -c 1 10.20.30.$i &
let i=$i+1
done

Това скриптче се изпълнява през 2 минути от cron.
Ако някой с подобна топология няма такива проблеми – ще се радвам да сподели по-елегантно решение :)

Събиране на статистики с RRD и SNMP

Ще дам пример със статистика на мрежов интерфейс на линукс компютър.
Какво е необходимо:
1. Инсталиран и конфигуриран SNMP демон – пример.
2. Инсталиран и работещ RRDTool.
3. Добре охладена халба бира и кофа с чипс.

SNMP ще ни предостави достъп до всички системни “броячи”, ако мога така да ги нареча:
# snmpwalk -v2c -c public localhost
Ще видите доста дълъг списък.
Като начало ни трябват само мрежовите интерфейси, с които разполага машината:
# snmpwalk -v2c -c public localhost IF-MIB::ifDescr
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: eth1
IF-MIB::ifDescr.4 = STRING: eth2
IF-MIB::ifDescr.5 = STRING: eth3

От тук ни трябва само индекса на мрежовата карта, която ще следим – да кажем eth0, която е с индекс 2.

За да получим изпратените от интерфейса байтове:
# snmpwalk -v2c -c public localhost IF-MIB::ifHCOutOctets.2
IF-MIB::ifHCOutOctets.2 = Counter64: 6377552360

За да получим приетите от интерфейса байтове:
# snmpwalk -v2c -c public localhost IF-MIB::ifHCInOctets.2
IF-MIB::ifHCInOctets.2 = Counter64: 135903877111

Да, но на нас ни трябват само цифрите от брояча, и вместо да парсваме целия този стринг, който получаваме от snmpwalk, добавяме параметрите -Oqv:
# snmpwalk -v2c -c public -Oqv localhost IF-MIB::ifHCOutOctets.2
6377552360

и
# snmpwalk -v2c -c public -Oqv localhost IF-MIB::ifHCInOctets.2
135903877111

Малко по-добре нали :)

Така, вече имаме данните от броячите. Сега трябва да подготвим RRD базата данни за съхранението им:
/opt/rrdtool/bin/rrdtool create eth0.rrd --step 300 --start N \
DS:in:DERIVE:600:0:U \
DS:out:DERIVE:600:0:U \
RRA:AVERAGE:0.5:1:288 \
RRA:AVERAGE:0.5:6:2016 \
RRA:AVERAGE:0.5:24:8640

Като съответно корегирате пътя до rrdtool с този на вашата инсталация. Не би трябвало да се налага корекция на която и да е от цифрите, които виждате тук. Изпълнението на тази команда ще създаде файл eth0.rrd, в който ще съхраняваме отчитанията на броячите на мрежовия интерфейс.

Примерен скрипт, който проверява броячите и ги съхранява в базата данни:
#!/bin/bash
out=`snmpwalk -v2c -Oqv -c public localhost IF-MIB::ifHCOutOctets.2`
in=`snmpwalk -v2c -Oqv -c public localhost IF-MIB::ifHCInOctets.2`
/opt/rrdtool/bin/rrdtool update eth0.rrd -t in:out N:$in:$out

Това кодче трявба да се изпълнява на всеки 5 минути.
Добавяме го в cron:
# crontab -e
И добавяме следния ред:
*/5 * * * * /rrd/updaterrd >> /rrd/rrd.log
Изхода от всяко изпълнение ще се записва във файла /rrd/rrd.log – помага при търсене на грешки.

Настроихме компютъра да отчита и събира статистиките за интерфейса, остана да ги изрисуваме:
/opt/rrdtool/bin/rrdtool graph -a PNG eth0.png \
--title "Daily stats" --start -1day \
DEF:i=eth0.rrd:in:AVERAGE DEF:o=eth0.rrd:out:AVERAGE \
-h 80 -w 250 \
AREA:o#0903FF:"Out" LINE1:i#00ff00:"In\n"

Това ще изрисува статистиката за последният ден. Можете да я генерирате директно в директория достъпна от уеб сървъра, за да може да бъде поставена по-късно в уеб сайт.

Графиката показва скоростта на натоварване в MB/s мегабайти в секунда (не мегабити).

RRDTool е много мощен инструмент, и ако се зачетете в документацията му ще откриете куп параметри, с които да направите вашите графики максимално удобни за четене и с външен вид, който ви допада.

Сега докато си изпиете бирата и си изхрупате чипса ще са се събрали достатъчно данни, за да проверите какво сте направили.

Очаквайте продължение…

AWK HOWTO с примери

На този линк е много добро описание с примерчета как се работи с awk. Ако намеря време ще го преведа.

Rsync HOWTO (пример в линукс)

Най-прост пример ще дам.
Създайте /etc/rsyncd.conf със следното съдържание:

max connections = 10
log file = /var/log/rsync.log
timeout = 300
[share]
comment = Shared folder
path = /share
read only = yes
list = yes
uid = nobody
gid = nobody
auth users = gosho
secrets file = /etc/rsyncd.secrets

Тазки конфигурация ще направи “споделен обект” с име share, който ще е самата директория /share (не е нужно двете да са с еднакви имена). Достъпът до тази директория ще бъде само за четене и ще се осъществява от името на потребител nobody, така че той трябва да има поне права за четене. Права за достъп през rsync ще има gosho, като паролата му ще бъде в /etc/rsyncd.secrets.

Съдържанието на /etc/rsyncd.secrets:

gosho:goshoto

Т.е. паролата на gosho е goshoto.
Следва бърза предпазна мярка:

# chmod 600 /etc/rsyncd.secrets

Така никой друг няма да може да чете файла с паролите.
За дистрибуциите, които ползват xinetd редактирате /etc/xinetd.d/rsync, така че:
disable = yes
да стане:
disable = no
xinetd трябва да бъде рестартиран след това:
# /etc/init.d/xinetd restart

Остана само да се разреши порт TCP/873 през firewall-a и всичко е готово.

Ето няколко примера за употребата:

# rsync rsync://gosho@server.address/
Ще покаже списъка със споделените директории.

# rsync -aPv rsync://gosho@server.address/share .
Ще изкопира всичко от посоченият път рекурсивно в текущата директория.

За да се избегне ръчното писане на паролата и ползването на rsync в скрипт може да се сетне променливата:
# export RSYNC_PASSWORD=goshoto

Приятно синхронизиране, бекъпване, копиране и т.н!

Windows 7 GodMode

За достъп до всякакви допълнителни настройки създайте папка с името:
GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
И тази папка вече не е тази папка :)

Postgresql 8.4 в CentOS 5.4

По начало CentOS 5.4 идва с Postgresql версия 8.1.
За да инсталирате по-нова е необходимо това:

# rpm -Uvh http://yum.pgsqlrpms.org/reporpms/8.4/pgdg-centos-8.4-1.noarch.rpm

Следва стандартното:
# yum install postgresql-server

Нормална клавиатура в Windows 7

Който вече е минал на Windows 7 сигурно е забелязал неприятния начин за писане на кавички, а именно, че след натискането на самата кавичка ” трябва да се натисне и нещо друго (интервал), за да се появи тя.
Отстранява се като се промени регионалната нстройка на клавиатурата от US International на US.

Инсталиране на SETI@HOME BOINC клиент във FreeBSD

1. отиваме в /usr/ports/net/boinc-client/
2. отваряме Makefile в текстов редактор
3. променяме
CONFIGURE_ARGS=--disable-server
както следва:
За 32 битов FreeBSD променяме на:
CONFIGURE_ARGS=--disable-server --with-boinc-platform=i686-pc-freebsd --with-boinc-alt-platform=i686-pc-linux-gnu
За 64 битов FreeBSD променяме на:
CONFIGURE_ARGS=--disable-server --with-boinc-platform=x86_64-pc-freebsd --with-boinc-alt-platform=i686-pc-linux-gnu
4. make install clean
5. при грешки от рода на “ELF 0 ….”, проверете дали са инсталирани тези:
/usr/ports/emulators/linux_base-fc4 или по-висока версия

# sysctl kern.elf32.fallback_brand=3

Може би ще има грешки с емулацията на линукс, ако в момента се емулира ядро 2.4, тогава:

# sysctl compat.linux.osrelease=2.6.16

И се инсталира нов линукс емулатор – фc6 примерно.

Приятно смятане!

Възстановяване на забравена парола на Cisco рутер

Не е точно възстановяване, а по-скоро ресетване:

1. Закачате се към конзолата със сериен кабел.
2. Рестартирате/включвате рутера и натискате CTRL+BREAK или CTRL+B докато зареждането спре в rommon.
3. confreg 0×2142
4. reset или рестартиране от тока.
5. За да запазите конфигурацията: copy start run
6. Сега сменяте enable паролата с:
conf t
enable secret newpassword
exit

7. Записвате с write
8. Рестартирате рутера отново в rommon
9. Връщате конфигурационният регистър както си беше: confreg 0×2102
10. Рестартирате рутера.

Return top