Vagrant — автоматизация виртуальных машин

Vagrant — система администрирования виртуальных машин из коммандной строки.
Vagrant сама по себе не является виртуальной машиной, это средство автоматизации управления чужими виртуальными машинами например Virtual Box.
Можно использоваться готовыми контейнерами виртуальных машин, указав образ, который необходимо загрузить в конфигурационном файле Vagrant или самостоятельно собрать собственный контейнер.

Просмотр версии:
vagrant — -version 

https://app.vagrantup.com/boxes/search — список доступных образов

Создание машины:
vagrant init generic/centos7
Включение машины:
vagrant up
Запрос состояния машин: 
vagrant status 
Полное выключение машины :
vagrant halt
Удаление машины :
vagrant destroy
Зайти в машину по ssh :
vagrant ssh

Допишим в файл ключей запись о машине которая хоччет подключаться к виртуальной :
vim ~/.ssh/authorized_keys


В хост системе в отдельном терминале выведем свой публичный ключ и его содержимое добавим в конец файла на виртуальной машине:
vim ~/.ssh/id_rsa.pub

После этого можно попасть на виртуальную машину :
ssh -p 2222 vagrant@127.0.0.1

По умолчанию в виртуальной машине создается пользователь vagrant с паролем vagrant
Выполнение команд от root возможно с применением sudo , работает даже на CentOS

На хост машине имеется файл конфигурации Vagrantfile, в нем можно задать свои параметры, пробросить порт увеличить память и тд, без учета комментариев это выглядит так:

Vagrant.configure("2") do |config|
  config.vm.box = "generic/centos7"
  config.vm.provider "virtualbox" do |vb|
        vb.memory = "2048"
   end
   config.vm.network "forwarded_port", guest: 80, host: 8080
   config.vm.synced_folder "src/", "/srv/website" , disable: true

   config.vm.provision "shell", inline: <<-SHELL
     sudo yum -y update
     sudo yum install -y httpd
     sudo systemctl enable httpd
     sudo systemctl start httpd
     sudo firewall-cmd --zone=public --add-service=http --permanent
     sudo systemctl restart firewalld.service
   SHELL
end

1 Скачается и создастся виртуальная машина на базе CentOS с оперативной памятью 2 Гб, 
2 Из виртуальной машины будет проброшен порт 80 -> 8080 хост системы
3 Будет создана общая папка для синхронизации файлов ( /src — на хосте , /srv/website  на виртуалке.
4 Система обновиться
5 Установится web сервер , он будет добавлен в «автозагрузку» 
6 На постоянной основе под него будет открыт порт на фаерволе.

Документация по применяемым параметрам :

https://www.vagrantup.com/docs/vagrantfile/machine_settings.html

Конвертация Raw образов дисков в формат VirtualBox

Бывает необходимость перенести проект из облака в локальную сеть.
Многие сервисы предлагающие VPS имеют функцию скачать образ вашего жесткого диска в формате raw.
Поле того как вы получите слепок диска на свой локальный компьютер его можно сконвертировать в формат понятный VB (*.vmdk)

VBoxManage convertfromraw /Users/Downloads/rawdiskfile vdhard.vmdk --format VMDK

Далее использовать его новых или имеющихся виртуальных машин.

Bash

Скрипт это обычный текстовый файл, поэтому просто создаем его в любом текстовом редакторе:

vim script.sh

Сделаем скрипт исполняемым :

chmod +x script.sh

Запускать скрипт будем командой :

./script.sh

Первая строчка в скрипте должна начинаться с :

#!/bin/bash

Объявление переменной :

a=175

Объявление ссылки на переменную :

var2=$a

Вывод на экран :

echo $var2
    Объявление строковой переменной :

    b="Hello World"

    Объявление строковой переменной :

    c=$(df --total)

Условие (обратите внимание на пробелы между знаками! ) :

#!/bin/bash
a=9
b=8
if [ "$a" = "$b" ]; then
echo "A = B"; else
echo "A! = B" 
fi

Цикл while / do
Бесполезный но понятный пример. Если a не равно b то пингуем ya.ru :

#!/bin/bash
a=3
b=6
while [ $a -ne $b ] ; do
ping ya.ru -c3
sleep 10
done

В зависимости от типа данных в условии можно использовать :
= — равно.
!= — неравно.
-eq — эквивалентно.
-ne — не эквивалентно.
-qt — больше чем.
-lt — меньше чем.

Цикл for
ping сначала пошлет 5 запросов , на втором круге 10 :

#!/bin/bash
for a in 5 10
do
ping ya.ru -c "$a"
done

Еще вариант (начальное значение, шаг , конечное значение)

for a in $(seq 10 5 90)
for (( a=10; a<=90; a+=5 ))

Если нужно передать в скрип параметры то :

#!/bin/bash
a=$1

Будет использоваться первый аргумент

Terminal

!! повтор последней команды.
sudo!! повтор последней команды с правами супер-пользователя.
history выводит список когда либо вводимых команд.
!23 Повторить 23 команду из списка history.
!$ использует аргументы от предыдущей выполненной команды.
Можно ускорить навигацию по различным папкам с помощью добавления их в стек папок
Находясь в нужной директории наберите :

pushd

папка добавиться в стек.

pushd /путь/к/папке/

добавит еще одну папку в стек.
Просмотр стека :

dirs -v

Переход между папками

cd ~цифра обозначенная напротив папки

Перенаправленние вывода программы в файл (при повторном вызове файл полностью перезапишится)

ps -ax > processes.txt

Перенаправленние вывода программы в файл (при повторном вызове в файл допишится информация)

ps -ax >> processes.txt

Создание папки сразу с подпапками :

mkdir -p ~/Documents/{work,admin,texts}

Сравнение двух папок :

diff /folder1 /folder2

Поиск команды по описанию :

apropos “download”

Генерация ключей GPG

Генерация новой пары ключей :

gpg --gen-key

1 — Вопрос тип ключа (RSA по умолчанию)
2 — Длинна ключа (2040 по умолчанию)
3 — Срок действия ключа (по умолчанию без срока)
4 — Введите имя (любое)
5 — Введите почту (неважно какую и не важно будите ли вы отправлять письма с этой почты с этим ключом)
6 — комментарий можно оставить пустым
7 — «O» — принять изменения
8 — Ввести парольную фразу
9 — Ввести повтор парольной фразы

Просмотреть список ключей в системе :

gpg --list-keys

Экспортировать ключ в файл :

gpg --output publik.key --armor --export ПОЧТА УКАЗАННАЯ ПРИ ГЕНЕРАЦИИ

Импортировать чужой ключ в систему :

gpg --import publik.key

Зашифровать файл для пользователя XxXxX файл main.c полученный файл main.c.gpg можно передавать по почте :

gpg -r XxXxX -e main.c

XRDP на Centos 7

Подключиться к Linux машине можно и в графическом режиме, рассматривается пример если linux система достаточно мощная чтобы иметь графический рабочий стол и он уже установлен.
Например это удобно в локальной сети или при тестировании в виртуальных машинах.
Лично мое мнение пытаться поставить графический рабочий стол на облачный удаленный сервер это бессмысленная трата его ресурсов.
Устанавливаем на удаленной машине:

yum -y install xrdp tigervnc tigervnc-server tigervnc-server-module

Включаем в автозагрузку и запускаем:

systemctl enable xrdp.service
systemctl start  xrdp.service
service xrdp restart

Открываем порт в фаерволе :

firewall-cmd --permanent --add-port=3389/tcp
systemctl restart firewalld.service 

Далее под Windows открываем «Подключение к удаленному рабочему столу» и вбиваем IP адрес linux машины.

Firewall CentOS 7

Добавить сервис в правило :

firewall-cmd --zone=public --add-service=ftp --permanent

Добавить порт :

firewall-cmd --permanent --add-port=40000/tcp

Добавить диапазон портов :

firewall-cmd --permanent --add-port=40000-40100/tcp

Просмотреть последние сохраненные записи в правилах фаервола :

iptables-save | tail -n 5

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

systemctl restart firewalld.service

FTP-server (VsFTPd) CentOS 7

Установка сервера:

yum install vsftpd

Запуск службы:

systemctl start vsftpd

Статус службы:

systemctl status vsftpd

Файл конфигурации:

vim /etc/vsftpd/vsftpd.conf

В нем снять комментарии:

ftpd_banner=welcome to...

Включить автозагрузку :

systemctl enable vsftpd

Проверить автозагрузку :

systemctl is-enabled vsftpd

Открыть порт для службы:

firewall-cmd --permanent --add-port=21/tcp

Перзапуск фаервола :

systemctl restart firewalld.service

Просмотреть открытые порты фаервола :

firewall-cmd --list-all

Для работы в пассивном режиме в конфигурационном файле нужно раскомментировать

pasv_enable=Yes
pasv_max_port=40100
pasv_min_port=40000

И открыть необходимый диапазон портов :

firewall-cmd --permanent --add-port=40000-40100/tcp

Перзапуск фаервола :

systemctl restart firewalld.service

Редактор Vim

i — режим вставки (редактирования)
: — командный режим (нажать Esc)
:q! — выйти без сохранения
:wq — записать изменения и выйти
dd — вырезает строку в буфер обмена
p — вставляет строку в нужное место
yy — копирует строку
/e — поиск символа «e»
:45 — курсор на 45 строку
:se nu — включает нумерацию строк
:1,$s/p/x — заменит все буквы p на x (первая подстановка в строке)
:1,$s/p/g — заменит все буквы p на x по всему файлу

Метки:

Работа с пакетами CentOS 7

Обновление пакетов в системе :

yum update

Поиск пакета содержащего …. :

yum provides vim

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

yum info vim

Установить пакет :

yum install vim

Удалить пакет :

yum remove vim

Вывести информацию о доступных «mega-пакетах» :

yum grouplist

Вывести информацию о содержании пакета : название можно писать даже по русски, ориентируйтесь на вывод grouplist

yum groupinfo "Средства разработки"

Установить требуемый «мега-пак»

yum groupinstall "Средства разработки"