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
- Берем то что сгенерили
- В VB убираем:
-
- SCASI меняем на SATA
- К SATA монтируем наш образ
- К IDE монтируем образ Linux
- Начинаем загружаться, но не устанавливаем, набираем rescue
- В загруженной ОС монтируем наш образ
- Меняем там:
-
-
- Настройки сетевого контроллера: mac, ip и т.д.
- Есть GUI для настройки – не помню какое
- Даем user-у root: sudo /usr/bin/bash
- Смотрим пароли: cat /etc/passwd
- Создаем локального пользователя: useradd –u NAME –d HOME –m
- Добавляем ему пароль: Passwd NAME
- Добавляем его в группу sudo:
-
-
-
-
- vi /ets/group
- добавляем его в строку wheel
- переключаемся на него: su — NAME
- Перегружаемся под новым юзером
-
-
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
Вызываем так:
Парсим логи так:
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 готовы к развертыванию в контейнере
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 образа через файл
Букварь построения сети 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-otlichnykh—primierov—dlia—sozdaniia—cron—zadach-v-linux/