Elks

From V5wiki

Jump to: navigation, search

Contents

Начальная установка

1. Установлен Proxmox через подключение iso (proxmox-ve_3.3-a06c9f73-2.iso) по IPMI.

При установке может быть полезным указать размеры разделов, что делается через строку загрузки:

linux ext4 maxroot=25 swapsize=8 maxvz=400 minfree=32

Подробнее тут: http://pve.proxmox.com/wiki/Debugging_Installation

2. Переключаем на репозиторий

deb http://download.proxmox.com/debian wheezy pve-no-subscription

вместо

deb https://enterprise.proxmox.com/debian wheezy pve-enterprise

3. Если при установке была выбрана Russia, то надо добавить локаль ru_RU.UTF-8

dpkg-reconfigure locales

Переход на mdadm

За основу был взят пост http://habrahabr.ru/post/186818/

1. Устанавливаем полезный софт

apt-get install mdadm screen

2. Тут отвечаем по-умолчанию (all)

┌───────────────────────────────────────┤ Configuring mdadm ├───────────────────────────────────────┐  
│                                                                                                   │  
│ If the system's root file system is located on an MD array (RAID), it needs to be started early   │  
│ during the boot sequence. If it is located on a logical volume (LVM), which is on MD, all         │  
│ constituent arrays need to be started.                                                            │  
│                                                                                                   │  
│ If you know exactly which arrays are needed to bring up the root file system, and you want to     │  
│ postpone starting all other arrays to a later point in the boot sequence, enter the arrays to     │  
│ start here. Alternatively, enter 'all' to simply start all available arrays.                      │  
│                                                                                                   │  
│ If you do not need or want to start any arrays for the root file system, leave the answer blank   │  
│ (or enter 'none'). This may be the case if you are using kernel autostart or do not need any      │  
│ arrays to boot.                                                                                   │  
│                                                                                                   │  
│ Please enter 'all', 'none', or a space-separated list of devices such as 'md0 md1' or 'md/1       │  
│ md/d0' (the leading '/dev/' can be omitted).                                                      │  
│                                                                                                   │  
│                                              <Ok>                                                 │  
│                                                                                                   │  
└───────────────────────────────────────────────────────────────────────────────────────────────────┘

3. Копируем таблицу разделов с диска /dev/sda на /dev/sdb при помощи sgdisk, т.к. proxmox использует GPT

sgdisk --replicate=/dev/sdb /dev/sda
sgdisk --randomize-guids /dev/sdb

Теперь на втором диске та же таблица разделов и она имеет следующий вид:

#gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present 

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C18EF524-2F04-4431-B265-2AACD1B2F9A7
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2029 sectors (1014.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            4095   1024.0 KiB  EF02  primary
   2            4096         1048575   510.0 MiB   EF00  primary
   3         1048576       976773119   465.3 GiB   8E00  primary

4. Какой код у Linux RAID?

# sgdisk -L | grep 'Linux RAID'
fd00 Linux RAID


4.

mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3

5.

sgdisk --typecode=2:fd00 /dev/sdb
sgdisk --typecode=3:fd00 /dev/sdb 

6.

# mdadm --create --level=1 --raid-devices=2 /dev/md0 /dev/sdb2 missing
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# mdadm --create --level=1 --raid-devices=2 /dev/md1 /dev/sdb3 missing

7.

# cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
# mdadm --examine --scan >> /etc/mdadm/mdadm.conf

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

ARRAY /dev/md/0 metadata=1.2 UUID=2fd40ea6:d74dc3b6:4a50636e:0ffcbfca name=srv1:0
ARRAY /dev/md/1 metadata=1.2 UUID=12797618:8c19fac7:9ced447e:84394c47 name=srv1:1

8. Создаем файловую систему на /dev/md0 для переноса /boot и копируем

# mkfs.ext3 /dev/md0
# mkdir /mnt/md0
# mount /dev/md0 /mnt/md0
# cp -ax /boot/* /mnt/md0

9. Правим fstab, чтобы /boot монтировался с /dev/md0

# cp /etc/fstab /etc/fstab.orig

и правим так:

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/pve/root / ext3 errors=remount-ro 0 1
/dev/pve/data /var/lib/vz ext3 defaults 0 1
#UUID=b3663cdd-7507-4884-bec3-17fa36bfabe2 /boot ext3 defaults 0 1
/dev/md0 /boot ext3 defaults 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0

10.

# cp /etc/default/grub /etc/default/grub.orig

расскомментировать строку

GRUB_TERMINAL=console

и добавить строку

GRUB_PRELOAD_MODULES="raid dmraid"

11.

# cp /etc/modules /etc/modules.orig
# cp /etc/initramfs-tools/modules /etc/initramfs-tools/modules.orig
# echo raid1 >> /etc/modules
# echo raid1 >> /etc/initramfs-tools/modules

12. Перезагрзуился, чтобы проверить, что все хорошо и заодно /boot перемонтировался на /dev/md0 т.к. нам это дальше понадобится. Можно простот перемонтировать /boot на md0 вручную.

13.

# update-grub

14.

# update-initramfs -

15. Добавляем boot-раздел с sda в md0

# sgdisk --typecode=2:fd00 /dev/sda
# mdadm --add /dev/md0 /dev/sda2
mdadm: added /dev/sda2

16.

# pvcreate /dev/md1 
 Physical volume "/dev/md1" successfully created
# vgextend pve /dev/md1
 Volume group "pve" successfully extended
# pvmove /dev/sda3 /dev/md1
...
/dev/sda3: Moved: 100,0%
# vgreduce pve /dev/sda3
 Removed "/dev/sda3" from volume group "pve"

17. Тут я попытался перезагрузиться, но у меня вылезла ошибка у GRUB2 о том, что file not found и свалился в rescue console. После этого я переустановил grub на оба диска

# grub-install /dev/sda --recheck
Installation finished. No error reported.
# grub-install /dev/sda --recheck
Installation finished. No error reported.

Возможно, что я забыл это сделать между 12 и 13 шагом... Сейчас уже не помню :( И обновил на всякий случай конфиг

# update-grub

18. Подключаем /dev/sda3 (бывший LVM) в RAID1 /dev/md1

# sgdisk --typecode=3:fd00 /dev/sda
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
# mdadm --add /dev/md1 /dev/sda3
mdadm: added /dev/sda3

19. Дожидаемся, когда RAID1 восстановится:

# watch -d cat /proc/mdstat

20. Готово! Сейчас система должна грузиться с любого из дисков и при извлечении любого из дисков все должно продолжить работать. Еще полезно в BIOS установить загрузку с обоих дисков в очередь загрузки.

DRBD

0. Если изначально Proxmox был установлен с плохим разбиением дисков, то надо поменять размеры разделов, в частности я хочу уменьшить /, т.к. 95G - многовато.

Для этого перезагружаемся в другую ОС, чтобы / был отмонтирован.

Проверяем раздел на наличие ошибок:

# fsck -f /dev/pve/root

Уменьшаем

# resize2fs /dev/pve/root 10G
resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/pve/root to 2621440 (4k) blocks.
The filesystem on /dev/pve/root is now 2621440 blocks long.

resize2fs /dev/pve/root 10G  1,51s user 4,82s system 7% cpu 1:29,78 total

Проверяем еще раз

# fsck -f /dev/pve/root

Уменьшаем логический том

# lvreduce -L 11G /dev/pve/root 
  WARNING: Reducing active logical volume to 11,00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce root? [y/n]: y
  Reducing logical volume root to 11,00 GiB
  Logical volume root successfully resized

Еще раз проверяем

# fsck -f /dev/pve/root

Увеличиваем размер ФС до размера устройства

# resize2fs /dev/pve/root 
resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/pve/root to 2883584 (4k) blocks.
The filesystem on /dev/pve/root is now 2883584 blocks long.

И еще раз проверяем

# fsck -f /dev/pve/root

1. Делаем копию /var/lib/vz

# mkdir /tmp/vz
# cp -ax /var/lib/vz/* /tmp/vz
# umount /var/lib/vz
# lvremove /dev/pve/data
Do you really want to remove and DISCARD active logical volume data? [y/n]: y
 Logical volume "data" successfully removed
# lvcreate -n data -L 200G pve
  Logical volume "data" created
# mkfs.ext3 /dev/pve/data
# mount /var/lib/vz
# cp -ax /tmp/vz/* /var/lib/vz

2. Ставим

# apt-get install drbd8-util

Misc

Git

Чтобы изменить url remote для origin на git@new_server.com:gitolite-admin для url, соответствующих шаблону old_server.com

git remote set-url origin git@new_server.com:gitolite-admin old_server.com

Добавление файлов в .gitignore, которые уже были добавлены в репозиторий

git rm --cached <file>

rsync

Скопировать содержимое папки repositories/ в /path/ на удаленном сервере (папка to_copy/ создана не будет!)

rsync -aPz to_copy/ user@server.com:/path/

Python

pyenv позволяет установить нужной версии питон у себя в домашний каталог. Надо все делать, как описано в документации:

Устанавливал pyenv при помощи автоматического установщика: https://github.com/yyuu/pyenv-installer

Потом добавил эти строки в ~/.profile

# Load pyenv automatically by adding
# the following to ~/.bash_profile:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

После этого надо сказать

source ~./profile

или перелогиниться.

Потом сказать

pyenv rehash

После этого можно пользоваться, делая выбор версии питона так, как описано тут: https://github.com/yyuu/pyenv#choosing-the-python-version (проверил 1-ый вариант, переменную окружения и все сработало)

VS1

apt-get update
apt-get dist-upgrade

en_US.UTF-8 UTF-8 (default) & ru_RU.UTF-8 UTF-8

dpkg-reconfigure locales

Asia/Novosibirsk

dpkg-reconfigure tzdata
apt-get install mc
update-alternatives  --set editor /usr/bin/mcedit
apt-get install sudo
apt-get install libpam-cracklib

в файле /etc/pam.d/common-password правим

password requisite    pam_cracklib.so retry=3 dcredit=-1 ucredit=1 ocredit=1 lcredit=1 minlen=10 difok=3
apt-get install fail2ban

Настроить на всех машинах!!!

SSH key-based login

If you don't have key use ssh-keygen command

ssh your_user@remote_server.com "mkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"
scp id_rsa.pub your_user@remote_server.com:~/.ssh/id_rsa@local_server.pub
ssh your_user@remote_server.com "cat ~/.ssh/id_rsa@local_server.pub >> ~/.ssh/authorized_keys && rm ~/.ssh/id_rsa@local_server.pub"


apt-get install nginx
apt-get install git
apt-get install python-virtualenv python-dev

26.10.2014

# apt-get install postgresql postgresql-client

28.10.2014

# su - postgres
# psql
postgres=# \password postgres

В /etc/postgresql/9.1/main/postgresql.conf надо раскомментировать и подредактировать строку

listen_addresses = 'localhost'

и настроить /etc/postgresql/9.1/main/pg_hba.conf

local   all             postgres                                peer
host    all             all             ::1/128                 md5

31.10.2014

apt-get install supervisor
apt-get install php5-fpm

07.11.2014

# addgroup --system uwsgi
# addgroup web-admins
# adduser --system --home /var/www --no-create-home --ingroup uwsgi --disabled-login --shell /bin/sh uwsgi

# apt-get install acl

08.11.2014

setfacl -R --set    user::rwX,group::rwX,other::- expert-banket-pub/

setfacl -R --modify group:web-admins:rwX          expert-banket-pub/
setfacl -R --modify default:group:web-admins:rwX  expert-banket-pub/

setfacl -R --modify user:uwsgi:rX          expert-banket-pub/
setfacl    --modify user:uwsgi:rwX         expert-banket-pub/ 
setfacl -R --modify user:uwsgi:rwX         expert-banket-pub/srv_web/media/ expert-banket-pub/srv_web/static/ expert-banket-pub/srv_web/db.sqlite3
setfacl -R --modify default:user:uwsgi:rX  expert-banket-pub/
setfacl -R --modify default:user:uwsgi:rwX expert-banket-pub/srv_web/media/ expert-banket-pub/srv_web/static/

setfacl    --modify user:www-data:X          expert-banket-pub/ expert-banket-pub/srv_web/
setfacl -R --modify user:www-data:rX         expert-banket-pub/srv_web/media/ expert-banket-pub/srv_web/static/
setfacl -R --modify default:user:www-data:rX expert-banket-pub/srv_web/media/ expert-banket-pub/srv_web/static/

find expert-banket-pub/ -regex .*/z[a-z]+\.sh | xargs -t setfacl --modify user::rwx,group:web-admins:rwx


Postfix

# apt-get install libsasl2-modules

Прописать алиас для рута в /etc/aliases

# dpkg-reconfigure postfix
[ ok ] Stopping Postfix Mail Transport Agent: postfix.
setting synchronous mail queue updates: false
changing /etc/mailname to vs1.elksimo.com
setting myorigin
setting destinations: $myhostname, localhost.$mydomain, localhost
setting relayhost: email-smtp.eu-west-1.amazonaws.com
setting mynetworks: 127.0.0.0/8
setting mailbox_command
setting mailbox_size_limit: 10485760
setting recipient_delimiter: +
setting inet_interfaces: all
setting inet_protocols: ipv4
WARNING: /etc/aliases exists, but does not have a root alias. 

Postfix is now set up with the changes above.  If you need to make changes, edit
/etc/postfix/main.cf (and others) as needed.  To view Postfix configuration
values, see postconf(1).

After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.

Running newaliases
[ ok ] Stopping Postfix Mail Transport Agent: postfix.
[ ok ] Starting Postfix Mail Transport Agent: postfix.

См http://docs.aws.amazon.com/ses/latest/DeveloperGuide/postfix.html для настройки Amazon SES

13.01.2015

Для sentry

# apt-get install redis-server

15.03.2015

Добавлен юзер для деплоймента и настроен вход по ключу

adduser --system --home /home/de... --ingroup we... --disabled-login --shell /bin/sh de...

26.11.2015

PostgreSQL upgrade from 9.1 to 9.4

Подробности смотреть тут: http://www.postgresql.org/download/linux/debian/

echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update

Затем апгрейд кластера PostgreSQL с переносом БД

# pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.1 main    5432 online postgres /var/lib/postgresql/9.1/main /var/log/postgresql/postgresql-9.1-main.log
9.4 main    5433 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log

# service postgresql stop
[ ok ] Stopping PostgreSQL 9.1 database server: main.
[ ok ] Stopping PostgreSQL 9.4 database server: main.
# pg_dropcluster --stop 9.4 main
# pg_upgradecluster 9.1 main
Disabling connections to the old cluster during upgrade...
Restarting old cluster with restricted connections...
Creating new cluster 9.4/main ...
  config /etc/postgresql/9.4/main
  data   /var/lib/postgresql/9.4/main
  locale en_US.UTF-8
Flags of /var/lib/postgresql/9.4/main set as ---------------C
  port   5433
Disabling connections to the new cluster during upgrade...
Roles, databases, schemas, ACLs...
Fixing hardcoded library paths for stored procedures...
[snip] 
Success. Please check that the upgraded cluster works. If it does,
you can remove the old cluster with

  pg_dropcluster 9.1 main
# pg_dropcluster 9.1 main
# service postgresql start

Установка Node.js и sails

Подключение репозитория

# wget -qO- https://deb.nodesource.com/setup_0.12 | sudo -E bash -

Установка

# sudo apt-get install nodejs

Если необходимо, то установить

# sudo apt-get install build-essential

Ставим sails

# sudo npm install -g sails
# sudo npm install -g sails-generate-backend-gulp
# sudo npm install -g sails-generate-gulpfile
# sudo npm install -g sails-generate-frontend-gulp
# sudo npm install -g sails-generate-new-gulp

Ставим еще кое-что

# sudo npm install babel -g
# sudo apt-get install graphicsmagick

VS3

apt-get install git
addgroup we... (1000)
adduser pc... (1000:1001)
adduser al... (1001:1002)

добавить кого надо в группу sudo

Gitolite

Шелл должен быть не /bin/false, а то команды в authorized_keys не выполняются. Либо еще что-то.

adduser --system --shell /bin/bash --disabled-password --disabled-login git

Далее как описано в http://gitolite.com/gitolite/install.html#qi с небольшими вариациями в связи со статусом юзера git

su -s /bin/bash git
cd ~
mkdir -p ~/bin
git clone git://github.com/sitaramc/gitolite
gitolite/install -ln ~/bin
~/bin/gitolite setup -pk /tmp/your_user.pub

VS5 (wordpress)

Установлен php5-curl для вордпреса

apt-get install php5-curl

Для команды mail

apt-get install heirloom-mailx

Чтобы было

apt-get install mc

Настроена почта как на vs1 для Amazon SES и установлен

apt-get install libsasl2-modules
Personal tools