Recompile NGINX with OpenSSL 1.0.2+ for HTTP/2

No matter how “stable” your “surroundings” are, eventually you will face HTTP/2 and all those requirements to run it on your server using Linux and some HTTP daemon. One of those requirements will be the OpenSSL version 1.0.2 (with ALPN support).

You might be lucky and you will find proper package of the OpenSSL for your Linux distribution. But then, you might be required to recompile your HTTP daemon from source. Yes, I’m in this situation now: Debian 8, OpenSSL 1.0.2 from “backports” and NGINX 1.10 (from DotDeb.org or NGINX.org).

Thanks to the Ramūnas (colleague of mine) for the link Recompile NGINX with OpenSSL 1.0.2+ for HTTP/2 via ALPN – Ubuntu 14.04 – this helps me to deal quicker with NGINX on Debian 8 at least for development environment.

NGINX in Ubuntu

That small but fast, flexible and powerful HTTP server, NGINX, with HTTP/2 support, that help many high-load project to deal with traffic and load-balancing, looks like has some issues on Ubuntu – The Road Ahead for NGINX in Ubuntu.

By the way, OpenSSL and HTTP/2 gets more and more traction in different Linux distributions, for example Debian added OpenSSL version 1.0.2 to “testing” and “backports” of “stable”.

Ubuntu + Vagrant + VirtualBox + Ubuntu = Sleepless night

Because of some migration experiment, required by the project I’m working on, I’ve had interesting issue at last sleepless night with Ubuntu, Vagrant, VirtualBox and more Ubuntu.

My current host setup:

  • Ubuntu 16.04 LTS (up to date)
  • VirtualBox 5.0.24
  • Vagrant 1.8.4

The goal: migrate Vagrant + Puppet development setup from Debian 7 to Ubuntu 16.04. At least try to and get familiar with part of the issues.

Because I’m familiar with Debian and Ubuntu, and all Puppet provisioning scripts done mostly by me or my team members with my supervision – migration of Puppet provisioning went well (almost well, some small changes ant tweaks left, but nothing special).

Troubles appeared a bit later – when I’ve tried to setup project’s NPM requirements inside the box. After running npm install and after few first packages where installed “root” partition of new VM became read-only and installation process failed. That’s a strange issue – PHP dependencies, managed by Composer, went well and without any error or warning.

Installation process of NPM packages just stops and do not respond to any command. In TTY console I see: “Rejecting I/O to offline device“. In SSH console I see many errors like: “glob error { [Error: EIO: i/o error, scandir '/home/<username>/.npm/<packagename>/2.0.1/package']

Spend few hours by searching solution over internet and nothing helps:

  • Upgrading VirtualBox Guest Additions
  • Adding vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
  • Adding vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
  • Adding vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant-root", "1"]
  • Running npm install --no-bin-links

By the way – sometimes this ends with kernel panic.

All that time I was using ubuntu/xenial64 box version 20160705.0.0.

One of the main reasons, described on the Internet was “symlinks don’t work on VirtualBox shared folders”. But this is not the case – I perfectly know shared folders issues and I don’t use them for project’s files sync between host and guest.

So, I’ve made clean Ubuntu Xenial install from ISO on fresh created virtual machine and everything went smoothly, from OS install to NPM – everything was installed!

Same good result was with PuppetLabs box puppetlabs/ubuntu-16.04-64-puppet.

This is how just a tiny issue with base box can keep you a bit sleepless. Yes, I know, that was my choice.

Now the question – should I build own box that I trust for this project or use something from third party Vagrant boxes available on Internet?

Encrypt password on Ubuntu/Debian

Sometimes I need to encrypt password same “way” as it done in /etc/shadow. For example: to place it in the Puppet config. I think there is a plenty of ways to do it. Here is my favorite: mkpasswd

# Install "whois" package in case we don't have it
sudo apt-get install whois
# Get available encryption methods
mkpasswd -m help
# Encrypt using SHA-256
mkpasswd -m sha-256
# Encrypt using SHA-512
mkpasswd -m sha-512

Куда я пропал осенью

А, как я на долго пропал, на целых три месяца. Нет, я ещё жив, просто очень много работы и мало свободного времени, даже написать блогпост не хватает.

В сентябре установленный Ubuntu Desktop 8.04 до сих пор работает без сбоев. За 3 месяца я так привык к Gnome и командной строке, что теперь мне сложно работать на Microsoft Windows системах. Единственное, чего не хватает пока, или я не нашёл (да я пока и не искал особо), так это визуальный diff, как у TortoiseSVN.

Кстати, он почти без проблем обновился до версии Ubuntu Desktop 8.10. Одна проблема только с видео-драйверами — заголовок окон не всегда прорисовывается верно. Работать не мешает, но иногда раздражает. Где-то в сети есть решение через установку бета-версии видео-драйверов от NVIDIA, но бета-версию ставить пока не хочется.

Большим подспорьем в работе является то, что многие вещи работает out-of-the-box и даже в Ubuntu Server 8.10. В офисе устанавливал 2 машинки для кой-каких параллельных вычислений на его основе, без кластеризации. Всё что нужно было — встало без проблем. Доступ по SSH настроился без проблем (включая ключи для подключения), PHP свеженький, MySQL, Apache2, Python с поддержкой MySQL. SFTP пашет, графики мониторинга нагрузки тоже есть, VPN поднимается на ура. Subversion, GIT, Bazaar — всё под рукой и всё работает без проблем. Всё обновляется — что ещё нужно для полного счастья?

А командная строка — она просто опьяняет своими возможностями. Через месяц уже никакой разницы где ты редактируются код или настраиваешь систему – локально или удалённо. Привыкаешь запускать PHP и Python в интерактивном режиме и быстро проверять возникшие проблемы.

И чем дальше, тем большие объёмы данных приходиться обрабатывать. Последний раз обе машинки генерировали информацию для сайтмапа сайта 6 дней — 70 000 000 адресов. Потом его индексировали, фильтровали на лишние ссылки день и теперь уже 6 часов генерируют XML файлы из данных в MySQL. Кроме полезной работы для клиента и его сайта, весь этот эксперимент дал кучу информации и занятий по практической оптимизации как запросов и структуры, так и настроек MySQL сервера. Приятно, что работа не только приносит доход но и развивает запас знаний.

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

Ещё успел написать одну статью для Pixel.lt о Zend Framework: Работаем с Zend_DB, правда она на литовском языке. Ещё одна статья на литовком о Zend_Form лежит на диске и ждёт своей очереди, готовая на 60%, может быть я закончу её в следующем месяце.

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

Linux и мечты

Давно давно мечтал, года два наверное, заполучить в руки свободную машину (PC), желательно laptop (а в народе просто “лапоть”) и водрузить туда какую-либо дистрибуцию Linux или Unix. Так, что-бы не очень старую, но чтоб свободно можно было перегружать, сносить, переустанавливать.

Наконец моя мечта, моё желание исполнилось. В руки мне попал Dell Latitude D620. Попал он ко мне не совсем “здоровым”: проблемы с памятью и охлаждением. Память ему меняли 3 раза и не помогало ему, поэтому всё валили на охлаждение.

Да, он действительно грелся. Согревался за минут 5, а то и быстрее (зависело от температуры окружающей среды) и зависал, либо падал.

Вскрыл я его, сняв клавиатуру и убедился, что coоler у него работает. Удалил 1 блок памяти, что находился под клавиатурой, запустил его и он продержался достаточно долго, что-бы я установил на него CentOS 5.1 с DVD. Правда, потом, при попытки собрать ffmpeg (ради эксперимента) как он вновь завис. Так как клавиатура была всё ещё снята, я осмотрел все детали охлаждения ещё раз – показалось чисто. Тогда, я на собственный страх и риск, я решил пропихнуть скрепку через его радиатор, чтоб проверить, не забит ли он мелкой пылью. Оказалось забит. Вычистил. Вставил 2 модуля памяти из разных коробок (по шине они совдали, один модуль был родным 512 МБ, второй 1024 МБ из тех что покупали). Работает, т.е. биос проходит до момента загрузки.

Родной Microsoft Windows XP Home на него не встал – при проверке системного обеспечения он падал. Поэтому туда я водрузил CentOS 5.1 с заранее скаченого DVD ещё разок, настроил Wi-Fi сеть, обновил до CentOS 5.2. Но танцы с бубном вокруг драйверов Wi-Fi карты и драйверов видео карты меня не обрадовали, поэтому на следующий день я туда засунул Ubuntu 8.04 LTS.

Оно уже отработало около 2 недель, на нём уже установлен Wine, разное программное обеспечение для редакции видео, некоторые редакторы и прочие программы с которыми я хотел поэксперементировать.