Играемся с LXC в командной строке

Если вдруг вам приходится часто и много оперировать с LXC контейнерами, есть маленький лайфхак для помощи хардкорщику в консоли. Эти маленькие помощники — алиасы qgeicez. Чтоб много не говорить, привожу строки, которые надо добавить в конфигурационный файл пользователя ~/.bashrc

Для обычного пользователя, оперирующего привелегированными контейнерами:

alias lxls='sudo lxc-ls -f'
alias lxon='sudo lxc-start -n'
alias lxoff='sudo lxc-stop -n'
alias lxat='sudo lxc-attach -n'
alias lxcp='sudo lxc-copy -s -n ubuntu-sample -N'
alias lxrm='sudo lxc-destroy -n'

Для пользователя root и обычного пользователя, оперирующего непривелегированными контейнерами:

alias lxls='lxc-ls -f'
alias lxon='lxc-start -n'
alias lxoff='lxc-stop -n'
alias lxat='lxc-attach -n'
alias lxcp='lxc-copy -s -n ubuntu-sample -N'
alias lxrm='lxc-destroy -n'

Комментарий нужен, пожалуй, только по строке с lxcp, где ожидается, что у вас ест шаблонный контейнер ubuntu-sample с базовой системой и есть техническая возможность работы overlayfs, которая делает новый создаваемый контейнер в виде delta-образа файловой системы поверх шаблонного (очень экономит время и диск). В противном случае замените команду на

lxc-copy -n ubuntu-sample -N

Как использовать

Если вы поняли, что написано выше, это уже вероятно излишне, но для полноты. После повторного входа в систему вам будут доступны хелперы-алиасы.

Создаем клон шаблонного контейнера для нужных нам задач:

lxcp task1

Запускаем:

lxon task1

Переходим в контейнер (для выхода достаточно выйти через Ctrl+D):

lxat task1

Останавливаем:

lxoff task1

Удаляем:

lxrm task1

Все обновления системы и общие для всех клонированных контейнеров правки можно делать в контейнере-шаблоне.

~ FIN ~

 

Комментариев нет »13.01.2017 09:10:17 | Ubuntu, Изобретаю | ,

2 сервера на Python

Интересные открытия ждут новичков при исследовании функциональности Python интерпретатора и состава библиотек.

SMTP сервер для разработчика

Команда:

python -m smtpd -c DebuggingServer -n

Что делает:

Выводит всё, что приходит по стандартному smtp протоколу на стандартный вывод. Можете перенаправить в файл, можете смотреть так, в терминале. По умолчанию ожидает соединения на порт 8025 (стандартный 25 порт использовать без повышения привилегий нельзя). Для дополнительных опций и возможностей смотрите документацию.

Веб сервер для статики или передачи файлов

Бывает так, что надо посмотреть что-то по http протоколу, т.к. политики браузера не разрешают это через file://. А бывает, что надо что-то большое передать по сети коллеге, что выкладывать на друпбоксы долго, а расшаривать папки муторно (или запрещено файерволами).

Команда:

python -m SimpleHTTPServer

Что делает:

Даёт доступ по http ко всем файлам в текущем каталоге. index.html работает, список файлов при его отсутствии выдаёт. По умолчанию использует 8000 порт (стандартный 80 порт использовать без повышения привилегий нельзя). На стандартный вывод пишутся логи запросов, что также удобно. Для дополнительных опций и возможностей смотрите документацию.

Комментариев нет »04.05.2012 16:14:17 | Изобретаю | , ,

Забыть md5

Интересно, но я до сих пор считал, что md5 хеш в текстовом представлении (32 символа) для идентификации объектов — весьма не плохо. И коллизии маловероятны. Тем не менее, если не нужно привязываться к контенту объектов (как в git, к примеру, который, к слову, использует более длинный sha1), то можно поискать что-то более интересное и короткое.

Например, почитав статью Размещение, можно заключить, что у md5 при длине 32 символа возможно 16^32 вариантов. Это отлично! Однако не всегда нужно, поэтому могу предложить более простую реализацию: используя все символы английского алфавита и цифры можно получить достаточное количество вариантов ключей, надо лишь подобрать нужную длину для вашей задачи. При 5 (пяти, всего пяти!) знаках — это уже почти миллиард вариантов.

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

Регистрационный код по электронной почте, верификационный код какой-либо купонной системы, ссылка на информационный UGC элемент… Тут есть выигрыш при использовании более короткого кода. Хотя бы от того, что сам код становится менее страшным для человека (психологический момент использования сервиса) или ссылки в коде страницы станут короче (в случае UGC) — страница меньше и быстрее.

Это всё копейки. Но по копейкам набегают миллионы 😉

/*
 * Пример генерации кода на PHP
 */
function makeCode() {
  $a = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 62 символа
  $l = strlen($a) - 1;
  $c = $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] .
  $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)]; // 10 знаков
  return $c; // число возможных размещений: 62^10 = 8,392993659*10^17
}

PS: На коллизии не забывайте проверять!

комментария 2 »29.03.2012 13:00:25 | Изобретаю | ,

Коды ОК 004-93

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

Озадачился и за час причесал базу кодов из открытых источников в формат <код> <табуляция> <описание>. Можно открыть в текстовом редакторе, табличном процессоре, загрузить в базу данных или сделать удобную программу для поиска — на ваше усмотрение.

Скачать базу кодов по общероссийскому классификатору видов экономической деятельности, продукции и услуг (ОКДП) ОК 004-93 (558 Кб).

Внимание: Я уверен, что там не все коды!

Обновление 2011-03-24 17:45: заполнен раздел 7200000 (УСЛУГИ, СВЯЗАННЫЕ С ДЕЯТЕЛЬНОСТЬЮ ПО ИСПОЛЬЗОВАНИЮ КОМПЬЮТЕРОВ).

Написал bash скриптик для поиска по кодам с выводом иерархии. А то иногда вроде смотришь, код правильный, а оно совсем из другой оперы.

#!/bin/bash

CODE=$1
DB="OK-004-93.csv"

function use {
	echo "$0 CODE"
	exit
}

[ -z "$CODE" ] && use

echo `grep "^${CODE:0:2}00000" $DB`
echo " "`grep "^${CODE:0:4}000" $DB`
echo "  "`grep "^${CODE:0:6}0" $DB`
echo "   "`grep "^${CODE}" $DB`

Тупо, но эффективно 🙂 Вот пример использования:

$ ./OK-004-93-SEARCH.sh 1512242
1500000 ПИЩЕВЫЕ ПРОДУКТЫ И НАПИТКИ
 1512000 РЫБА И РЫБНЫЕ ПРОДУКТЫ ПЕРЕРАБОТАННЫЕ И КОНСЕРВИРОВАННЫЕ
  1512240 Рыба крепкосоленая (без сельди)
   1512242 Рыба крепкосоленая потрошеная с головой

$ ./OK-004-93-SEARCH.sh 7260011
7200000 УСЛУГИ, СВЯЗАННЫЕ С ДЕЯТЕЛЬНОСТЬЮ ПО ИСПОЛЬЗОВАНИЮ КОМПЬЮТЕРОВ
 7260000 СИСТЕМНЫЕ И ПРИКЛАДНЫЕ ПРОГРАММНЫЕ СРЕДСТВА
  7260010 Системные программные средства
   7260011 Операционные системы и средства их расширения

Комментариев нет »24.03.2011 15:17:11 | Изобретаю | ,

Python

Сколько не сопротивляйся, прогресс настигает…

Давно ли я изучал perl? Как казалось, самый крутой и развитый язык для всего-на-свете (и самый мозгодробильный, ага). Хотя, должен признать, язык и среда выполнения очень стабильные, библиотеками покрыты все предметные области, простые проекты делать легко, сложные — интересно, а работает оно годами и без сбоев.

Давно ли я изучал php? Самый продвинутый и простой язык для web-разработок. Как классно создавать на нём что-то: раз, два и готово! Сколько вокруг приложений на нём — бери, изменяй под себя и используй.

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

Начал изучать python. Не могу больше сопротивляться 🙂

Зачем изучать? Для меня есть минимум 3 причины: саморазвитие, быстрая разработка кросс-платформенных приложений, причём, как серверных, так и с графическим интерфейсом, а также разработка для web. А вообще — что-то очень много всего на python вокруг стало в моей любимой Ubuntu, да и вообще.

В голове есть идеи, реализация которых начата в процессе обучения, вероятно напишу про результаты позже. Как показал опыт, самая эффективная форма обучения — использование изучаемого. Тем не менее читать документацию, статьи и книги очень полезно. Поэтому посылаю:

Принимаю ссылки от освоивших. Особенно интересны обзоры хороших практик применения особенностей языка и вообще описание этих особенностей и отличий от.

PS: Python — это не про рептилию (хотя в логотипе намекают), а про Monthy Python-ов, так что «улыбаемся и кодим, улыбаемся и кодим»!

1 комментарий »30.05.2010 20:00:21 | Изобретаю | ,