Архив категории: linux

ci/cd docker linux

Пробуем Teamcity с Docker

Teamcity — это, пожалуй, один и самых любимых мною продуктов JetBrains. Он и удобный, и гибкий, и вообще приятный в работе.

Бывает так, что я хочу попробовать свежую версию и не хочу париться с его настройкой и установкой. Теперь, сделать это проще простого: берём образы Docker и в путь!

Официальные образы лежат тут:

Казалось бы, запускать их уже и так просто, куда ещё упрощать?

Как бы не так! Можно проще при помощи docker-compose.

1. Устанавливаем docker-compose из пакетов:

2. Создаём каталог ~/test/teamcity

3. Пишем файл docker-compose.yml

4. Запускаем это всё

Радостные идём на http://localhost:8111/ тыкать мышкой для дальнейшей установки.

Если вдруг захотите запускать Teamcity в Docker на продакшен серверах, то рекомендую посмотреть тут готовые конфиги с Nginx и PostgreSQL: https://github.com/Egregors/teamcity-docker-compose

git linux

Компактное хранение исходного кода

kernel-zip-src

При реализации проекта DistTest возникла необходимость собирать ядро linux из разных версий исходников. И первым решением было загружать готовые архивы исходников с kernel.org для каждой отдельной версии. Но вскоре стало понятно, что данный подход требует значительного дискового пространства: 0.5-1ГБ на каждую версию, которых в данный момент порядка 1000. А также данные подход позволяет собирать только именованные версии, но не версии соответствующие отдельным коммитам.

Для решения проблемы дискового пространства можно хранить несколько базовых версий и приводить их к необходимому виду с помощью патчей, но это приводит к значительному объёму I/O со случайным доступом, что выполняется медленно на HDD и приводит к износу SSD. Тот факт, что исходники необходимой версии требуются лишь временно, подсказывает использовать tmpfs. Но есть более эффективный подход в плане использования оперативной памяти — хранить в tmpfs только отличающиеся от уже имеющихся файлов, что позволяет сделать aufs.

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

linux virtualization

Запуск дистрибутива linux как приложения

Запуск виртуальной машины с последовательным портом в качесте консоли и перенаправлением его в stdio процесса qemu:

Для примера работы эмулятора будем использовать дистрибутив tinycore linux:

Пересборка initrd образа:

Пример вывода(перенаправление консоли ядра отключено для наглядности):

bash linux NAT network pipes security

Заблуждения о файлах

Если удалить файл, свободное место увеличится на размер файла.

Ну, во-первых, файл очень часто занимает отличное от своего размера место

Если удалить файл, свободное место увеличится.

В большинстве файловых систем Linux место не освободится пока файл не закроют все процессы, работающие с ним.

Если удалить файл, свободное место увеличится, когда файл все закроют.

Вот в hfsplus в Linux 2.6.32-2.6.36 не так. В 2.6.37 это таки пофиксили.

Ну оно хотя бы не уменьшится при удалении?!

Много чудных файловых систем можно встретить. Вот например nilfs

Если дописать информацию в файл, занятое им место на диске увеличится.

Файловые системы со сжатием могут сжать новый файл лучше.

Одному имени файла всегда соответствует один и тот же файл.

Файлы кто-то может переименовать (c)ваш К.О. Даже в самый неожиданный момент (c)всё тот же К.О. Читать далее »

linux security

Добавление пользователя в группу в дистрибутивах linux

Допустим вам нужно предоставить доступ себе к какому-нибудь файлу/папке как члену группы владельца файла, так как самого владельца, в данном случае, изменить нет возможности. Например разрешить просмотр общих папок в VirtualBox в гостевой ОС на базе линукс. Казалось бы, что может быть проще?

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

P.S. и да, я не понимаю, из-за чего (софт/ядро/принципы *nix) так, но по крайней мере в Ubuntu 10.04/12.04 поведение такое.

build linux performance programming

Операционные системы и фарс с производительностью

Закончился простой тест производительности двух ОС: Windows 7 и Linux (Xubuntu 12.10)

Эксперимент:

  1. Выбирается проект на Java, с большим числом модулей, проектных файлов, зависимостей и этапов сборки
  2. Собирается начисто без замеров времени
  3. Собирается повторно, время замеряется, этот этап повторяется несколько раз, вычисляется среднее время

Использовались: система сборки Gradle (режим --daemon), JDK 1.7_13 (x64).
Файловые системы: Windows — NTFS, Linux — ext4.
Все ОС в тесте 64-битные, файлы проекта и файлы системы (а также приложений) расположены на разных физических дисках.
Для виртуальной машины использовался Oracle Virtual Box (4.1), в качестве хоста Windows 7, без дополнительного дискового кэша на стороне VM.

Итого:

Операционная система Время сборки, сек (PC 1) Время сборки, сек (PC 2) Время сборки, сек (PC 3)
Windows 7 20.5 22.0 21.2
VM Xubuntu 12.10 14.6
Xubuntu 12.10 9.4 9.6

Приведённые результаты для машины, на которой пробовались все варианты ОС, получены без специальных настроек производительности.

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

bash build programming

Кросс-компиляция cygwin → mingw

Некоторое время назад я начал свой кроссплатформенный проект. Поскольку сижу я в основном за Windows, то для компиляции обычно использую cygwin, а для сборки билдов для тестеров под cygwin живет i686-w64-mingw. Все было хорошо, но вот пришла пора, и для вывода пары фраз текста я решил подключить к проекту libfreetype. При компиляции на cygwin проблем нет — ведь в репозитории есть соответствующий пакет, ну а для mingw, естественно, придется собирать либу самому.

Дабы ко мне не было вопросов, я решил подключать либу динамично, а все ее зависимости (чтобы не тащить кучу левых файлов) линковать статично. О моем горьком опыте я здесь и расскажу.
Читать далее »

bash linux one-liner

Калькулятор, который всегда под рукой

— Так у тебя уже трое детей? И сколько им лет?
— Если перемножить их возраст, то получится 36. А если сложить, то получим номер автобуса, на котором мы с тобой едем.
— Но я не могу на основании этого определить их возраст!
— А, забыл сказать — старший такой же рыжий как и я!
— Ну тогда ясно!

А Вам ясно? Сразу? Серьёзно? Хорошо Вам! Тем, кто так быстро не считает, может помочь калькулятор, который всегда под рукой(у линуксоидов):

Под катом код не однострочником Читать далее »

bash linux

Настраиваем apcupsd

На всякий случай были написаны скрипты для автоматического старта и корректного завершения работы виртуальных машин(в случае потери питания, выполняется демоном apcupsd)
Из интересных(по крайней мере для меня) моментов я бы хотел отметить способ запуска команды от имени определённого пользователя, даже если скрипт запущен от root’а. Это необходимо потому, что VirtualBox привязывает виртуалки к пользователю, и если запустить от root’а vboxmanage list runningvms при запущенных виртуалках, он ничего о них не скажет. По этому был на коленке быстренько написан следующий код:
startvm.sh

stopvm.sh

А заключения не будет. Могу только сказать, что при добавлении /home/firefish/stopvm.sh в /etc/apcupsd/onbattery, оно таки заработало:

Интервал ONBATTERYDELAY увеличен до 30 секунд для игнорирования отключений электричества на короткое время. Хотя первый проваленный этой логикой тэсткейз — несколько подряд отключений на 29 секунд. Будем надеятся, что фикс будет написан раньше, чем это случится.

hardware linux SSD

Эксперименты с TRIM

Вступление.
Дабы не искать перемещённые блоки по всему диску запишем на бОльшую его часть что-нибудь бесполезное, но с узнаваемым паттерном.
Хотя если контроллер умеет делать перестановки:
«после trim» <- «редко записываемые данные» <- «часто записываемые данные»
или
«редко записываемые данные» <-> «часто записываемые данные»
то мы не сможем это увидеть или это будет довольно трудно.
Ладно. Будем надеяться и верить. Читать далее »