Шпаргалка по Linux, Ansible и Docker (2018 — 2019)

  • Linux
    • Команды
    • Система
    • systemctl 
    • grep
    • Процессы
    • Юзера
    • Vi
    • Файлы / каталоги
    • Диски
    • Увеличиваем размер диска на Amazon
    • Переменные окружения
    • RPM — RedHat Package Manager
    • Crone
    • Date Time
    • NTP
    • VirtualBox
    • TAR
    • ZIP
    • Резервное копирование
    • Логи
    • SSH
    • Установка SSH на Ubuntu
    • Сети 
    • tcpdump
      • Давайте изучим tcpdump 
    • Virtual network interface
    • Oracle Instant Client
    • sed
    • VirtualBox
      • Установка Virtualbox Guest Additions из командной строки
      • Как подключить образ железной тачки в VirtualBox
    • LXC контейнеры
    • Работа с файлами как с блочными устройствами
    • Добавляем swap
  • Apache
    • Установка на Ubuntu
    • Установка на CentOS
    • Запускаем CGI скрипт в Apache
      • Правим /etc/httpd/conf/httpd.conf
  • Docker
    • Команды для работы с Hyperledger
    • Docker Compose для работы с Hyperledger
    • Все полезные команды Docker 
    • Docker hub
    • Docker сети 
    • Пример сети Docker
    • Ограничиваем ресурсы в Docker
    • docker-compose
  • Ссылки
    • Официальная инструкция по установки docker
    • Передача docker образа через файл
    • Букварь построения сети Docker
    • Полное практическое руководство по Docker: с нуля до кластера на AWS
    • Docker для Windows 10
    • Docker для Windows 7
    • Общая настройка ОС
    • Параметры chmod
    • Про пользователей
    • План перехода с Windows на Linux: Беглый обзор
    • Bash-скрипты
    • Самые полезные приёмы работы в командной строке Linux
    • Как понять, что происходит на сервере
    • Docker сети 
    • Ansible лучшие практики
  • Ссылки посмотреть 
    • Автоматизируем и ускоряем процесс настройки облачных серверов с Ansible
    • chron
    • TOP’ай сюда

Linux

Команды

Запуск команды в фоне: nohup команда &

Несколько команд в одной строке:  pwd ; ls -lh

Разбить длинную строку на несколько: 

ls \

-lh

Система

Версия Linux: uname -a

Пример:

Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux

Формат:

char sysname[]; /* название операционной системы (например, «Linux») */
char nodename[]; /* имя в сети, зависящее от реализации */
char release[]; /* идентификатор выпуска ОС (например, «2.6.28») */
char version[]; /* версия ОС */
char machine[]; /* идентификатор аппаратного обеспечения */

Версия Linux, RedHat, виртуализация: hostnamectl

Пример:

Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 0debb82d11ad4c87897f5491fee19686
Boot ID: cd582d03edd1447b9e5191de8af29980
Virtualization: kvm
Operating System: OpenStack
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.4:GA:server
Kernel: Linux 3.10.0-693.el7.x86_64
Architecture: x86-64

Версия Ubuntu: lsb_release -a

Версия Linux RedHat: cat /etc/redhat-release

Пример:

Red Hat Enterprise Linux Server release 7.4 (Maipo)

Версия CentOS:

cat /etc/centos-release

Какая виртуализация:

sudo virt-what

sudo dmidecode -s system-product-name

«16 Methods To Check If A Linux System Is Physical or Virtual Machine»

https://www.2daygeek.com/check-linux-system-physical-virtual-machine-virtualization-technology/#

Информация по памяти

cat /proc/meminfo

free

Информация по CPU:

cat /proc/cpuinfo

lscpu

И вообще оборудование: dmidecode

Имя хоста: hostname

список подключенных репозиториев: sudo yum repolist

список установленных пакетов: sudo yum list installed

Переключение между консолями: Ctrl+Alt+F1-F6

Завершение работы: sudo shutdown

systemctl

Список всех сервисов:

systemctl list-unit-files

grep

Строки до и после

grep error -C 5

Процессы

pstree

top

ps -A — все процессы

ps -AF — полная информация по всем процессам

ps -flp PID  (l — длинный формат)

ps -axl

fuser — утилита, идентифицирующая процессы, которые используют указанные файлы или сокеты.

sof (от англ. LiSt of Open Files) — утилита, служащая для вывода информации о том, какие файлы используются теми или иными процессам

Перезагрузка сервера: reboot

Удаляем процесс по pid:

pidof iperf3

sudo kill -9 24050

или 

pkill -f имя

Диагностика процесса 

pstack PID — стек процесса

top -p PID — мониторит процесс

top -cp PID — мониторит процесс, вывод в цикле

strace -p PID — статистика по системным вызовам процесса

и так далее: «Изучаем внутреннюю кухню ядра» https://m.habrahabr.ru/post/209446/

Версия Питона: python —version

Поставить pip:

sudo yum install python-pip

pip —version

Верcия java: java -version

Юзера

Список пользователей: cat /etc/passwd

Список групп: cat /etc/group

Залогининые пользователи: Users

или: who

или просто: w

Посмотреть список групп залогиненного пользователя: groups

Посмотреть список групп другого пользователя: id имя_юзера

Переключаем userа: su — имя_юзера

Создаем юзера:

useradd –m имя_юзера

-m – создается home

Группа равна имя_юзера

Создаем юзера сразу в sudo: useradd -m -G wheel имя_юзера или root вместо wheel

Делаем юзеру пароль: passwd имя_юзера

Добавляем юзера в группу: sudo usermod -a -G имя_группы имя_юзера

Редактирование файла sudoers: sudo visudo

меняем овнера каталогов, файлов: chown

например:

chown -hR nwm:nwm /data

Делаемся root

sudo -s

Vi

i — переход в режим вставки

Esc — переход в режим команд

ZZ — выход с сохранением

:q! — выход без сохранения

:w!. — перезаписываем ReadOnly

Остальные команды Vi: https://www.ibm.com/developerworks/ru/library/l-lpic1-v3-103-8/

Файлы / каталоги

Новый файл: cat > tets.txt в конце ctrl-z

Текущий каталог: pwd

Размер каталога: du -ah ~/rocksdb/

Создать каталог: mkdir имя

Создает если нет корневой: mkdir -p /network/admin

Список файлов с правами: ls -lh

Показать скрытые каталоги: ls -a

Постраничный вывод: * |more

Делаем запускаемымchmod +x ssh1.sh

Делаем как sudoers -r—r—— : chmod 440 sudoers

chmod на каталог: sudo chmod -R 666 docker

chmod на все в каталог: chmod -R 777 *

Установить рекурсивно права на чтение для всех пользователей: 

chmod -R a+r directory

И другие параметры chmod: 

https://ru.wikipedia.org/wiki/Chmod

http://linuxway.ru/pervye-shagi/komanda-chmod-primery-ispolzovaniya/

Копируем файл: cp откуда куда

Копируем все файлы из каталога: cp -r ./Repos/*.* /etc/yum.repos.d/

Перемещение файлов и каталогов: mv откуда куда

Удаляем файл: rm файл

Удаляем каталог и содержимое: rm -rf /etc/yum.repos.d/Repos

Удаляем файлы *.log рекурсивно: find -name ‘*.log’ -delete;

Удаляем пустой каталог: rmdir /etc/yum.repos.d/Repos

Жесткая связь: ln src dst

Мягкая связь: ln -s src dst

Находим все ссылки: find -type l

Сравнение файлов:

diff f1 f2 > aaa.diff

gedit aaa.diff

Подсчет строк, слов, символов:

wc file.txt — строки слова символы

-l — линии

-w — слова

-L — max line length

-с — символы

Поиск файлов:

Диски

Место на диске:

df –H

df –h /home

df –i — число использованных дескрипторов

Монтированные устройства: mount

Связь устройства и точки монтирования: etc/fstab

Жесткие диски: sudo fdisk -l

Форматирование: mkfs

Использование диса — Disk Usage: du

Размер папок в текущем каталоге: du -sh ./*

Проверка диска (check disk): 

fsck

или 

sudo badblocks -sv /dev/sda

Увеличиваем размер диска на Amazon

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html

Какая fs? sudo file -s /dev/xvd*

/dev/xvda: DOS/MBR boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, 1st sector stage2 0x800, stage2 segment 0x200, GRUB version 0.94, extended partition table (last)
/dev/xvda1: Linux rev 1.0 ext4 filesystem data, UUID=8cd9967e-f9c0-438f-bebd-a0a7c5886ebc (needs journal recovery) (extents) (large files) (huge files)

Смотрим можем ли расширить? lsblk

Можем, т.к. места 16 а аллоцировано 8:
xvda 202:0 0 16G 0 disk
└─xvda1 202:1 0 8G 0 part /

И далее останавливаем инстансе, открепляем вольюм, прикрепляем к другому, расширяем, прикрепляем обратно…

Переменные окружения

Установка переменной: export SSH_CONNECTION=’172.130.52.243 22′

просмотр всего: env

просмотр одной переменной: echo $SSH_CONNECTION

Добавляет каталог в PATH: export PATH=~/.local/bin:$PATH

RPM — RedHat Package Manager

DISTRIBUTION LOW-LEVEL TOOL HIGH-LEVEL TOOL
 Debian and derivatives  dpkg  apt-get / aptitude
 CentOS  rpm  yum
 openSUSE  rpm  zypper

Обновление связей: ldconfig

Список установленных пакетов:

  • dpkg —get-selections | grep soph
  • apt list —installed | grep so
  • rpm -qa

Crone

sudo crontab -e

* * * * * sudo ntpd -gq
* * * * * echo «sudo 5» >> /tmp/cr.txt

Date Time

Установка времени

date --set 13:00

Установка HW часов к Loсal

sudo hwclock —systohc

Установка Loсal часов  как HW 

sudo hwclock —hctosys

Получение таймзон:

timedatectl list-timezones | grep Mos

Установка таймзоны:

timedatectl set-timezone "Europe/Moscow"

NTP

NTP от Selectel

https://blog.selectel.ru/nastrojka-ntp-na-servere/

Установка NTP

https://losst.ru/ustanovka-ntp-v-ubuntu

sudo yum install ntp

или 

sudo apt-get install ntp

конфиг

/etc/ntp.conf

NTP сервер NX:

server time.net.billing.ru

сервис запускаем 

sudo systemctl enable ntpd (ubuntu: ntp)

sudo systemctl start ntpd (ubuntu: ntp)

sudo systemctl status ntpd (ubuntu: ntp)

sudo systemctl restart ntpd (ubuntu: ntp)

sudo systemctl stop ntpd (ubuntu: ntp)

sudo systemctl disable ntpd (ubuntu: ntp)

проверяем:

ntpstat

вывод:

synchronised to NTP server (45.79.xx.xx) at stratum 3

или

ntpq -p

ntpq -c peers

сморим синхро инфу:

ntpdate -qd time.net.billing.ru

синхрим:

ntpdate -ds time.net.billing.ru

статус ntpd:

ntpdc -c sysinfo

синхрим принудительно:

sudo ntpd -gq

Смотрим инфу:

timedatectl
Local time: Mon 2018-12-24 08:27:59 UTC
Universal time: Mon 2018-12-24 08:27:59 UTC
RTC time: Mon 2018-12-24 08:28:18
Time zone: UTC (UTC, +0000)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

Ubuntu — своя служба времени:

https://andreyex.ru/ubuntu/kak-nastroit-sinxronizaciyu-vremeni-na-ubuntu-16-04/

sudo timedatectl set-ntp on

service systemd-timesyncd status

service systemd-timesyncd status
Б≈▐ systemd-timesyncd.service — Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enable
Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
Б■■Б■─disable-with-time-daemon.conf
Active: inactive (dead)
Condition: start condition failed at Mon 2018-12-24 09:50:50 UTC; 3s ago
ConditionFileIsExecutable=!/usr/sbin/VBoxService was not met
Docs: man:systemd-timesyncd.service(8)

Остановка NTP

systemctl stop ntpd 
systemctl disable ntpd

или 

/etc/init.d/ntp status

/etc/init.d/ntp stop

/etc/init.d/ntp disable

Удаление  ntpdate

sudo apt-get remove ntpdate

cp /etc/network/if-up.d/ntpdate ~/

VirtualBox

Windows путь:
C:\Program Files\Oracle\VirtualBox

Список машин:
VBoxManage list runningvms

Пример:

«CentOS 7.5 + Bubbletone (18.12.2018)» {7d0a63a2-939f-47ed-bc04-29fffc850722}
«Blockchain Slave 18 (04.12.2018) with tmp» {662c4848-8a1d-4d7d-9746-93b50b27f6a1}
«Blockchain Slave 19 (20.12.2018)» {b335755f-a8b8-40af-aeb6-7142a32b024f}

Получаем значение:
VBoxManage getextradata «Blockchain Slave 18 (04.12.2018) with tmp» «VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled»

Устанавливаем значение:
VBoxManage setextradata «Blockchain Slave 18 (04.12.2018) with tmp» «VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled» 1

Устанавливаем CentOS:
VBoxManage setextradata «CentOS 7.5 + Bubbletone (18.12.2018)» «VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled» 1

TAR

tar -xvzf pmars-0.9.2.tar.gz

х — извлечение файлов

v – выводить  имена файлов как они извлекаются по одному
z — это «сжатый» файл
f — использовать следующий tar архив для эксплуатации

tar -p ( р — c правам )

tar -d (d — сравнение с каталогом)

Минимально: tar -xf pmars-0.9.2.tar.gz

Заархивировать все файлы в каталоге: tar -cvvzf ansible_dra_load.tar.gz *

Включая скрытые (использовать ‘.’ вместо ‘*’): tar -cvvzf ansible_dra_load.tar.gz .

Сравнить файлы в архиве и каталоге: tar —diff -f ansible_dra_load.tar.gz -C ./ansible_dra_load

Извлечь в каталог: tar -xvzf ps_snmp_agent.tar.gz  —directory=/usr/local

ZIP

unzip архив.zip

Резервное копирование

dump / restore

Tivoli Storage Manager — для рез копирования

Логи

Находятся тут: \var\log

Главный: syslog

Загрузка: dmesg

Слежение за файлом: tail -f /var/log/syslog

Настройка логирования: /etc/rsyslog.conf

SSH

Генерим ключ: ssh-keygen -t rsa -C «ansible_test2»

Копируем на удаленный хост: ssh-copy-id Alexey.Sushkov@172.30.xx.xx

Подключаемся: ssh Alexey.Sushkov@172.30.xx.xx -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey

На удаленном хосте проверка ключей: cat ~/.ssh/id_rsa.pub

На удаленном хосте проверка настроек: sudo cat /etc/ssh/sshd_config

Настройки:

  • RSAAuthentication yes
  • PubkeyAuthentication yes
  • PasswordAuthentication no

Перезапуск SSH на удаленном хосте: sudo /etc/init.d/ssh reload

Порт на котором слушает SSH: sudo netstat -tulpn | grep sshd

Используем ключ:

chmod 400 ~/my_key.pem

ssh -i ~/my_key.pem user@18.214.xx.xx

SSH доступ между виртуалками

уже ключ генерировал с помощью puttygen, приватная часть у тебя сейчас опубликована через pageant, вот этот и нужно добавить на сервер с которого будешь заходить:

  • Надо взять содержимое своего приватного ключа и поместить его в файл id_rsa
  • id_rsa скопировать в каталог ~/.ssh на виртуалке откуда идешь
  • установить пермишены -rw——-
  • при вызове ssh можно указывать только ip без юзера

Установка SSH на Ubuntu

sudo apt-get update
sudo apt-get install openssh-server -y
sudo systemctl status ssh

Сети

Список портов и PID

sudo ss -ltp

Список портов

netstat -anltp | grep LISTEN

или

ss -tul — все TCP и UDP порты

Путь до сайта:

traceroute www.telcotocken.ru

или 

tracerе www.telcotocken.ru

Проверка DNS

nslookup -q=any

> server 205.251.196.61 — это IP DNS Amazon

www.tel.ru — это сайт для проверки

DNS request timed out. — это значит неудача

timeout was 2 seconds.

Name: www.tel.ru — а это хорошо
Address: 18.214.xx.xx

Проверка конфигурации

ip -s addr  — network addresses

ip -s route  — routing information

ip -s link  — link state

Перегрузка сети Ubuntu:  sudo service network-manager restart

ping 4 раза: ping -c 4 8.8.8.8

добавляет IP к интерфейсу

ip addr add 10.0.0.10/24 dev enp0s3

Список хостов: cat /etc/hosts

iperf3:

sudo iperf3 -s

sudo iperf3 -s -D процесс

sudo iperf3 -s -B123.123.xx.xx

sudo iperf3 -c 172.30.xx.xx

sudo iperf3 -c 123.123.xx.xx -B172.30.xx.xx

tcpdump

Давайте изучим tcpdump 

https://habr.com/company/first/blog/335428/

tcpdump analysis

https://gist.github.com/kashyapc/7926517

запись всего в файл:  

sudo tcpdump -w p.pcap

запись всего в файл c интерфейса:  

sudo tcpdump -i enp0s8 -w p2.pcap

Virtual network interface

ARP таблица содержит адреса устройств, с которыми взаимодействует данная ОС

arp -n — без ресолва адресов

Создаем новые виртуальные интерфейсы:

ifconfig eth0:0 123.123.22.22

ifconfig eth0:0 192.168.0.1

ifconfig eth0:0 192.168.0.1 netmask 255.255.255.0

ifconfig lo:0 127.0.0.2

Параметры сетевого интерфейса:

sudo ethtool eth0

Про виртуальные сетевые интерфейсы:

https://www.hippolab.ru/virtualnyy-setevoy-interfeys-v-linux-tap-vs-tun

NFS:

http://www.k-max.name/linux/network-file-system-nfs/

Oracle Instant Client

sudo rpm -ivh oracle-instantclient11.1-basic-11.1.0.7.0-1.x86_64.rpm

export LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client64/lib:$LD_LIBRARY_PATH

Проверяем:

ls /usr/lib/oracle/11.1/client64/lib

echo $LD_LIBRARY_PATH

sed

sed -i s/host=\.172.30.xx.xx\./host=\»%IP_PCCM1%\»/ /EmulatorUdRg/config/conf1.xml;

 

sed -i s/\ host\ =\ \».*/\ host\ =\ \»%IP_DRA%\»/ /Diam_Perf/config/*.xml

VirtualBox

Советы по VB
http://all-ht.ru/inf/vpc/VirtualBox.html

Установка Virtualbox Guest Additions из командной строки

mkdir -p /media/cdrom

lsblk — смотрим какой cd
mount /dev/sr0 /media/cdrom
sh /media/cdrom/VBoxLinuxAdditions.run

Как подключить образ железной тачки в VirtualBox

  1. Берем то что сгенерили
  2. В VB убираем:
    1. SCASI меняем на SATA
    2. К SATA монтируем наш образ
    3. К IDE монтируем образ Linux
    4. Начинаем загружаться, но не устанавливаем, набираем rescue
    5. В загруженной ОС монтируем наш образ
    6. Меняем там:
      1. Настройки сетевого контроллера: mac, ip и т.д.
      2. Есть GUI для настройки – не помню какое
      3. Даем user-у root: sudo /usr/bin/bash
      4. Смотрим пароли: cat /etc/passwd
      5. Создаем локального пользователя: useradd –u NAME –d HOME –m
      6. Добавляем ему пароль: Passwd NAME
      7. Добавляем его в группу sudo:
        1. vi /ets/group
        2. добавляем его в строку wheel
        3. переключаемся на него: su — NAME
        4. Перегружаемся под новым юзером

LXC контейнеры

Инициализация: lxd init

dОстановить контейнер: lxc stop aaa

Список контейнеров: lxc list

Удалить контейнер: lxc delete aaa

Список образов: lxc image list

Удалить образ: lxc image delete aaa

Список пулов в zfs : zpool list

Удалить пул: zpool destroy aaa

Остановить сервис: service lxd stop

Создаем файл размера 25 Gb

sudo dd if=/dev/zero of=disk1.img bs=1024k count=25000

Создаем pool в новом месте

sudo zpool create lxd_new /media/alex/3C26CA7526CA2FA6/lxd_new/disk1.img

И другие советы по созданию pool в другом месте (не работают). Единственное интересно про запрос pool в DB:

echo «SELECT * FROM config;»|sqlite3 /var/lib/lxd/lxd.db

https://askubuntu.com/questions/833267/lxd-moving-containers-snapshots-to-another-drive

Help по zpool

http://manpages.ubuntu.com/manpages/trusty/man8/zpool.8.html

LXC 1.0: Container storage и вообще приятный сайт:

https://stgraber.org/2013/12/27/lxc-1-0-container-storage/

Работа с файлами как с блочными устройствами

Создаем файл 10Gb

dd if=/dev/zero of=/tmp/file.img bs=1024k count=10000

Создание в нём ФС:

mkreiserfs /tmp/file.img

Монтирование файла с ФС, как блочного устройства:

mount -o loop /tmp/file.img /mnt/u05

Добавляем swap

Создаем файл 500 Mb
dd if=/dev/zero of=/tmp/swap_file.img bs=1024k count=500

Run mkswap command to convert the file to a swap file:

mkswap -L swap01 /tmp/swap_file.img

Добавляем в /etc/fstub строку

/tmp/swap_file.img        swap                    swap    defaults        0 0

Запускаем

swapon -a
Смотрим
swapon -s

Apache

Установка на Ubuntu

sudo apt-get install apache2

Список установленных сервисов:

service —status-all

sudo systemctl start apache2

Установка на CentOS

sudo yum install httpd

sudo systemctl start httpd.service

sudo systemctl enable httpd.service

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

sudo ss -tupln

Идем из браузера, не забываем открыть порт наружу!!!

Запускаем CGI скрипт в Apache

Немного ссылок

https://serverfault.com/questions/752272/run-perl-cgi-scripts-on-centos-7-with-apache-httpd

https://code-examples.net/ru/docs/apache_http_server/howto/cgi

Для Perl устанавливаем:

sudo yum install perl perl-CGI

Делаем скрипт f.pl

#!/usr/bin/perl

print «Content-type: text/html\n\n»;

print «<h2>Hello world!</h2>»;

Копируем скрипт в каталог

/var/www/cgi-bin/

Правим права на скрипт и каталог (?) (в проме конечно не такие)

chmod 777 f.pl

Правим /etc/httpd/conf/httpd.conf

Проверяем что есть модуль: mod_cgi.so

find /etc/httpd/modules/ -iname «*cgi*»

/etc/httpd/modules/mod_cgi.so

Если есть то в раздел Dynamic Shared Object (DSO) Support вставляем

LoadModule cgi_module modules/mod_cgi.so

В <IfModule alias_module> вставляем алиас каталог со скриптами 

ScriptAlias /cgi-bin/ «/var/www/cgi-bin/»

Даем права на каталог со скриптами:

<Directory «/var/www/cgi-bin»>

    AllowOverride None

    Options ExecCGI

    Order allow,deny

    Allow from all

    AddHandler cgi-script .cgi .pl

</Directory>

Или так (не проверял)

<Directory «var/www/cgi-bin«>

    Options +ExecCGI

    AddHandler cgi-script .cgi .pl

</Directory>

Перестартуем Apache:

sudo systemctl restart httpd.service

При проблемах смотрим логи

sudo tail  /var/log/httpd/error_log

Вызываем так:

http://localhost/cgi-bin/f.pl

Парсим логи так:

sudo tail -n 1000 /var/log/httpd/error_log | grep AH

Ansible

Почему Ansible?

Преимущества Ansible по сравнению с другими аналогичными решениями (здесь в первую очередь следует назвать такие продукты, как Puppet, Chef и Salt) заключаются в следующем:

  • на управляемые узлы не нужно устанавливать никакого дополнительного ПО, всё работает через SSH (в случае необходимости дополнительные модули можно взять из официального репозитория);
  • код программы, написанный на Python, очень прост; при необходимости написание дополнительных модулей не составляет особого труда;
  • язык, на котором пишутся сценарии, также предельно прост;
  • низкий порог вхождения: обучиться работе с Ansible можно за очень короткое время;
  • документация к продукту написана очень подробно и вместе с тем — просто и понятно; она регулярно обновляется;
  • Ansible работает не только в режиме push, но и pull, как это делают большинство систем управления (Puppet, Chef);
  • имеется возможность последовательного обновления состояния узлов (rolling update).

 

 

Система управления Ansible + там же еще ссылки: https://habrahabr.ru/company/selectel/blog/196620/

Пособие по Ansible: https://habrahabr.ru/post/305400/

Модули Ansible: http://docs.ansible.com/ansible/list_of_all_modules.html

Установка: sudo yum install ansible

Проверка: sudo ansible —version

Проверка SSH: ssh alexey.sushkov@172.30.xx.xx

Ping: sudo ansible aaa -i /import/home/alexey.sushkov/ansible/hosts -m ping

Ping можно без hosts: sudo ansible 127.0.0.1 -m ping

Ping c расширенной конфигурациейsudo ansible all -i /import/home/alexey.sushkov/ansible/hosts -m ping -vvv

Запускаем команду на удаленных хостах:

sudo ansible all -i ~/Downloads/Amazon/hosts -m shell -a ‘uname -a

Конфигурация хостов в группе aaa: ansible aaa -m setup

Доступная память в мегабайтах: sudo ansible all -i ~/Downloads/Amazon/hosts -m setup -a ‘filter=ansible_memtotal_mb’

Копируем файл: sudo ansible all -i ~/Downloads/hosts -m copy -a ‘src=putty-0.69.tar.gz dest=/tmp/’

Настройка:

aaa.yml


— name: name aaa
hosts: aaa

Запускаем playbook: sudo ansible-playbook -i ~/Downloads/hosts aaa.yml

yml 2:


— name: name aaa
hosts: aaa
sudo: True
tasks:
— name: install the latest version of Apache
yum:
name: httpd
state: latest
— name: Start Apache
service: name=httpd state=started

Запрос пароля —ask-pass

sudo ansible aaa -i /import/home/alexey.sushkov/ansible/hosts -m ping -vvv —ask-pass -u Alexey.Sushkov

Шифруем пароли:
http://docs.ansible.com/ansible/playbooks_vault.html#single-encrypted-variable
Создаем файл:
ansible-vault create pass3.yml
В group_vars в файл *.yml создаем переменную «mypass: !vault |» с содержимым pass3.yml:
mypass: !vault |
$ANSIBLE_VAULT;1.1;AES256
65333964393166313831356139303434636238326638623338353963363465326636383162303766
6130303432633163386461313966383630353433666564310a326431363561313565613733343133
30663564616336633932656666623630393837646566356563396536346630656636623538323838
3739303464653262300a363339373762363835336234376234343433396463316439356532343636
3435
В hosts:
ansible_ssh_pass=»{{ mypass }}»
При запуске:
ansible-playbook ….. —ask-vault-pass
Правда теперь спрашивает vault-pass )

Docker

«Аналогично тому, как приложение разбивают на части, стоит содержать отдельные сервисы в отдельных контейнерах. Разным частям скорее всего требуются разные ресурсы, и требования могут расти с разной скоростью. Если мы разделим эти части и поместим в разные контейнеры, то каждую часть приложения можно строить, используя наиболее подходящий тип ресурсов. Это также хорошо совмещается с идеей микро сервисов. Это одна из причин, по которой Докер (и любая другая технология контейнеризации) находится на передовой современных микро сервисных архитектур.»

Команды для работы с Hyperledger

Смотрим что загружено: docker images

Смотрим что загружено для Dev: docker images | grep dev

Чистим что загружено для Dev: docker rmi -f $(docker images | grep dev | awk ‘{print $3}’)

Смотрим что запущено: docker ps -aq

Чистим что запущено: docker rm -f $(docker ps -aq)

Смотрим сети: docker network list

Чистим сети: docker network prune

Смотрим IP адрес контейнера peer0: docker inspect peer0 | grep IPAddress

Чистим все: 

docker rm -f $(docker ps -aq)

docker rmi -f $(docker images | grep dev | awk ‘{print $3}’)

docker network prune

Смотрим какие bna готовы к развертыванию в контейнере

https://stackoverflow.com/questions/51286068/response-from-attempted-peer-comms-was-an-error-chaincode-error

You can also check what BNA has been installed on a peer by looking into the peer containers with commands similar to:

docker exec -it peer0.org1.example.com /bin/sh

# ls /var/hyperledger/production/chaincodes/

# exit

The ls command on the chaincodes file on the peer will show the BNAs available to be started e.g.:

tutorial-network.0.0.1 tutorial-network.0.0.3
tutorial-network.0.0.2 tutorial-network.0.0.4

Смотрим логи в контейнерах

docker logs -f peer0.org1.example.com — видим транзакции

docker logs -f dev-peer0.org1.example.com-my-network-0.1.1 — много лишнего

docker logs -f ca.org1.example.com — ничего 

docker logs -f orderer.example.com — вот тут интересно, но непонятно)

Docker Compose для работы с Hyperledger

Установка

https://docs.docker.com/compose/install/#install-compose

Посмотреть последнюю версию здесь

https://github.com/docker/compose/releases

И вставить версию в команду:

curl -L https://github.com/docker/compose/releases/download/1.23.0-rc3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Проверка

docker-compose --version

Все полезные команды Docker

Поставить докерsudo yum install –y docker-engine

Версия докер: sudo docker version

Статусsudo yum list installed docker-engine

Инфаsudo yum info docker-engine

Запуск сервиса:

sudo systemctl start docker.service

sudo systemctl enable docker.service – запуск при старте

sudo systemctl status docker.service

sudo docker info

Запускаем контейнеры

sudo docker search httpd

sudo docker pull httpd

sudo docker run –d –p 8888:80 –-name aaa httpd

Тестируем Apache

сurl http:// ip контейнера : порт

sudo docker images – список загруженных образов

sudo docker ps  — список запущенных контейнеров

sudo docker ps  -a – список всех контейнеров

sudo docker ps –q – только идентификаторы

-it – итерактив:

sudo docker run -it haproxy

sudo docker run -it —name aaa Ubuntu

sudo docker run -it —rm —name aaa alexeysushkov/trucks bash — интерактивный режим с запуском bash, —rm — удаляем контейнер после остановки

Подключиться к работающему контейнеру и исполнить там команду bash:

sudo docker exec –it имя_контейнера bash

Проверяем настройки контейнера:

sudo docker inspect имя_контейнера

sudo docker inspect имя_контейнера | nl  — c номерами строк

Узнать IP контейнера:

sudo docker inspect –f ‘{{.NetworkSettings.IPAddress}}.’ имя_контейнера

Если не в дефолтной сети, то надо указывать сеть явно:  

sudo docker inspect —format ‘{{ .NetworkSettings.Networks.pccm.IPAddress }}’ a1

Пауза / снятие с паузы

sudo docker pause имя_контейнера

sudo docker unpause имя_контейнера

Остановка:

sudo docker stop имя_контейнер

Удаление контейнера:

sudo docker rm имя_контейнера

Удаление всех контейнеров:

sudo docker rm $(sudo docker ps –qa)

Удаление образа:

sudo docker rmi имя

Удаление всех контейнеров:

sudo docker rmi $(sudo docker images –qa)

Файловая система для Docker:

ls /sys/fs/cgroup/freezer/docker/555666777лабуда

555666777лабуда – поддиректория для контейнера 555666777

Состояние контейнера:

cat /sys/fs/cgroup/freezer/docker/555666777лабуда/freezer.state

У докер контейнера свой IP, у виртуальной машины свой IP – как попасть снаружи: 

Способ 1:

sudo docker run –d –p 8888:80 –name aaa httpd

Это список замапленных портов:

iptables –L DOCKER –t nat

IP виртуалки, и замапленный порт:

http://172.30.xx.xx:8888/

Способ 2:

sudo docker run -d -P —name site httpd

И посмотреть открытые порты контейнера:

sudo docker port site

80/tcp -> 0.0.0.0:32773

IP виртуалки, и замапленный порт:

http://172.30.xx.xx:32772/

Способ 3:

sudo docker run –d –p 80:80 –name aaa httpd

http://172.30.xx.xx:80

Сборка контейнера:

sudo docker build -t alexeysushkov/name . – точка нужна если запуск из каталога, где лежит Dockerfile, если нет то путь

Надо, дать права на свою папку для sudo, поэтому вызов без sudo:

chmod 777 /import/home/alexey.sushkov

Docker hub

Перед заливкой на docker hub:

sudo docker login

далее заливаем:

sudo docker push alexeysushkov/name

https://hub.docker.com/r/alexeysushkov/aaa/

Сохраняем контейнер:

sudo docker export —output=»trucks_export.tar» trucks

Сохраняем образ:

sudo docker save —output=»trucks_save.tar» alexeysushkov/trucks

Docker сети

https://docs.docker.com/engine/userguide/networking/#the-dockergwbridge-network

Проверяем, что работает приложение:

curl 0.0.0.0:9200

Список сетей:

sudo docker network ls

Кто в сети bridge?

docker network inspect bridge

Создаем свою сеть:

sudo docker network create tracks

Запускаем контейнер в сети:

sudo docker run -dp 9200:9200 —net trucks —name es1 elasticsearch

Пример сети Docker

Создаем отдельную сеть:

sudo docker network create pccm

Контейнеры запускаем в этой сети + даем имена контейнерам: 

sudo docker run -d —net pccm —rm —name a1 docker.net.billing.ru/rbsm/ps-rf-rhel7-pccm-coverage

sudo docker run -d —net pccm —rm —name a2 docker.net.billing.ru/rbsm/ps-rf-rhel7-pccm-coverage

Проверяем что в сети работают два контейнера:

sudo docker network inspect pccm

Подсоединяемся к контейнеру:

sudo docker exec -i -t a1 bash

Запускаем сервер: 

iperf3 -s

Подсоединяемся к контейнеру:

sudo docker exec -i -t a2 bash

Запускаем клиента, вместо IP имя контейнера:

iperf3 -c a1

Магия )

Accepted connection from 172.18.xx.xx, port 38580
[ 5] local 172.18.xx.xx port 5201 connected to 172.18.xx.xx port 38582
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 2.67 GBytes 23.0 Gbits/sec
[ 5] 1.00-2.00 sec 2.85 GBytes 24.5 Gbits/sec

Ограничиваем ресурсы в Docker

https://docs.docker.com/engine/admin/resource_constraints/

https://docs.docker.com/engine/admin/resource_constraints/#configure-the-realtime-scheduler

docker-compose

устанавливаем:

sudo pip install docker-compose

проверяем:

docker-compose version

Запускам в каталоге где есть docker-compose.yml

docker-compose up

Останавливаем

sudo docker-compose stop

Docker shared folders

https://blog.amartynov.ru/docker-named-volumes/

https://docs.docker.com/engine/tutorials/dockervolumes/

Ссылки

Официальная инструкция по установки docker

https://docs.docker.com/engine/installation/linux/centos/#uninstall-docker

Передача docker образа через файл

https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine

Букварь построения сети Docker

http://support.mdl.ru/LearningDockerNetworking/content/Ch01.html

Полное практическое руководство по Docker: с нуля до кластера на AWS

https://habrahabr.ru/post/310460/

Docker для Windows 10

https://www.docker.com/docker-windows

Docker для Windows 7

https://www.htpcbeginner.com/install-docker-on-windows-7-8-10/

Общая настройка ОС

https://serveradmin.ru/centos-7-nastroyka-servera/

Параметры chmod

http://linuxway.ru/pervye-shagi/komanda-chmod-primery-ispolzovaniya/

Про пользователей

http://www.oldnix.org/users-groups/

План перехода с Windows на Linux: Беглый обзор

https://www.ibm.com/developerworks/ru/library/l-roadmap/

Bash-скрипты

https://habrahabr.ru/company/ruvds/blog/325522/

Самые полезные приёмы работы в командной строке Linux

https://habrahabr.ru/company/ruvds/blog/323330/

Как понять, что происходит на сервере

https://habrahabr.ru/company/oleg-bunin/blog/319020/

Docker сети

https://docs.docker.com/engine/userguide/networking/#the-dockergwbridge-network

Ansible лучшие практики

http://docs.ansible.com/ansible/playbooks_best_practices.html

Ссылки посмотреть 

Автоматизируем и ускоряем процесс настройки облачных серверов с Ansible

https://habrahabr.ru/company/infobox/blog/249143/

https://habrahabr.ru/company/infobox/blog/250115/

https://habrahabr.ru/company/infobox/blog/252001/

https://habrahabr.ru/company/infobox/blog/252239/

https://habrahabr.ru/company/infobox/blog/252461/

chron

http://rus-linux.net/MyLDP/admin/cron.html

http://devacademy.ru/posts/15-otlichnykhprimierovdliasozdaniiacronzadach-v-linux/

TOP’ай сюда

https://habrahabr.ru/post/114082/