И снова добрый день/вечер/ночь и тд. всем кто читает данный блог.
Потихоньку я осваиваю основы Docker и вникаю в его возможности и функционал. Тяжелый это труд все это описывать, проще все сделать быстренько за какой то часик, а потом тратишь несколько дней на оформление этого все в читабельный вид, что бы можно это все опубликовать. Ну что же продолжим... это было небольшое лирическое отступление :) что бы выровнять первый абзац с картинкой :)
Продолжаем наши эксперименты с Docker. Сегодня поупражняемся с созданием Dockerfile. Подопытным "кроликом" будет у нас все тот же 7 Days to Die.
Несколько слов о новых образах, которые теперь доступны через на официальном "Hub Docker".
~> docker search sovicua NAME DESCRIPTION STARS OFFICIAL AUTOMATED sovicua/debian Debian Jessie (8.0) 0Все они построены на базе Debian Jessie. На текущий момент есть два образа с тегами "jessie" и "steamcmd". Собственно первый это чистый Debian с установленными дополнительными пакетами и настроенной временной зоной. Данные настройки были описаны в Установка timezone в базовом образе Docker. Второй собран на базе первого с установленными библиотеками и steamcmd.
Итак, создаем файл конфигурации для создания образа контейнера.
~> mkdir docker/steamcmd/ ~> cd docker/steamcmd/ ~/d/steamcmd> vim Dockerfile
FROM sovicua/debian:jessie
MAINTAINER Viktor M. Sytnyk <sovicua sovic.org.ua>
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y wget \
&& echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/2/Debian_8.0/ /' >> /etc/apt/sources.list.d/fish.list \
&& wget http://download.opensuse.org/repositories/shells:fish:release:2/Debian_8.0/Release.key \
&& apt-key add - < Release.key \
&& apt-get update && apt-get upgrade -y \
&& apt-get install -y lib32gcc1 lib32stdc++6 fish && apt-get clean \
&& useradd -m -c "SteamCMD User" -s /usr/bin/fish steam
WORKDIR /home/steam/steamcmd
RUN wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz \
&& tar -xvzf steamcmd_linux.tar.gz && rm steamcmd_linux.tar.gz \
&& chown -R steam:steam /home/steam
CMD /usr/bin/fish
Как вы можете видеть, shell по умолчанию я использую Fish Shell, хотя это не существенно, но понравился он мне :)Создаем образ:
~/d/steamcmd> docker build -t sovicua/debian:steamcmd .После этого можно выгрузить образ на Docker Hub:
~/d/steamcmd> docker push sovicua/debian:steamcmdТеперь у нас есть готовый образ с установленным steamcmd, что позволит нам в дальнейшем быстро развернуть любую игру которая поддерживает установку с использованием данной утилиты. Теперь переходим к созданию образа с установленным сервером 7 Days to Die.
Для начала создадим файл скрипта с помощью которого будем устанавливать, а также обновлять саму игру.
~> mkdir docker/games/7dtd ~> cd docker/games/7dtd ~/d/steamcmd> vim 7dtd.steamcmd
login steam_user steam_password
force_install_dir /home/steam/games/7dtd
app_update 294420 validate
quit
Где, steam_user и steam_password это имя пользователя и пароль на учетной записи которого куплена эта игра.Теперь создадим собственно сам файл конфигурации создания образа.
~/d/steamcmd> vim Dockerfile
FROM sovicua/debian:steamcmd MAINTAINER Viktor M. Sytnyk <sovicua@sovic.org.ua> WORKDIR /home/steam/steamcmd COPY 7dtd.steamcmd /home/steam/steamcmd/ CMD /usr/bin/fishЧестно говоря, можно было бы и не делать данный образ, для этих целей можно бы использовать предыдущий образ, создав в нем скрипт установки и обновления игры, но раз уж автоматизируем то делаем все типа ка надо :) Изначально я планировал что бы при создании образа, сразу инсталлирована игра, но так как у меня настроен Steam Guard, то он запрашивал у меня код, так как это типа новая машина которая хочет получить доступ к моей учетной записи.
В Dockerfile была команда на запуск скрипта:
RUN ./steamcmd.sh +runscript 7dtd.steamcmd
Победить это, что бы инсталляция останавливалась при запросе кода, у меня так и не получилось. :( По этому инсталляцию придется выполнять руками уже в контейнере.После этого создаем сам образ как обычно.
~/d/g/7dtd> docker build -t sovicua/games:7dtdВот что у нас получилось после всех этих процедур:
~/d/7dtd> docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE sovicua/games 7dtd c1c3539bbe2b 4 hours ago 594 MB sovicua/debian steamcmd 72ebdb1d894c 4 hours ago 594 MB sovicua/debian jessie 8ca03adc0398 27 hours ago 478.9 MBТеперь мы можем быстренько создать контейнер:
~/d/7dtd> docker run --name="7dtd" --net="host" --user="steam" -i -t sovicua/games:7dtdВыполняем инсталляцию игры, не забываем указать имя пользователя и пароль, если это не сделали раньше.
~/steamcmd> ./steamcmd.sh +runscript 7dtd.steamcmdПосле инсталляции правим файл конфигурации сервера serverconfig.xml как вам удобно, и можно запускать сервер.
~/steamcmd> cd ../games/7dtd ~/g/7dtd> vim serverconfig.xmlИз параметров которые я у себя изменил, это установил пароль на доступ по telnet, и небольшие настройки самого сервера, такие как тройной лут и длина суток 2 часа реального времени. И еще пару параметров.
<property name="ServerName" value="iHome Games Server" /> <property name="ServerPassword" value="" /> <property name="ServerMaxPlayerCount" value="4" /> <property name="ServerDescription" value="iHome 7 Days to Die server" /> <property name="ServerWebsiteURL" value="home.sovic.org.ua" /> ... <property name="DayNightLength" value="120" /> <property name="DayLightLength" value="18" /> ... <property name="DropOnDeath" value="2" /> <property name="DropOnQuit" value="0" /> ... <property name="CraftTimer" value="0" /> <property name="LootTimer" value="0" /> ... <property name="EnemySpawnMode" value="4" /> ... <property name="LootAbundance" value="300" /> <property name="LootRespawnDays" value="30" />Дополнительно, можно установить мод на сервер, который добавит пару дополнительных команд и самое вкусное что мне нравиться это возможность просмотра карты через веб. Очень помогает в поиске пещерок :) так как они редко сейчас встречаются, а на игровой карте искать не удобно, пока ищешь могут и "ушатать" :)
~/g/7dtd> wget http://illy.bz/fi/7dtd/server_fixes.tar.gz ~/g/7dtd> tar -xzvf server_fixes.tar.gzПример работы данного мода можно посмотреть у меня на сервере iHome 7 Days to Die server.
Ну вот и все, запускаем сервер:
~/g/7dtd> ./startserver.sh -configfile=serverconfig.xmlЕсли кто забыл, то напоминаю, что бы выйти с контейнера без его остановки, используем комбинацию клавиш Ctrl+p Ctrl+q.
На этом все, приятной игры. Если кто захочет поиграть вместе у меня на сервера, пишите.
Заходите на мой блог - UNIX и не только...

Давно валялась в черновиках данная заметка, все никак не мог собраться ее оформить и опубликовать. Но как говорят это вечно длится не может, так что приступим к повествовании. Собственно в чем же задача, спросите вы? У кого есть PS3 с установленной CFW, тот знает что записать файл больше 4Гб нельзя на внешний диск, так как это ограничение файловой системы FAT32 (сейчас файловые менеджеры для PS3, такие как Multiman поддерживают возможность чтения с томов NTFS, но эта функциональность появилась довольно недавно). Для решения этой проблемы можно было применить два метода:
Как то незаметно ☺ дошли руки все таки потрогать BIND10. Для начала немного истории о данном продукте.