Raspberry Pi

Šis įrašas apie mažą kompiuteriuką, kurį įsigijau namo automatizavimui (smart house), parekomendavus Egyrui, kuris tokį projektą jau pakūrė pas save. Taigi, kaip ir parekomendavo susiinstaliavau OpenHAB, bet kai ją pasileidau, supratau, kad šiam reikalui esu kiek per „žalias“, taip ir užsimetė kompiuteriukas pas mane lentynose, o namo automatizavimui įsigijau Xiaomi Mi Home įrangos. Vis tik, visai šio reikalo neapleidau ir po kiek laiko kompiteriuką išsitraukiau, tik šį kartą pradėjau ne nuo OpenHAB, bet nuo kitų idėjų, kurių įgyvendinimas paprastesnis, bei taipogi neša naudos, bei kelia mano namo „IQ“ :).

Maniškis „Raspberry Pi“ (toliau dažnai nadosiu sutrumpinimą – „RPi“) yra trečios kartos, šiai dienai aišku teisingiau būtų pirkti 4-tos, bet mano poreikius tenkina ir senesnis, tad išlaidauti ir upgreidintis pakolkas neketinu. Tik nusipirkęs jį, iškart užsisakiau ir radiatoriukų komplektą, bet tie mažieji radiatoriukai nieko neverti, tad ieškojau rimtesnio vėsinimui skirto varianto ir apsistojau ties aliuminiu korpusu/aušintuvu. Aktyvaus nenorėjau, o ir tas pasyvus vizualiai vertinant turėjo būti pakankamai efektyvus.

Kai naujasis korpusas atvyko, nedelsdamas jį užsidėjau. Pasikeitimo metu „RPi“ pas mane dirbo tik „Pi-Hole“ DNS serveriu/ad_blockeriu. Mažus radiatoriukus pakeitus šiuo korpusu, t° nukrito nuo 49°C iki 38°- 41°C. Taigi korpusas, kaip aušintuvas veikia labai gerai. Korpusas standus, surinktas monoblokas užima nedaug vietos, tiesa, kas dėl vaizdo kameros pajungimo galimybės, tai skylutės nedidelės, turėtų būti nelengva, nors man šio funkcionalumo, kaip ir nereikia. Iš minusų, tai man nepatiko didelis atstumas nuo „RPi“ mikroschemų iki korpuso/aušintuvo. Vizualiai vertinant atstumas didesnis nei 1mm. Pridedama termotarpinė yra storesnė, taip kad su šilumos nuvedimu, kaip ir viskas gerai, vis tik, metalo laidumas šilumai turėtų būti geresnis, tad esant mažesniam tarpeliui tikėčiausi geresnio vėsinimo. Teko skaityti, jog kiti deda reikiamo storio varines tarpines, jas sutepdami termopasta ir taip pasiekia geresnių vėsinimo rezultatų, nei su komplektuojama stora termotarpine. Tad iki idealaus korpuso šiek tiek trūksta, bet upgreidu likau patenkintas. Jei kada sugalvosiu įsigyti „RPi4“, tikrai pirksiu tokį patį pritaikytą naujesnei versijai.

Kas liečia „RPi“ parengimą darbui, operacinės sistemos suinstaliavimą, tai vyksta labai paprastai, nereikia jokių aukštesnio lygio žinių, pirkti jau paruoštos SD kortelės taipogi nereikia, o kaip tai padaryti, viskas labai aiškiai pažingsniui nurodyta gamintojo svetainėje. Galimų instaliuoti OS (operacinių sistemų) pasirinkimas didelis, nors paieškojus ne tik gamintojo svetainėje, pamatysim kad jis dar didesnis. Beje, naujesniuose „RPi“, dėl didesnio darbo su atmintimi greičio rekomenduojama naudoti 64 bit distribucijas (dabar rinkčiausi Ubuntu server), iš kitos pusės, jei „RPi“ su 8Gb RAM`o, 32 bit OS vienam procesoriui leis matyti tik 3Gb.

Ar verta rinktis instaliaciją su grafiniu interfeisu priklauso nuo to, kas bus daromas su „RPi“. Pradžiai pabandžiau „RPi“ naudoti, kaip stacionarų kompiuterį, įvertinau jo greitį ir kitus niuansus. Dirbti su juo galima, bet visgi, šiai paskirčiai kompiuteriukas lėtokas, tad baigiau žaidimus ir instaliavau serverinę versiją be grafinio interfeiso. Grafinis interfeisas užima daugiau vietos tiek ant kietojo disko (šiuo atveju SD kortelės), tiek RAM, tiek ir procesorių apkrauna. Kai kompiuteris naudojamas tik kaip serveris, prie kurio nepajungta nei klaviatūra, nei monitorius, kuris valdomas tik per SSH ir įvairių paleistų programų webinį interfeisą, instaliuokite tik serverinę distribuciją ir kaip minėjau, ant naujesnės kartos „RPi“, teisingiau būtų naudoti 64bit versijos serverinę distribuciją.

 

Prisijungimas prie „RPi“ iš kito kompiuterio  – SSH servisas – PuTTy

„Raspberry Pi“ paleidimui, prie jo reikės pajungti monitorių, pelę ir klaviatūrą, kas įneša šiokio tokio nepatogumo, jei „RPi“ neplanuojama nuolatos laikyti pajungtą prie monitoriaus. Tam, kad atsikratyti šio nepatogumo, prisijungiam prie sistemos suvesdami login vardą: „pi“ ir slaptažodį „raspberry“ („ubuntu“ atveju atitinkamai „ubuntu“ ir „ubuntu“) ir nuotolinio prisijungimo instaliavimui parašom šias eilutes, kurios rašomos visais atvejais, kai ką nors norim daryti su „RPi“.

sudo apt update
sudo apt upgrade
sudo apt dist-upgrade

ir konkrečiai šiai instaliacijai reikalingos eilutės:

sudo apt-get install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

o kompiuteryje, su kuriuo nuolat dirbat ir per kurį norėsite valdyti „RPi“, suinstaliuojat  PuTTY (Portable).

Susirandam „RPi“ IP adresą, kol neatjungėm monitoriaus „hostname -I“ komandos pagalba. Jei „RPi“ dirbs kaip serveris, teisingiausia jam priskirti pastovų IP adresą. Bet aš tai darau ne keisdamas „RPi“ nustatymus, o jo „MAC“ adresą DHCP serverio nustatymuose priskirdamas pastoviam IP adresui. Iš kitos pusės DHCP serveris pas mane yra tas pats „RPi“, o tiksliau „Pi-Hole“ programa, tad aš tai padarau jau po „Pi-Hole“ instaliavimo. Vis tik ties šiuo punktu reikėtų stabtelti. „PiHolas“ stacionarų IP adresą tikiuosi, kad sugeba suteikti „Raspbian“ operacinėje sistemoje. Kaip sužinojau vėliau, „Ubuntu“ serverio sistemoje „PiHolas“ statinio IP adreso suteikti nesugeba. Būkite atidūs. Apie statinio IP adreso suteikimą „ubuntu“ sistemoje aprašiau žemiau, kai kalbama apie Dockerius.

Viskas, jei „RPi“ pajungtas prie lokalaus tinklo, monitorių, klaviatūrą ir pelę galima atjungti. Jei jungiatės iš „Windows 10“ ar „Linux“ kompiuterio, „PuTTy“ nebūtinas, prisijungti galėsite iš CMD ar terminalo. Abiem atvejais reikia parašyti “ssh <username>@<IP adresas>“, jei jungsitės kai vartotojas “pi“, o kompiuteriukas „RPi“ randasi adresu “192.168.1.2“ prisijungimo eilutė atrodytų taip:

ssh pi@192.168.1.2

Vis tik PuTTY (Truputį daugiau info) man patinka labiau nei CMD, nes ir prisijungimą galima automatizuoti ir pav. su „Midnight Commander`iu“ leidžia dirbti pelytės pagalba, ko su CMD padaryti nepavyko. Tokio prisijungimo SSH protokolu trūkumas, kad jungtis galima tiktai konsole, bet jei „RPi“ dirba kaip serveris – to per akis, serveriui net neverta instaliuoti grafinio valdymo interfeiso. Jei suinstaliavot raspbiano pilną grafinę versiją, o tolimesniam darbui, komandinės eilutės neužtenka, ir norime jungtis prie grafinio interfeiso, susikonfiguruojam į  „RPi“ jau įdiegtą RealVNC. Rezoliucijos padidinimui reikia „start“→ „Preferences“→ „Main Menu Editor“ įsijungti „Raspberry Pi Configuration“ ir vėliau jau pasileidus jį, „System“ dalyje „Resolution“ reikia pasirinkti norimą. Pas mane sukasi serverinė distribucija, be grafinio interfeiso, tad „RPi“ valdau tik per terminalą.

Dar trumpai apie PuTTY sukonfiguravimą. Pasileide PuTTY kairėje pusėje esančiame nustatymų meniu pasirenkame „Window“ → „Appearance“→ „Font settings“ spaudžiam mygtuką „Change…“ ir pasirenkam „DejeVu“ 12 dydžo ar kitą labiau patikusį fontą, tada kairėje pusėje esančiame nustatymų meniu pasirenkam „Terminal“→ „Keyboard“→ „Change the sequences sent by:“→ „The Function keys and keypad“ iš ten esančio „ESC[n~“ pakeičiam į arba „Linux“, arba „Ubuntu“ atveju „Xterm R6“ (čia kad veiktų skaičių klaviatūra bei funkciniai klavišai). Atlikus šiuos pakeitimus, juos išsaugom  kairėje pusėje esančiame nustatymų meniu pasirenkę „Session“→ „Load, save or delete a stored session“ punkte pasirinke „Default Settings“ ir paspaudžiam  „Save“ mygtuką.

Norint išsaugoti prisijungimą, į „Host Name (or IP address)“ įrašom IP adresą ar ir vartotojo vardą pav. „pi@192.168.1.2“, o „Load, save or delete a stored session“ laukelyje „Saved Sessions“ yrašome prisijungimo pavadinimą, pav. „RPi“ ir spaudžiam mygtuką „Save“. Kitą kartą prisijungimui užteks du kart spustelti norimą prisijungimą.

Patogus darbas su failais – Midnight Commander

Nevirškinu patarimų, kai siūlomą viską daryti komandinės eilutės pagalba, kai yra ženkliai patogesnės priemonės. Dar DOS`o laikais buvo sukurtos patogios darbui su failais programos, tokios kaip „Norton Comander“, „Dos Navigator“, „Volcov Comander“, bei daugybė kitų. Linux pasaulyje taipogi yra atitikmuo – „Midnight Comander“, todėl patogesniam darbui su Linux, pirmas dalykas ką aš padarau, tai  aš iškart jį ir susiinstaliuoju:

sudo apt install mc

ir po instaliavimo surinkus „mc“ galėsime naudotis patogesniu naršymo po failų sistemą bei dokumentų redagavimo interfeisu (redagavimui pasirinkit MC editorių Nr. 2, jei norėsite pasikeisti į kitą, MC komandinėje eilutėje parašykit „select-editor“). Nors su MC editoriumi dirbti sudėtingiau, nei su Windowsiniais, bet nepalyginamai paprasčiau, nei visokiais standartiniais linuxiniais, kuriuos paleidus, kokį pusvalandį sugaišit, vien bandydami suratsi, kaip juos uždaryti, nekalbant apie iš vis išsigimusį teksto redagavimo interfeisą. Todėl ir mano nuorodos, kai reikia paredaguoti kokio failo tekstą, tai taip ir rašau, primygtinai nesiūlydamas paleisti komandą, kuri kokį nors failą iškart atidaro pav.  „nano“ redaktoriuje.

Dirbant su MC dažnai prireikia abiejuose languose turėti atidarytą tą pačią direktoriją, tai padaroma su klaviatūros „ALT + i“ kombinacija. Kitame lange nei stovi kursorius atsidarys kursoriaus lange atidarytą direktoriją. Su kursoriumi užlipus ant direktorijos ir paspaudus „ALT + o“ kombinaciją, kitame lange atsidarys aktyvios direktorijos turinys. Kitoje aplinkoje nukopijuoto teksto į redaguojamą dokumentą įkėlimas vyksta laikant nuspaustą „Shift“ mygtuką ir paspaudus dešinį pelės mygtuką. Jei kopijuojama tame pačiame dokumente, tai pažymime tekstą ir su kursoriumi nuėję kur reikia įkelti nukopijuotą tekstą spaudžiam „F5“, jei norime ištrinti pažymėtą tekstą (ir visai nesvarbu kur tuo momentu stovi kursorius), spaudžiam „F8“, tekstą pažymėti labai patogu su pelyte.

MC labai patogu dirbti vienu metu ne tik su dviem atidarytomis vienu metu skirtingomis direktorijomis, bet ir su dviem kompiuteriais vienu metu, prie kito pasijungus, kad ir su tuo pačiu SSH standartu (viršutiniame meniu pasirename „Left“ arba „Right“ priklausomai kokiame lange norime prisijungti nutolusį kompiuterį, tada  „Shell link...“ ir surenkam pav. „Pi@192.168.1.2“).

Taipogi labai patogu keisti failų atrbutus (viršutiniame meniu pasirename „File“ →„Chmod“), arba failo savininką (viršutiniame meniu pasirename „File“→Chown“), bei daugybę kitų veiksmų.

Išjungiam WiFi

Kadangi savo „RPi“ jungiu tik laidu (patikimesnis, stabilesnis, greitesnis, saugesnis ryšys) nematau poreikio laikyti aktyvų WiFi modulį. Taip ir šiek tiek sumažinsim elektros sunaudojimą ir elektromagnetinį spinduliavimą aplinkui. Kai buvau suinstaliavęs raspbianą anksčiau, pasinaudojęs „raspi-config“ komanda iššokusiame konfiguravimo meniu WiFi ryšį buvau išjungęs. Deja, bet atnaujintame „raspi-config“ galimybės atjungti bevielį ryšį neradau. Kai susiinstaliavau „Ubuntu“ 64-bit serverio OS, WiFi ryšį išjungiau  į (Ubuntu) „/boot/firmware/config.txt“ (Raspbian) „/boot/config.txt“ įrašydamas „dtoverlay=disable-wifi“ eilutę. Patikrinimui ar WiFi ryšys išjungtas surinkęs „lsmod“ komandą tarp išmestų paleistų servisų galinčio aptarnauti WiFi ryšį (brcmfmac) neradau, tad užduotį įvykdžiau.

 

Saugumo sumetimais atsisakom standartinio vartotojo

Dar keli žingsniai, šiek tiek padidinantys saugumą.

Susikuriam naują user`į, kurį pastoviai naudosime jungdamiesi prie „RPi“:

adduser <Username>

Prijungiam naujai sukurtą vartotoją „SUDO“ grupei:

adduser <Username> sudo

Būtinai prisijungiam prie naujai sukurto vartotojo, įsitikinam, kad viskas veikia, kad naujam useriui priskirta „sudo“ grupė, slaptažodis išsisaugojo teisingai. Jei suvedant slaptažodį įsivėlė klaida, pakeičiam naujai sukurtam vartotojui slaptažodį, bei būtinai pakeičiam „root“ vartotojo slaptažodį. Jei sukurto vartotojo slaptažodis geras, pakeičiam tik „root“ vartotojo slaptažodį (slaptažodžio pakeitimo komanda passwd):

passwd <Username>

Ištrinam vartotoją „Pi“ (Nors galimas ir kitas – „Honeypot“ variantas, kai „Pi“ vartotojas atjungiamas nuo „sudo“ grupės, bei atimamos kitos teisės, ir paleidžiamas pranešimų skriptas, kad būtumėt informuotas, jei kas nors jungsis prie kompiuterio „pi“ vardu. Iš kitos pusės, dabar ištrinkim, o jai nuspręsit tai padaryti, susikursit naujai:

deluser pi

Dar galima pakoreguoti SSH konfiguraciją į „/etc/ssh/sshd_config“ failą įrašant (nors aš tai dar planuoju išbandyti kada nors vėliau):

Port <galima pakeist į nestandartinį portą, nors tokiu atveju bus nepatogumų>
Protocol 2
PermitRootLogin no
DebianBanner no

 

Tinklinė duomenų kaupykla – NAS

Sekantis žingsnis, galima Raspberry paversti NAS įrenginiu. NAS įrenginys labai patogus tuo, kad norimą failą patalpintą tenai bus galima pasiekti iš bet kurio prie lokalaus įrenginio pasijungusio prietaiso, tame tarpe ir telefono ar planšetės, o jei prie lokalaus tinklo prisijungsite per VPN, tai ir iš bet kurios pasaulio vietos, be jokio papildomo nesaugaus Claud serviso interneto platybėse. NAS funkcionalumą galima pasiekti ir su turimu maršrutizatoriumi turinčiu USB lizdą, tik šiuo atveju, pigesnieji maršrutizatoriai turi tik USB 2.0 ir 100Mb/s greičio tinklo palaikymą, kas stipriai apribos duomenų perdavimo greitį lokaliame tinkle. Pajungus didelės talpos USB atmintinę, ar išorinį diską gausime pakankamai talpų ir pakankamai greitą NAS („Raspberry Pi 4“ palaiko USB 3.0, bei 1Gb/s tinklą), be to su „Raspberry Pi“ turėsim ženkliai lankstesnę sistemą. Galima panaudoti ir SD korteles, tik jos turi būti suformatuojamos FAT32 (max 2Tb su 512b sektoriumi, arba 16 TB su 4,096b) formatu, kai didesnės nei 32Gb kortalės Windows sistemoje standartiškai formatuojamos exFAT formatu, kurio „RPi“ bootloaderis neatpažįsta. „Raspberry Pi“ iki 3 versijos palaikydavo ne didesnes kaip 256Gb SD korteles, o 3 ir aukštesnės versijos palaiko ir didesnes korteles.

Vis tik, jei NAS planuojama pakurti ant SD kortelių, tai nebūtų patikimiausias sprendimas. HDD ar SSD pajungtas prie USB būtų „n“ kartų patikimiau, o jei su kokiu mdadm, dar „RAID 1“ pajungti su 2 diskais, tai iš vis vos ne NAS už kelis šimtus € :).

Pereinam prie programinės dalies. Kad „RPi“ taptu NAS`u, pirmiausiai mes suinstaliuojam Samba. Prie serviso iš nutolusio įrenginio, interneto pagalba prisijungsime per VPN, ir naudosimės visais lokalaus tinklo privalumais, tame tarpe ir Pi-Hole apsauga.

Taigi, susiinstaliuojam Samba, kurios pagalba pašarintą direktoriją galėsime matyti  Windows sistemoje, prijungti kaip tinklinį diską ir realiai juo naudotis, taip, tarsi jis būtų jūsų kompiuteryje. Labai gerai tai, kad „RPi“ eikvoja labai mažai elektros energijos, tad jo laikymo nuolatos įjungto piniginė beveik nepajus.

Jei naudojate naujesnę Windows versiją, prieš tai reikės įjungti failų šarinimą „SMB 1.0/CIFS File Sharing Support“, kuris saugumo sumetimais naujesnėse versijose būna išjungtas.

SMB

Samba suinstaliuoti labai nesunku, aukščiau pateiktoje nuorodoje visas instaliavimo eiliškumas smulkiai aprašytas.

1. instaliuojam samba

sudo apt-get install samba samba-common-bin -y

2. susikuriam šarinamą direktoriją
3. ją pašarinam pakoreguodami  „/etc/samba/smb.conf“ failą

4. sukuriam samba userį „pi“ ir perkraunam samba

sudo smbpasswd -a pi
sudo service smbd restart

Apsistosiu trumpai ties konfiguravimo principu. Direktorijų šarinimas nurodomas „/etc/samba/smb.conf“ faile. Jo redagavimui reikia root teisių, kurias gaunate „sudo su -“ („-“ ženkliukas tam, kad užkrautų visus kintamuosius matomus su komanda „env“) komandos pagalba (grįžimui nuo „root“ prie paprasto vartotojo užtenka paspausti „CTRL + D“). Tenai laužtiniuose skliaustuose įrašome ką norime šarinti, ir žemiau įrašome komandas kurių pagalba viską sukonfiguruoji. Pav.:

[direktorijos pavadinimas, koks jis bus matomas tinkle, pav. "Talpykla"]
Comment = Čia smulkiau apibudinam savo share
Path = /home/Pi/share - čia nuoroda į šarinamą direktoriją, kurios pavadinimas gali būt kitoks, nei nurodėme aukščiau, laužtiniuose skliaustuose, kad būtų matoma tinkle
Browseable = yes - Taip mes nurodom, kad naršant tinkle su failų naršykle mūsų šarinama direktorija bus matoma viešai, parašius "no" nors ir nematysim tinkle, bet žinodami jos adresą mes ją vis tiek galėsime
pasiekti.
read only = no - parašydami "no" mes nurodom, kad direktorijoje esantį turinį galės koreguoti prisijungę per tinklą

daugiau apie komandų reikšmes.

Apie „mauntinimą“. Linux sistemoje galima primountinti visą kietą diską, prie pasirinktos direktorijos, ir nors primountintą gali būti šimtai kietų diskų, jūs juos matysite kaip eilines direktorijas vienam kataloge, ar bet kur kitur, kur tik sugalvosit. Tai skiriasi nuo to, ką mes pripratę matyti Windows`inėse sistemose.

Galima į „Raspberry Pi“ suinstaliuoti openmediavault (kaip instaliuoti) ir vos ne visas operacijas atlikti naršyklės interfeise, kaip tikrame NAS įrenginyje. Tuomet nereikės žaisti su „samba.conf“ failo redagavimu, bet „openmediavault“ leidžia dalintis prieiga tik prie tų įrenginių iš kurių nepaleista operacinė sistema. Kadangi aš vis dar šarinimams naudoju tą pačią SD kortelę, man iš šios programos jokios naudos, o ir standartinis „samba“ konfiguravimas, kai jį perpranti yra pakankamai paprastas, be to taip šarinti galima direktorijas daug lanksčiau. Jei vis tik suinstaliuosit „openmediavault“, per naršyklę suvedę „RPi“ ip adresą prisijungiat prie „openmediavault“ administravimo internetinio puslapio (user: admin, password: openmediavault). Per meniu pasirinkę system→Network susikonfiguruojat naudojamą tinklą stacionariam pasirinktam IP adresui. Tuomet, jei planuojat šiame kompiuteryje naudoti ir kitus servisus, valdomus per naršyklę, pav. Pi-Hole, reikėtų pasikeisti „openmediavault“ administravimo svetainės porto adresą iš „80“ į pav. „8080“ ar kokį nors kitą (system→General Setings). Po pakeitimų reikia paspausti „save“ ir „apply“. Daugiau informacijos pdf instrukcijose, bei forume. Norint išinstaliuoti suvedam:

apt-get remove --autoremove openmediavault

Dar vienas servisas. Turiu vaizdo kamerą, kurią ankščiau buvau sukonfigūravęs, jog siustų elektroninius laiškus su nuotraukomis, jei buvo užfiksuotas judėjimas. Sukonfigūravęs visą tai buvau per Gmail emailą, bet po kiek laiko tokią galimybę Gmail panaikino. Buvo minčių ant „RPi“ pakurti SMTP pašto serveriuką, ką ir padarė  Darau Blė. Vis tik, nusprendžiau nuotraukas iškart rašyti į „RPi“ laikmeną, tik tam reikia ne paleisto samba, bet NFS serverio, kurį galima paleisti papildomai. Taigi, paleidau NFS serverį ir apie SMTP servisą pamiršau, kaip nereikalingą. Bent jau pakolkas.

sudo apt-get install nfs-kernel-server -y

Sukuriam direktoriją su atitinkamomis suteiktomis teisėmis.

Paredaguojam „/etc/exports“. Mano konfiguraciją sudaro tik ši eilutė:

/Šarinama_Samba_direktorija/Vaizdo_Kameros_įrašai *(rw,all_squash,insecure,async,no_subtree_check)

Paleidžiam „exportfs

sudo exportfs -ra

Norėdami pamatyti, kaip tiksliai matosi „sharinama“ direktorija tinkle, parašom:

exportfs

ir gautą nuorodą įrašome vaizdo kameros „Storage→Destination→NAS“ skiltyje.

Windowsuose ištrinti išsaugotus prisijungimo prie samba diskų slaptažodžius reikia „Run“ eilutėje surinkti:

rundll32.exe keymgr.dll,KRShowKeyMgr

 

Visų tinkle esančių įrenginių apsauga nuo įkyrių reklamų ir šnipinėjimo duomenų siuntimo – Pi-Hole

Kita programa, kurią pakūriau ir šiuo metu jau kurį laiką naudoju buvo DNS serverio/reklamos blokatoriaus suinstaliavimas. Tinklo srauto kontrolei, turėjau minčių susiinstaliuoti proksi serverį, bet pamatęs Linus`o laidą apie Pi-Hole, leidžiančią pakankamai efektyviai kovoti su reklama, ir kurio instaliavimas užtruko ne daugiau 5 min, apsistojau ties šia. Instaliacijai tereikia paleisti komandą:

curl -sSL https://install.pi-hole.net | bash

Suinstaliavus, prie webinio valdymo interfeiso prisijungiama interneto naršyklės adresų juostoje surinkus „RPi“ IP adresą/admin/, pav. „http://192.168.1.2/admin/

Prisijungimo slaptažodžio pakeitimui ar panaikinimui prisijungę per PuTTy surinkite:

pihole -a -p

Jei vėliau sugalvosite pakoreguoti išsaugotų keše DNS adresų kiekį ar kešo saugojimo laiką, teks per terminalą „01-pihole.conf“ faile pakeisti šias reikšmes:

/etc/dnsmasq.d/01-pihole.conf

local-ttl=60 (Kešo saugojimo laikas sekundėmis)
Cashe-size=10000 (DNS adresu maks kiekis Keše)

Anonimiškumo padidinimui Pi-Hole puslapyje rekomenduojama suinstaliuoti unbound. Tik ten, kur reikia pakoreguoti „/etc/unbound/unbound.conf.d/pi-hole.conf“ failą, tai pradžiai jį reikia ir susikurti.

Kad galėtumėte pakeisti, failo, kuris nepriklauso jūsų vartotojui reikšmes, prisijunkite kaip rootas „sudo su -“ („-“ ženkliukas tam, kad užkrautų visus kintamuosius matomus su komanda „env“) komandos be kabučių pagalba.

Taip pat keičiamas ir Pi-Hole administravimo puslapio portas, faile adresu „/etc/lighttpd/lighttpd.conf“, Ir jei pakeistas, perkraunamas servisas:

sudo /etc/init.d/lighttpd restart

Tinklapio failai randasi „var/www/html/“ direktorijoje. Tai patogu, jei norite susikurti suasmenintą pradinį puslpį atidaromą su naujai atidarytu „tab“ „Firefox“ naršyklėje (mane knisa, kad po eilinio programos perinstaliavimo ten viską nustatinėti reikia iš naujo), nes iš naršyklių pašalinta galimybė šiai paskirčiai naudoti lokaliai saugomą failą. Taigi, susikurtą HTML failą įmetus į nurodytą direktoriją, falas bus užkraunamas webinio serverio ir tokiu būdu galima apeiti minėtą ribojimą.

Turimos Pi-Hole programos versijos atnaujinimui reikia paleisti:

pihole -up

Dabar naudojuosi Pi-Hole ir džiaugiuosi jo teikiamais privalumais, tarp kurių ir šiek tiek didesnis internetinių puslapių užkrovimo greitis, nes mano interneto ryšys yra per mobilaus 4G ryšio  tiekėjus, kurių signalo stiprumas pas mane gana silpnas ir greitis atitinkamai mažokas. Reklamos blokavimas visoje lokalaus tinklo įrangoje taipogi teigiamai prisideda prie bendro interneto greičio, bei visos įrangos, tame tarpe ir androidinių įrenginių naudojimosi komforto padidėjimo. Su DNS serveriu, puikiausiai galima apriboti pasiekiamus interneto resursus vaikams. Pav. CloudFlare „1.1.1.3“ DNS adresas neleidžia pasiekti turinio skirto suaugusiems. Daugiau paruoštų blokavimo sąrašų.

Išinstaliuojama komanda:

pihole uninstall

 

PiVPN

Nors ir buvau atvėręs portus maršrutizatoriuje, taip pasidarydamas galimybę reguliuoti rekuperatoriaus darbo režimus iš interneto, į kompiuterį buvau suinstaliavęs ir laikiau nuolat veikiantį TeamViewer, kad prie jo galėčiau jungtis per nuotolį, bet tokiame prisijungimo organizavime mačiau saugumo spragas. Kuo daugiau atvertų portų į vidinį tinklą, tuo daugiau atvirų skylių, per kurias įsilaužėliai gali patekti į vidinį tinklą, o debesų principu nuolatos veikiančios programos iš vis atveria duris įsilaužėliams. Teisingesnis būdas yra iš išorės prie vietinio tinklo jungtis tik per VPN ir tada jau elgtis taip, tarsi būtum vietiniame tinkle. Tuomet nereikia daugybės portų forwardinimo, jokių „debesų“ tiesiogiai suteikiančių prieigą prie tavo įrangos per visus Firewalus. Yra tik vienas atviras portas, prie gerokai saugesnio, šifruoto VPN prisijungimo. Taigi, saugumo sumetimais VPN stiprus žingsnis į priekį, be to tai būdas lengvai pasiekti absoliučiai visus resursus esančius vietiniame tinkle. Taigi, įdiegiame VPN serverį „Raspbbery Pi“ kompiuteryje paleidę eilutę:

curl -L https://install.pivpn.io | bash

Šia eilute paleisite PiVPN skriptą ir suinstaliuosite Open VPN arba modernesnį  WireGuard VPN serverį. Šį skriptą paleidus jau po Pi-Hole suinstaliavimo, skriptas mato Pi-Hole, ir instaliuojant leidžia tai nurodyti.

Vis tik, jei suinstaliavote OpenVPN reikia pakeisti /etc/openvpn/server.conf eilutę „push “dhcp-option DNS 192.168.1.2“, vietoje 192.168.1.2 nurodant savo Pi-Hole ip adresą.

VPN paleidimas susideda iš raktinio failo sukūrimo, kurį vėliau reikia nukopijuoti į kliento kompiuterį ar telefoną su kuriuo jungsitės prie PiVPN  (Androidinis  OpenVPN arba WireGuard klientas). Suinstaliuotas PiVPN valdomas konsolėje parašius „pivpn“ komandą. Prisijungiančio Kliento failo sukūrimui reikia parašyti komandą vėliau nurodant bet kokį prisijungiančio kliento vardą:

pivpn add

sukurtas failas „user.conf“ patalpinamas /home/pi/ovpns direktorijoje, Wireguard atveju – /home/pi/configs direktorijoje (vietoje „pi“ gali būti kitas vartotojas, kuriam suinstaliavom VPN). Pažiūrėti kokie failai su kokių klientų pavadinimais sukurti sistemoje rašom:

pivpn list

Norint sukonfiguruoti nutolisį klientą prisijungimui prie jūsų PiVPN reikės tą failą įkelti į nutolusį klientą, nors su WireGuard paprasčiau, nes parašius:

pivpn -qr

Bus sukurtas QR kodas, į kurį nukreipus telefoną, telefono klientas bus sukonfiguruotas automatiškai.

Prisijungimo vartotojo panaikinimui WireGuard atveju rašom “pivpn remove“ komandą, o OpenVPN atveju – “pivpn revoke“.

Išinstaliuoti VPN serverį rašome:

pivpn uninstall

Stebėti kokie vartotojai ir kada buvo prisijunę per VPN`ą prie jūsų sistemos labai patogu Pi-Hole programos pagalba. Pirmajame informaciniame „Dashboard“ puslapyje, apačioje “Top Clients (total)“ stulpelyje pasitikrinate ar tas vartotojas iš vis buvo pasijungęs, o  „Client activity over last 24 hours“ lentelėje jau galite matyti konkretų laiką kada tas vartotojas buvo pasijungęs.

Dar vienas niuansas, su kuriuo susidūriau šiek tiek vėliau. Jei mes norime iš vidinio tinklo pasiekti per VPN pasijungusį kompiuterį, tai mums reikia šiek tiek modifikuoti windowsinį kompiuterį iš kurio bus jungiamasi prie nutolusio, per VPN pasijungusio kompiuterio, ir „RPi“. Windousiniame kompiuteryje parašome komandą (jei nenorime kad nustatymai išliktų ilgam, po kompiuterio perkrovimo šią komandą reikėtų įvesti iš naujo):

route ADD 10.6.0.0 mask 255.255.255.0 192.168.1.2

„192.168.1.2“ pakeičiate į pas jus esantį „RPi“ ar kitą kompiuterį ant kurio sukasi VPN adresą. „10.6.0.0“ irgi turi atitikti adresą, kokį VPN dalina prisijungusiems nutolusiems prietaisams. Pas mane „10.6.0.1“ „10.6.0.2“ ir pan. todėl ir rašomas „10.6.0.0“

Jei norime išsaugoti nustatymus ilgesniam laikui, kad nustatymai Windowsiniame kompiuteryje išliktų ir po kompiuterio perkrovimo rašome:

route -p ADD 10.6.0.0 mask 255.255.255.0 192.168.1.2

Tokiu būdu mes praplęčiame NetMask ribas prie standartinių „255.255.255.0“ apibrėžto adresų ruožo, nurodydami, kad ir „10.6.0.0“ potinklis taipogi yra vidiniame tinkle, ir kad visas užklausas reikia siūsti ne maršrutizatoriui sujungiančiam tinklą su internetu, bet konkrečiai „RPi“ kurio ip adresą ir nurodom. Plačiau apie tai, kam reikalingas NetMask rašiau „Namų internetinio tinklo praplėtimas“, tad jei neaišku siūlau pasiskaityti.

Sekantis pakeitimas turi būti atliktas „RPi“ kompiuteryje. Jame reikia įtraukti į iptables taisyklę, kad būtų leidžiami ryšiai tarp dviejų potinklių – vidinio ir VPN sukurto, arba tarp konkretaus kompiuterio vidiniame tinkle ir VPN sukurto. Jei norime kad prie nutolusių kompiuterių prisijungusių prie vietinio tinklo per VPN galima būtų prisijungti tik iš vieno kompiuterio vidiniame tinkle rašom:

iptables -A FORWARD -s 192.168.1.3 -d 10.6.0.0/24 -j ACCEPT

Šiuo atveju „192.168.1.3“ turėtų būti to kompiouterio, kuraim suteikiama teisė pasiekti „10.6.0.0“ potinklį, o dėl „10.6.0.0“ tai turi atitikti VPN dalinamą potinklį. Jei norime apjungti visus įrenginius esančius skirtinguose potinkliuose, tai rašom ne konkretaus kompiuterio IP adresą, bet viso potinklio, kas turėtų atrodyti maždaug taip:

iptables -A FORWARD -s 192.168.1.0/24 -d 10.6.0.0/24 -j ACCEPT

 

Printerio serveris

Nors multifunkcinį įrenginį „Samsung M2070w“ (printerį ir skanerį) pirkau su bevielio tinklo funkcionalumu, bet kadangi noriu sumažinti elekromegnetinę spinduliuotę, nusprendžiau printerį pajungti laidais per „RPi“ prie tinklo. „RPi“ pas mane nuolatos veikia, jo apkrova nėra didelė, tad turėtų susitvarkyti ir su dar viena funkcija. Tam suinstaliuojam CUPS (Common Unix Printing System), nors printerio ir nėra palaikomų printerių sąraše:

$ sudo apt-get install cups

Toliau suvedam visus vartotojus, kurie galės jungtis prie Webinio interfeiso ir ten atlikti nustatymus, konkrečiame pavyzdyje tai „Pi“, aš siūlau „Pi“ vartotojo iš vis nenaudoti, tad prijunkite tuos vartotojus, kuriais naudositės:

sudo usermod -a -G lpadmin pi

Tokios eilutės pagalba “pi“ vartotojas buvo priskirtas „lpadmin“ grupei.

CUPS servisas suinstaliuotas, jo standartinis portas yra 631. Viską sukonfiguruoti, tame tarpe ir pakeisti porto adresą galima „/etc/cups/cupsd.conf“ faile. Prie failo pasijungę po šių operacijų pamatysime tik aktyvų „Listen localhost:631“, kas leidžia prie šio porto pasijungti tik iš to pačio prietaiso. Šią eilutę reikėtų užkomentuoti eilutės pradžioje įrašant „#“ ženkliuką ar iš vis šią eilutę ištrinant bei įrašant naują eilutę „Port 631“, kuri leis prie serviso jungtis ir iš kitų kompiuterių esančių lokaliame tinkle, arba galime nieko rankomis neredaguoti, o parašyti komandą viską tai pakeičiančią automatiškai, bei sekančią, perkraunančią servisą:

sudo cupsctl --remote-any
sudo systemctl restart cups

Serviso sustabdymui – „sudo systemctl stop cups

Viskas, prie paleisto printerių serviso galima prisijungti iš išorės, prie lokalaus tinklo prijungtame kompiuteryje pasileidus interneto naršyklę ir į adreso eilutę įrašant „RPI“ IP adresą bei 631 portą, kaip pav.:

192.168.1.2:631

Prisijungę, viršutinėje eilutėje spaudžiam „Administration“ ir prisiregistruojam prie CUPS prijungtų vartotojų vardu. Jei išmetamas saugumo perspėjimas, nekreipiam dėmesio, tai lokalus servisas, neįdiegta jokių mokamų saugumo sertifikatų, todėl ir keikiasi. Spaudžiam „add printer“ ir pridedam savo printerį.

Vat čia susidūriau su problemomis. „RPi“ skirta „Ubuntu“ mano printerio iš vis nematė (nors kompiuteryje suinstaliuota normali, neapkarpyta „Ubuntu“ serverio versija matė puikiausiai). Pasisekė, kad bent  „Raspbianas“ printerį matė puikiausiai, bet problemos tuo nesibaigė. CUPS neturi įdiegtų draiverių šiam printeriui. Kokia čia problema, pasisiūsim draiverius skirtus Linux iš gamintojo svetainės. Parsisiunčiau, o ten draiveriai tik intelinėms sistemoms. Bandžiau rankomis ištraukti mano modelio „Samsung_M2070_Series.ppd“ failiuką bei „rastertospl“ įmesti į „/usr/lib/cups/filter/“ direktoriją, kaip buvo prašoma, bet vilties, kad kitai architektūrai skirti draiveriai suveiks buvo mažai, kas ir pasitvirtino. Sprendimas priversiti printerį dirbti pasirodė daug paprastesnis :). Tereikia teisingai surastam printeriui, pradėti instaliaciją, bet kai prašoma suinstaliuoti draiverius, gamintoją „Samsung“ pakeisti į „RAW“. Viskas, printeris su šiais nustatymais man pradėjo spauzdinti :).

Kad printerio servisas veiktų per tinklą reikia suinstaliuoti samba, bet mes ją suinstaliavom jau ankščiau. Tik dabar tame pačiame samba konfigūravimo faile „/etc/samba/smb.conf“, koreguojam „[printers]“ sekciją, kurioje kintamieji turi būti nurodyti taip:

# CUPS printing.  
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = yes
read only = yes
create mask = 0700

# Windows clients look for this share name as a source of downloadable
# printer drivers
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = no
guest ok = no

 

OpenHAB

Pabandžiau pasižaisti su OpenHab`u. Lengviausio kelio, jau surinkto OpenHub imidžo nesirinkau, pirmiausiai norėjau pasižaisti su įvairiomis sistemomis, o ir „RPi“ paskirtis, ne vien tik „OpenHub“. Pradžiai pabandžiau instaliuoti su Dockeriu, kaip kad aprašyta PDNamas bloge.  Viskas pasileido, bet labai užkliuvo RAM naudojimas, kuris nuo 30%-40% pakilo iki 70%-80%. Ir dar serveris neapkrautas. Iškart pagalvojau, jog 1Gb RAM dydžio Dockeriniam variantui per mažai. Tada Dockerį ištryniau ir instaliavau tiesiai į sistemą. Bėda, kad su „Ubuntu“ ir suinstaliavus tieisiai, atminties sunaudojimas išliko labai panašus. Vėliau pabandžiau instaliuoti į „Raspbianą“, tiesa, jau naujasnę versiją su java 11, tai iškart nudžiugino atminties apkrova tik ~40%. Ir iš vis, „RPi“ laidinio tinklo palaikymas ženkliai stabiliau dirba „Raspbiano“ sistemoje.

Instaliavau vadovaudamasis OpenHab dokumentacija, pagal ją pirmiausiai pasileidę „sudo raspi-config“ „Performance Options“ skyriuje sumažinam „GPU Memory“ skirtą atminties kiekį iki “16“ ir „reboot“. Toliau reikia suinstaliuoti Java, kurią parsisiunčiam iš čia. (Papildymas: ankščiau reikėdavo parsisiūsti 8 versiją, todėl ir mano visi konfiguracijos pavadinimai su skaičium 8. Naujausiai „OpenHab“ 3 versijai jau reikia parsisiūsti 11 Java versiją, bet kad nežaisti su visų konfiguracijų pakeitimu, aš ir toliau direktoriją pavadinu „zulu8“ ir visas komandas nepakeitęs naudoju, kaip ir ankščiau.) Pagal instrukciją parsisiūstą archyvą įmetam ir išarchyvuojam į „/usr/lib/jvm/“, man gavosi „/usr/lib/jvm/zulu8.50.51.263-ca-jdk8.0.275-linux_aarch64“, bet kad mažiau reikėtų vargt su sudėtingu direktorijos pavadinimu, jį iškart pervadinam į „/usr/lib/jvm/zulu8“. Na ir ką, instaliavimo dokumentacijoje instrukcijos baigėsi ir akivaizdu, OpenHub nepasileidžia. Tad ieškom kaip ten su tuo „path“. Kadangi tuo metu naudojau „Ubuntu“ tai Youtubėje radau video su tolimesne instrukcija. Einu į “etc/environment“ ir ten buvusią eilutę (Raspbiane path direktorija panašu kad kita, bet ir viską atlikus pagal šią instrukciją viskas veikia):

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

papildau:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/zulu8/bin"
JAVA_HOME="/usr/lib/jvm/zulu8"

išsaugom pakeitimus ir perkraunam PATH ryšius nurodantį failą, paleisdami komandą:

source /etc/environment

pasižiūrim kaip užsikrovė paprašydami atvaizduoti PATH eilutę ir vėliau JAVA_HOME eilutę:

echo $PATH
echo $JAVA_HOME

pasižiūrim kaip susiinstaliavo java

java -version

Na ir ką, javą rodo, bet OpenHub jos nemato. Ieškom toliau. Pasirodo praleidom dar dvi komandas:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/zulu8/bin/java 1000
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/zulu8/bin/javac 1000

Na ir ką, dabar suinstaliuojam OpenHub stabilią versiją su eilutėmis (instrukcija):

wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -
sudo apt-get install apt-transport-https
echo 'deb https://dl.bintray.com/openhab/apt-repo2 stable main' | sudo tee /etc/apt/sources.list.d/openhab.list
sudo apt-get update
sudo apt-get install openhab
sudo apt-get install openhab-addons

ir po instaliavimo peleidžiame eilutėmis:

sudo systemctl start openhab.service
sudo systemctl status openhab.service

sudo systemctl daemon-reload
sudo systemctl enable openhab.service

Pagaliau interneto naršyklėje pasileido adresu RPi ip ir 8080 portu (pav. „192.168.1.2:8080“) :).

Open Hubo konfigūravimas keliaus jau į atskirą įrašą :).

 

Docker

O dabar, viskas kas buvo aukščiau, pabandysim perkelti į Dockerius :).

Po eilinio PiHolo atnaujinimo nulūžo „RPi“ veikiančio ant „Ubuntu“ tinklo palaikymas ir vienintelis lengviausias būdas priversti jį dirbti, mano nelabai suprantančio kur ieškoti problemų atveju, būna visos sistemos diegimas iš naujo (kaip vėliau sužinojau, didesnė nulūžimo tikimybė buvo ne pats PiHolas, o tai, kad „RPi“ skirta „Ubuntu“ 64bit serverio versija šiek tiek apkarpyta, joje nėra įdiegtas „Network-manager“, o be jo neina nustatyti statinio IP adreso, na bet kadangi viską instaliuojam iš naujo, kodėl gi nepabandžius ko nors naujo 🙂 ), pagalvojau apie visos sistemos perkėlimą į Dockerius. Dockerio atveju, nulūžus kokiai programai tereikėtų žaisti tik su vienu nulūžusiu Dockeriu. OpenHub`ą jau ankščiau buvau taip paleidęs, bet kiek skaičiau, problematiškesnis PiHolo paleidimas su DHCP serveriu. PiHolas deklaruoja, kad nuo šiol jau palaiko ir dokerius, taigi labai gera dingstis su tuo pasižaisti :).

Jei tik yra galimybė dirbti grafinio interfeiso pagalba, aš jį ir renkuosi, pasižiūrėjęs video, ir pamatęs Portainer grafinį interfeisą darbui su Dokeriais, papildomai nusprendžiau įsidiegti ir Portainerį (beje, šiame video yra alternatyva, kaip galima viską suinstaliuoti paprasčiau, bet ten skirta 32bit „Raspbianui“, tad suabejojau, kad veiks ant 64bit „Ubuntu“). Tolimesnį, savo eksperimentą apie visos sistemos perkėlimą į Dockerius aprašysiu nuosekliai.

Taigi, suinstaliuoju šviežią „RPi“ „Ubuntu“ serverio 64bitų operacinės sistemos versiją. SSH įdiegtas, tad kaip ir turėtų būti galima iškart jungtis nuotoliniu būdu, deja, pirmas prisijungimas turi būti tiesioginis, ir tik kai suvedamas prisijungimo vardas „ubuntu“ ir slaptažodžis „ubuntu“, kurį iškart paprašo pakeisti, tik po slaptažodžio pakeitimo, prie įrenginio leidžiama jungtis ir nuotoliniu būdu.

1. Tada standartinis „sudo apt update“, „sudo apt upgrade -y“, „sudo apt install mc -y“, „apt install network-manager -y“.

2. „/etc/hostname“ faile pakeičiam kompiuterio pavadinimą tinkle.

3. Sukuriam naują vartotoją „sudoadduser <Username>“ ir prijungiam naujai sukurtą vartotoją „SUDO“ grupei „sudo adduser <Username> sudo“.

4. Surinkęs „lsmod“ komandą, tarp išmestų paleistų servisų randu aptarnaujantį WiFi ryšį (brcmfmac), todėl į „/boot/firmware/config.txt“  įrašaudtoverlay=disable-wifi“ eilutę. Perkraunam („reboot“) – Wi-Fi ryšio nėra.

5. Vadovaudamiesi Dockerio instaliavimo ubuntu linukse dokumentacija suinstaliuojam „Dockerį“ (Docker Engine) (dar vienas dokas). Raspbiane instaliacijos vadovas čia.

 

dabar instaliuojam portainer:

Kaip parašyta instrukcijoje, parašau šias komandas:

 docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

naršyklėje surinkus RPi Ip adreasą „192.168.1.2:9000“, pasileido porteinerio prisijungimo langas, kuriame reikėjo įrašyti ir pakartoti ne mažiau 8 simbolių slaptažodį, bei buvo langelis pranešantis apie statistinių duomenų siuntimą, nuo kurio paukštelį aš nuėmiau, paspaudus tolimesnio veiksmo mygtuką teko pasirinkti „Docker lokalioje mašinoje“ ir po sekančio patvirtinimo mygtuko paspaudimo jau atsidūriau portainerio valdymo meniu.

Tenai kairėje pusėje paspaudus „Images“ meniu, Image eilutėje parašiau „pihole/pihole:latest“ ir paspaudžiau žemiau esantį mygtuką „Pull the image“. Taip parsisiunčiamas Pihole imidžas. Gal šiek tiek paprasčiau nei su pačiu dokeriu 🙂 (docker pull pihole/pihole:latest – tas pats dockerio atveju 🙂 ).

dabar instaliuojam PiHole:

Kad PiHolas galėtų normaliai dirbti, reikia sukonfiguruoti portus, kad duomenys vaikščiotų tarp konteinerio ir išorės, tam į Portainerį turėtų būti galima įmesti paruoštą docker-compose.yml failo tekstą, kaip supratau, tam skirtas kairės pusės „stacks“ meniu, bet jis praneša, jog nepalaiko Compose 3 versijos. Galima portų peradresavimą nurodyt su Portaineriu kuriamo konteinerio nustatimyne, bet viską suvedus, bandai paleisti, o tuomet praneša, kad 53 TCP ir UDP portai jau yra naudojami. Tai galima apeiti, porteineryje kuriamo konteinerio meniu pasirinkus „Publish all exposed network ports to random host ports“ punktą, bet tuomet visi portai bus peradresuojami į atsitiktinius portus ir nors PiHolas ir pasileis, kaip jį bus galima priversti normaliai dirbti, neaišku.

Kaip tai tinkamai padaryti radau čia, nors ten pat galima daugiau ir apie patį PiHolą ir apie Dockerį pasiskaityti, pakankamai aiškiai rašo, reiks kada žvilgtelt :). Taigi, pjaunasi 53 portas todėl, kad „Ubuntu“ serveris turi įdiegtą DNS servisą, kuris šį portą ir užėmęs. Tam kad atlaisvinti besipjaunančius portus reikia:

Išjungti ir sustabdyti DNS resolverį (nežinau kaip versti į Lietuvių kalbą):

sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved.service

Toliau į „/etc/NetworkManager/NetworkManager.conf“ failą reikia įrašyti „dns=default“ žemiau „[main]“ punkto. Paredaguotas failo tekstas turi atrodyti maždaug taip:

[main]
plugins=ifupdown,keyfile
dns=default

toliau pervardinam „/etc/resolv.conffailą į pav. „/etc/resolv.conf.bak

ir perkraunam servisą, nors pas mane toks servisas ir nebuvo paleistas :).

sudo service network-manager restart

Viskas, portų konflikto problema išspręsta. Dabar Portainerio kairiojo meniu punkto „Containers“→ „+Add Container“ mygtuko pagalba galima susikurti konteinerį. Na čia jau dariau intuityviai, be kokių dokų skaitymo, tad galiu ir klysti, nors tai padarius, kaip ir viskas pasileido bei stabiliai veikė :). Kokius nustatymus reikia padaryti, vadovavausi pagal „docker-compose.yml“ punktus (yra funkcionalesnis variantas):

„Name“ įrašom dokerio pavadinimą – „PiHole“

„Image“ pradedam rašyti „pi“ ir išmetą parsiūstą Piholo imidžą, kurį ir pasirenkam

toliau portai, pradžiai juos dadėjinėjau spausdamas „+publish a new network port“ mygtuką, kiekvienam portui atskirai ir jei neplanuojate PiHolo naudoti, kaip DHPC serverio, tai kaip ir reikalingas veiksmas, kurį kurdamas pirmus konteinerius aš ir atlikau, bet po „Network-Host“ nustatymo, kas daroma norint ir DHCP serverio, portų peradresavimas netenka prasmės. Taigi, jei nenaudosit DHCP, spaudžiam  „+publish a new network port“ mygtuką ir kuriam portus:

"53:53/tcp"
"53:53/udp"
"67:67/udp"
"80:80/tcp"
"443:443/tcp"

Kairėje pusėje bus portas kuriuo jūs kreipsitės į PiHolą, tad galite pakeisti pagal poreikį, o dešinėje vidiniai dokerio portai, juos tik perrašom.

TZ: 'America/Chicago'
# WEBPASSWORD: 'set a secure password here or it will be random'
# Volumes store your data between container upgrades
volumes:

- './etc-pihole/:/etc/pihole/'

- './etc-dnsmasq.d/:/etc/dnsmasq.d/'

Amerika ir miestas reikalingi nustatyti laiko juostai, bet kur tai įrašoma neradau, nemanau, kad labai aktualu, o vat su „volumes“ tai šiai akimirkai nežinau, bandžiau žaisti, neradau kaip juos įrašyti, bet PiHolas pasileido ir neliečiant šių nustatymų. Jei tai svarbu duomenų tik išsaugojimui, tai man neaktualu, nes padaręs konfiguracijos pakeitimus aš juos eksportuoju „Pi-Hole Settings→ Teleporter→ Backup“ pagalba.

Toliau, kadangi PiHolas pas mane ir DHCP serveris, einam apačion, žemiau „Advanced container settings“, pasirenkam „Capabilities“ ir aktyvuojame „NET_ADMIN“ šliaužeklį. Ir paskutinis veiksmas pagal „docker-compose.yml“ punktus yra tame pačiame apatiniame „Advanced container settings meniu „Restart policy“ aktyvuojam „Unless Stopped“.

Pagal „docker-compose.yml“ konfiguraciją kaip ir viskas. Tą „volumes“ nustatymą įtariu galima sukonfiguruoti tame pačiame „Advanced container settings“ meniu „Volumes“ dalyje, bet apie tai įrašą papildysiu, kai žinosiu tiksliau, o šiai akimirkai, kaip minėjau, PiHolas pas mane veikia ir be „Volumes“ nustatymų.

Jei DHCP serverio nenorime, galima spausti „Deploy the conteiner“ mygtuką, bet jei planuojate pasileisti ir DHCP serverį, reikia dar tame pačiame apatiniame „Advanced container settings meniu, „Network“  skiltyje, eilutėje „NetworkpasirinktiHost“ variantą. Dar galima „Hostname“ eilutėje įrašyti „pi.hole“. Viskas net jei norite ir DHCP, dabar jau galima spausti „Deploy the conteiner“ mygtuką :).

Kadangi Pi-Holo slaptažodžio nežinom, jį panaikinti ar uždėti naują galėsime paspaudę Portainerio kairės pusės meniu „Containers“ punktą, tada tarp konteinerių susiradę PiHolo konteinerį, ir ties „Quick actions“ stulpeliu paspaudžiam „>_“ ikonėlę, ant kurios užvedus pelytę iškyla „Exec console“ užrašas ir atsidariusiame terminale įrašę „pihole -a -p“ komandą.

Čia dar vienas dokerinio Pi-Holo instaliavimo variantas, tik čia ne su Portraineriu, bet su Docker Compose.

Vėliau pabandžiau įdiegti VPN. Pi-VPN conteinerio tinkančio arm64 neradau, suinstaliavau Wireguard konteinerį. Labai patiko, kad Compose failo versija buvo 2, palaikoma Portainerio, tad instaliacija iš vis paprasčių paprasčiausia, vis tik, suinstaliavus, paaiškėjo, kad PiVPN, Wireguard komandos skiriasi nuo konkrečiai Wireguard, tad patingėjau vėl gaišti laiką ieškant paprasčiausių komandų, kaip susikurti paprasčiausią vartotoją, išjungiau konteinerį, ir pabandžiau PiVPN į sistemą suinstaliuoti tiesiogiai, be konteinerių. Buvo išmestas pranešimas, kad mano sistema oficialiai nepalaikoma, palaikomos tik …, Ubuntu, …, versijos. Įtariu, šio pranešimo išmetimas įtakotas mano bandymais instaliuoti tinklo valdiklį (network-manager). Susiinstaliavo su klaidom, tai šiam kartui nusprendžiau mesti eksperimentus su Dockeriais ir gryžti prie seno paprasto varianto be dockerių. Su Dockeriais pasižaisiu kada nors kitą kart.

Ir išvis, ubuntu „RPi“ sistemos laidinio tinklo palaikymas yra ir apkarpytas ir labai neaiškiai veikiantis. Susidūriau dar su vienu artefaktu. Naudojausi vienu metu dviem išėjimais į internetą. Pagrindinį atjungiau, sukonfiguravau PiHole DHCP serverį, kad visus duomenis siūstų per antrąjį roterį, bet akivaizdu, jog dalis srauto vis tiek bando eiti per pirmąjį, atjungtąjį. Ir įdomiausia, kad ne visas srautas, bet dalis. Nuėjau į Netplan, ir ten buvusioje konfiguracijoje gatawey pakeičiau ir vis tiek nieko. Dalis DNS užklausų vis tiek siunčiama senuoju IP adresu. Ne nu akivaizdu, kad Ubuntu laidinis tinklas palaikomas chrenovai. Gal laikas baigti eksperimentus ne su Dockeriais, bet su Ubuntu?

Būčiau dėkingas, jei sulaukčiau šią sritį išmanančių pastabų ar patarimų :).

 

Nustatom statinį IP adresą Raspberiui skirtame Ubuntu 20.10 severyje:

Prie to pačio dar pabandžiau pasižiūrėti, kodėl man nepavyksta nustatyti stacionaraus IP adreso. „Rasbiane“ stacionarus IP nusistato labai paprastai, ten tereikia paredaguoti „/etc/dhcpcd.conf“ failą nuimant „#“ ženkliuką nuo tame faile jau esančių, tik užkomentuotų eilučių esančių žemiau po „# Example static IP configuration:“, bei reikšmes pakeisti į jums reikalingas:

#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

„Ubuntu“ distribucijoje tai atliekama šiek tiek kitaip, tad čia jau reikėtų vadovautis „Ubuntu“ instrukcijomis. Pasirodo pirmiausiai reikia suinstaliuoti „apt install network-manager“ ir tik po to vadovaujantis „Ubuntu 20.10“ instrukcijomis reikia /etc/netplan direktorijoje pakeisti ten esančio (pas mane buvo „50-cloud-init.yaml“, bet gali būt ir kitoks pavadinimas (beje buvau šalimais išsisaugojęs failą kitu pavadinimu, tai paleidus „sudo netplan apply“ komandą, man nustatymus krovė jau iš kito pavadinimo failiuko, atkreipkit į tai dėmesį) *.yaml failo turinį. N kartų bandžiau koreguti ten esančio failo nustatymus pagal internete pateiktas instrukcijas, vis nesėkmingai. Parašius komandą „ip adress show“ ar trumpiau „ip a“ buvo išmetami tinklo įrangos pavadinimai, kurie turi atsispindėti *.yaml failo turinyje, kurie vienu metu buvo „eth0“, o kitu – „enxb827eb044097“. Taip nutikdavo tuomet, kai rašydamas pagal pavyzdžius ištrindavau „set-name: eth0“ eilutę, tad  siūlau jos neliesti. Pakoreguotas ir veikiantis failo turinys turi atrodyti maždaug taip:

network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: false
match:
driver: bcmgenet smsc95xx lan78xx
optional: true
set-name: eth0
addresses:
- 192.168.1.2/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1

Teisingai surašius failo turinį, paleidus komandą „sudo netplan apply“ turi užsikrauti nauji statinio IP adreso duomenys. Užkliuvo tai, kad po statinio adreso suteikimo, tuo pačiu metu veikė ir DHCP serverio jau ankščiau suteiktas IP adresas ir naujas stacionariai nustatytas. Su statinio adreso nustatymu pravargau dvi – tris dienas  ir pavyko tik su išmanančio šią sritį draugo pagalba, kuris pasakė, kad drauguži, čia gi Network Manager`io nėra. Taip kad neapsigaukit, jį reikia suinstaliuoti pirmiausiai, kad likus visai be tinklo žaidimas neprasidėtų iš naujo ;).  Be „optional: true“ parametro kompiuterio boot užsikrovimo laikas gali prailgti iki 2 min, nes būtų laukiama, kol tinklas būtų pilnai paruoštas darbui ir tik tuomet pratęsiamas kompiuterio krovimas. Su šiuo parametru „RPi“ užsikrovimas neužlaikomas ties tinklu, o tinklas pilnai paruošiamas darbui, jau kompiuteriukui veikiant.

Tik po šio vargo su IP adresu sužinojau nelabai malonų faktą. Anksčiau, kai į savo „RPi“ buvau suinstaliavęs „ubuntu“ ir „PiHolą“, paleidimo metu jis buvo su tuo pačiu IP adresu, kokį jam buvau nustatęs per anksčiau veikusį DHCP serverį, ir koks liko po DHCP serverio paleidimo pačiame „PiHole“. Maniau kad „PiHolas“ instaliuodamas priskiria stacionarų IP adresą pats. Gal tai ir tiesa, kai kalbama apie „raspbianą“, bet kai užsiknisęs su bandymais nustatyti stacionarų IP adresą, prieš Dockerio suinstaliavimą, pabandžiau suinstaliuoti „PiHolą“ ir juo pakeisti prieš tai DHCP serverio suteiktą IP adresą, į naują stacionarų IP adresą, adresas nebuvo pakeistas. Taip gaunasi, kad kurį laiką pas mane sukosi visą vidinį tinklą valdžiusi DHCP ir DNS sistema, serveryje, be stacionaraus IP adreso. Nepasakyčiau, kad šis atradimas mane nudžiugino. Gerai, kad per tą laiką nieko nenutiko :). Nors iš kitos pusės, minėjau, kad kai tik pabandydavau ką pakoreguoti, turėjau problemų su tinklo nestabilumu ir dėl to, gana dažnu sistemos perinstaliavimu, ar tik nebus dėl viso to kaltas ne PiHolas (kartą po „PiHolo“ atnaujinimo „RPi“ dingo tinklo palaikymas), o būtent aptariama statinio IP adreso problema „Ubuntu 20.10“ sistemoje.

Dabar drąsiai galiu pasakyti, jog „Ubuntu“ 64 bit 20.10 serveris neišbaigtas, tad netinkamas  „RPi“ sistemai stabiliam darbui. Pasižaisti su juo galima, bet tik ne paleidinėkit serverio turinčio dirbti be priekaištų 24/7.

 

Literatūra pasiskaitymui:

Įrašo “Raspberry Pi” komentarai: 8

  1. Ne ant RPI kūriau SMPT, bet nvm 🙂 Pasidariau pilnai kamerų rašymą į NAS per NFS, ne tik judesiui, bet ir nuolatiniam įrašinėjimui. NAS smegenys dabar minimaliai apkrautos. Dar prisirašiau krūvas shell scriptų, kad „judesyną“ skirstytų į katalogus pagal datas ir panašiai. Yra mintis pasikurti ir skriptuką Home Assistant, kad judesyno kataloge atsiradus naujoms nuotraukėlėms anas kokią žinelę išsiųstų.

    • Sorį, suklydau :).

      Vis tik man užkliuvo, kad kai kamerą apkrauni rašymu, ji kažkaip būna pakimba. Jau du kartus buvo pakibus, ko ankščiau nebūdavo. Automatinį persikroviką kas dieną esu nustatęs.

      • Įdomiai, maniškės visos stabilios. Gal kartais RPi per lėtas tam reikalui tuomet, didelis iowait gali kameroms nepatikti.

  2. As jau persimigravau ant rpi4 viska, belieka boot from ssd perisdaryti kadangi jau kaip ir yra normalus firmwaras. Kas liecia Openhab, siulyciau 3 versijos palaukti kuri turetu atsirasti si menesi jeigu viska spes sutvarkyti 🙂
    Dar viena rpi4 nupirkau kaip senu zaidimu konsole, retropie sukasi ir vaikai laimingi 🙂

    • Vienareikšmiškai, daiktas geras ir vertas savo pinigų, ir 4 versija be kalbų visais atžvilgiais geresnė, bet oficialiai teigiama, kad 2Gb RAM versija galima nusipirkti už 35€, aš kiek žiūriu, visur randu už ~45€. Tai pirmas demotyvuojantis faktorius, antras dalykas, viskas ką pakolkas laikau pakurtą, mano RPi resursų beveik neišnaudoja, RAM panaudojimas ~30%-40%, CPU iš vis kapeikos. Na Sambai Gb`itinis tinklas aišku būtų į naudą, gali būti, kad ir mano vaizdo kamera būtent dėl to, karts nuo karto stringa, kaip kad minėjo „Darau Blė“, bet iš kitos pusės, kai ta samba pas mane pakolkas tik kokio dokumento perkėlimui iš vieno kompo į kitą, kai tas net neįjungtas, tai pakolkas tenkina. Pajungus didesnį HDD ir pakūrus duomenų sinchronizaciją, įtariu niekur nedingsiu, migruosiu ant naujesnio raspberio ir aš, tik gal jau ne 4, o 5 :).

      Bet šiaip tai afigenas kompiuteriukas, net kaip ir už 45€ :).

  3. Dekui uz Pi-hole linka, pasileidau – superinis dalykas. Resursu nereikalauja ir puikiai visas trolines reklamas panaikina

    • Visų nepanaikina, bet papildo adblokerį ir tandeme iš vis ramu nuo bet kokių reklamų, beje, Pi-Holas leidžia ir trakingo bei telemetrinių dns užklausų nepraleisti (https://firebog.net/ – kelios bibliotekos), kas irgi į naudą, po to su jo pagalba ištyrinėjau visą savo namuose veikiančią įrangą, tai užkliuvo Xiaomi rauteriukas, dahua kamera, LG televizorius, kurių tūkstančius per dieną DNS užklausų užblokavus prietaisai ir toliau veikia tarsi niekur nieko.

      Dar geras dalykas DHCP serveris, nors ir neišskirčiau aš jo, kaip patogesnio, lyginant su maršrutizatoriuose pakurtais, bet kai viskas vienoe krūvoje, tai kaip ir visai kitas kontrolės levelis, o ir šeip patogu stebėti visos namų įrangos aktyvumą.

Parašykite komentarą