Rose debug info
---------------

Блог об администрировании Linux, BSD и не только.

Связаться со мной:
Позднее Ctrl + ↑

Простая установка FTP-сервера на FreeBSD.

На самом деле по умолчанию во freebsd уже установлен ftp-сервер, нам нужно его только сконфигурировать.
Выполняем для добавления запуска ftp в /etc/rc.conf.

# echo 'ftpd_enable="YES"' >> /etc/rc.conf
# echo 'ftpd_flags="-l -l"' >> /etc/rc.conf

Далее смотрим файл /etc/ftpusers, тут указаны пользователи которым запрещён доступ к ftp.

# cat /etc/ftpusers

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

# echo 'user /var/www/site.ru' >> /etc/ftpchroot

Где user — существующий на сервере пользователь, а  /var/www/site.ru — его каталог.
Запускаем ftp-сервер

# /etc/rc.d/ftpd start

И пробуем подключится с логином и паролем user.

Р.S.: Если у user в качестве shell используется /sbin/nologin, то подключение не произойдет. FTP-клиент сообщит что-то типа:

access denied

а в логах сервера будет:

ftpd: connection from 10.8.0.1 (10.8.0.1)
ftpd: FTP LOGIN REFUSED FROM 10.8.0.1, user

Проверить какой shell используется для юзера можно командой:

# pw usershow user

В этом случае нам нужно создать /sbin/nologin-ftp и прописать его у пользователя вместо /sbin/nologin. Делается это очень просто:

# echo '/sbin/nologin-ftp' >> /etc/shells
# ln -s /usr/sbin/nologin /sbin/nologin-ftp
# pw usermod user -s /sbin/nologin-ftp

Теперь подключение должно происходить без проблем.

Обзор бесплатной панели управления хостингом VestaCP

Сегодня я хочу рассказать о панели хостинга VestaCP. Это бесплатная легкая панель, которая несмотря на минимализм обладает почти всем необходимым для хостинга функционалом. Распространяется по лицензии GPLv3.
На текущий момент поддерживаются дистрибутивы: RHEL 5, RHEL 6, CentOS 5, CentOS 6, Debian 7, Ubuntu 12.04, Ubuntu 12.10, Ubuntu 13.04, Ubuntu 13.10, Ubuntu 14.04.
Начнем с установки, заходим на сервер по ssh и выполняем:

# curl -O http://vestacp.com/pub/vst-install.sh
# bash vst-install.sh

Установочный скрипт спросит хотим ли мы установить панель и все ПО к ней, попросит указать адрес электронной почты администратора и hostname сервера.

После всех вопросов система сообщит что установка займет около 15 минут. Об окончании установки мы можем узнать по сообщению в консоли, а также по письму на электронную почту указанную нами в установочном скрипте.

Открываем ссылку указанную в сообщении и логинимся.

Видим интерфейс панели, сменим язык интерфейса. Для этого кликнем по «admin» в правом верхнем углу. Откроется профиль пользователя, выбираем «Language» ru и жмем Save. И видим русский интерфейс панели.

После установки панели мы получаем готовое к работе и настроенное ПО: веб-сервер(nginx сразу устанавливается фронтэндом к апачу), почтовый сервер, сервер баз данных, ftp-сервер и сервер DNS. Т.е сразу после установки панели мы можем создавать пользователей, загружать на сервер свои сайты и разворачивать их. Интерфейс панели интуитивно понятен и не вызывает затруднений в работе.

Есть возможность добавлять дополнительные ip на сервер, редактировать cron и правила iptables. Также присутствуют шаблоны пользователей.

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

На мой взгляд, vestacp идеальный вариант для веб-мастера за счет своей бесплатности, открытости и богатого функционала. Для полноценного хостинга не хватает только жесткого разграничения ресурсов сервера(процессорного времени, памяти и т. д.).

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

Установка облака mail.ru в linux

Теперь облако mail.ru распространяется не бинарником, как я описывал в предыдущей статье, а установочными файлами под разные дистрибутивы. Список дистрибутивов и ссылки на установочные файлы здесь.

Установка теперь очень простая. Например под Ubuntu 14.04 LTS скачиваем установочный .deb пакет и выполняем в консоли
$ sudo dpkg -i mail.ru-cloud_15.04.0021-trusty_amd64.deb

Или просто запускаем через центр приложений ubuntu.
После установки бинарник будет находится в /usr/bin/cloud, приложение будет в меню Dash, а после запуска иконка появится в трее.

Уменьшаем сайт путем отдачи статического контента с облака.

Допустим у нас есть сайт на котором очень много графики, картинок и т.д, а места на хостинге мало и платить за его увеличение не хочется. Тем более сейчас многими компаниями место предоставляется совершенно бесплатно в облаках, таких как: яндекс диск, google drive, облако mail.ru и т. д. Я расскажу как с минимальными трудозатратами залить весь статический контент в облако mail.ru и отдавать его от туда.

Допустим у нас движок вордпресс, соответственно у нас статика лежит по ссылке:

http://site.name/wp-content/uploads/...

Заходим в http://cloud.mail.ru, создаем каталог, куда мы будем заливать статику сайта. Настраиваем к каталогу общий доступ и получаем ссылку для общего доступа.

Теперь после создания каталога заливаем туда папку uploads из каталога wp-content. Затем пройдя по полученой ссылке на папку и открыв прямую ссылку на любое изображение мы увидим, что ссылки на наши файлы имеют вид типа такого:

https://cloclo17.cloud.mail.ru/weblink/thumb/XXX/XXXXXXXX/site.name/uploads/...

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

http://site.name/wp-content/

на

https://cloclo17.cloud.mail.ru/weblink/thumb/XXX/XXXXXXXX/site.name/

Это можно сделать двумя способами:

  1. Либо импортировать базу данных сайта к себе на компьютер, открыть любым редактором и сделать массовую замену указанного выше текста, сохранить и закачать изменённую базу назад на хостинг.(тут важно следить чтобы не изменилась кодировка при сохранении).
  2. Либо зайти в phpmyadmin. Затем выбрать нужную нам базу данных слева, выбрать закладку SQL и выполнить код типа такого:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://site.name/wp-content/', 'https://cloclo17.cloud.mail.ru/weblink/thumb/XXX/XXXXXXXX/site.name/');

где wp_posts — таблица, post_content — поле таблицы.
По своему опыту скажу что лучше использовать первый способ, чтобы гарантированно заменить все ссылки в базе, а не только в постах.

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

Ошибка при запуске 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 должен запустится без ошибок.

Модуль remoteip в ubuntu 14.04

Почему-то с модулем mod_rpaf для apache2 в ubuntu 14.04 у меня не срослось. Не хотел он нормально работать и все. Поэтому было решено использовать модуль remoteip, который, собственно, выполняет те же функции.
Подключаем модуль.

# a2enmod remoteip

Создаем конфигурационный файл

# nano /etc/apache2/conf-available/remoteip.conf
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1 ip_сервера

Применяем конфиг

# a2enconf remoteip

Перезапускаем apache2

# service apache2 restart

Изменение размера раздела в linux без потери данных.

Условие: диск размечен так

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                        bios_grub
 2      2097kB  514MB   512MB   ext2                  boot
 3      514MB   8706MB  8193MB  linux-swap(v1)
 4      8706MB  2000GB  1992GB  ext4

Раздел 4 это корень установленной на сервере ОС, требуется уменьшить этот раздел до 1000GB не поломав установленуую ОС и данные на разделе.

Для решения этой проблемы нам поможет утилита resize2fs, но для начала нам требуется чтобы модифицируемый раздел был отмонтирован. Поэтому загружаем сервер в recovery/rescue, т. е. с LiveCD.
В LiveCD выполняем

root@server:~# resize2fs /dev/sda4 1000G
resize2fs 1.42 (29-Nov-2011)
Please run 'e2fsck -f /dev/sda4' first.

В первый раз у меня программа ругнулась, что сначала нужно сделать e2fsck, делаем

root@server:~# e2fsck -f /dev/sda4
e2fsck 1.42 (29-Nov-2011)
/dev/sda4: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (478307399, counted=478307291).
Fix<y>? yes

Free inodes count wrong (121507397, counted=121507389).
Fix<y>? yes


/dev/sda4: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda4: 61891/121569280 files (0.1% non-contiguous), 7945765/486253056 blocks

Теперь повторно запускаем resize2fs

root@server:~# resize2fs /dev/sda4 1000G
resize2fs 1.42 (29-Nov-2011)
Resizing the filesystem on /dev/sda4 to 262144000 (4k) blocks.
The filesystem on /dev/sda4 is now 262144000 blocks long.

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

Как создать виртуальный хост «заглушку» в apache2.

Многие пользователи жалуются что их сайты открываются по «левым доменам», к которым они не имеют отношения. Происходит это потому что сайт на сервере доступен не только по доменному имени, но и по ip. И кто угодно может направить свой домен на ip сервера. Чтобы это исправить нужно создать заглушку при обращениях к вебсерверу по ip. Т.к проблема частая, пилю мануал.

Создание заглушки для сервера с панелью ispmanager 4.

  1. В разделе www-домены создаем домен с любым именем, например default.domain
  2. В разделе ip-адреса выделяем ip сервера и кликаем «Изменить»
  3. В качестве «домен по умолчанию» выбираем наш домен default.domain

Теперь по ip адресу будет открываться заглушка ispmanager.

Создание заглушки для сервера без панели управления.

Создадим каталог для виртуального хоста заглушки, например /var/www/default/

# mkdir /var/www/default

Создадим пустой файл index.php

# touch /var/www/default/index.php

Теперь в конфигурационном файле apache2(в дебианоподобных ОС это /etc/apache2/apache2.conf) пропишем виртуальный хост.

<VirtualHost *:80 >
        ServerName default
        DocumentRoot /var/www/default
</VirtualHost>

Затем перезапускаем apache2

# service apache2 restart

Теперь по ip адресу будет открываться пустая страница.

Перенос FreeBSD на другой жесткий диск с помощью clonehdd.

В моей домашней файлопомойке-торрентокачалке в один прекрасный день smartctl показал, что диск «помирает». Соответственно диск пришлось менять. А т.к raid’а там нет, то вариантов было 2: либо полностью устанавливать и настраивать систему на новом диске, либо каким-то образом попытаться перенести ОС с неисправного диска на новый. Естественно я стал искать решения по второму варианту, т.к настраивать все заново мне не хотелось.
Для переноса я использовал утилиту clonehdd, огромным плюсом этой утилиты является, то что она может перенести полностью установленную freebsd даже на диск другого размера. Для меня это было критично, т.к для замены в «закромах» мной был найден диск меньшего размера, чем стоял изначально. Т.к изначально скриншоты я не делал, скриншоты для статьи пришлось делать в виртуалке.
Установим clonehdd. Утилита есть в портах, установим

# whereis clonehdd
clonehdd: /usr/ports/sysutils/clonehdd
# cd /usr/ports/sysutils/clonehdd
# make install clean

Или устанавливаем из пакетов
Для старых версий freebsd:

# pkg_add -r clonehdd

Для новых версий:

# pkg install clonehdd

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

ada0 - диск с системой
ada1 - новый диск на который нужно перенести нашу ОС

Перенести все довольно просто одной командой. Правда процесс довольно длительный(у меня он занял около 12 часов) и если работа ведется по ssh, то запускать лучше в screen. Запустим клонирование диска:

# clonehdd -src=ada0 -dst=ada1 -swap=1024 -force
-src - исходный диск
-dst - новый диск
-swap - сколько места выделить под своп
-force - не задавать лишних вопросов

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

P.S.: Если впоследствии новый диск также выйдет из строя и потребуется снова переносить ОС на другой диск, то удалите в корне файл backup-mode. Иначе clonehdd будет завершаться с сообщением «You are working from backup device. Please stop clone script usage!!!» и ОС перенесена не будет.

Ранее Ctrl + ↓