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 сървър и достъп до нея).

Това е. 🙂

В началото

Със започването на новата 2018 година си поставих за цел да изградя свой блог, който да е предимно свързан с проблемите, които съм срещал в работата си и тяхното отстраняване. Привърженик съм на споделянето на опит.

Искрата, която ме запали по компютрите е изцяло благодарение на баща ми. От както се помня вкъщи винаги е имало компютър. По образование е радио/телевизионен техник следствие на което аналогичното мислене и представите за това, как работят различни устройства е дълбоко заложено в съзнанието ми.

Разбира се хронологично, в началото бе DOS, след което дълги години Windows(3.11, 95, 98SE, XP) и първите ми сблъсъци с linux(ubuntu 6.04). Благодарение на това, всеки етап остави своя следа. С придобитите знания бях започнал да преинсталирам/инсталирам различни софтуери при приятели и т.н.
Преминах от наличие на модем удома, до изграждането на малки домашни мрежи. С идването на новите технологии и развитието на Интернет, то все повече се зараждаше любопитството ми към уеб технологиите. Започнах да разработвам статични уеб сайтове с обучителна цел на HTML.
Първият си домейн закупих 2006 година, като беше нещо много ново за мен. Контролен панел, пощенски кутии, FTP услуги, база от данни, PHP език.

През 2009 година докато бях втори курс студент започнах работа в голям български системен интегратор. Придобите знания преди това се бяха отплатили. В първите си дни от започването на работата бях, като в небрано лозе. Срещнах велики професионалисти, освен показаните ми знания, то осъзнах, че самият начин на мислене е много важен. След втората година, бях с ясното съзнание, че това е нещото с което искам да се занимавам. Не мога да скрия, че през годините не съм се блъскал като товарен влак в стена, провалял съм се. Много. Но наученото от грешките е голяма работа.

Обичам да гледам на себе си като един опитен системен администратор. Привърженик съм на софтуерът с отворен код. Интересувам се от облачни услуги, контейнери, виртуализация, разбира се там където е приложимо.