Pull to refresh
98
0
Send message

Блокировки в bash скриптах

Reading time 3 min
Views 7.4K

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


#!/bin/bash

LOCK_FILE=/tmp/my-script.lock
LOCK_FD=9

get_lock() {
    # need to use eval here for proper expansion
    eval "exec $LOCK_FD>$LOCK_FILE"
    flock -n $LOCK_FD
}

get_lock || exit

# ...
Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Comments 20

Sun против Intel: Питерское противостояние 2004-го года

Reading time 11 min
Views 17K

Эта история произошла 18 лет назад. Все сроки давности уже прошли, так что можно рассказать о тех событиях и как так получилось, что две огромных технологических компании буквально дрались за коллектив из 150 человек. Но прежде надо немного объяснить, что же это был за коллектив и чем он был примечателен.


Прежде, чем начать, хочу отметить, что на протяжении всего изложения мои симпатии будут с Sun.

Читать дальше →
Total votes 123: ↑122 and ↓1 +121
Comments 51

Bash отладчик с поддержкой произвольных точек останова

Reading time 4 min
Views 9.3K

В комментариях к статье об отладке bash скриптов я высказал предположение, что предложенный подход отладки может быть расширен добавлением поддержки точек останова. После некоторых размышлений я немного дополнил код, предложенный в комментариях к статье и получилось вот что:

Читать дальше →
Total votes 52: ↑52 and ↓0 +52
Comments 6

Установка ubuntu 20.04 с корнем на шифрованном ZFS зеркале и UEFI загрузкой

Reading time 6 min
Views 9.2K

На моей домашней машине вот уже 7 лет работает пара дисков, объединенная в soft raid1. И вот на днях один диск в зеркале наконец начал сыпаться. Появился повод переустановить систему с нуля и начать использовать шифрование, которое 7 лет назад не было задействовано. В процессе гугления о состоянии дел в конфигурации LUKS поверх mdadm я вышел на статью сравнивающей производительность zfs vs mdadm/ext4. А потом нашел другую статью с тестированием производительности зашифрованных дисков использующих LUKS и zfs. Согласно обеим статьям zfs демонстрирует весьма неплохую производительность и я решил попробовать ее в деле.

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 10

gentoo: миграция с eudev на mdev

Reading time 3 min
Views 2.9K

Если вы используете gentoo и отслеживаете уведомления о грядущих изменениях, то еще в июле вы могли видеть, что с нового года gentoo перестает поддерживать eudev. Если вы попытаетесь обновить систему сейчас, вы увидите


!!! The following installed packages are masked:
- sys-fs/eudev-3.2.10-r1::gentoo (masked by: package.mask)
/var/db/repos/gentoo/profiles/package.mask:
# Mike Gilbert <floppym@gentoo.org> (2021-11-27)
# eudev will be removed on 2022-01-01.
# Please see the news item published on 2021-08-24 for more information.

К сожалению переезд с eudev на альтернативы имеет свои особенности, которые мне хочется осветить в этом посте пока память свежа. Мне давно было интересно попробовать mdev, так что новость о конце поддержки eudev я расценил как намек на то, что пора исполнять задуманное. Важное замечание: у меня gentoo работает на headless серверах. Если вам нужно обновить десктопную машину все может быть несколько сложнее, читайте документацию.

Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Comments 13

ossh: параллельное выполнение команд на многих серверах

Reading time 5 min
Views 3.7K
Иногда бывает нужно запустить патч Бармина какую-то команду на многих серверах и желательно не ждать слишком долго результатов выполнения. Для этого я написал ossh (One SSH to rule them all). Вот пример его работы:

$ wc -l /tmp/ossh.ips
21418 /tmp/ossh.ips
$ time ossh -n -h /tmp/ossh.ips -c uptime -p 1000 >/tmp/ossh.out

real    3m10.310s
user    0m30.970s
sys     0m19.282s
$ grep 'load average' /tmp/ossh.out | sort -n -k5 | tail -n1
10.23.91.97   [1]  13:37:55 up 828 days,  2:34,  0 users,  load average: 8.29, 4.45, 3.90
$

В данном примере в файле /tmp/ossh.ips находится 21418 ip адресов машин. -n означает, что не нужно делать реверс запросы, чтобы определить имя по адресу. -c uptime задает команду, которую я хочу выполнить. -p 1000 позволяет использовать до 1000 соединений одновременно. Как видно из вывода отработала команда достаточно быстро.

Что еще умеет ossh?
Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Comments 21

Графика в терминале

Reading time 3 min
Views 29K
Эта история началась, когда я узнал о существовании bpytop. Меня поразила детализация графиков и я начал разбираться как это сделано. Оказалось, что для вывода графиков использовались символы алфавита Брайля, представляющие из себя комбинацию из 8 точек: 2 точки в ширину и 4 точки в высоту. Поискав готовые решения, использующие этот подход, я нашел на реддите анонс такого проекта. В первом же комментарии анонса я прочитал:
Это конечно круто, но почему люди просто не переоткроют для себя ReGIS (векторную графику в терминале) и sixel (пиксельную графику в терминале).
До этого момента я ничего не знал про sixel. Копнув глубже я выяснил, что в теории sixel должен поддерживаться xterm-ом. Я запустил xterm на своей ubuntu 20.04 в режиме эмуляции vt340

xterm -xrm "XTerm*decTerminalID: vt340" -xrm "XTerm*numColorRegisters: 256"

выполнил вот такую команду (convert это команда из пакета imagemagick)

clear && convert <(curl -s https://upload.wikimedia.org/wikipedia/en/7/7d/Lenna_%28test_image%29.png) sixel:-

и увидел вот это:

image
Вау, работает!
Читать дальше →
Total votes 115: ↑115 and ↓0 +115
Comments 51

Насколько маленьким может быть ядро linux?

Reading time 5 min
Views 37K
Некоторое время назад я научился конвертировать виртуальные машины в oracle cloud из ubuntu 20.04 в gentoo. Машины предоставляемые в рамках always free tier весьма маломощны. Это в частности приводит к тому, что перекомпиляция ядра превращается в достаточно длительный процесс. У исходного ядра ubuntu 20.04 в конфиге было 7904 параметра. После того, как я сделал:

make localmodconfig && make localyesconfig

число параметров уменьшилось до 1285. Мне стало интересно попробовать выбросить из ядра все лишнее и посмотреть, что получится.
Читать дальше →
Total votes 64: ↑58 and ↓6 +52
Comments 77

Oracle cloud: превращаем ubuntu 20.04 в gentoo

Reading time 3 min
Views 7.4K
Oracle cloud предлагает некоторые ресурсы совершенно бесплатно. В частности на халяву можно получить 2 виртуальные машины. При создании машины у вас есть выбор из centos, Ubuntu или oracle linux. С учетом ограниченности ресурсов витруальной машины мне стало интересно нельзя ли использовать на этой машине gentoo?
Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Comments 37

Сколько нужно примитивов для реализации форт системы?

Reading time 3 min
Views 4.9K
В 1992-м году проходил очередной конкурс по обфусцированному программированию на языке С. Один из представленных проектов был небольшой форт системой. Меня поразило, что виртуальная машина была реализована всего в 794 байтах С кода. Остальная часть форт системы загружалась из исходника на форте. После изучения проекта первоначальный восторг уступил место разочарованию, так как автор использовал не совсем “честный” трюк: для парсинга фортового исходника он использовал функцию scanf(). С этого момента меня терзал вопрос — сколько нужно примитивов для реализации форт системы без подобных трюков?
Читать дальше →
Total votes 26: ↑26 and ↓0 +26
Comments 30

Доступ к ssh серверу через очень зарегулированное подключение

Reading time 3 min
Views 19K
Эта статья является результатом посещения мной автосервиса. В ожидании машины я подключил свой ноутбук к гостевой wifi-сети и читал новости. К своему удивлению я обнаружил, что некоторые сайты я посетить не могу. Зная про sshuttle (и будучи большим поклонником этого проекта) я попытался установить sshuttle сессию со своим сервером, но не тут-то было. Порт 22 был наглухо заблокирован. При этом nginx на порту 443 отвечал нормально. К следующему посещению автосервиса я установил на сервер мультиплексор sslh.
Читать дальше →
Total votes 35: ↑33 and ↓2 +31
Comments 32

Использование локального .bashrc через ssh и консолидация истории выполнения команд

Reading time 7 min
Views 7.3K
Если вам приходится работать с большим количеством удаленных машин через ssh то возникает вопрос как унифицировать shell окружение на этих машинах. Копировать заранее .bashrc не очень удобно, а зачастую невозможно. Давайте рассмотрим вариант копирования непосредственно в процессе соединения:

[ -z "$PS1" ] && return

sshb() {
    scp ~/.bashrc ${1}:
    ssh $1
}

# the rest of the .bashrc
alias c=cat
...

Это очень наивный способ с несколькими очевидными недостатками:
Читать дальше →
Total votes 17: ↑17 and ↓0 +17
Comments 23

Information

Rating
Does not participate
Registered
Activity