Archiv rubriky: Ubuntu

Jak spustit dvě instance Redis v Ubuntu 16

Po přechodu Ubuntu na SystemD je práce se službami trochu složitější a návod pro SystemD jsem nikde nenašel. V tomto návodu si pro přehlednost přejmenujeme původní instanci Redisu s příponou dle jejího portu a přidáme druhou instanci s inkrementovaným portem.

Nejprve Redis odebere ze spuštění, aby nám nikde nestrašil. Redis dále poběží, instance budeme prohazovat až později.

$ systemctl disable redis-server.service
$ update-rc.d redis-server remove

Nyní nakopírujeme systemd definice našich nových instancí.

$ cd /etc/systemd/system
$ cp /lib/systemd/system/redis-server.service redis-server-6379.service
$ cp /lib/systemd/system/redis-server.service redis-server-6380.service

V definicích upravíme cesty ke konfiguraci a PID file a odebereme Alias.

[Service]
ExecStart=/usr/bin/redis-server /etc/redis/redis-6379.conf
PIDFile=/var/run/redis/redis-server-6379.pid

Nakopírujeme také konfiguraci Redisu.

$ cd /etc/redis
$ cp redis.conf redis-6379.conf
$ cp redis.conf redis-6380.conf
$ chown redis:redis redis-*.conf

Upravíme konfiguraci.

port 6379
dir /var/lib/redis/6379
pidfile /var/run/redis/redis-server-6379.pid
logfile /var/log/redis/redis-server-6379.log

Vytvoříme datové složky.

$ mkdir /var/lib/redis/6379
$ mkdir /var/lib/redis/6380
$ chown redis:redis /var/lib/redis/63*

Provedeme reload systemd a prohodíme instance.

$ systemctl daemon-reload
$ systemctl stop redis-server.service
$ mv /var/lib/redis/*.* /var/lib/redis/6379/
$ systemctl start redis-server-6379.service

Běží Redis?

$ redis-cli -p 6379 info server | egrep "process_id|tcp_port|config_file"

Přidáme novou instanci po spuštění systému a původní zakážeme spustit. To nám zabrání, aby se původní instance s nově pojmenovanou bila o port.

$ systemctl enable redis-server-6379.service
$ systemctl mask redis-server.service

Spustíme a povolíme druhou isntanci.

$ systemctl enable redis-server-6380.service
$ systemctl start redis-server-6380.service

Běží druhá instance?

$ redis-cli -p 6380 info server | egrep "process_id|tcp_port|config_file"

Ještě si porty v systému pojmenujeme pro lepší přehled v Netstat.

$ echo "redis1  6379/tcp" >> /etc/services 
$ echo "redis2  6380/tcp" >> /etc/services
$ netstat -l | grep redis

Jak vytvořit Ubuntu image pro SmartOS

Po nějaké době vás přestane bavit instalovat všechny nové VPS z ISO image. Nastal čas vytvořit si image pro imgadm. Jak na to?

Vytvoříme si prázdný VPS:

$ vmadm create <

Stáhneme instalační ISO a nabootujeme z něj VPS:

$ cd /zones/e736e906-5cca-49e8-a0e0-7a3367ee6841/root
$ wget -q http://releases.ubuntu.com/trusty/ubuntu-14.04.2-server-amd64.iso
$ vmadm boot e736e906-5cca-49e8-a0e0-7a3367ee6841 order=cd,once=d cdrom=/ubuntu-14.04.3-server-amd64.iso,ide
Successfully started VM e736e906-5cca-49e8-a0e0-7a3367ee6841

Získáme info o VNC a připojíme se na něj:

$ vmadm info e736e906-5cca-49e8-a0e0-7a3367ee6841 vnc

Nyní nainstalujeme Ubuntu (nebo jiný OS) jak jsme zvyklí. U ubuntu ještě doporučuji pomocí F4 zvolit volbu "Install a minimal virtual machine".

Po instalaci uděláme aktualizaci systému a reboot:

$ sudo su
$ aptitude update
$ aptitude dist-upgrade
$ reboot

Po rebootu odstraníme staré kernely:

$ sudo su
$ dpkg -l|grep linux
ii  libselinux1:amd64               2.2.2-1ubuntu0.1                 amd64        SELinux runtime shared libraries
ii  linux-headers-3.19.0-25         3.19.0-25.26~14.04.1             all          Header files related to Linux kernel version 3.19.0
ii  linux-headers-3.19.0-25-generic 3.19.0-25.26~14.04.1             amd64        Linux kernel headers for version 3.19.0 on 64 bit x86 SMP
ii  linux-headers-3.19.0-26         3.19.0-26.28~14.04.1             all          Header files related to Linux kernel version 3.19.0
ii  linux-headers-3.19.0-26-generic 3.19.0-26.28~14.04.1             amd64        Linux kernel headers for version 3.19.0 on 64 bit x86 SMP
ii  linux-headers-generic-lts-vivid 3.19.0.26.13                     amd64        Generic Linux kernel headers
ii  linux-headers-virtual-lts-vivid 3.19.0.26.13                     amd64        Transitional package.
ii  linux-image-3.19.0-25-generic   3.19.0-25.26~14.04.1             amd64        Linux kernel image for version 3.19.0 on 64 bit x86 SMP
ii  linux-image-3.19.0-26-generic   3.19.0-26.28~14.04.1             amd64        Linux kernel image for version 3.19.0 on 64 bit x86 SMP
ii  linux-image-virtual-lts-vivid   3.19.0.26.13                     amd64        This package will always depend on the latest minimal generic kernel image.
ii  linux-virtual-lts-vivid         3.19.0.26.13                     amd64        Minimal Generic Linux kernel and headers
ii  util-linux                      2.20.1-5.1ubuntu20.6             amd64        Miscellaneous system utilities
$ aptitude purge linux-headers-3.19.0-25 linux-headers-3.19.0-25-generic linux-image-3.19.0-25-generic

Volitelně také můžeme vyhodit hlavičkové soubory, které ve většině případů nejsou potřeba, ale aktualizují se zbytečně s každým kernelem:

$ aptitude purge linux-headers-3.19.0-26 linux-headers-3.19.0-26-generic linux-headers-generic-lts-vivid linux-headers-virtual-lts-vivid linux-image-virtual-lts-vivid linux-virtual-lts-vivid

Můžeme doinstalovat nějaké balíky. Rozhodně ale nesmíme vynechat balík acpid:

$ aptitude install acpid arping htop mc

Některé přebytečné balíky se hodí vyhodit:

$ aptitude purge usbutils pppoeconf pppconfig ppp popularity-contest pciutils ntfs-3g laptop-detect apparmor libapparmor-perl

Dále nainstalujeme sdc-vmtools:

$ cd /usr/src
$ wget https://github.com/joyent/sdc-vmtools/archive/master.zip
$ aptitude install unzip
$ unzip master.zip
$ cd sdc-vmtools-master/src/linux
$ ./install-tools.sh -y
$ cd /usr/src
$ rm -r sdc-vmtools-master/ master.zip

Přihlásíme se přes VNC a ostraníme uživatele, kterého jsme vytvořili při instalaci systému:

$ sudo su
$ passwd
# Relogin jako root
$ userdel user
$ rm -r /home/user

Připravíme VPS na vypnutí:

$ /lib/smartdc/prepare-image

Rootovi můžeme nyní odebrat heslo:

$ passwd -d root

Shodíme VPS a vratíme se do SmartOS:

poweroff

Vytvoříme z VPS image:

$ zfs create zones/images
$ zfs snapshot `vmadm get e736e906-5cca-49e8-a0e0-7a3367ee6841|json disks.0.zfs_filesystem`@final
$ zfs send `vmadm get e736e906-5cca-49e8-a0e0-7a3367ee6841|json disks.0.zfs_filesystem`@final | bzip2 --best > /zones/images/ubuntu-14.04.3-server-amd64.zvol.bz2

A VPS smažeme:

$ vmadm destroy e736e906-5cca-49e8-a0e0-7a3367ee6841
Successfully deleted VM e736e906-5cca-49e8-a0e0-7a3367ee6841

Pro image potřebujeme vytvořit dsmanifest:

cd /zones/images
cat > ubuntu-14.04.3-server-amd64.dsmanifest <

UUID pro creator_uuid a vendor_uuid si můžete vygenerovat příkazem uuid.

Máme image a dsmanifest, teď image můžeme nainstalovat:

imgadm install -m ubuntu-14.04.3-server-amd64.dsmanifest -f ubuntu-14.04.3-server-amd64.zvol.bz2

A teď z image konečně vytvoříme VPS:

$ vmadm create <"
    }
}
EOF
Successfully created VM a4e92d6b-a6e4-4a3f-a7f4-c7dad9371395

Nemá smysl dávat disku větší size, než je size image. Disk se stejně vytvoří podle image. Prozatím to řeším pomocí GParted. Jakmile budu vědět, jak to zautomatizovat, napíšu o tom další článek. Nebo můžete někdo poradit v diskuzi pod článkem 🙂

Dodatek: dá se to řešit takto:

# V global zóně
$ zfs set volsize=54G zones/7dc89552-48fd-4fb7-9dfa-470ee47502b3-disk0
# Ve VPS
$ fdisk /dev/vda

Command (m for help): d
Selected partition 1

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-113246207, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-113246207, default 113246207):
Using default value 113246207

# Reboot
$ resize2fs /dev/vda1
# Reboot

Přidávání PPA na Ubuntu 14.04

Pokud nemůžete na Ubuntu 14.04 najít příkaz add-apt-repository a nepomůže v tom ani instalace balíčku python3-software-properties (ve starší verzi Ubuntu python-software-properties), vězte že ve verzi 14.04 je tento příkaz v jiném balíku. Je potřeba nainstalovat balík software-properties-common.

Jak přejmenovat soubor, aby tak po upgradu balíčku zůstal

Asi už vás někdy napadlo nějaký nešikovný název programu v linuxu přejmenovat. To ale obvykle přináší jeden malý problém. Je potřeba to udělat po každém upgradu onoho programu. Distribuce založené na Debianu (tedy i Ubuntu) na to mají naštěstí fígl. Program dpkg-divert vám dovolí přejmenovat nebo nalinkovat soubor jinam a ten bude po upgradu balíku takto udržován.

Příkaz pak vypadá např. takto:

dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep
  • Parametr –local zajistí, že přejmenování zůstane pro všechny verze balíčku
  • Parametr –divert říká, jak se bude program jmenovat
  • Parametr –rename zajistí přejmenování místo nalinkování souboru
  • Parametr –add říká, který soubor vlastně přejmenováváme