Связаться со мной:
18 заметок с тегом

debian

Автоматическое добавление новых доменов на slaveDNS(bind9)

Скрипт смотрит в конфиг named.conf на мастере на наличие новых доменов. И при появлении новых доменов добавляет их в named.conf на slave сервере. Написан на питоне.
На мастер сервере нужно создать пользователя и добавить его в группу bind, чтобы у него были права на чтение named.conf. Также на master нужно разрешить трансфер зон.

allow-transfer { ip-slave_сервера; };

На slave сервере нужно настроить ssh авторизацию по ключам с master сервером для этого юзера.
Затем получаем сам скрипт и перенесем его в /usr/bin

git clone https://github.com/shmulya/zonefetch
mv zonefetch/fetch.py /usr/bin/fetch.py

Правим там переменные:
MASTERIP — ip master сервера(можно указать несколько серверов в формате [’ip1’,’ip2’])
REMOTE_USERNAME — юзер master сервера у которого есть права на чтение named.conf
PATH_TO_MASTER_ZONEFILE — файл с зонами на master
PATH_TO_SLAVE_ZONEFILE — каталог для файлов с зонами на slave

Скрипт пишет зоны в файлы вида /etc/bind/ip.conf, например для master с ip — 192.168.0.1 это будет /etc/bind/192.168.0.1.conf.
Эти файлы нужно создать предварительно и добавить соответствующие инклуды в /etc/named.conf, например:

include "/etc/bind/192.168.0.1.conf";

В конце добавим скрипт в крон примерно так

*/5 * * * * /usr/bin/python /usr/bin/fetch.py >> /var/log/zonefetch.log 2>&1
17 мая   bind   debian   DNS

Стандартное ядро в OVH

В OVH по умолчанию ставится модифицированное датацентром ядро, в котором нет многих нужных модулей. И некоторое ПО не работает. Например virtualbox не запускается с ошибкой типа:

ERROR ../libkmod/libkmod-module.c:1638 kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory

К тому же ядро в образах ДЦ зачастую уже «протухшее».

Чтобы все заработало как надо, нужно поставить стандартное ядро из реп.
Смотрим какие ядра есть у нас в репозиториях

# apt search linux-image

Выбираем стандартное ядро stable и устанавливаем.

# apt install linux-image-3.16.0-4-amd64 linux-headers-3.16.0-4-amd64

Затем в /etc/default/grub правим диррективу GRUB_DEFAULT чтобы сервер грузился с нашего ядра.
Делаем

update-grub

и ребутимся

Если все работает правильно, ядро OVH можно вообще удалить.

5 мая   debian   Kernel   ovh   ubuntu   virtualbox

Менеджер версий php для Debian/Ubuntu.

Выкладываю мой скрипт который поможет установить несколько версий php из исходных кодов на ваш сервер. Скрипт делался в первую очередь для Debian и проверялся на Debian 8 x64. Но работает и на Ubuntu. Удобно с помощью скрипта поддерживать актуальные версии php на сервере с вестой, т.к скрипт умеет автоматически обновлять шаблоны весты при сборке.
На debian 7/8 с моими флагами установки без проблем собираются php 5.2 и выше.
На ubuntu 14.04/16.04 по умолчанию собираются php 5.3 и выше. 5.2 при компиляции валится с ошибкой. Поэтому если нужен 5.2 юзайте дебиан.
Что делает скрипт:

  1. При запуске спрашивает какие версии php требуется собрать(версию нужно вводить полностью. Например 7.1.2, а не 7.1. Можно ввести несколько версий через пробел), создавать ли на бинарник php-cgi симлинк в /usr/bin для быстрого доступа. Проверяет наличие на сервере панели vestacp. Если находит её, то спрашивает создавать ли шаблон web для каждой версии.
  2. При первом запуске спрашивает, нужно ли ставить зависимости. Если вы откажетесь от установки зависимостей, то вам нужно их установить самостоятельно. Иначе при сборке вы получите ошибки. При последующих запусках этот шаг пропускается. Нужно понимать что скрипт старается поставить все возможные зависимости, но в разных дистрибутивах могут использоваться разные пакеты или при использовании кастомных флагов компиляции может потребоваться что-то доустановить.
  3. Парсит http://php.net/downloads.php и http://php.net/releases/ на наличие bz2 архива с исходниками указанной юзером версии php. Если находит, скачивает и распаковывает исходники в /opt/php/src.


    Также можно положить архивы с иходниками в /opt/php/src/bzips, тогда скрипт не будет их скачивать.
  4. Конфигурит, по умолчанию с моими параметрами компиляции(подойдут для большинства пользователей). Собирает.

    Тем кто хочет использовать свои параметры компиляции обязательно кликнуть сюда
    Можно свои параметры конфигурирования положить в файл /opt/php/options. Если скрипт находит этот файл, то он использует его для конфигурирования. Свой файл можно сделать на основе моего. Скрипт заменяет version в файле конфигурирования на текущую собираемую версию. Это сделано для того чтобы скрипт автоматом создавал свой каталог для каждой версии. Если вы собираете например версию 5.3.29 и в вашем файле конфигурирования указано prefix=/opt/php/php-version, то это по сути равно prefix=/opt/php/php-5.3.29. При сборке нескольких версий одновременно эту фичу нужно использовать чтобы не собирать все версии в один каталог.
  5. При необходимости создает симлинк и шаблон для весты. Если создает темплейты для весты, то проверяет включен ли модуль cgi в апаче. Если модуль не включен, то включает его.

Запустить скрипт очень просто

# git clone https://github.com/petranikin/mgrvphp.git
# cd mgrvphp
# bash mgrvphp

Немного скриншотов

2017   debian   mgrvphp   php   php7   phpmgr   ubuntu   vesta control panel   vestacp

При выходе из ждущего режима пропадает соединение OpenVPN

Сделаем автоматический перезапуск OpenVPN на системах с systemd. В debian 9 создаем файл /etc/systemd/system/resume.openvpn.service с содержимым:

[Unit]
Description=Run openvpn after suspend
After=suspend.target

[Service]
ExecStart=/usr/sbin/service openvpn restart

[Install]
WantedBy=suspend.target

Затем выполняем

# systemctl enable resume.openvpn.service

Теперь при выходе из ждущего режима будет автоматически перезапускаться OpenVPN.

2017   debian   openvpn   suspend

Обновился до Debian 9 Stretch

Первое что заметил, что выпилили fglrx. Благо свободный драйвер ATI допилили наконец до юзабельного состояния. В jessie на свободном драйвере у меня экран валился в квадраты и становился похожим на шахматную доску(HD7700). Теперь свободный драйвер мне нравится больше проприетарного. Он лучше интегрирован в систему и можно рулить настройками нескольких мониторов с гайки настроек дисплея в xfce. В проприетарном в jessie приходилось плясать с xrandr, по крайней мере в xfce.
Вернули в репозиторий firefox актуальной версии. Можно установить нормальный firefox помимо firefox-esr, не подключая дополнительные репы.
Ну и конечно относительно новые версии ПО, и ядро 4.8(в 2017 году мы таки добрались до ядра 4.x)
В общем неплохо, багов я не заметил.

2017   debian   fglrx   stretch

Установка Debian 8 на OrangePI PC.

На днях мне пришла эта платка. Плата достаточно новая и информации по ней в русскоязычном сегменте интернета крайне мало. Расскажу как я усстанавливал на неё Debian 8.
Для любителей первоисточника, оригинальный мануал здесь
В общем вот отсюда нам понадобится 2 файла, собственно образ нужного дистрибутива(Я выбрал OrangePI_Jessie_Xfce.img.xz) и scriptbin_kernel.tar.gz.
Распаковываем образ дистрибутива и заливаем на нашу microsd с помощью dd

$ sudo dd if=OrangePI_Jessie_Xfce.img of=/dev/sdX bs=1M oflag=direct

Прогресс заливки можно глядеть выполнив в соседней консоли

$ sudo killall -USR1 dd

После записи нужно примонтировать первый раздел на нашей microsd, который с меткой BOOT.
Теперь нужно взять файл uImage_OPI-2 из архива scriptbin_kernel.tar.gz, переименовать его в ulimage и положить в раздел BOOT. Затем так же из архива взять один из файлов script.bin.OPI-PC_*****(я взял, например, script.bin.OPI-PC_720p60), переименовать его в script.bin и тоже положить в BOOT. Можно отмонтировать раздел.
Затем нужно второй раздел, который будет корнем нашей будущей ОС, увеличить до конца нашей флешки. С увеличением по оригинальному мануалу у меня ничего не получилось, были ошибки. Я делал по своему.
Выполняем

$ sudo fdisk /dev/sdX

В fdisk вводим p и нажимаем enter. Запоминаем цифру обведенную на картинке.

Жмем d, удаляем второй раздел

Жмем n для создания на его месте нового раздела с началом там же где был старый раздел. На все вопросы можно ответить по умолчанию, кроме начала раздела. В качестве начала введите запомненное вами число. После создания нового раздела нажмите w для применения изменений.

Теперь нужно увеличить старую файловую систему на весь новый раздел
Выполним

sudo e2fsck -f /dev/sdc2

потом

sudo resize2fs /dev/sdc2

Теперь можно примонтировать раздел и убедится что он расширен до конца флешки.
Все отмонтируем, берем microsd, вставляем в orangepi и загружаемся. Можно не подключать монитор и клавиатуру, в образе сразу настроен ssh. Подключится можно рутом или юзером opengepi, пароль у обоих orangepi. Я сразу после установки поднял vnc.

2015   debian   orangepi   orangepipc

Установка php 7 на Debian 8 «jessie» из исходных кодов

Можно использовать скрипт который упрощает установку разных версий php
Сегодня дождливый и пасмурный день. И нет ничего более уютного и расслабляющего чем попивая горячий чай собирать ПО из исходников. Поэтому самое время собрать php 7 на debian 8.
У нас есть тачка с debian 8, установленым с образа netinstall. Установка минимальная, кроме ssh ничего не ставилось.
Для установки php 7 нам нужно выполнить по ssh или в консоли тачки несколько ругательств из под рута.
Первым делом установим все необходимые для сборки пакеты:

# apt-get install git apache2 mysql-server make autoconf gcc bison libxml2 \
libxml2-dev libcurl4-openssl-dev pkg-config libssl-dev \
bzip2 libbz2-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev \
libgmp-dev libgmp3-dev libmcrypt-dev libmysqlclient-dev \
libpspell-dev librecode-dev

Также нам нужен пакет libt1-dev, который отсутствует в репах debian 8, возьмем его из репов debian 7 wheezy, для этого добавим в /etc/apt/sources.list следующую строку

deb http://ftp.debian.org/debian wheezy main contrib non-free

Затем выполняем:

# apt-get update
# apt-get install libt1-dev

Затем убираем добавленную строку из /etc/apt/sources.list и затем выполняем

# apt-get update

Теперь сделаем симлинк gmp.h в /usr/include/

# ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h

Теперь все готово для сборки. Создадим папку для исходников и скачаем их туда.

# mkdir /root/php7
# cd /root/php7
# git clone https://git.php.net/repository/php-src.git

Переходим к сырцам и конфигурим

# cd php-src
# ./buildconf
# ./configure \
    --prefix=/usr \
    --with-config-file-path=/etc \
    --enable-mbstring \
    --enable-zip \
    --enable-bcmath \
    --enable-pcntl \
    --enable-ftp \
    --enable-exif \
    --enable-calendar \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-wddx \
    --with-curl \
    --with-mcrypt \
    --with-iconv \
    --with-gmp \
    --with-pspell \
    --with-gd \
    --with-jpeg-dir=/usr \
    --with-png-dir=/usr \
    --with-zlib-dir=/usr \
    --with-xpm-dir=/usr \
    --with-freetype-dir=/usr \
    --with-t1lib=/usr \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv \
    --with-openssl \
    --with-mysql=/usr \
    --with-pdo-mysql=/usr \
    --with-gettext=/usr \
    --with-zlib=/usr \
    --with-bz2=/usr \
    --with-recode=/usr \
    --with-mysqli=/usr/bin/mysql_config

Если все в порядке, то результатом выполнения предыдущей команды будет что-то типа:

+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

Далеее выполняем

# make
# make install

Проверяем, что установка прошла успешно

root@debian:~/php7/php-src# php -v
PHP 7.0.0-dev (cli) (built: May 23 2015 15:48:27) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies

Вобщем то php7 установлен, но если мы хотим заставить веб-сервер обрабатывать php, то надо ещё настроить apache2.
Заставим apache2 обрабатывать php, с помощью php-cgi.
У меня в системе есть пользователь user, и я решил сделать для него виртуальный хост.
Создаем каталог cgi-bin у пользователя

# mkdir /home/user/cgi-bin/

Создаем файл /home/user/cgi-bin/php со следующим содержимым

#!/usr/bin/php-cgi

И выставляем права 555 на него

# chmod 555 /home/user/cgi-bin/php

Создаем файл /home/user/cgi-bin/php.ini со следующим содержимым

max_execution_time=600
memory_limit=128M
error_reporting=0
display_errors=0
log_errors=0
user_ini.filename=
realpath_cache_size=2M
cgi.check_shebang_line=0
 
zend_extension=opcache.so
opcache.enable_cli=1
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.use_cwd=1
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.memory_consumption=128
opcache.consistency_checks=0

Создаем каталог для виртуалхоста

# mkdir /home/user/www

И кладем в него index.php со следующим содержимым

<?php
phpinfo();
?>

И т.к мы все делали из под рута, то меняем владельца всех этих созданных файлов и каталогов на user

# chown -R user:user /home/user/

Теперь нужно настроить apache2. Добавим необходимые модули в apache2

# a2enmod actions
# a2enmod cgi

Заменим конфиг /etc/apache2/sites-enabled/000-default.conf на такой

<Directory /home/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /home/user/www
ScriptAlias /cgi-bin/ "/home/user/cgi-bin/"
AddType application/x-httpd-php .php .php3
Action  application/x-httpd-php /cgi-bin/php
DirectoryIndex index.php
</VirtualHost>

И перезапустим apache2

# service apache2 restart

Теперь мы можем зайти браузером на ip тачки и увидеть страницу php info.

Аналогично можно настроить другие виртуальные хосты.

Про настройку разных версий php для каждого сайта на одном сервере можно прочитать в статье про мультиверсионность php.

2015   apache2   debian   php   php7

Изолируем пользователей ssh в домашней директории с помощью lshell

Установим lshell, он есть в репозиториях большинства дистрибутивов. Установка для дебианоподобных дистров:

# apt-get install lshell

Затем открываем конфигурационный файл и редактируем

# nano /etc/lshell.conf

Там в основном все просто и понятно, обратим внимания на некоторые переменные в разделе [default].
Команды разрешённые для выполнения:

allowed         : ['ls','echo','cd','ll','rsync','mkdir']

В allowed нельзя вписывать программы которые умеют бродить по каталогам например mc, т.к из lshell выполнение передается в bash и такие программы смогут выйти за пределы домашнего каталога. Поэтому тут будьте внимательны.

Команды которые можно выполнять через ssh:

overssh         : ['ls','rsync']

В конце конфигурационного файла можно указать индивидуальные настройки для определенного юзера примерно так:

[user]
allowed: ['ls','echo','cd','ll','rsync','mkdir','cp','mv']
path: ['/backups']
overssh: ['ls', 'rsync']

Тут например мы разрешили пользователю user выполнять команды указанные в allowed, кроме домашней папки он может ходить в /backups, и может выполнять по ssh ls и rsync.

После редактирования сохраняемся и и закрываем файл.
Теперь нужно изменить shell у пользователей, которых мы ограничиваем.

# chsh -s /usr/bin/lshell user
# chsh -s /usr/bin/lshell user1
# chsh -s /usr/bin/lshell user2
.....

Теперь пробуем зайти по ssh user’ом и проверяем, что он изолирован в домашней папке и может выполнять только команды указанные в allowed.

2015   centos   debian   lshell   ssh   ubuntu

Перенос linux на другой диск на примере debian/ubuntu

Навеяно статьей про перенос freebsd на другой диск. Будем делать тоже самое но на linux. В linux все несколько сложнее.

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

# mkfs.ext4 /dev/sdb1

Затем примонтируем его в /mnt

# mount /dev/sdb1 /mnt

Теперь нам нужно создать дампы разделов, в данном случае нужно создать только дамп sda1. Установим утилиты dump/restore.

# apt-get install dump

И создаем дамп раздела в файл /mnt/root.img

# dump -0f /mnt/root.img /

Создание дампа в /mnt/root.img возможно когда на разделе используется менее 50% от /dev/sdb1. Иначе на разматывание дампа места не хватит. В остальных случаях нужно создавать дамп в другом месте, но не в разделе корня, чтобы дамп не мотал сам себя. Можно использовать раздел другой тачки примонтированный по sshfs, я проверял это прекрасно работает.
Переходим в /mnt и разматываем дамп.

# cd /mnt
# restore -rf /mnt/root.img

Как видим раздел перенесся на /dev/sdb1. Если у нас /boot на отдельном разделе, то переносим его аналогично.

Теперь нам нужно установить загрузчик.

# grub-install --root-directory=/mnt /dev/sdb

Затем если требуется правим /mnt/etc/fstab и меню grub в /mnt/boot/grub/grub.cfg.

# nano /mnt/etc/fstab
# nano /mnt/boot/grub/grub.cfg

Тут немного поясню зачем проверять и править эти файлы. У меня например в этих файлах были прописаны uuid разделов, и если мы уберем старый диск то ОС соответственно не загрузится, т.к у новых разделов у нас другие uuid. Я вместо uuid прописал реальные устройства корня и свопа /dev/sda1 и /dev/sda3. Все устройства sdb, станут у нас sda после извлечение первого диска.

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

P.S. Утилиты dump и restore не ограничиваются переносом ОС с одного диска на другой. Таким образом можно переносить linux вообще на другую тачку с другим железом и дисками. Процедура почти такая же за небольшими изменениями.

  1. На первой тачке создаем дамп ОС;
  2. Загружаем вторую тачку с livecd;
  3. Размечаем и форматируем диски;
  4. Копируем туда дамп c первой тачки(по scp, например);
  5. Разворачиваем дамп с помощью restore;
  6. Устанавливаем загрузчик;
  7. Загружаемся.
2015   centos   debian   dump   Linux   restore   ubuntu

Ошибка при запуске apf-firewall

Если при запуске apf получаем ошибку:

apf(23061): {glob} activating firewall
libkmod: ERROR ../libkmod/libkmod-module.c:1567 kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory
Error: could not get list of modules: No such file or directory

или

kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory

то в файле /etc/apf-firewall/conf.apf надо изменить значение директивы с

SET_MONOKERN="0"

на

SET_MONOKERN="1"

После этого apf-firewall должен запустится без ошибок.

2015   Advanced Policy Firewall   APF   APF-Firewall   debian   ubuntu
Ctrl + ↓ Ранее