Sign in to follow this  
Cornel Iulian

FreeBSD UNIX pe Raspberry Pi 3

1 post in this topic

Te-ai saturat sa-ti spargi capul cu Linux editand fisiere de configurare si parcurgand paginile de manual ca nebunu?

Te-ai saturat sa reinstalezi cand dupa zile intregi de urmat manualele tot te dai cu capu de pereti?

Te-ai saturat sa modifici prin configuratii pana te pierzi in loc sa-i zici clar ce are de facut?

 

L-am scris pe github la adresa asta:

https://github.com/freebsd/crochet/issues/229

 

In momentul de fata singurul din familia BSD care suporta (cat de cat) Raspberry Pi 3 este FreeBSD 12.0-CURRENT.

OpenBSD cere adaptor usb-serial-ftdi de care n-am la indemana iar prin ograda pe la NetBSD cica ploua si mai era ceva ca curca-n lemne.

 

Avand termenul estimat de finalizare pe la sfarsitul lunii ianuarie 2019.... e clar ca momentan FreeBSD 12.0 cam da chix pe ici pe colo. Iar cel mai nasol este ca iti corupe hardul.

 

Baietii cei vechi din comunitatea elforum stiu de mult timp ca nu dau drumu la tutoriale decat dupa ce mi-am spart capul saptamani intregi, asa ca pe cei mai noi ii rog frumos sa nu intrebe <<de ce>> am urmat acesti pasi. Cine doreste sa afle mai multe - ii rog frumos sa-si suflece manecile si sa se puna la treaba ca sa poata oferi explicatiile.

In linkul de mai sus sunt prezentate problemele cu care m-am intalnit. Aici va ofer direct rezolvarea.

 

Nu te obosi sa butezi freeBSD-11-aarch64 de pe microSD, pierzi GB de pomana din abonament, RPI se uita in gol lobotomizat ca nu-ti pleaca nici cu slujba.

FreeBSD12 corupe cartela microSD, corupe hardul chiar daca-i ssd chiar daca-i clasic, corupe sticul, hai sa intram cu DNA-ul in el.

 

FreeBSD12-Current-RPI3 se misca rapid dar "sufera" de amnezie - nu are prea multe pachete pre-compilate cum ar fi firefox, chrome sau openoffice. Asa ca m-am apucat sa le compilez si m-am pomenit ca dupa depasirea unui anume numar de fisiere existente, partitiile se corup si sistemul se pune frumos pe butuci stramband din bot ca o domnisoara nemultumita.

 

_______________________

Iete cum rezolvi problema:

_______________________

 

Ingrediente:

  • Un calculator functional cu procesor pe 64 de biti ce ruleaza FreeBSD versiunea 11.0 sau 11.1. Daca are Linux va uitati pe paginile de manual cum faceti mai tarziu cu montarea de discuri virtuale;
  • Un alt calculator cu un Microshit Windows si win32 disk imager;
  • Virtual Box pe calculatorul ala cu FreeBSD;
  • una bucata imagine ISO - FreeBSD-11.1-stable; (ftp.freebsd.org/pub/FreeBSD/snapshots/iso-images pt amd64)
  • una bucata imagine ISO - FreeBSD 12.0-CURRENT;
  • Doua masini virtuale, una pt bsd11, una pt bsd12; 2 GB RAM pt fiecare, 32 GB imagine disc virtual pentru fiecare;
  • Pe una pui cdrom virtual freebsd11-stable.iso, pe aialalta freebsd12-current.iso, dai drumu la instalare pe amandoua;
  • La instalare specifici sa-ti puna si sursele dar scoate colectia de porturi ca n-ai nevoie de ea;
  • cand termina toate, restart, imediat shutdown inainte sa apuce sa iti incarce kernelurile, din configuratii scoti imaginile ISO;
  • VM cu FreeBSD 12.0-CURRENT - cd /usr/src && make buildkernel KERNCONF=GENERIC-NODEBUG && make installkernel KERNCONF=GENERIC-NODEBUG - recompilezi kernelu cu toate optiunile de depanare scoase pt ca iti incetineste sistemul de te rogi de el;
  • github -> crochet instalat pe ambele VM; Citeste instructiunile de acolo pt ca e super usor de inteles;
  • modifica fisierele de configurare din crochet/boards/RaspberryPi3/ pe ambele masini virtuale ca sa iti genereze automat in config.txt parametrii pentru monitorul cuplat la RPI3, ca sa nu modifici de fiecare data cand vrei sa te joci cu o noua imagine;
  • modifica crochet/config.sh pe ambele masini virtuale sa specifici board = RaspberryPi3.
  • modifica crochet/config.sh pe ambele VM sa specifici ca imaginea ti-o face pt SDCARD de 4 GB;
  • La un moment dat in timpul compilarii o sa iti miorlaie ceva de erori de certificat (se cupleaza la github sa traga nus'ce fisiere pt partitia de butare) deci prin crochet.sh SSL_NO_VERIFY_PEER=1;
  • In ambele crochet/config.sh nu specifici nimic legat de partitii sau fisiere de swap, o sa-ti umple imaginile de pomana;
  • pe VM cu BSD12 specifici in crochet/config.sh ca imaginea kernelului este GENERIC-NODEBUG;
  • pe ambele masini virtuale instalezi urmatoarele: pkg install nano u-boot-rpi3;
  • lanseaza sh crochet.sh -c config.sh (in VM cu BSD11) ca sa-ti genereze FreeBSD-11.1-stable-rpi3-GENERIC.img;
  • lanseaza sh crochet.sh -c config.sh (in VM cu BSD12) ca sa iti genereze FreeBSD 12.0-CURRENT-rpi3-GENERIC-NODEBUG.img (atentie in config.sh specifici la configuratia kernelului sa ti-o ia pe GENERIC-NODEBUG ca e important, GENERIC simplu iti incetineste RPI ca pe o caruta de trage la deal pe toti magarii din guvern);
  • ftp -> transferi imaginile din crochet/work din ambele VM pe sistemul de operare gazda (vezi sa ai pe undeva un server de ftp instalat);
  • shutdown -p now in ambele VM pt ca nu mai ai nevoie de ele;
  • monteaza imaginea ${11.1-STABLE-RPI3} in ${mnt_dir_bsd11}; redenumeste ${mnt_dir_bsd11}/boot/kernel sa se cheme ${mnt_dir_bsd11}/boot/kernel.bsd11; (daca faci asta cu FreeBSD, man mdconfig pt clarificari. Pt altele habar n-am);
  • monteaza ${12.0-CURRENT-RPI3} in ${mnt_dir_bsd12};
  • copiaza ${mnt_dir_bsd12}/boot/kernel in ${mnt_dir_bsd11}/boot/kernel;
  • modifica prin ${mnt_dir_bsd11}/etc ca sa activezi variabila globala UNAME_r = 11.1-stable. Daca nu te descurci, modifica ${mnt_dir_bsd11}/root/.cshrc si pune SETENV UNAME_r 11.1
  • demonteaza ambele imagini, daca esti in freeBSD - cu mdconfig detasezi ambele unitati md corespunzatoare celor doua imagini de RPI;
  • dd if=FreeBSD-11.1-stable-rpi3-GENERIC.img of=${cartela_ta_microSD} bs=1m; (win32diskimager merge de rupe pamantu, pe freeBSD te apuca weekendul urmator);
  • baga cartela in RPI3, baga-l in priza, scuipa sa fuga ghinionul.

Ca rezultat avem o cartela SD ce contine toate fisierele de sistem BSD11.1-stable si nucleul BSD12.0-CURRENT, cu ceva mici bazdaganii sa-l fortam sa lucreze in mod de compatibilitate cu BSD11.

RasPi 3 iti citeste cartela SD, incarca fisierele necesare de pe partitia de MsDos pt butare, apoi iti citeste partitia BSD:/boot/loader.conf, iti incarca kernelul de l-ai bagat cu manuta.

 

  • RPI3 e pornit si te-ai logat cu rut. Daca cumva nu a fugit ghinionu inseamna ca ai dat chix pe undeva pe mai sus.
  • instaleaza urmatoarele pachete: (pkg install) nano wget findutils xorg-server xorg-fonts xorg-apps xorg-drivers xf86-video-scfb windowmaker si ce alte aplicatii iti mai tuna prin cap (si daca exista pre-compilate). Windowmaker merge. Daca vrei altfel de desktop o faci pe riscul tau. Intre timp ai pauza vreo ora de scarmanat veverita, bagat vreo bere, executat program de somn sub patura;
  • mv /etc/rc.conf /etc/rc.conf.rpi3
  • cp /usr/share/examples/etc/defaults/rc.conf /etc/rc.conf;
  • cat /etc/rc.conf.rpi3 >> /etc/rc.conf;
  • ln -s /usr/local/bin/nano /usr/local/bin/pico
  • pico /etc/rc.conf modifica dupa cum iti pofteste inima (vezi partea rc.conf de la topicul compiz fusion);
  • la sfarsitul lui rc.conf regasesti setarile minimale cu care a pornit bsd pe raspi-3. scoate "growfs", restul le muti in sectiunile corespunzatoare. Activeaza ftpd, activeaza sshd.
  • pico /root/.xinitrc, ii spui sa ruleze windowmaker: exec wmaker <ctrl+X, Y, ENTER>
  • startx - pornesti windowsul (daca ai xf86-video-scfb instalat atunci o sa plece automat fara sa-l pui sa-ti genereze xorg.conf pe care oricum n-o sa vrea sa ti-l genereze X -configure nici cu slujba);
  • Modifica-ti setarile din windowmaker - cate desktopuri ai, cate terminale vrei sa ai pornite, salvezi, iesi inapoi in mod text;
  • cd /usr && portsnap fetch extract (ai inca vreo ora pauza de veverita / bere);
  • cd /usr/ports/misc/mc && make config -> zi-i sa-ti foloseasca lib-ncurses si NU slang (o sa strambe din bot); make install clean;
  • pregateste un HDD extern (usb) cu bsdinstall partedit. Tipul de HDD il faci MBR si nu altfel, chiar daca urla ca nu e butabil pe arhitectura aia. Uita-te atent la ce instructiuni primesti. Te duci pe /dev/da0 si acolo creezi 100MB partitie de but, tip filesystem scrii !12. O sa iti apara "/dev/da0s1". Tot pe /dev/da0 creezi partitia de freebsd (/dev/da0s2). Te duci apoi pe /dev/da0s2 si creezi partitia de rut - /dev/da0s2a, tip freebsd-ufs (zici ca mount point e in /mnt). Tot pe /dev/da0s2 creezi swampu (tip partitie freebsd-swap), il faci dublu la ram.
  • In final te duci frumos pe /dev/mmc0s2a si-i spui (modify) ca asta este partitia " / " ca altfel n-o sa vrea sa aplice setarile noi nici sa-l tai. Commit settings, o sa iti iasa inapoi in linia de comanda;
  • newfs -t -O2 -U -j -f 512 -b 4096 ${external_hdd_root_partition - probabil /dev/da0s2a}; # MATRIX!!!!! man newfs daca vrei sa vezi ce inseamna astea;
  • newfs_msdos ${external_hdd_boot_partition - probabil /dev/da0s1};
  • mount ${external_hdd_boot_partition - /dev/da0s1} /mnt; cp -Rv /boot/efi /mnt; umount /mnt;
  • mount ${external_hdd_root_partition - /dev/da0s2a?} /mnt; cd /mnt;
  • dump -0f - / |restore -rf - (clonezi sdcardul pe hardul extern - ai pauza vreo ora de veverita/bere);
  • modifici /etc/fstab, pui ca /dev/da0s2a e partitia radacina si /dev/da0s1 vine montata in /boot/efi. Pastrezi liniile originale (comentezi ce e cu /dev/mmcsd......) ca s-ar putea sa ai nevoie de ele daca vrei vreodata sa pornesti sistemul de pe sdcard fara hard extern;
  • modifica /etc/fstab sa activezi si partitia de swamp;
  • cp /etc/fstab /mnt/etc/fstab;
  • umount /mnt;
  • shutdown -r now

La momentul de fata RPI3 iti citeste microsd, incarca ce are de incarcat de pe partitia de ms-dos (fat12), citeste /boot/loader.conf iar de acolo iti incarca kernelul ala de l-ai bagat mai devreme cu manuta ta apoi il executa.

Mai incolo dupa ce isi afiseaza toate balivernele (sa tii ochii beliti in caz ca miorlaie de vreo eroare), se uita in /etc/fstab si vede ca tre' sa foloseasca partitiile de pe hardul extern - una-i rut, alta-i swamp si mai ai ceva prin /tmp si prin /var/tmp.

 

Nu te ingrijora daca la inceput cand pui RPI in priza, u-boot zice ca nu ti-a detectat nici un hdd in usb. Se ocupa BSD de manevra asta.

 

  • ignora mesajul in care stramba din nas ca swampu e prea mare.

In momentul de fata RPI3 al meu a pornit sistemul hibrid cu executabilele BSD11.1-stable si kernelul BSD12-CURRENT fara sa mai strambe din bot cu erori de genul "cg->checksum_failure" si inghetarea completa.

in momentul de fata sunt in /usr/ports/www/firefox si stau de vreo 24 de ore (n-am la indemana nici veverita nici bere....) sa astept comanda "make install clean" sa-l supun la perversiuni - sa vad daca mai corupe hardul dupa ce-l umple ochi cu fisiere mici mici mici si micute.

firefox nu exista ca pachet precompilat si cam asta-i singuru neajuns pt mine - n-am un browser serios.

 

cd /usr/ports/www/firefox && make config - am deselectat tot afara de BUNDLED_CAIRO si de SNDIO. Fara suport video ca nu-mi trebuie deocamdata.

Am oprit cu ctrl+C cand mi-a cerut sa configurez dependinte in vederea compilarii, si le-am instalat cu "pkg install".

 

Atentie, una din dependinte este "/usr/ports/lang/rust". Asta nu vine ca pachet precompilat. Opreste procesul de compilare imediat ce si-a generat fisierele de configurare. ruleaza "mc" (merge, ca nu foloseste libslang). du-te in /usr/ports/lang/rust/work. Cu alt-F7 cauta toate fisierele care contin "-march=native". In toate fisierele gasite - inlocuieste textul ala cu un simplu spatiu. Compilatorul nu suporta asa ceva pe arhitectura arm64.

 

In momentul de fata n-a terminat de compilat nici Mucizilla Firefloci nici rust. Ruleaza de aproape 24 de ore si nici o problema legata de cg->checksum_failure().

 

Planuri de viitor:

veverita;

bsdinstall partedit pt modificat cartela microsd;

bere;

sters /dev/mmcsd0s2a

creat /dev/mmcsd0s2a mai mic cu vreo 2 giga;

creat /dev/mmcsd0s2b (swampu) de vreo 2 gigei;

/dev/da0s2a e clar root partition

commit, exit.

newfs -t -O2 -U -j -f 512 -b 4096 /dev/mmcsd0s2a (te bucuri de un mic peisaj tip MATRIX sau vezi man newfs daca vrei sa-ti prinzi urechile)

mount /dev/mmcsd0s2a /mnt; cd /mnt; dump -0f - / |restore -rf -; umount /mnt (pauza de veverita + bere)

 

backup la microsdcard cu win32diskimager ca merge repede, si tin aia ca rezerva.

Modificat in prealabil pe sdcard /etc/fstab sa poata sa porneasca fara a folosi hardul extern - daca vrei o copie sa-ti plece direct de pe sdcard.

 

Dublat stresul cu compilarea firefloci cu suport multimedia complet (video, audio, yutub, jmecherii);

Stresat RasPi si hardul extern cu compilarea de chestii grele care tin vreo 2...3 zile (chrome) sau vreo saptamana jumate (Open Office);

__________________________________________

 

In concluzie am rezolvat RPI3 cu FreeBSD cat de rapid am putut fin'ca tre sa-l bag de urgenta la treaba.

Ce avem aici este o metoda rapida de a il pune in functiune si cu ALTCEVA in afara de linux (raspbian minimal habarn-am) - care apropou, mi-a mancat o saptamana peri albi incercand sa configurez wordpress cu ultimele versiuni de php si mysql - singurele disponibile - pana aproape am ajuns sa prind fluturasi cu damingeana.

(Autor: skaarj) (Sursa: elforum.info)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this