Netbox installation Centos 8

Netbox е супер инструмент, служещ да ни помогне в управлението и документирането на компютърни мрежи. Първоначално замислена от екипа за мрежово инженерство в DigitalOcean, NetBox е разработена специално, за да отговори на нуждите на мрежовите и инфраструктурни инженери. В процеса на работа не винаги съм се натъквал на добре документирано хардуерно/софтуерно съдържание при клиент, което почти винаги е забавяло процесът на работа. Попадах няколко пъти на въпросният инструмент, но не намирах време да го разгледам. Е оказа се за мойте нужди, направо превъзходен. Първите тестове бяха в контейнер на локалната ми машина, но го исках на виртуална машина. Самият софтуер е написан на python + django, за база от данни се използва postgresql, с много приятен(изчистен) и динамичен уеб интерфейс. Може да се направи интеграция с активна директория.

В публикацията ще опиша, по какъв начин съм го инсталирал във виртуална среда.

Машината е с минимален хардуерен ресурс 2vCPU, 4 GiB ram, 50 HDD. Върху нея ще инсталирам CentOS8 от netinstall. Нищо не обичайно или сложно. Само съм му забранил FirewallD и SELinux.

Следваща стъпка, документацията на Netbox.

Първо се инсталира PostgreSQL. Текущо в хранилището на Centos8 е версия 10.14. След инсталация се инициализира, извършва се корекция в конфигурацията на pgsql за да работи с md5, услугата се стартира, разрешава за автоматично стартиране със зареждане на операционната система и създаване на база от данни, потребител/парола за нуждите на инструмента.

dnf install postgresql postgresql-server
postgresql-setup --initdb

Редакция на конфигурационният файл на postgresql: ident става md5

vim /var/lib/pgsql/data/pg_hba.conf
host all all 127.0.0.1/32 md5 
host all all ::1/128 md5

Стартиране и добавяне в auto-start:

systemctl enable postgresql
systemctl start postgresql

Създаване на база от данни, потребител и парола към потребителят:

sudo -i -u postgres psql

postgres=# CREATE DATABASE netbox;
CREATE DATABASE
postgres=# CREATE USER netbox WITH PASSWORD 'strongpassword';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
GRANT
postgres=# \q

Инсталиране на Redis, добавяне в auto-start и стартиране на самият процес.

systemctl enable redis
systemctl start redis
systemctl status -l redis

#test
redis-cli ping

Инсталиране на системни пакети

dnf install -y gcc python38 python38-devel python38-setuptools libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config git
pip3 install --upgrade pip

Изтегляне на NetBox. В документацията им използват, като работна директория /opt/netbox, в примера ще го използвам и аз.

mkdir -p /opt/netbox/ && cd /opt/netbox/
git clone -b master https://github.com/netbox-community/netbox.git .

Добавяне на системен профил за netbox. Ще конфигурираме услугите WSGI и HTTP да работят под този акаунт. Също така ще присвоим това потребителско право на собственост върху медийната директория. Това гарантира, че NetBox ще може да запазва качени файлове.

groupadd --system netbox 
adduser --system -g netbox netbox
chown --recursive netbox /opt/netbox/netbox/media/

Конфигуриране на Netbox. В директорията /opt/netbox/netbox/netbox/ има примерен конфигурационен файл(configuration.example.py), който ще го копираме в същатата директория но с друго име: configuration.py. С любимото Vim го отварям и извършвам лека корекция, настройка на ALLOWED_HOSTS(списък с валидните имена на хостове и IP адреси, чрез които може да се достигне до този сървър), данни за базата от данни, данни за redis сървъра.

cd /opt/netbox/netbox/netbox/
cp configuration.example.py configuration.py
vim configuration.py

ALLOWED_HOSTS = ['netbox.devops.lab, '172.16.16.10']
DATABASE = {
'NAME': 'netbox', # Името на DB-то, което създадохме
'USER': 'netbox', # потребителско име за db
'PASSWORD': 'strongpassword', # парола
'HOST': 'localhost', # db server
'PORT': '', # Database port (leave blank for default)
'CONN_MAX_AGE': 300, # Max database connection age (seconds)
}

REDIS = {
'tasks': {
'HOST': 'localhost', # Redis server
'PORT': 6379, # Redis port
'PASSWORD': '', # Redis password (optional)
'DATABASE': 0, # Database ID
'SSL': False, # Use SSL (optional)
},
'caching': {
'HOST': 'localhost',
'PORT': 6379,
'PASSWORD': '',
'DATABASE': 1, # Unique ID for second database
'SSL': False,
}
}

SECRET_KEY=?

Трябва да се генерира secret key, като от netbox са написали инструмент за генерирането му.

python3 ../generate_secret_key.py

Създаване на административен потребил за достъп до Netbox.

source /opt/netbox/venv/bin/activate
(venv) # cd /opt/netbox/netbox
(venv) # python3 manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password:
Password (again):
Superuser created successfully.

Тест на приложението:

python3 manage.py runserver 0.0.0.0:8000 --insecure

След това се свържете с името или IP на сървъра (както е дефинирано в ALLOWED_HOSTS) на порт 8000; например http://172.16.16.10:8000/ . Трябва да бъдете посрещнати с началната страница на NetBox.

Настройка на systemd

Ще използваме systemd, за да контролираме както gunicorn, така и фоновия работен процес на NetBox. Първо копирайте contrib/netbox.service и contrib/netbox-rq.service в /etc/systemd/system/ директорията и презаредете systemd dameon:

cp contrib/*.service /etc/systemd/system/
systemctl daemon-reload

systemctl start netbox netbox-rq
systemctl enable netbox netbox-rq

До тук добре, но е хубаво вместо да го отварям на порт 8000 да го зареждам директно с името на домейна. За целта ще инсталираме един apache уеб сървър.

yum install httpd -y
systemctl enable httpd
systemctl start httpd

cp /opt/netbox/contrib/apache.conf /etc/httpd/sites-available/netbox.conf
cp /opt/netbox/contrib/apache.conf /etc/httpd/sites-enabled/netbox.conf

yum install mod_proxy_html -y
service httpd restart

После в любим уеб браузър се отваря въпросното IP или ако има DNS запис.

Успех!

Официално съм Red Hat Certified Engineer

В началото на годината започнах едно ново професионално пътешествие. След кратък разговор с началника, той ме убеди, че трябва да придобия квалификацията Red Hat Certified Engineer. Целта е ясна. За да се придобие въпросната квалификация, трябваше да взема два изпита Red Hat Certified System Administrator(EX200) и Red Hat Certified Engineer(EX300).

Ключа към успеха се криеше в многото практика, отново и отново. Бях си изградил един setup с vagrant и в деня не помня по колко up/destroy -f съм писал. За двата сертификата отделих може би над 80 часа.

Аз @ Red Hat

Simple Flask Containerized

Simple Flask app containerized

Накратко, наложи ми се да пусна OpenShift с Flask приложение, което се оказа много добър учил. Реших да задълбая и да си направя свой контейнер работещ на моята машина с Flask microframework. 

Сценария е разигран върху Debian и Docker CE(текущо 18.06.1-ce). Пгорамата(app.py) е проста, отпечатва текст в уеб браузър.

Файл „app.py“ е със съдържание:

from flask import Flask
app = Flask(name)

@app.route('/')
def hello_world():
return 'Hello from Flask'
if name__ == '__main':
app.run(debug=True,host='0.0.0.0')

Ще ми трябва и файл requirements.txt, който е със съдържанието на нужните библиотеки за да сработи приложението. Тъй като стъпва на Flask, в него има само един ред – „Flask“

Всичко стъпва върху alpine(като най-малък image) и в него се инсталира python.

Dockerfile -a е със съдържание:

FROM alpine:latest
MAINTAINER Nikolay Nikolov "nikolay.nikolov@cnsys.bg"
RUN apk add --update \
python \
python-dev \
py-pip \
build-base
COPY . /app
WORKDIR /app
RUN pip install -r /app/requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]

И 3-те файла се намират в произволно създадена директория.

Правим Build/Run за тест

docker build -t flask-app:latest .

docker run -d -p 5000:5000 flask-app

В уеб на локалния адрес и порт 5000, ще се види работещо приложението.

OpenShift Container Platform 3.10

От началото на година усилено съм се съсредоточил върху инсталиране/конфигуриране и разучаването на OpenShift. След усилена борба, успях да му надвия.

Ситуацията е следната, написах playbook, който разпъва OpenShift ent(container platform 3.10) върху 1 master, 3 nodes, 3 gluster registry.
Много съм доволен от себе си 🙂

Следваща стъпка, 3 master, 3 nodes, 3 gluster registry, 1 load balancer. 

Същевременно изкарах и сертификат от Red Hat с гръмкото име „Red Hat Delivery Specialist – Platform-as-a-Service (PaaS) Administration“.

Ресет на парола в NetWorker Management Console 9

Предисловие
Наложи ми се да се запозная с нов за мен софтуер за архивиране с гръмкото име „NetWorker“. Изградих си постановка с един виртуален сървър и няколко клиента.
Конзолата за управление на софтуерът бе върху въпросният сървър. Когато имах възможност си играех с него, но в даден момент забравих паролата за конзолата.
В няколко стъпки ще опиша, как я подмених с нова. Всички стъпки ще бъдат изпълнени под Windows OS, посредством Command Prompt.

Потребителско име – „Administrator“,
желана парола – „SuperSecretPassword123!“.

1) Създаване на нова парола(ще е нужна Base64 кодировка).
В notepad се записва желата парола в „чист“ вид(файла се казва mypass.txt и се намира в c:\).
В Command Prompt се изпълнява(като се намирам в c:\):

certutil -encode mypass.txt newpass.txt

По този начин ще се генерира Base64 кодировка на текстът от файла mypass.txt и ще бъде записан във файла newpass.txt

2) Редактиране на authc шаблон.
Шаблона(authc-local-config.json.template) съдържащ данните се намира в „c:\Program Files\EMC NetWorker\nsr\authc-server\scripts“.
В него има два параметъра, които трябва да бъдат променени.
„your_username“ ще стане на „Administrator“, а в „your_encoded_passowrd“ ще се съдържат данните от генерирания файл(newpass.txt) в стъпка 1. Данните са между BEGIN и END на файла.
Файла(authc-local-config.json.template) трябва да бъде преименуван на authc-local-config.json и записан в „c:\Program Files\EMC NetWorker\nsr\authc-server\tomcat\conf“.

3) Рестартиране на услуги и тяхното стартиране.
Отново в cmd се спират услугите.

net stop nsrexecd

Ще отнеме време.
Пуск.

net start nsrd
net start gstd

4) Тест. Отново в cmd.

authc_mgmt -u Administrator -p SuperSecretPassword123! -e find-all-users

По този начин ще се видят всички налични потребители.

OpenShift – wordpress

От началото на годината се уча на OpenShift origin. Разполагам с подготвена инфраструктура, състояща се от един master и един node. Но не това е важното, а по какъв начин може да се инсталира и подготви WordPress в тази среда.

След като сме вписани в уеб интерфейсът на master и имаме създаден проект(например: wordpress-mysql), от менюто се избира „Import YAML / JSON“.
В официалното хранилище на openshift в github може да бъде намерен въпросният JSON файл. Избираме как ще се казва проекта и поставяме съдържанието на JSON файла и изпълняваме бутонът „Create“.
Следващата стъпка е конфигурационна. По подразбиране е посочено хранилището за source на WordPress в github. Ако трябва се извършват нужните корекции(например потребител, паролата на базата от данни?).

След като вече имаме двата контейнера, единият съдържа mysql-a, а вторият е със самото приложение на wordpress.
Зарежда се в тази с wordpress-a в уеб браузър и се следват стъпките за инсталация на WordPress, като въвеждане на конфигурационна информация(потребител, адрес на mysql сървър и достъп до нея).

Това е. 🙂