Uzix | микроблог

/dev во freebsd chroot

Не нашёл в интернете хорошего решения, поэтому выкладываю тут.

Т.к. во FreeBSD нельзя сделать просто mknod в произвольном месте фс (вернее можно, но результат работать не будет с ошибкой “operation not supported”), то для доступа к устройствам внутри chroot приходится немного шаманить - а именно монтировать devfs с нужными нам устройствами.

Покажу на примере php-fpm. Создаём файл /usr/local/etc/rc.conf.d/php_fpm со следующим содержимым:

mount_devs() {
    for i in $php_fpm_chroots; do
        umount "${i}/dev" 2>/dev/null || true
        devfs_domount "${i}/dev" devfsrules_hide_all
        devfs -m "${i}/dev" rule apply path null unhide
        devfs -m "${i}/dev" rule apply path random unhide
        devfs -m "${i}/dev" rule apply path urandom unhide
    done
}

start_precmd="$start_precmd && mount_devs"

и в rc.conf дописываем:

php_fpm_chroots="/var/www1 /var/www2"

Создаём по нужным путям dev/, делаем рестарт сервиса - и после этого всё должно заработать.

https

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

Читать далее →

...

An aircraft company discovered that it was cheaper to fly its planes with less fuel on board. The planes would be lighter and use less fuel and money was saved. On rare occasions however the amount of fuel was insufficient, and the plane would crash. This problem was solved by the engineers of the company by the development of a special OOF (out-of-fuel) mechanism. In emergency cases a passenger was selected and thrown out of the plane. (When necessary, the procedure was repeated.) A large body of theory was developed and many publications were devoted to the problem of properly selecting the victim to be ejected. Should the victim be chosen at random? Or should one choose the heaviest person? Or the oldest? Should passengers pay in order not to be ejected, so that the victim would be the poorest on board? And if for example the heaviest person was chosen, should there be a special exception in case that was the pilot? Should first class passengers be exempted? Now that the OOF mechanism existed, it would be activated every now and then, and eject passengers even when there was no fuel shortage. The engineers are still studying precisely how this malfunction is caused.*

Источник*

О Mikrotik

Не так давно я заимел в личное пользование маршрутизатор Mikrotik RB951Ui-2HnD, и в этой заметке хочу поделиться впечатлениями от работы с данным устройством.

Читать далее →

ГОСТ шифр

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

Читать далее →

Полезное о C

В этой заметке я буду собирать ссылки на полезные и интересные материалы, обязательные к прочтению каждому использующему язык Си разработчику.

Различные нюансы:

Расширение корневого раздела в LVM в RHEL6

Вводная: виртуальная машина с одним диском и корневой фс в lvm.

Задача: расширить корневую фс без остановки предоставляемого сервиса.

Решение:

  1. Увеличиваем размер диска средствами системы управления виртуальными машинами. В моём случае это Proxmox: qm resize 100 virtio0 +5G
  2. Далее нужно как-то подключить наше новое пространство к VolumeGroup. Вот тут кроется засада. Для RHEL5 можно увеличить размер раздела с PhysicalVolume и обновить таблицу разделов командой partprobe. Но начиная с RHEL6 она покажет шиш и откажется что-либо делать пока мы всё не остановим и не отмонтируем. Однако есть и обходной путь: создаём на этом же диске ещё один раздел с PhysicalVolume чтобы затем расширить нашу VolumeGroup на неё: parted /dev/vda mkpart primary ext2 НАЧАЛО_РАЗДЕЛА -1 parted set НОМЕР_РАЗДЕЛА lvm on Затем выполняем потенциально опасную операцию - обновляем наживую таблицу разделов. Существующие разделы при этом остаются на месте (даже если были изменены/удалены), новые же добавляются: partx -a /dev/vda
  3. Дальше дело техники - расширяем VolumeGroup: vgextend VolGroup /dev/vda3
  4. … расширяем LogicalVolume: lvextend -l +100%FREE VolGroup/lv_root
  5. … и, наконец, увеличиваем сам раздел: resize2fs /dev/VolGroup/lv_root

Готово.

Статический анализ вызовов printf-like функций

При разработке для встраиваемых систем зачастую приходится писать свои реализации printf и подобных функций. Однако для самописных функций не работает опция “-Wformat”: проверка вызовов на корректность аргументов (сверка количества и типов аргументов со строкой форматирования). Для решения этой проблемы в GCC существует специальный атрибут функции “format”. Пример применения:

int fmt( void (*put)(char,void**), void *putarg, const char *fmt, ... )
    __attribute__ ((format (__printf__, 3, 4)));

Первым аргументом атрибута идёт тип проверки (printf, scanf, strftime, strfmon), второй - номер аргумента с форматом (нумерация с 1), третий - номер аргумента с которого начинается список аргументов (…).