Ну і ще два корисних скрипта.

Перший — для копіювання громіздких каталогів з купою файлів:

➜  bin  cat pfcp
#!/usr/bin/env bash

tar -cf - $1 | mbuffer -m 8G | tar -x -C $2

Хитрість у тому, що інфа читається за раз tar’ом, буферизується в ОЗП, а потім видається знову ж таки tar’у для запису в нове місце. Обсяг пам’яті для mbuffer бажано підстроїти під свої об’єми.

Другий скрипт дає змогу швидко передати цілий каталог по ssh без scp (не треба мені нагадувати, що є rsync):

➜  bin  cat pfst 
#!/usr/bin/env bash

tar cf - "$1" | pigz --fast -f -c -n | pv | ssh $2 "pigz -d - | tar xf -"

Тут єдина хитрість в тому, що використовується багатопоточний варіант компресора gz. Можна замінити на pbzip2 або pixz, але вони працюють набагато повільніше за pigz.

Мав нагоду затестити це чудо. Домашній сервак перший тиждень стояв без монітора, а дебажити ядро треба було, бо воно падало.

Хитрість в тому, що приймач повідомлень мав бути в іншій підмережі. Майже всі мануали пишуть, що треба, щоб приймач був у тій самій підмережі, що й сервер із netconsole, але це не так.

Тому нехай безголовий сервер має зовнішню IP-адресу a.b.c.d на інтерфейсі eth0, а приймач — x.y.z.t. Передавач буде надсилати логи з порта ABCD на порт приймача XYZT.

На приймачі:

netcat -l -u x.y.z.t XYZT

На безголовому сервері:

sudo dmesg -n 7
sudo modprobe netconsole "netconsole=ABCD@a.b.c.d/eth0,XYZT@x.y.z.t/aa:bb:cc:dd:ee:ff"

А тепер нюанс хитрощів. netconsole вимагає вказувати MAC-адресу приймача. І якщо він в іншій підмережі, то вказувати треба MAC-адресу маршрутизатора підмережі безголового сервера. Така собі ручна маршрутизація.

Щоб дізнатися адресу свого маршрутизатора, достатньо виконати таку команду:

sudo arp -a | grep "($(ip r | grep eth0 | grep default | awk '{print($3)}'))" | awk '{print($4)}'

Вона якраз і видасть MAC-адресу маршрутизатора для підмережі, до якої підключений безголовий сервак своїм інтерфейсом eth0.

Після modprobe на приймачі посипляться повідомлення від ядра безголового сервера. netcat можна запхнути в сесію tmux, щоб він собі тихенько працював «до востребования».

Сьогодні я покажу дещо з того, чим займався в інституті, і чого знову торкнувся впродовж останнього тижня. Подана інформація поділена на дві частини, перша призначена для тих, хто поняття не має, про що взагалі може йти мова, друга буде по суті.
Читати далі »

Викладую нову версію свого скрипта aping. Код трохи підчистив від непотребу, а ще тепер він виводить менше сміття.

#!/usr/bin/env bash

number=0
successed=0
failed=0
timeout=1

if [[ "-$1" == "-" ]]
then
        echo "Usage: `basename "$0"` <hostname | IP>"
        exit 1
fi

prev="undefined"

while true
do
        ((number++))
        echo -n "[#$number, `date +%H:%M:%S`, ok: $successed, fail: $failed] pinging $1..."
        ping -c 1 -q -W $timeout $1 >/dev/null 2>&1
        cur="$?"
        if [[ "$cur" == "0" ]]
        then
                ((successed++))
                echo -n "OK"
        else
                ((failed++))
                echo -n "FAIL"
        fi
        echo -n -e "\033[0K"
        if [[ "$cur" == "$prev" || "$prev" == "undefined" ]]
        then
                echo -n -e '\r'
        else
                echo -n -e '\n'
        fi
        prev="$cur"
        sleep 1
done

Якщо провайдер на IP-АТС заведений як звичайний юзер через register, а номерів на ньому висить кілька, то розрізняти, на який же саме номер зателефонували, не так просто. Принаймні, мені так здалося. Однак знайшлося рішення, і воно полягає в прямому розбиранні заголовків SIP.

Ось витяг із діалплана:

exten => _201,1,Set(dnum=${CUT(CUT(SIP_HEADER(TO),@,1),:,2)})
same => n,GotoIf($["${dnum}" = "0441000001"]?first)
same => n,GotoIf($["${dnum}" = "0441000002"]?second)
same => n,Goto(forbid)
same => n(first),Macro(greetingfirst)
same => n,Goto(forbid)
same => n(second),Macro(greetingsecond)
same => n,Goto(forbid)
same => n(forbid),Hangup()

Найголовніший тут рядок — перший. Якраз у ньому двома функціями CUT із заголовка SIP вирізається номер. Танці з Goto виключно для зручності, можна, звісно, трохи інакше.

Може, можна якось і простіше, але поки придумав тільки так.

У цей державно неспокійний вечір можу запропонувати свій рецепт чаю.

На велику чашку трохи м’яти, трохи липи, трохи ромашки, п’ять ягід роздавленої шипшини, трохи чисто чорного крупнолистового чаю. Заливається кип’ятком, закривається блюдцем і настоюється хвилин 5.

Потім надлишки трави можна вийняти, щоб не заважала пити. Після цього береться півстопки п’ятизіркового коньяку і виливається прямо в чай.

І спробуйте сказати, що не смачно і не корисно.

Оскільки більшість процесорів зараз — багатоядерні, арчеводу в радість використовувати кілька потоків, щоб дії виконувалися швидше.

Наприклад, якщо підправити /etc/makepkg.conf, можна заставити пакети не тільки компілюватися швидше:

MAKEFLAGS="-j4"

а ще й збиратися в тарболи з використанням паралельних алгоритмів стиснення:

COMPRESSGZ=(pigz -c -f -n)
COMPRESSBZ2=(pbzip2 -c -f)
COMPRESSXZ=(pixz /dev/stdin /dev/stdout)

Звісно, відповідні пакунки pbzip2, pigz, pixz треба окремо доставити в систему.

А ще можна скористатися отаким скриптом, щоб однією командою extract відразу розпакувати потрібний архів, причому також паралельно.

Дуже зручно.

Якщо ваш сервачок з Астеріском сидить за лінуксовим NAT’ом, а на самому маршрутизаторі треба переключатися між основним каналом і резервним (з різними зовнішніми IP-адресами), не забудьте давати команду

sudo conntrack -F

щоб клятий Астеріск не повісив SIP-транки з написом «Request sent».

Рік тому електронні ваги піді мною ледь не зашкалювали, показуючи захмарні й безсовісні 95 кг. За час навчання в інституті, проживання в гуртожитку я роздобрів щонайменше на 10 кг, до того ж, ще вдома, мене годували часто просто надлишково, хоча я цього точно не усвідомлював.

Звісно, схотілося з цим щось зробити. На початку того року я просто перестав жерти цукор і пити солодку воду, а минулого літа відмовився від усякого печива, цукерок, картоплі й надмірно жирних страв. Крім того, завів собі доволі постійний розпорядок відносно харчування — зранку майже півлітри молока з кукурудзяними, гречаними або житніми пластівцями (вівсянку ненавиджу) плюс чорний шоколад (найчорніший вітчизняного виробництва, який я знайшов у звичайних сільпошках, — це рошенівський 80% брют), нормальний повноцінний обід чотири рази на тиждень (зазвичай, солянка, салат, хліб і узвар; у середу роблю перерву на щось гарнірне і м’ясне, а субота-неділя проходить без обідів узагалі), а на вечерю або тушковані овочі з м’ясом (чи їх варіації, у мене багато власних рецептів 🙂), або нежирний сир (творог) із горіхами/сухофруктами + сік. Зауважу, що пиво так і залишилося в моєму раціоні, але ніяких чіпсів я більше не їм.

За цей рік я сильно змінився зовні, став набагато краще себе почувати, почав купувати джинси 32-го розміру замість 38-го, а вчора ваги показали 78 кг, чому я безмежно радий. It works. Bitches.

Я, здається, вже попереджав, що відмовлятимуся від Skype повністю. Довгий час я користуюся Jabber’ом (набагато довше, ніж Skype, між іншим), який мене повністю влаштовує. Останньою краплею, яка переповнила чашу мого терпіння, стали звіти про те, що вся переписка між користувачами Skype аналізується на предмет гіперпосилань. А якщо ще згадати недавно виявлені дірки, то мені взагалі не дуже то й зрозуміло, чому народ ним досі користується. Хоча хом’ячки — вони такі, типу просто працює, а піпл і хаває.

Можна просто ознайомитися зі статтею про безпеку Skype на нашій улюбленій Вікі.

Знаючи про вищеназване, мені схотілося самому перевірити, чи ж сує свого носа Skype в мої особисті дані на ПК, які до нього ніяким боком не відносяться. Скориставшись підсистемою безпеки ядра Linux TOMOYO, яка дає змогу обмежувати дії тих чи інших програм, протоколюючи всі спроби порушити правила, я виявив, що Skype таки сує свого носа в профіль Firefox, а ще він читає інформацію DMI з /sys. Цікаво, навіщо?

Власне, це була преамбула. Далі я хочу в картинках розказати про те, як можна зі мною зв’язатися тим, хто ще не знає, що таке Jabber.
Читати далі »