вторник, 17 апреля 2018 г.

Настройка OpenVPN

Появилась как-то необходимость в настройке VPN, в результате нагуглилась вот такая замечательная инструкция, по которой достаточно быстро всё настраивается и работает.
Оригинал здесь — https://www.digitalocean.com/community/tutorials/openvpn-ubuntu-16-04-ru

Здесь фактически дублирую просто для сохранности.


Как настроить сервер OpenVPN в Ubuntu 16.04








Введение

Хотите иметь безопасный и защищённый доступ в Интернет с вашего смартфона или ноутбука при подключении к незащищённой сети через WiFi отеля или кафе? Виртуальная частная сеть (Virtual Private Network, VPN) позволяет использовать незащищённые сети таким образом, как если бы вы работали в частной сети. Весь ваш трафик в этом случае проходит через VPN-сервер.

вторник, 6 октября 2015 г.

Нечёткий поиск с Elasticsearch

Что такое Elasticsearch прекрасно описано в wikipedia, поэтому здесь это описывать не вижу смысла. Совсем кратко и на свой лад — замечательная штука для поиска по большой базе (десятки тысяч документов, но не миллиарды) с возможностью нечёткого поиска, т.е. в запросе могут быть ошибки, опечатки, пропуски или даже не та раскладка. Замечательность elasticsearch'а в простоте разворачивания, простоте наполнения базы и простоте поиска.

Перед началом работы нужно установить Elasticsearch из пакетов, либо скачать архив и распаковать. После остаётся его запустить (bin/elasticsearch) и можно смотреть в браузере (http://localhost:9200/) как оно работает.

Для "потестить" можно всё делать через браузер/curl.

Добавление документа
$ curl -XPUT 'http://localhost:9200/test/doc/1' -d '{"name":"имя пользователя"}'
здесь
    test — индекс
    doc — doc_type (можно считать подиндексом индекса)

Поиск
$ curl -XGET 'http://localhost:9200/test/doc/_search?pretty=true' -d '{"query":{"fuzzy":{"name":"плзователь"}}}'
Ну или смотрим в браузере
(pretty=true в запросе просто чтобы в ответ получить json не в одну строку, а нормально отформатированный)


Для работы с Elasticsearch из python'а есть "родной" модуль elasticsearch и сторонний pyelasticsearch. Сторонний появился чуть раньше официального, но с определённой версии работает через официальный (т.е. для работы с ним нужно ставить оба модуля), развивается и дальше и старается быть более pythonic, нежели официальный.


понедельник, 5 октября 2015 г.

Свой startup script for systemd

Мне для работы удобно использовать виртуалку VirtualBox в качестве виртуального разработческого сервера. Легко конфигурируема, легко переносима, максимально изолированное окружение и в основную систему нет необходимости ставить пакеты, нужные только для проектов. Опять же — никаких конфликтов версий имеющегося ПО. Так как в качестве редактора я использую Komodo Edit, который отлично ходит по SSH, то неплохо бы всегда иметь активную виртуалку, а ответственность за её запуск возложить на кого-нибудь ещё, и не контролировать это дело самостоятельно. Отсюда и возникла необходимость в своём скрипте для systemd:


/etc/systemd/system/virtualbox.centos7.service

[Unit]
Description=VBox "centos7"
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/VBoxHeadless -s centos7 --vrdp=off
ExecStop=/usr/bin/VBoxManage controlvm centos7 acpipowerbutton
RemainAfterExit=no
User=george
TimeoutStopSec=8

[Install]
WantedBy=multi-user.target


Остаётся выполнить 
$ systemctl enable virtualbox.centos7
и виртуалка сама стартует при включении и гасится при выключении компьютера.

вторник, 25 августа 2015 г.

Убрать …received a naive datetime while time zone support is active

Просто чтобы не забыть. Вдруг опять пригодится.

При заполнении базы данными (в моём случае с default=datetime.now в модели) django может сыпать варнинги:
DateTimeField ModelName.field_name received a naive datetime while time zone support is active.

Так как в моём случае это бесполезная информация :) , то нужно просто отключить ругань в консоль. Делается добавлением кода:

import warnings
warnings.filterwarnings(
        'ignore', r"DateTimeField .* received a naive datetime",
        RuntimeWarning, r'django\.db\.models\.fields')

вторник, 18 августа 2015 г.

OpenSSH 7. Возвращаем авторизацию по ключам

Return simple authorization by public keys

У меня на большинство серверов настроена авторизация по ключам. Удобно — один раз разблокировал связку ключей и ходишь по серверам не отвлекаясь на ввод паролей. Когда пароли на все сервера разные, это действительно удобно.
Но после обновление ssh до 7 версии у меня вдруг постоянно стал запрашиваться пароль при подключении к серверам, как будто никаких ключей и не было никогда прописано. Либо я один с такой проблемой, либо просто обновился рано, но готового ответа нагуглить не удалось, а решается всё просто.
В новой версии добавилась опция PubkeyAcceptedKeyTypes (ссыль), без которой имеющиеся ключи стали игнорироваться.
Идём в /etc/ssh/ssh_config и добавляем PubkeyAcceptedKeyTypes=+ssh-dss . Всё. Опять авторизация по ключам работает.


Проверить причину "неавторизации" можно включением дебага (или verbose) при попытке коннекта:
$ ssh -v hostname

В моём случае в выводе присутствовало:
debug1: Skipping ssh-dss key /home/george/.ssh/id_dsa for not in PubkeyAcceptedKeyTypes
debug1: Next authentication method: password


Dirty tags ;) : ssh ignore keys, ssh want password, enable ssh key logon

четверг, 20 марта 2014 г.

How to disable bold font into guake terminal

Жирный шрифт в окне терминала не всегда и не везде выглядит нормально, отсюда и желание многих - отображение шрифта bold'ом запретить. В gnome-terminal (да и во многих других) для этого есть галочка в настройках, хочешь включай жирный шрифт, хочешь - отключай. А в guake почему-то этого нет. Есть патчи, есть примеры, как настройку добавить, но автор добавлять эту мега-киллер-фичу не хочет.
Вот в https://github.com/Guake/guake/issues/168 есть ответ замечательный:
So, yeah, basically, bold works, and I don't see enough motivation to ever allow to disable it.

Раньше я добавлял в guake настройку для отключения bold'а, но там несколько файлов править приходится ручками, патч-то вслепую не накатишь, версия из репозитория дистрибутива обычно отличается немного от версии в репозитории автора. Поэтому решил не заморачиваться, сперва просто захардкодил отключение bold'а, но потом всё же решил оставить возможность изменения параметра через gconf, чтоб не только мне полезно было.

Итак. Всё применительно к Arch'у, в других дистрибутивах путь может немного отличаться.

Правим /usr/bin/guake.

В GConfHandler.__init__ вставляем строку
    notify_add(KEY('/style/font/allow_bold'), self.fallowbold_changed)


у меня она встала на 144 строку, над
    notify_add(KEY('/style/font/style'), self.fstyle_changed)
(я везде новый код добавил над /style/font/style)

Дальше в сам GConfHandler добавляем метод
def fallowbold_changed(self, client, connection_id, entry, data):
    policy = entry.value.get_bool()
    for i in self.guake.term_list:
        i.set_allow_bold( policy )
(я метод вставил над существующим методом fstyle_changed, 257 строка)


понедельник, 2 декабря 2013 г.

Perl, OpenSSL и самоподписной сертификат

В продолжение предыдущей заметки...

Так как кроме получения данных по https со "своими" сертификатами мне эти данные нужно было ещё и обработать, то решил и обработку и получение данных запихнуть в один perl-скрипт. Так как с проблемой "трёх сертификатов в одном файле" разобрался, то не предвидел каких-либо трудностей на этом пути :)

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

Ошибка:

500 Can't connect to www.nekiysite.ru:443 (SSL connect attempt failed with unknown error error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure)