f 用docker 建置Nagios Core 4 在raspbian 10 上的測試環境 ~ 迪貝之家

Pages

用docker 建置Nagios Core 4 在raspbian 10 上的測試環境

前年底我買了一張Raspberry Pi ZERO的開發板
及相關附件(keyboard, sdcard,線材等)來測試
不過實在是太不方便了,就開發的角度來看
但也是去年真的太忙了,我根本就沒時間去摸它
下載raspbin 9後,燒進SD Card之後
開機把畫面接到電視稍微測試一下之後
就被我晾在家裡櫃子的一角
直到最近我想在pi上頭開發Nagios 4 Plugin
我才在想有沒有更簡便的方式
找了Internet,有人用QEMU 來模擬ARM
樹莓官方居然有一專篇討論
HOWTO: Virtual Raspbian on Qemu in Ubuntu or Debian 2017 Ver
但實在是太舊了, QEMU目前的版本跑不起來
而且還得下載人家分享出來的在pi上跑的就kernel
我是依照文件的版本,自己compile了2.x的QEMU
是跑起來,但還得去搞定網路介接的問題
喔....實在真的是...天啊!!是在折磨誰啊!!
又在pi kernel 網站上看到說有pi docker可用
我實在是懶得再試QEMU,就去看了該篇連結

在Ubuntu 16.04安裝了docker package之後
照著指令執行.....
docker run -it lukechilds/dockerpi
ㄝ.....真的可以開一個pi 作業系統
哈....哈.....可是不會用阿~~
我又沒接觸過docker............
恩....好吧~~就再上網找書吧~~
嗯....看起來有本不錯的書
而且是2019年出版的
Docker in Action, 2nd Edition

看了2~3天吧~~
就用下面的步驟建出我要的環境
你要是一直用docker hub上的image
當然每次叫起container
資料會被清空
我看過書上寫docker創始人的歷史
它應該是套用github的觀念

基本上我的做法就是

1.把docker image拉回來
docker pull lukechilds/dockerpi
2.把這個image存成我的
docker save -o raspberrypi.tar lukechilds/dockerpi
3.砍掉下載回來的image
docker rmi lukechilds/dockerpi
4.把之前的tar檔放進我的repository
docker load -i raspberrypi.tar
在這之後,要另起一個host主機的ssh session
5.我們看一下image的現狀
docker images
docker images
6. 啟動一個可以互動的container
因為至少要能開通ssh
而且要指定能由host主機進到container的22 port
docker run -it -p 5022:22 7c3e811cebaa
7. 看container的狀態
docker ps
docker ps
8.我們來看一下它可以連通的IP吧
docker inspect 5041b122b41b
我只擷取我們要看的重點
docker inspect
9.再來就是登入步驟4所開啟來的互動tty
預設pi/raspberrypi
然後sudo su - 切換成root
用來啟動ssh daemon
我習慣直接下指令
systemctl enable ssh
systemctl start ssh
當然raspbian有它的管理介面可以啟動
raspi-config
raspi-config
raspi-config
raspi-config
10.我們來從另一個host session進行登入測試吧~~
ssh -p 5022 pi@172.17.0.2
pi login
11. 再來就是上傳我之前反應給github nerd的問題
為什麼要從source compile
因為nerd在deb安裝似乎沒啟用
你有興趣的話
可以看Nagios 4 query handler : nerd這個case
case裡頭給了一版的branch
這一版configure --enable_nerd是不會出錯的
不然你就得拿以前舊版的來使用
當然你也可以不要用nerd
但我個人認為,它是個很重要的功能
scp -P 5022 nagioscore-4.4.5_nerd_fix.zip root@172.17.0.2:~
12. 最後當然就是安裝
groupadd nagios
groupadd nagioscmd
useradd -g nagios -G nagioscmd -d /home/nagios nagios
mkdir -p /home/nagios/etc
mkdir -p /home/nagios/var
mkdir -p /home/nagios/plugins
./configure --prefix=/home/nagios \
--sysconfdir=/home/nagios/etc \
--localstatedir=/home/nagios/var \
--libexecdir=/home/nagios/plugins \
--with-command-group=nagioscmd \
--enable-nerd \
--with-httpd-conf=/etc/apache2/sites-enabled
make && make install
安裝步驟你當然可以完全按照官方的文件
我原本想說,docker 在開發上這麼方便
container 或者image很容易就portable
結果昨晚我嘗試把container export
或者commit之後, save 為tar 檔
想把這些archive 檔匯入暈倒平台
結果window 的docker engine
需要打開Hyper-V
看起來是跟我筆電上的VirtualBox衝到
因為Hyper-V一起動,我的VM就叫不起來了
只好把Oracle VirtualBox移除掉
讓docker desktop for windows能夠順利安裝
但就是不能用,docker engine其實重起了一遍
網路上其實早就有人反應了這個問題
Docker does not start on Windows 10
另外就是要把它匯入家裡筆電的ubuntu docker
container import比較麻煩
因為得去查看source 執行甚麼指令
我看了一下,像是entrypoint.sh等
因此啟動匯入的container image需要帶入該指令
才能開得起來,但是...問題來了
所有變更都不見了
在source端commit container
再把image匯出搬到另一台主機
也一樣.......全部的變更都消失了
好吧....至少有個開發環境了
docker的問題,待研究囉~~


安裝freetds,參考"怎麼用Perl DBI"
安裝Sybase_DBD之前
需要先安裝DBI
得用apt來安裝
apt-get install libdbi-perl
想要借用別人的測試環境來測連通
怎麼測就是有問題
為了確認是不是freetds本身的問題
我就安裝了linux sql server
及起了一個sql server 的container
測完之後........應該是routing問題
host主機上的sql server 及
sql server container都可以連通
但我還是用tcpdump去看了封包的流向
哈....
然後再從其中一台測試機去tracert IP
因為是另一個機房,應該有172 網段
所以封包繞到最後就不見蛋了
perl 的local setting 也是有點問題
export LANGUAGE="en_GB.UTF-8"
export LANG=en_GB.UTF-8
export LC_ALL=en_GB.UTF-8
locale-gen en_GB.UTF-8
dpkg-reconfigure locales -> 預設選 en_GB.UTF-8 它
就解決了
參考How to fix Perl warning setting locale failed on Raspbian
Perl 出現 Setting locale failed 的解決辦法