Установка Zimbra на Ubuntu 16.04 + StartSSL
Примерный список must-have действий для успешной установки Zimbra на Ubuntu 16.04. Не для безумного копипаста.
Приведём сервер в порядок
1. В /etc/apt/sources.list
включаем все необходимые репозитории.
2. Установим временную зону, локаль, включим обновления безопасности и поставим пакеты первой необходимости(от рута):
locale-gen en_US.UTF-8 ru_RU.UTF-8
apt-get install locales man dialog htop silversearcher-ag bzip2 pigz pbzip2 mc grc pydf bash-completion vim-nox zsh tmux ncdu unattended-upgrades nano screen
dpkg-reconfigure unattended-upgrades
dpkg-reconfigure tzdata
Локаль Ubuntu 12.04
Устанавливаем кошерную русскую локаль в Ubuntu из консоли:
locale-gen ru_RU.UTF-8 |
В /etc/default/locale пишем:
LANG="ru_RU.UTF-8" LANGUAGE="ru_RU:en" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" |
logout и вуаля! Русский язык на месте.
Настройка nginx для A/B тестирования с помощью lua
Возникла жесткая необходимость настройки сплит-тестирования (A/B тестирование) сайта.
Поскольку в моем случае разные версии сайта были даже на разных движках, то самым логичным было менять document root в зависимости от куки пользователя.
Но вот незадача - эту куку надо ещё как то установить. Делать для этого отдельный бекенд, как советует mixlr мне не хотелось.
Как установить рандомную куку средствами самого nginx, я так и не понял.
Решено было использовать сборку nginx - OpenResty, поскольку в ней уже встроен модуль HttpLuaModule.
Да, я знаю, что это извращение, но писать модуль для nginx на C не было никакого желания.
В результате получился вот такой вот скрипт на lua, который нужно вставить в нужное место в своём конфиге:
set $target ''; access_by_lua ' local abtest = 0 local abtestMax = 1 local userAgent = ngx.req.get_headers()["User-Agent"] local cookie = ngx.var.cookie_abtest if ngx.re.match(userAgent, "(yandex|google|MSIE|bot)", "i") then cookie = 0 end if cookie == nil then math.randomseed( os.time() ) abtest = math.random(0, abtestMax) ngx.header["Set-Cookie"] = {"abtest=" .. abtest .. "; path=/", "abReason=nil"} else if tonumber(cookie) >= 0 and tonumber(cookie) <= abtestMax then abtest = cookie else abtest = 0 ngx.header["Set-Cookie"] = {"abtest=" .. abtest .. "; path=/", "abReason=badRange"} end end ngx.var.target = abtest '; root /var/www/meta$target; |
Логика проста - скрипт смотрит, есть ли кука.
- если user-agent содержит yandex, google, MSIE или bot -- кука с тестом 0 -- это для того, чтобы поисковики и IE видели старую версию сайта(№0). Поисковики тем самым не обвинят нас в клоакинге.
- если кука nil, т.е. её нет - выбираем случайную куку от 0 до abtestMax и передаём её в браузер. Таким образом вероятность выпадения при abtestMax=1 - 50%/50%
- если кука не в нашем диапозое [0;abtestMax] - кука будет 0(версия сайта №0)
- если в диапозоне, то всё ок
Далее устанавливается переменная $target равная номеру теста и ниже уже ставится documentRoot в зависимости от неё.
Решение, конечно, не самое быстрое. Но для тестирования на небольшом проекте подходит как нельзя лучше.
Как получить MAC из busyBox
Сегодня потребовалось из busybox при установки Debian netsinst получить MAC-адрес сетевки. Это как оказалось можно сделать так:
# ip l sh eth0
17: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:c0:9f:55:6e:e5 brd ff:ff:ff:ff:ff:ff
Лечим Network is unreachable в Java на Debian/Ubuntu
Если у вас в Debian или Ubuntu не работают приложения, написанные на Java, ругаясь при этом как то так:
38 connect(22, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::ffff:72.5.124.95", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28
6938 connect(22, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::ffff:72.5.124.95", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)
Или вот так: Could not bind/listen. Network is unreachable.
Лечится это просто.
Редактируем файл /etc/sysctl.d/bindipv6only.conf и ставим там 0 вместо 1. Перегружаемся и всё работает! Проверено, у меня так hadoop, hbase не хотели запускаться.
Если хотите без перезагрузки, то можете ещё выполнить:
echo 0 > /proc/sys/net/ipv6/bindv6only
sysctl net.ipv6.bindv6only=0
Ресайз PNG картинок c прозрачностью в Thunar
Сегодня мне пришлось решить рутиную задачу - изменить размер PNG картинок не теряя при этом прозрачность. Искать какой либо софт было лень, поэтому решил написать bash скрипт, который всё сделает за меня.
Перенос MySQL в другую папку/раздел на Debian/Ubuntu
Недавно мне пришлось переместить данные MySQL в другую папку(а точнее на другой раздел) на Debian Linux 5.0.3.
Логично, что простым переносом файлов тут не отделаешься, надо что-то где-то прописать.
По-умолчанию данные MySQL лежат в /var/lib/mysql. Мне захотелось, чтобы они были в /home/mysql. Переносим папку mysql куда нам нужно, затем лезем в конфиг MySQL (/etc/mysql/my.cnf).
Там есть опция:
datadir = /var/lib/mysql |
Вот её мы заменяем на следующее:
datadir = /home/mysql |
Пробуем перезапустить наш MySQL сервер (/etc/init.d/mysql restart) и в итоге у нас ничего не запускается.
Смотрим tail /var/log/messages и видим приблизительно такое:
kernel: [ 2714.258037] audit(1227462526.718:13): type=1503 operation="inode_create" requested_mask="w::" denied_mask="w::" name="/home/mysql/yii.test" pid=19659 profile="/usr/sbin/mysqld" namespace="default" kernel: [ 2714.310572] audit(1227462526.770:14): type=1503 operation="inode_permission" requested_mask="rw::" denied_mask="rw::" name="/home/mysql/ibdata1" pid=19659 profile="/usr/sbin/mysqld" namespace="default" |
Это нам говорит о том, что политика AppArmor запрещает всякие манипуляции мусклу в новой папке. И это естественно, ведь AppArmor думает, что базы лежат всё там же, в /var/lib/mysql.
Значит надо переписать конфиг AppArmor. Открываем и редактируем /etc/apparmor.d/usr.sbin.mysqld . В нём меняем всё, где упоминается /var/lib/mysql на /home/mysql. Затем перезапускаем AppArmor и MySQL:
sudo service apparmor restart sudo /etc/init.d/mysql restart |
И у нас всё работает! Такая же схема для Ubuntu.
Доступны репозитории Ubuntu Lucid Lynx
С недавнего времени доступны репозитории разрабатываемой версии Ubuntu Lucid Lynx.
Для обновления до Ubuntu 10.04 LTS введите в консоли следующую команду:
sudo do-release-upgrade -d -p |
Ubuntu 10.04 (Lucid Lynx) является LTS релизом и выйдет в апреле 2010 года. Будет поддерживаться особенно долго и тщательно.
Разработчики Sabayon Linux планируют выпустить версию 5.0 через 2 недели
Wolfden в своём блоге написал о начале тестирования второй беты Sabayon 5.0.
Он надеется выпустить финальную версию Sabayon 5.0 через две недели, однако точной даты никто не знает.
О Sabayon 4.2 и не только
Поставил я как то себе на домашний компьютер Sabayon 4.2 Gnome x86_64. Конечно хотелось бы скачать Sabayon 5, но его ещё нигде нет - одни слухи только. Первое впечатление о системе было замечательное.
Ну Gentoo как Gentoo, только ставится быстрее, не надо с хэндбуком сидеть. Есть встроенный менеджер пакетов entropy с графическим фронтэндом Sulfur. Из консоли всё ставится через equo install. emerge также работает.