Скачивание страниц и вложений из Сonfluence рекурсивно

# Рекурсивное скачивание списка страниц от текущей (Параметр parent необходимо изменить на ваш parentId, так же использовать свои данные в —user=* —password=* )

# Получаем файл json с описанием страниц, потом мы выбираем из него parentId дочерних страниц и сохраняем ID страниц в файл pageId.txt
wget -q —auth-no-challenge —user=your_name —password=your_password «http://confluence.*.ru/rest/api/content/search?cql=parent=90406760″ -O list_pages.json
python -m json.tool list_pages.json | grep id | awk ‘{print $2}’ | tr -d \» | tr -d \, > pageId.txt

# Скачивание страниц в формате PDF по полученному списку ID.
while read PAGE_ID
do
wget -q —auth-no-challenge —user=* —password=* «http://confluence.*.ru/spaces/flyingpdf/pdfpageexport.action?pageId=$PAGE_ID» -O mypdf_$PAGE_ID.pdf
done < pageId.txt # Скачивание вложенных файлов # Узнаём имена файлов в первом цикле и закачиваем по этим именам файлы во втором цикле. while read PAGE_ID do wget --restrict-file-names=nocontrol --auth-no-challenge --user=* --password=* -q -O - http://confluence.*.ru/pages/viewpageattachments.action?pageId=$PAGE_ID | grep ?api=v2 | sed "s/.*download\/attachments\/$PAGE_ID\///" | tr -d \" > name_attachment.txt

while read ATTACHEMENT
do
ATTACHMENT_REAL=$(echo -e ${ATTACHEMENT//%/\\x})
wget —auth-no-challenge —user=* —password=* -q -O — http://confluence.*.ru/download/attachments/$PAGE_ID/$ATTACHEMENT -O «$(echo $ATTACHMENT_REAL| tr -d \?api=v2)»
done < name_attachment.txt rm -rf name_attachment.txt done < pageId.txt

Частые команды git

Копируём файлы из удалённого репозитория
git clone https://github.com/some_user/my.git
После выполнения у вас появится папка ./my
Если нужен не дефолтный бранч
git clone —branch (или -b) branch_name https://github.com/some_user/my.git

Скачать обновления с сервера в уже скачанную папку
cd ./my && git pull

После наших изменений, отправить их на сервер.
git add . # точка означает все файлы, можно указать определённые файлы
git commit -m «Описание ваших изменений»
git push # Отправка изменений на сервер

Удалить файл(ы)
git rm text.txt
git commit -m «Описание ваших изменений»
git push # Отправка изменений на сервер

Отмена последнего коммита
git revert HEAD # HEAD~3 — вернуть состояние на 4 дейстия назад

Удаления коммитов(внесенных изменений на сервер)
git pull # Скачиваем самую свежую версию
git reset —hard 6a844d3d489 # Имя коммита
git push origin +master # +master — имя бранча

Удаление тега
git tag -d имя_тега
git push origin :refs/tags/имя_тега

Соединить одну ветку с другой
git checkout имя_ветки_куда_записываем
git merge имя_ветки_из_который_пишем

Создание нового бранча
git checkout -b New_branch
Отправить наш новый бранч на сервер
git push —set-upstream origin New_branch

Показать существующие бранчи
git branch -a

Удалить бранч
git branch -D branch_name

Настройка Jenkins с LDAP авторизацией и ограничением прав.

Небольшой пример для настройки Jenkins вместе с LDAP каталогом IPA.

Описывать установку Дженкинса не имеет смысла, по этому перейдём ближе к делу.
Для нашей авторазиции необходимо установить плагин под названием LDAP.
После этого переходим в Manage Jenkins -> Configure Global Security.
Выставляем галку Enable Security и в Access Control выбираем LDAP.

Настройки LDAP:
Сервер ldap://it.my-company.com/
Корневой DN dc=it,dc=my-company,dc=com
База поиска пользователей cn=users #не нужно ставить полный путь до вашего CN или OU !!!
Фильтр поиска пользователей uid={0}

Дальше остаётся только задать настройки пользователя, для входа и поиска в LDAP:
Администратор DN uid=user-name,cn=users,cn=accounts,dc=it,dc=my-company,dc=com
Пароль администратора ********

После этого можно пробовать заходить под пользователем из LDAP, но для теста лучше поставить в настройках авторизации, доступ всем на всё (Authorization -> Anyone can do anything).

Для ограничения и выдачи прав пользователям необходим плагин Matrix-based Security Authorization, у которого зависимость от плагина icon-shim.
Снова переходим в Manage Jenkins -> Configure Global Security
Выбираем Authorization -> matrix-based security
Добавляем наших пользователей , в таблице выставляем им права.
Готово, в итоге мы получили Дженкинс с LDAP авторизацией.

Мои шпаргалки по Docker

В связи с тем что часто забываю команды докера, решил сделать запись с наиболее часто используемыми.

Сборка образа из файла Dockerfile (файл опциями сборки образа), учитывая что мы находимся в папке где лежит этот файл.
#$ docker build -t my_docker .
Через ключ -t назначаем имя нашему образу
Точка в конце означает что Dockerfile лежит в текущей директории.

Просмотреть существующие на нашем хосте образы докера
#$ docker images

Просмотреть существующие на нашем хосте контейнеры докера
#$ docker ps -a
-a — по умолчанию показывает только включённые, вместе с ключом выводит все контейнеры.

#$ docker rm — Удалить контейнер
#$ docker rmi — Удалить образ, с ключом —force удалит контейнер и образ
#$ docker rm $(docker ps -a -q) — Удалить все существующие контейнеры
#$ sudo docker save -o linux-nginx.img linux-nginx — Экспортировать образ docker
#$ sudo docker load -i linux-nginx.img — Импортировать образ docker

Запустить контейнер и открыть в нём bash
#$ docker run -it -d --name my_container 397bd34237 /bin/bash
run — команда запуска контейнера
-it — перейти в контейнер и запустить внутри контейнера команду
-d запустить контейнер в фоне и вывести его ID
—name — присвоить имя нашему контейнеру
397bd34237 — имя образа
/bin/bash — выполняемая команда в контейнере

Запустить контейнер который мы уже запускали , с предыдущими параметрами
#$ docker start ID-контейнера

Bash скрипт для запуска докер образа

#!/bin/bash
CONFIG=/home/isavel/ELK+KAFKA/for_docker_image/config/
PATTERN=/home/isavel/ELK+KAFKA/for_docker_image/pattern/
LOG=/home/isavel/ELK+KAFKA/for_docker_image/logs

docker run \ # команда запуска
—restart=always -it \ # в случае падения перезапускать контейнер
-p 443:443 -p 80:80 -p 5601:5601 \ # порты из докера на локалхост port_localhost:port_docker_image
-e «TZ=Europe/Moscow» \ # указываем нашему контейнеру timezone
-v $CONFIG:/etc/logstash/conf.d/ \ # прокидываем в контейнер докера директорию с локальной машины
-v $LOG:/var/log/my_log/ \ # прокидываем в контейнер докера директорию с локальной машины
-v $PATTERN:/opt/logstash/patterns/ \ # прокидываем в контейнер докера директории с локальной машины
—name sberteh \ # названием нашего контейнера
5e89f9aa5754 \ # ID запускаемого образа

Копирование внутрь контейнера
docker cp some_files.conf docker_container:/home/docker/

Зайти в уже запущенный контейнер (точнее выполнить команду внутри контейнера)
docker exec -it name_of_container /bin/bash

Выгрузить контейнер в файл и импортировать его на другой хост докера.
docker save -o=file.tar CONTAINER
docker load --input=file.tar

Загрузить докер образ в локального репозитория:
docker tag [name_image] [repo_name]:[port]/[name_image]
docker push [repo_name]:[port]/[name_image]

ZSH на Centos 7 установка и настройка

ZSH — более продвинутый shell со своими фишками и большими возможностями настройки. У многих сразу возникает вопрос: «что тебя не устраивает в стандартном shell ?», но стоит один раз попробовать, что бы решить нужно оно тебе или нет.

Устанавливаем пакет
sudo yum install -y zsh

Меняем используемый по умолчанию shell
chsh -s /bin/zsh

Всё готово, осталось перезайти в систему, после чего у необходимо будет ответить на не сложные вопросы, но мне этого мало и я устанавливаю дополнительные «плюшки» (готовый конфиг zsh) под названием oh-my-zsh.

Проверяем установлен ли у нас git и curl
sudo yum install -y git curl

Далее копируем с git файлы oh-my-zsh в домашний каталог
git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

Делаем навсякий случай бэкап оригинального файла конфигурации zsh
cp ~/.zshrc ~/.zshrc.orig

Устанавлием конфиг от oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

После этого я устанавливаю тему для oh-my-zsh
sudo vim ~/.zshrc
ZSH_THEME=»bira» # bira название темы, которые хранятся в ~/.oh-my-zsh/themes/
Список тем

Так же можно установить необходимые плагины из ~/.oh-my-zsh/plugins/ для этого в файле ~/.zshrc ищем строку plugins
plugins=(git yum systemd firewalld) # добавляем нужные вам плагины в скобки
Список и описание плагинов

Установка и настройка keepalived на Centos 7

Установка keepalived на серверах
sudo yum -y install keepalived

После установки на основном сервере MASTER редактируем файл
sudo vim /etc/keepalived/keepalived.conf

global_defs {
notification_email {
admin@isavel.pro
}
notification_email_from keepalived@isavel.pro
smtp_server 172.16.10.2
smtp_connect_timeout 30
router_id msk-gw2
}

vrrp_instance WAN {
state MASTER
interface enp11s0f1
virtual_router_id 1
priority 10
advert_int 1
authentication {
auth_type PASS
auth_pass password123
}
virtual_ipaddress {
89.100.100.100/27 dev enp11s0f1
}
}

vrrp_instance LAN {
state MASTER
interface enp11s0f0
virtual_router_id 2
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass password123
}
virtual_ipaddress {
172.16.10.100/24 dev enp11s0f0
}
}

На втором сервере BACKUP редактируём
sudo vim /etc/keepalived/keepalived.conf

global_defs {
notification_email {
admin@isavel.pro
}
notification_email_from keepalived@isavel.pro
smtp_server 172.16.10.2
smtp_connect_timeout 30
router_id msk-gw3
}

vrrp_instance WAN {
state BACKUP
interface enp7s0
virtual_router_id 1
priority 1
advert_int 1
authentication {
auth_type PASS
auth_pass password123
}
virtual_ipaddress {
89.100.100.100/27 dev enp7s0
}
}

vrrp_instance LAN {
state BACKUP
interface enp6s0
virtual_router_id 2
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass password123
}
virtual_ipaddress {
172.16.10.100/24 dev enp6s0
}
}

После изменений в файлах включаем и стартуем службы
sudo systemctl enable keepalived && sudo systemctl start keepalived

Разрешить multicast на firewall
IPTABLES -A INPUT -i eth0 -s 89.100.100.98 -d 224.0.0.0/8 -j ACCEPT  для master
IPTABLES -A INPUT -i eth0 -s 89.100.100.99 -d 224.0.0.0/8 -j ACCEPT  для backup

Настройка OSPF (quagga) в Centos 7

Установка пакета ospf
sudo yum install -y quagga

Включение форвардинга пакетов
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sudo sysctl -p

Разрешение записи в файл конфигурации для selinux
sudo setsebool -P zebra_write_config 1

Настройка zebra
sudo cp /usr/share/doc/quagga-0.99.22.4/zebra.conf.sample /etc/quagga/zebra.conf
sudo chown quagga:quaggavt /etc/quagga/ospfd.conf
sudo systemctl enable zebra.service && sudo systemctl start zebra.service

sudo vtysh
configure terminal
msk-gw2(config)# log file /var/log/quagga/quagga.log
msk-gw2(config)# do show  interface
msk-gw2(config)# interface enp11s0f0
msk-gw2(config-if)# description LAN
msk-gw2(config-if)# ip  address  172.16.10.1/24
msk-gw2(config-if)# no shutdown
msk-gw2(config-if)# exit
msk-gw2(config)# interface enp11s0f1
msk-gw2(config-if)# description WAN
msk-gw2(config-if)# ip address 89.100.100.100/27
msk-gw2(config-if)# exit
msk-gw2(config)# do write
msk-gw2(config)# exit
msk-gw2# exit

Настройка OSPF
sudo cp /usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample /etc/quagga/ospfd.conf
sudo chown quagga:quaggavt /etc/quagga/ospfd.conf
sudo systemctl enable ospfd.service && sudo systemctl start ospfd.service
sudo vtysh
msk-gw2.ph.local# configure terminal
msk-gw2.ph.local# service integrated-vtysh-config
msk-gw2.ph.local(config)# router ospf
msk-gw2.ph.local(config-router)# network  172.16.10.0/24 area 0.0.0.0
msk-gw2.ph.local(config-router)# router-id  172.16.10.2
msk-gw2(config-if)# exit
msk-gw2(config)# do write
msk-gw2(config)# exit

Разрешение для firewall
Firewalld: firewall-cmd —direct —add-rule ipv4 filter INPUT 1 -p 89 -j ACCEPT
Iptables: iptables -t filter -I INPUT -p 89 -j ACCEPT

После этих действий установка ospf завершена , новые маршруты должны появится в таблице маршрутизации, если у вас в сети уже есть настроенное оборудование с ospf.