Linux. Узнать размер файла в байтах и сохранить его в переменную в скрипте.

Размер файла в байтах

Для дальнейшего использования удобнее всего получить размер файла с помощью утилиты du. Она входит в пакет coreutils, так что есть практически везде:

du -sb ./test.txt

где:
-sb — показывать размер в байтах
./test.txt — путь к файлу.

Вывод:

10 ./test.txt

Запись значения в переменную

Вывод команды du скармливаем awk и пишем результат в переменную:

CURSIZE=`du -sb path/file|awk '{print $1}'`

Пример использования

Можно проверить файл на минимальный размер, например для того, чтобы узнать, не произошло ли ошибок при скачивании:

MINSIZE="10" #minimal file size (in bytes)
    
#check file size
CURSIZE=`du -sb "path/file"|awk '{print $1}'`
if [ "$CURSIZE" -le "MINSIZE" ]; then
	echo "File is small. Download error?"
fi

Алкоголь не только вреден, но и полезен, и даже не с утра. Про понос и алкоголь.

[псевдо]историческая байка, рассказанная мне историком во время прогулки.

Итак, в хренадцатом веке Европу охватила эпидемия холеры. Если кто не знает, холеру вызывает холерный вибрион, это такая бактерия. Она как анон с имиджборд, любит говно и его продуцирует, т.е. заставляет юзера, на которого совершен рейд, срать поносом, пока тот не выйдет из сети, т.е. не сдохнет. А кто тронул зараженное говно, становится новым объектом говнобуллинга, и т.д.

Распространялись говноаноны вибрионы по тогдашним каналам связи, т.е. по воде, прекрасно чувствуя себя в озерах и реках, куда юзеры сливали говно и из этого же пили, способствуя распространению анонов вибрионов.

И вот в одном княжестве на территории современной Германии произошло удивительное событие. От холерных анонов вибрионов вымерла целая деревня, окромя священника местной церкви (непонятно почему) и одного горького пьяницы, про которого, как говорили: «почти не пил воды, а на завтрак он потреблял пиво, в обед вино, а к ужину шнапс». Хотя я, как старый алкоголик, думаю, то не шнапс был, а самый настоящий самогон.

Тут чуть было Инквизиция не сожгла нашего пьяницу, прознав о такой аномалии. Естественно, поп настучал куда следует — типа вон вся деревня вымерла, а алкаш живой, сцуко, колдун, нах!!!одинодин.

Но саму казнь должен был производить курфюрст (по-нашему князь, т.е. мелкий феодал).

Уж не знаю, как он там выкрутился, но алкаш остался жив. А курфюрст провел первый в истории биологический эксперимент, умный и нестандартно мыслящий был этот курфюрст.

Набрав подопытных из задолжавших крестьян и преступников, он разделил их на три группы:

1. Пили просто воду
2. Пили воду наполовину сдобренную крепким вином/водкой
3. Пили алкоголь, воду давали эпизодически.

О конкретных результатах эксперимента мы не знаем, т.к. курфюрст либо не документировал исследования, либо они потеряны.

Но через несколько лет у курфюрста образовалась боеспособная армия, и он смог захватить некоторых соседей, пока сам не помер от старости.

Походу чувак нашел оптимальную концентрацию алкоголя, чтоб и микробов того, и армия боеспособность сохраняла.

Ангст, эмо, индастриал и бзсхднсть.

Погуляли мы немножко.


По клику откроется полноразмерный вариант.

Фото интересно странным эффектом, на камере и в редакторе преобразование в оттенки серого не делали, а получилось будто бы фотографировали на ч/б пленку.

Нравятся мне такие места.

Прикольно прогулялись, пошли на заброшенную промзону, а ее уже кто-то выкупил. Ездят камазы, прямо в стиле «Я Уран 42, вагонетка пошла по трубе на север», навалили терриконов из щебня (загадили, суки, все), а на воротах сидит довольно вежливое тетко-охранницо, не ругает, но за шлагбаум проходить не велит, и фоткать не велит. Мол за шлагбаумом вас вагонетка собьет, а фоткать — начальство ругает, оно камеры понавесило.

Получение root-прав на Андроид 5.0 и удаление лишних приложений

0. Включаем в настройках возможность устанавливать приложения из неизвестных источников (Настройки —> Безопасность —> Неизвестные источники)
1. Ставим Kingroot 4.85
2. Пролистываем приветственный экран Kingroot до конца, жмем кнопку на экране, получаем root
3. Перезагружаем телефон
4. Опять запускаем Kingroot
5. Выбираем на главном экране Удаление программ
6. Выкидываем ненужное но неудаляемое дерьмо типа спамяндекса.

Отключение спящего режима на Android

Начальство попросило сделать секретарше отдельные настольные часы, чо, нашел старый смартфон с 5 стоковым андроидом и дохлым радиомодулем, т.е. не связи, не вайфая, как раз годен только часы отображать. Была проблема с тем, что телефон засыпал, соответственно, переставал часы показывать.

Как вылечить нашел здесь Копия в PDF

Заодно уж, как зайти в режим разработчика Копия в PDF

Получение в скрипте bash PID процесса, запущенного в фоне.

Преамбула

В Linux практически любой процесс можно сделать фоновым, для чего достаточно добавить & через пробел после команды. Например:

openvpn --config ~/vpn/myvpn.ovpn &

Да, про опцию конфига daemon писать в комментах не надо, вызов openvpn просто для примера.

Но как же управлять процессом, например, остановить именно запущенный? По PID. Почему просто не воспользоваться pkill? Поясню на реальной задаче, например, на машине запускается несколько процессов openvpn, обеспечивающих коннект к нескольким провайдерам или нескольким сетям — если сделать pkill openvpn, положим сразу все процессы, а не конкретный. Значит, чтобы придушить конкретный процесс, надо получить конкретный PID.

Получение PID запущенного в фоне процесса.

На самом деле все придумали за нас, в bash есть системная переменная $!, хранящая PID последнего запущенного в фоне процесса.

Чтобы в другом скрипте остановить процесс, запущенный в первом, например, мы должны написать два скрипта для старта и остановки некоторой программы, мы должны куда-то сохранить полученный PID.

Демоны в Linux обычно делают текстовый файл (т.н. PID-файл), куда записывают свой PID при запуске. В своем скрипте мы можем сделать также:

openvpn --config ~/vpn/myvpn.ovpn & #запуск процесса
VPNPID=$! #сохраняем PID в переменную
echo "VPN PID $VPNPID" #выводим PID на консоль
echo $VPNPID > /tmp/myvpn.pid #сохраняем в файл

Использование сохраненного PID в другом скрипте

Например, для остановки процесса:

VPNPID=`cat "/tmp/myvpn.pid"` # Читаем PID-файл
echo "Stopping: $VPNPID" # Сообщение пользователю
kill "$VPNPID" # Завершаем процесс с сохраненным PID
rm "$PIDFILE" # Удаляем файл с неактуальным PID

Примечание по поводу network namespaces

Поскольку в системе всем процессам выдается уникальный PID, вне зависимости, например, от network namespace, в котором запущен процесс, соответственно, алгоритм сработает и для процесса, запущенного в сетевом неймспейсе:

Запуск:
ip netns exec <имя_неймспейса> openvpn --config ~/vpn/myvpn.ovpn &
VPNPID=$!
echo "VPN PID $VPNPID"
echo $VPNPID > /myfiles/server/ddns/vpn.pid

Останов:

VPNPID=`cat "/tmp/myvpn.pid"` # Читаем PID-файл
echo "Stopping: $VPNPID" # Сообщение пользователю
kill "$VPNPID" # Завершаем процесс с сохраненным PID
rm "$PIDFILE" # Удаляем файл с неактуальным PID

ФАНФАРЫ!

Linux dialog —tailbox

tailbox — интересный виджет программы dialog, позволяющий видеть дополнения в текстовом файле в реальном времени, что делает его удобным для отображения логов


Прямая ссылка: https://youtu.be/kdOjJFtbuI4

Если переданный программе лог не дополняется, то tailbox просто отображает последние строки из файла (насколько хватает заданных размеров виджета)

Вызов виджета:

dialog --title "заголовок_окна"  \
	  --exit-label "Надпись_на_кнопке_выхода" \
       --tailbox "текстовый_файл" высота ширина

Например:

dialog --title "LOG"  \
	  --exit-label "Close log window" \
       --tailbox "/tmp/mylog.log" 24 70

Для демонстрации написал простой log viewer.
Использование:

logview путь_к_файлу

logview

Скрипт на GitHub

Отправка лога одновременно на дополнительный терминал, в файл и отображение в tailbox’е

Вроде бы виджет простой, но при некоторой смекалке можно делать интересные вещи, например, вести лог сразу в трех местах — отображая его в --tailbox‘е, одновременно отправляя изменения, происходящие в реальном времени на отдельный терминал, и сохраняя лог в файл (с перезаписью или дозаписью)

Прямая ссылка https://youtu.be/AARNx4SbYJg

Добиться этого можно, совместив dialog tailbox с командой tee (копия).

Написал демонстрационный скрипт:
Демонстрационный скрипт

В качестве источника логов, демо-скрипт вызывает в фоновом режиме другой скрипт tscript, который выводит 10 случайных чисел на консоль и завершает работу:

#!/bin/bash

SEC=1
CTR=10

echo "Test script, write to STDOUT random number after $SEC sec."

while [ "$CTR" -ne 0 ];do
    let "CTR=CTR-1"
    printf '%x Number: %x\n' $CTR $RANDOM
    sleep $SEC
done

echo "Complete!"

Настройки скрипта для поиграться можно провести через внутренние переменные:

LOG_FILE="./test.log" — если значение не задано, создается временный файл, который по завершению скрипта удаляется.
LOG_TTY="/dev/tty4" — если значение не задано, лог в реалтайме не отправляется на дополнительный терминал
RMLOG=00 — по завершению скрипта лог не удаляется, 1 — удаляется.
LOG_APPEND=10 — при каждом запуске создается новый файл. 1 — добавление данных в лог, если он существует.

Скрипты на GitHub

На смерть митраистского попа Смирнова

Поп, как король себя ведущий,
Корону все же получил,
Не внял начальства сообщенью,
И всем по-прежнему хамил.

Не поняло того начальство.
Пыталось как-то вразумить,
Не получилось, не взлетело.
Позвали лично на ковер.

Колямбина прохладная (или реальная питерская крипота).

Котятки, я тут ездил потусить в Расчленинград и привез вам оттуда ковид расчлененку байку.

Понаехал как-то в Питер некто Колямба, аж из самого сердца России, т.е. из Сибири. Панк, тусовщик, любитель приключений и покурить, и нелюбитель постоянной работы и вообще чего-то постоянного. Личность ветреная, но компанейская. Собственно, байку он мне и рассказал, я лишь придаю некую литературную обработку.

В Питере были у него родственники, но отношения между питерской и сибирской частью клана Колямбы были хуже чем у Монтекки и Капулетти, так что вписывался Колямба у друзей да перебивался случайными заработками. Впрочем, в Питере жила и старшая сестра его матери, тихая музейная или библиотечная старушка, которая вообще всех родственников, кроме сибирской сестры считала, и не без основания, жуликами, аферистами и алкашами. А сибирскую сестру — простушкой и женщиной с низкой социальной ответственностью, которая, вместо того, чтобы продолжить профессорско-музейную династию, выскочила замуж за какого-то шабашника, подтолкнув того брюхом к ЗАГСу, бросила институт, да и укатила с мужем в Сибирь.

Так или иначе, вышеозначенная благородная петербурженка померла, тихо уснув в своей постели в окружении любимых книг. Колямбина мать, а вслед за тем и Колямба, узнали об этом чуть ли не через полгода после печального события, да и то, только потому что старушка завещала единственную собственность, однушку где-то на Васильевском острове, сестре. Та прилетела из Сибири, утрясла бумажную волокиту, да и улетела обратно, прописав Колямбу на освободившуюся жилплощадь. И появилась у Колямбы на двадцать втором году жизни своя питерская вписка с питерской пропиской, чему тот, естественно, обрадовался.

А вот питерская родня — совершенно таки наоборот, но поскольку, с завещанием ничего поделать не смогли, постарались максимально нагадить. После похорон вынесли из квартиры все, кроме ванны, унитаза, да кухонной плиты, и даже лампочки выкрутили, а ключи от квартиры выкинули в Финский залив. Кровать, на которой тетка преставилась, и ту вынесли и продали.

Но хули нам кабанам, друзья помогли Колямбе сменить замки, нашли где-то столик и пару стульев, внесли его нехитрый скарб, состоявший из небольшого рюкзака со шмотками, да подержанного ноутбука фирмы Хевлет Пацкард, вкрутили новые лампочки.

Оставался последний вопрос, а где спать? Надо сказать, работал главный герой нашей истории «менеджером» (а заодно охранником, электриком, слесарем и столяром) в бюро ритуальных услуг, так что вопрос с кроватью был решен по-панковски. Колямба взял под зарплату гроб, да и притащил его в квартиру. А че, и мягко, и тепло, и не у кого из знакомых такой кровати нет, да и готичку-другую на поебок развести можно. А что спать в гробу нельзя, типа смерть зовешь — так Колямба не в б-га, не в черта, не в Ктулху, иже с ними и в какую другую нечисть не верил.

Новоселье отпраздновали масштабно, явился ажно директор похоронной конторы с коньяком, а также куча панков с различными алкогольными и не только субстанциями. Колямбу, впрочем, в середине вечеринки, окончательно отправила в нокаут плюха «мягкого», а веселые друзья положили его в спальное место. Естественно, через некоторое время перепившие ребята и девчата решили над спящим поиздеваться, и загримировали его подручными средствами так, что на хеллоуинском маскараде Колямба точно бы стал звездой, краше в гроб кладут, простите за каламбур. Но Колямба так и не проснулся. Мягкий, он только на ощупь мягкий, а убивает твердо, особенно в сочетании с алкоголем.

Под конец все блядство разогнал похоронный директор, остававшийся самым трезвым (еще бы, я видел этого кабана, да его не то, что бухло, его смерть будет в конец списка переносить). Кто-то, правда, перед уходом, прикрыл гроб с Колямбой крышкой, которая стояла тут же, оставив малозаметную извне щель для воздуха.

Надо сказать, что дверь в квартире нашего героя была устроена так, что закрыть ее на замок можно было только ключом, а не просто захлопнув за собой. В этом, конечно, и свои плюсы есть (не оставишь ключ внутри, захлопнув дверь снаружи), но в дальнейшем это сыграло роковую роль.

Через некоторое время мимо дома Колямбы проходили, возвращаясь из ночного клуба, Светка и Олька, подвыпившие родственницы покойной музейщицы, одной из которых и должна была достаться квартира, если бы не предусмотрительная хозяйка и ее завещание:

— Светк, о, у бабы Киры-то хата пустая, а у нас еще вискаря целая бутылка! Пойдем, посидим? Хуле на улице жопу морозить?
— А как мы туда попадем, твои предки ключи выкинули, чтоб сибирским валенкам подосрать?
— Да не выкинули, вон они, ключики! — Светка позвенела связкой ключей, извлеченной из кармана куртки.
— А вдруг клуша северная замок сменила?
— Успокойся, она документы оформила и обратно в свою Сибирь съебала, даже в хату не заходила.

Девицы хихикнули, проникли в подъезд, поднялись на нужный этаж. Дверь в квартиру оказалась приоткрытой.

— Бля, Светка, походу бомжи залезли. Может ну его в пень, ментов вызовем?
— Оля, какие, нахер, менты. Мы с тобой бухие, да и дунули еще.
— Пошли тогда отсюда!
— Щщщазз! Чтоб я свою квартиру бомжам?!

Светка аж вскипела от гнева.

— Пошли! У меня баллон есть газовый! Ща я им устрою!

И девушки осторожно вошли внутрь.

В комнате их взгляду предстала сюрреалистическая картина. У стены стоял розовый с черной бахромой гроб, освещаемый мертвенным синеватым светом ноутбука, впрочем, на черный ноутбук в темной комнате девицы внимания не обратили:

— Г-г-г-гроб…, — прошептала Светка.
— Ага, такой в котором бабу Киру хоронили… Пошли отсюда! — прошипела Ольга.

Цок! Цок-цок! Цок-цок! Раздавался громом стук женских туфелек на каблуках.

«Нечисть света боится», промелькнула в Ольгиной головке мысль, и Оля щелкнула выключателем, который случайно нащупала.

В тот же момент вспыхнула лампочка, а крышка гроба отлетела в сторону. Из гроба выскочило нечто даже отдаленно не напоминающее человека, бледное лицо, с огромными черно-синими глазами, вместо волос — кривые иглы, торчащие в разные стороны, ярко-красные уши, большой клоунский рот и следы чего-то цвета гнилого мяса на подбородке.

— ##$! Какая лошадь топает, спать %#@# не дает! #$###%$#! И крышку закрыли, вот ##%$#ки ####@$#@%кие ##$%^^#% вашу мать!

Шлеп! Словно тяжелый мешок с чем-то мягким уронили на пол.
Бум! Словно полый шар ударился о деревянный пол.
Дзвянь, дзвянь! Ударили по полу каблучки сорвавшихся с ног туфелек.

Раздалось журчание жидкости и шуршащий звук сползающего по стене тела.

— Тьфу, бля, две новых телки, и те никакие. Ладно, хоть похмелиться принесли. А крышку надо выкинуть.

Колямба утащил бутылку вискаря в свое ложе, обнял ее и продолжил досматривать сон.

Анекдот про мента

Боян, наверное, но я только вчера услышал:

Идет мент по городу и видит, чувак стоит перед зоомагазином, а там в витрине рыбы плавают, чувак в одну сторону глазами поведет, рыбы туда плывут, обратно глазами поведет, рыбы в другую сторону плывут.
Мент спрашивает:

— Че делаешь?
— Да я гипнотизер, смотрите, мое сознание выше, чем сознание рыб. Я туда глазами поведу — рыбы плывут туда, обратно — плывут обратно.
— А можно я попробую?
— Да, конечно.

Через полчаса гипнотизер прошел мимо зоомагазина.

Все отделение полиции стояло перед зоомагазином. И все беззвучно хлопали ртом.

Самоубийство надо делать качественно.

Меня тут завалили буквально письмами и просьбами прокомментировать смерть (самосожжение) журналистки. Ну я вам че, Невзоров что-ли, чтоб новости комментировать?

Но раз уж так хотите. Новгородские менты не первого человека довели, там по-моему был самый жесткий «Центр-Э» и «Центр-К» пока это еще даже не было мейнстримом. Вообще из Новгорода пошли самые адекватные анархисты, avtonom.org, а это должно о чем-то говорить.

Но это была бредистория, а история будет в том, что если уж захотел убить себя по политическим мотивам — делай это правильно. Не так сложно сделать яд или простую бомбу, чтобы унести с собой как минимум одного мента, его жену и детей. Особенно детей. Тогда ты уйдешь не просто так, если просто так — похихикают и забудут. А если заберешь с собой сатрапа, ублюдка, или его выродков — войдешь в историю.

Самоубийство надо совершать правильно!

Но, если у мента живет котик — выбери другого мента. За убийство котика тебя покарают Коты Ультхара, Ктулху и Азатот с Ньярлатхотепом.

Удачи!

Генерация самоподписанных ключей для Dovecot

Пригодится для локального сервера почты или для тестирования проекта, где нужен свой почтовый сервер. Буду эту тему дальше развивать, следите по тегу mailserver (копия).

Алгоритм решения.

1. Создаем приватный ключ для корневого сертификата.
2. Создаем самоподписанный корневой сертификат.
3. Создаем приватный ключ для простого (не корневого) сертификата.
4. Создаем запрос на подпись простого сертификата.
5. Создаем простой сертификат, подписанный с помощью корневого.
6. Копируем приватный ключ для простого сертификата и сам сертификат в /etc/dovecot/private/
7. Устанавливаем файлам права в 400. Т.е. разрешаем чтение только для владельца, остальное запрещаем.
8. Если dovecot будет запускаться под отдельным пользователем, а так и надо, не забываем сменить файлам владельца.

Автоматизация

Поскольку, с первого раза настройка почтового сервера может не получиться [ВОРЧАНИЕ ON] куча инструкций, противоречащих друг другу или неполных, но одной хорошей и конкретной нет [/ВОРЧАНИЕ OFF]

Вот скрипт:

#!/bin/bash

TMPPATH="/tmp/mailkeys"
OUTPATH="/etc/dovecot/private"

echo "Making temp path $TMPPATH..."
mkdir -p "$TMPPATH"
echo "Making output path $OUTPATH..."
mkdir -p "$OUTPATH"

echo "Generate a root private key (rootCA.key)..."
openssl genrsa -out "$TMPPATH/rootCA.key" 2048

echo "Generate a self-signed root sertificate (rootCA.pem):"
openssl req -x509 -new -nodes -key "$TMPPATH/rootCA.key" -days 2048 -out "$TMPPATH/rootCA.pem"

echo "Create private key for the final certificate (dovecot.key)..."
openssl genrsa -out "$TMPPATH/dovecot.key" 2048

echo "Create a certificate sign request (dovecot.csr):"
openssl req -new -key "$TMPPATH/dovecot.key" -out "$TMPPATH/dovecot.csr"

echo "Create final certificate..."
openssl x509 -req -in "$TMPPATH/dovecot.csr" -CA "$TMPPATH/rootCA.pem" -CAkey "$TMPPATH/rootCA.key" -CAcreateserial -out "$TMPPATH/dovecot.crt" -days 2048

echo "Copy key and certificate to $OUTPATH..."
cp "$TMPPATH/dovecot.key" "$OUTPATH/dovecot.key"
cp "$TMPPATH/dovecot.crt" "$OUTPATH/dovecot.crt"

echo "Set permissions..."
chmod 400 "$OUTPATH/dovecot.key"
chmod 400 "$OUTPATH/dovecot.crt"

echo "Complete!"

Скрипт на GitHub

Історії про котів

Воротник

Любимым местом в больнице был морг, потому что в морге никто не беспокоит. Звонит тебе, например, начальство, а тебя в кабинете нет. Начальство спрашивает напарника:

— А где Толя?
— Толя в морге, компьютер чинить ушел.

Начальство вешает трубку, и принимает ответ на веру, потому что неизвестно, то ли Толя ушел туда компьютер чинить, то ли Толя ушел туда тортик с кремом жрать. А с морга выдачи нет, своих не сдают. А начальству в морг идти впадлу, ибо это ж отдельный халат (строго по инструкции) перчатки и респиратор надевать надо, а кто ж в респираторе и перчатках начальство начальством считать будет, да последняя медсестра в минздрав пошлет.

Итак, сижу я как-то в морге, и таки действительно чиню комп. А на моей больной сколиозной шее примостился местный любимец Сюсечка, сиамский кот с коротким хвостом. Нет, это ему не в морге отпилили — таким родился.

Сюсечка мужиков очень любил, на руки лез, лизался, как собака, и постоянно где-то пытался на тебе лечь. С коленей выгоняешь, лезет на руки, с рук — на шею, с шеи — на голову.

От него прятались менты и плакали прокуроры, синяя форма последних в полосатую за три минуты превращалась.

Итак, зашел я, приступил к починке компьютера и сети, а Сюсечка устроился на моей шее, словно воротник. Передние лапы слева, задние справа, можно как пряжку сцепить на горле, он не пошевелится.

И тут заходит заместитель главного бухгалтера, которую в морг отправили инвентаризацию закончить:

— Ой, Толик, а какой красивый у тебя воротник!

И тут к ней «воротник» поворачивается и говорит так вопросительно: «мрмя?!»

Слава Ктулху, не обосралась, не родила, и даже не убежала, но резко села костлявой дупой на бетонный пол. Аж зазвенело. Потом покурить вышла. Морг инвентаризацию прошел.

«Как мне хуево…»

Иду я с работы, и тут подруливает ко мне Саня-охранник, прям без руля, одно что стены собой не сносит:

— Толь, подмени на полночи, ща к жене схожу, вернусь, есличо пузырь поставлю!
— Нахуй, Саша, мне твой пузырь, я тя так заменю, по дружбе (уж очень хотелось мне по кабинетам пошароебиться и посмотреть, может чего на сервере нет). Ничего нового не нашел.
Ну вот я сижу и думаю, медленно читая как раз вышедший роман «МЕТРО 2033», и тут слышу:

— Ой, ой, ой!!!
— Как мне хуево!

— Ой, ой, ой!!!
— Как мне хуево!

— Ой, ой, ой!!!
— Как мне хуево!

Звоню в приемный покой:

— У вас там человек умирает, или алкаша привезли, вы внутрь его занесите!
— Да нет тут никого! Мы сходили проверили!
— Пойдемте вместе!

Пошли, и бригада и я взяли фонарики (а я, как охранник, иду впереди, в одной руке травмат, в другой фонарь, и меня прикрывает медсестра с шокером), и фонарики высветили двух котов, делящих территорию:

— Ой, ой, ой!!!
— Как мне хуево!

ФАНФАРЫ!

Анон любит истории про жопу и говно.

Есть у нас вам.

Жопная история.

Работал в больнице на странной должности по «Гражданской обороне», иду мимо приемного покоя, выходит эксперт и хихикает. Ну спрашиваю, ще там? Не поверишь, отвечает эксперт — там бомж с толкушкой в жопе. Ну прохожу в больницу через приемник (там второй вход был, но интересно же). Действительно, лежит на каталочке дед под простыночкой, этим всем кверху. Рядом дежурный хирург суетится.

И тут я начинаю напевать «Колотушка тук-тук-тук, спит животное паук…». Еле успел выскочить — что-то в меня пульнули.

Про вписки.

Нажрались с другом, довольно богатым, в г. и девочек вызвали, точнее — вызвал он, я к тому времени давно уже накурился в обсолютные сопли. Утром просыпаемся с товарищем голые в одной постели.
— Дэн, у тебя дупа не болит?
— Нет. У меня тоже.
— Ну значит бл*ди были 🙂

Про админскую попойку.

В начале двухтысячных были популярны домовые и междомовые локалки, доступ в ФИДО, и соответственно, админо- и ФИДОпойки.

На даче сортиры называли телефонными будками (похоже же).

После организованной на даче фидо- и ЛВС- админопойки: «Какая сука облевала телефонную будку, испачкала телефонную трубку, разбросала веб-страницы, так еще и файл скачанный посреди будки валяется».

Неудачная сдача.

Препод по инженерной графике имел проблемы с дикцией. Студент сдает чертеж.
Препод: Пиздато!
Студент (офигевая): нуу.. нихуево.
Препод: «Без даты! Дата не проставлена на чертеже!».

Добавление дополнительных network namespaces к уже настроенным.

Преамбула

Когда-то давно поднимал тему network namespaces (копия), механизма Linux, позволяющего на машине с одним физическим сетевым интерфейсом организовать несколько независимых сетевых стеков, т.е. виртуальных сетевых интерфейсов с разными настройками (IP-адресом, маршрутизацией, правилами IPTABLES и т.д.). Возник вопрос, как к уже настроенным сетевым неймспейсам добавить еще один.

Это не просто, а очень просто.

Итак, имеется система такой вот конфигурации:

А требуется нечто такое:

Добавление дополнительного network namespace’а

1. Создаем новый netspace с именем, например, linkns:

ip netns add linkns

2. Создаем два связанных между собой виртуальных сетевых интерфейса veth2 и veth3:

ip link add veth2 type veth peer name veth3

3. Поднимаем интерфейс veth2, который останется в основном неймспейсе:

ifconfig veth2 0.0.0.0 up

4. Подождали, интерфейс поднялся (для проверки вызываем ifconfig без параметров):

veth2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 3a:8d:6a:40:b8:38  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5. Ассоциируем veth3 с новым неймспейсом linkns:

ip link set veth3 netns linkns

6. Добавляем новый интерфейс (veth2) к интерфейсам ранее созданного моста br0

brctl addif <имя_моста> <имя_интерфейса>

brctl addif br0 veth2

Можно проверить список интерфейсов командой:

brctl show br0

Вывод команды:

bridge name     bridge id               STP enabled     interfaces
br0             8000.3a8d6a40b838       no              eth0
                                                        veth0
                                                        veth2

Теперь изначальная схема моста

Превращается в такую:

Включать/отключать физические сетевые интерфейсы или мост не нужно, все было сконфигурированно ранее. Осталось произвести настройки внутри namespace linkns:

1. Поднимаем сетевой интерфейс veth3 внутри неймспейса linkns и присваиваем ему IP.

ip netns exec linkns ifconfig veth3 192.168.0.21 netmask 255.255.255.0

2. Прописываем внутри нетспейса маршрут по умолчанию:

ip netns exec linkns ip route add default via 192.168.0.1 dev veth3 src 192.168.0.21

3. Поднимаем внутри namespace’а loopback-интерфейс:

ip netns exec linkns ifconfig lo 127.0.0.1

4. Если нужно, добавляем файлы конфигурации для namespace’а, например resolv.conf (копия)

5. Проверяем работоспособность неймспейса.

Проверяем сетевые устройства:

ip netns exec linkns ifconfig

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.21  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::8c12:30ff:feda:fe06  prefixlen 64  scopeid 0x20<link>
        ether 8e:12:30:da:fe:06  txqueuelen 1000  (Ethernet)
        RX packets 55  bytes 4391 (4.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17  bytes 1458 (1.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ping:

ip netns exec linkns ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=111 time=13.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=111 time=11.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=111 time=12.0 ms
...

и интернет:

ip netns exec linkns lynx google.com

ФАНФАРЫ!

Network namespeces, resolv.conf и прочие файлы конфигурации.

Когда писал заметку о сетевых неймспейсах, т.е. о том, как на одном компьютере с одной физической сетевой картой организовать несколько виртуальных сетевых интерфейсов с разными IP (копия), забыл упомянуть о маленьком, но важном моменте.

Все созданные виртуальные сетевые стеки, а эмулируется не только сетевая карта, но и весь стек вместе с маршрутизацией, правилами IPTABLES и т.д., можно и нужно по разному конфигурировать. И, естественно, есть возможность создать разные файлы конфигурации для разных namespaces.

Файлы конфигурации хранятся в каталоге /etc/netns/<имя_namespace>

Различный resolv.conf для разных namespace’ов.

Например, в основном неймспейсе есть файл /etc/resolv.conf в котором прописаны адреса DNS для основной системы:

nameserver 10.10.0.1
nameserver 10.10.0.200

И пусть в системе существует второй namespace с именем linkns и для него надо прописать DNS от Google (8.8.8.8 и 8.8.4.4):

1. Создаем каталог /etc/netns/linkns.
2. В каталоге создаем (или копируем готовый из /etc) файл resolv.conf.
3. Записываем в файл новые адреса DNS:

nameserver 8.8.8.8
nameserver 8.8.4.4

Аналогично можно поступить и с другими файлами конфигурации, например правилами IPTABLES (если ваша система поддерживает конфигурацию фаервола через конфигурационные файлы).