Icefact pentru BSD Unix

Started by sepromsrl, Sep 22, 2023, 10:31 AM

Previous topic - Next topic

sepromsrl

Buna ziua,

In firma folosim Unix OpenBSD si FreeBSD de prin 1993, serverul nostru fiind un dinozaur mare cat vreo 3 sifoniere de-ale bunicilor: un sistem PDP11/44 mai precis cel fabricat la Bucuresti denumit Coral 4030.
Dihania cu pricina ruleaza strict Unix BSD din simplul motiv ca de aproape 30 de ani nu avem absolut nici o treaba cu nici un fel de factor perturbator informatic: "dulapu" habar n-are cum sa raspunda la solicitarile de atac/penetrare.
Terminalele de lucru pot fi orice sistem de tip desktop, in general Sun Sparc64 (imun la toate nebuniile), Raspberry Pi (imun + foarte economic) si sisteme pentru oameni normali la cap precum Intel/AMD dar dupa verificarea amanuntita a UEFI si cu aceeasi restrictie: BSD.

Majoritatea programelor Linux functioneaza pe *BSD fara probleme intrucat partea de emulatie lucreaza mai bine decat sistemul linux nativ. Exemplu: Stim cu totii ca fratii Larry si Andy Wachowski (acuma le zice altfel) au creat filmele din seria Matrix. Dar efortul din spate a fost imens:  randarea tuturor scenelor grafice a fost facuta cu programul specializat Pixar Renderman - varianta Linux - pe un sistem de calcul distribuit format din vreo 30 de calculatoare "Intel Pentium 2" ruland Unix FreeBSD, toate avand activat emulatorul de Linux. Toata activitatea a durat vreo 2 saptamani si le-a iesit din prima.
Cu functionarea "normala" pe Linux au avut probleme mari si din cand in cand pe la 60%...70% din activitate programul raporta frumos de tot "segmentation fault". Concluzia lor dupa vreo 2 luni de dat cu capul de pereti si scos peri albi: in anumite conditii speciale, restranse, neobisnuite pentru utilizatorul de rand, Linuxul emulat de FreeBSD functioneaza si corect si mai bine decat.... Linuxul propriu-zis.

Revenind la zilele noastre, de cand au implementat suportul pentru nuclee multiple (multi-core), emulatorul de Linux a ramas un pic in urma in sensul ca programului rulat i se poate aloca strict un singur nucleu si functioneaza mai... incet.

Cu scuzele de rigoare, cu iertare pentru fragmentul de istorie + vesnica pomenire a dinozaurilor si cu argument clar ca in firma nu-l bag nici pe Linux si nici pe opera de arta a lui Billy cel Rau, as dori sa va intreb: 

Programul Icefact poate fi compilat pentru Unix FreeBSD 13?   
Bineinteles cu plata licentei si a efortului.

Pentru arhitectura x64. Fara "ARM", "Sun Sparc64" sau "PDP Alpha". Avem construite cateva placi de extensie Qbus (un fel de PCI-express de acum 50 de ani) care suporta arhitecturile "x86" + "x64". Asadar "sifonierul" e in stare sa ruleze orice program linux care nu impune capabilitati grafice importante: libreoffice, opera, xcalc si asa mai departe.

Detalii despre dinozauru de la noi din firma precum si ceva poze gasiti cautand pe google dupa numele de utilizator, se acceseaza saitul firmei si sectiunea "servicii speciale electronica/IT".

Cu respect, va multumesc pentru amabilitate.

Serghei

Buna ziua,

Interesanta poveste, nu mi-ar fi trecut prin cap ca mai exista vreun PDP in productie :)

In principiu, da, si IceFact Server si clientul IceFact poate fi compilat pentru orice *nix care are suport pentru X11.

Ce nu mi-e clar este ce anume doriti sa fie portat, partea de server sau partea de client? Cum rulati clientul, aveti statii de lucru cu freebsd? Sau il rulati remote prin X11?

sepromsrl

#2
Functionarea la nivel software este in felul urmator: X11 este distribuit. Coralul ("sifonierele PDP") stie doar mod text, asadar ruleaza partea de x11-server. Sistemul este OpenBSD versiunea 4.8, una din ultimele variante care il mai suporta. Asta administreaza tot. Buteaza de pe unitate de banda magnetica cu 9 piste.

Statiile de lucru sunt in numar de 4 (patru) si buteaza ori FreeBSD, ori OpenBSD prin retea, puse la dispozitie de Coral pe protocolul BOOTP/DHCP de pe cate o alta unitate de banda magnetica separata (alte doua sifoniere). Ele ruleaza clientul de X11, comunica cu serverul x11 din "sifonier" pe porturile 6000 - 6010 si deseneaza pe ecran ce hotaraste "Maria Sa".

   Fiecare statie are sesiunea ei individuala de desktop grafic. Ca 'window manager' merg toate cu Windowmaker - e foarte prietenos cu memoria RAM a Coralului. In schimb tot ce inseamna decoratii si efecte speciale se intampla la nivel local.
Detalii mai multe precum restrictii de memorie, containere (*BSD le numeste 'puscarii' / 'jail'), de ce arata ca un sac de box virtual si ce nebunii "a la Tom&Jerry" il mai apuca, va pot povesti doar face-2-face.

Ar fi frumos daca pentru inceput si clientul si serverul ar putea fi compilate pentru FreeBSD/amd64.

Later edit
La nivel hardware el mai are doua placi periferice "qbus / intel pentium 4": una e alocata pentru birou si cealalta pentru controlul productiei. Tot ce au in comun este ca buteaza ce le este pus la dispozitie pe banda din "magnetofon" - adica la fel ca statiile de lucru.

Intre timp am descarcat 'icefact' si pentru Ubuntu si pentru Fedora. FreeBSD/x64 (de pe una din placile de extensie) spune ca nu poate rula pe nici unul pentru ca nu are disponibile aceleasi versiuni de librarii. Daca le inlocuiesc cu cele specifice versiunii de Linux pe care a fost compilat icefact, am probleme cu productia.  Intre timp o sa instalez pe undeva intr-un virtualbox de curiozitate sa vad cum functioneaza sistemul creat de dvs.


skaarj@service:~ % uname -a
FreeBSD service.seprom.ro 13.2-RELEASE FreeBSD 13.2-RELEASE releng/13.2 GENERIC amd64
skaarj@service:~ % ./icefact
./icefact: /lib64/libz.so.1: version `ZLIB_1.2.9' not found (required by ./icefact)
./icefact: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by ./icefact)
./icefact: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./icefact)
./icefact: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ./icefact)
./icefact: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./icefact)
./icefact: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./icefact)
./icefact: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./icefact)
./icefact: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by ./icefact)
./icefact: /lib64/libc.so.6: version `GLIBC_2.26' not found (required by ./icefact)
./icefact: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./icefact)
skaarj@service:~ %

Serghei

Ok, am înțeles ideea. În principiu s-ar putea realiza o portare pe FreeBSD 13.2, dar procesul este destul de laborios si consumator de timp, deci și costurile asociate vor fi corespunzătoare. Probabil nu scăpați fără 1000 ~ 2000 RON + TVA (în funcție de eventualele probleme care ar putea apărea la compilarea dependențelor / aplicației în sine).

sepromsrl

E normal, munca trebuie platita.

Acum vine intrebarea de 1000 de puncte:  pentru urcarea facturilor XML pe platforma ANAF, cumva programul se autentifica la ANAF/SPV pe baza de cheie tip dongle USB?
N-am reusit sa conving pe nici un BSD ca sa lucreze cu cheia dongle. De pe Linux ei nu garanteaza ca ar merge si nici n-am incercat. Doar de pe Windows functioneaza. Este emisa de certsign.ro.



Serghei

Programul nu foloseste în mod direct dongle-ul pentru a trimite facturile, ci un cod de autorizare care se obtine de la ANAF cu ajutorul dongle-ului. Codul de autorizare se poate obtine independent, pe alta masina, si copiat in baza de date a programului de facturare (sau facut un script care de pe masinia Linux sau Windows care sa faca submit la acel cod de autorizare catre baza de date). Codul de autorizare este valabil 90 de zile, deci trebuie repetata re-autorizarea IceFact-ului la fiecare 90 de zile.

Eu folosesc SafeNet eToken 5110, merge rezonabil de bine pe Linux.

sepromsrl

Cu asta m-am linistit. Tot Safenet eToken dar nu momentan nu dau de el sa vad exact si varianta.

Pun in discutie la sefi si testam varianta free de win+lin. Undeva pe la inceputul lui noiembrie revin cu cererea de oferta.

sepromsrl

#7
Bine v-am regasit.

L-am testat in Virtualbox in varianta Ubuntu. Se misca foarte foarte rapid, tine minte si clientii, si produsele, stie sa puna si emblema firmei, este lucrat profesional. Avand in vedere ca m-am descurcat de minune cu el in timp ce sunau nonstop telefoanele - deci n-am reusit deloc sa ma uit prin documentatie - programul e minunat. Imi place foarte mult.

Va rog frumos, putem demara procedura?
Momentan pentru FreeBSD/amd64.  Dupa ce ne familiarizam cu el, o sa va solicit si pentru OpenBSD dar asta e poveste pentru la anul.

In principiu nu imi trebuie iconita pe desktop ca sa dau clic cu mausul pe ea. Nici sa apara prin vreo lista de aplicatii gestionata de "consumatorii de RAM" gnome/kde. Doar linie de comanda:  deschid terminalul, scriu "icefact" si lanseaza programul, iar "icefactd" il pun eu sa fie lansat automat la pornirea sistemului.
Ce intra in mod normal (linux) in /usr/...., in free/openBSD trebuie sa intre in /usr/local/....
Exemplu: Icefact trebuie sa stea in /usr/local/bin,  icefactd sta in /usr/local/libexec.  Librariile se duc in /usr/local/lib.
Ce intra in mod normal sub linux in /usr/share/applications, in freebsd+openbsd se duc in /usr/local/share/applications - asta in cazul in care cumva in viitor va apare prin cine stie ce minune vreun gnome/KDE.
/usr/local intra in backup periodic pentru ca acolo se duce tot ce e instalat in plus peste instalarea "curata".
Systemd nu exista. Scriptul de pornire/oprire se duce in /usr/local/etc/rc.d iar cu asta va asist eu.
La fel va pot asista cu instalarea lui FreeBSD in masina virtualbox. Am facut un set complet de scripturi pentru rulat dupa instalarea "curata" a sistemului - modificat fisiere de configurare si descarcat pachetele.

Ce n-am reusit in icefact(ubuntu) - recunosc, testul a durat vreo 10 minute sub stres maxim:

  • (de testat in continuare) - programul poate identifica serverul CUPS sa poata scoate la imprimanta? Mai incerc, s-ar putea sa n-am cups activat pe ubuntu;
  • (de testat in continuare) - cumva programul poate exporta automat factura in PDF folosind un sablon de denumire? Eventual sa ruleze un script extern .sh caruia sa ii paseze parametri? de exemplu sa le urce pe undeva (ftp server de backup cu ip, user, pass, sau partitie share) impreuna cu fisierul xml/setul de fisiere xml, sau sa le zbor catre unitatea de banda magnetica.
    Exemplu de denumire:
    numar de ordine_data_[FF, FPF, CH]_nume client_suma[_CASH].pdf:  FF=factura, FPF=factura proforma, CH=chitanta,_CASH daca a fost platit in cash si s-a emis chitanta.
    141_30.10.2023_FF_821_Gigi_SRL_30.00_lei_CASH.pdf  - factura platita;
    141_30.10.2023_FPF_14_Gigi_SRL_30.00_lei.pdf - factura proforma;
    141_30.10.2023_CH_24_Gigi_SRL_30.00_lei_CASH.pdf - chitanta.
      Sintaxa asta o folosesc pentru denumirea clara a fisierelor si ma ajuta mult in cazul in care mai face figuri vreun hard-disc si trebuie sa ii fac recuperare de date. Momentan procedura asta o facem manual pentru fiecare factura si merge tare greu;
  • butonul "javascript" inchide automat programul;
  • nu reusesc sa gasesc meniul unde trebuie configurat accesul (ip, masca) catre icefactd;
  • nu reusesc sa gasesc meniul unde se seteaza parametrii de autentificare catre icefactd.

In concluzie va rog pregatiti hartiile si va rog dati-mi mesaj privat cu adresa de mail unde va pot contacta pentru plasarea cererii de oferta.

Cu respect, multumesc mult.

Serghei

Buna ziua,

O să trebuiască să amânam un pic proiectul, că va trebui să ne concentrăm momentan pe efactura și alte câteva chestii importante. Aduceți-mi aminte cândva anul viitor.

sepromsrl

OK... atunci ramane pentru anul viitor. Dar imi place mai mult varianta dumneavoastra decat ceea ce incerc eu sa programez (si nu-mi iese) in intefata veche, modul text.

Cu respect.

sepromsrl

Ca sa nu mai lungesc vorba, am cumparat licenta.
Teoretic se pare ca FreeBSD 14.0 + modulul de emulatie linux il poate rula fara probleme. Deocamdata este doar 'parerologie'. Asta o sa o testez in vacanta de iarna. Revin cu noutati imediat cum am rezultate.

sepromsrl

#11
   Vin cu o veste buna. Am reusit sa pornesc varianta de Ubuntu pe FreeBSD variantele 13 si 14. FreeBSD 14/x64 pe masina virtuala ca sa documentez instalarea, si FreeBSD 13/x64 pe 4 sisteme fizice din firma (unul din ele e dinozaurul PDP) ca sa si testez corectitudinea documentatiei de mai jos.


Am actualizat metoda de instalare dar forumul nu imi permite postare mai mare de 20000 (doua zeci de mii) de litere.
Asadar il impart in doua.

Daca incurca/deranjeaza/nu e ok, va rog frumos dati-mi de stire.

Partea 1:

    In documentatia de mai jos explic si detalii pe care un utilizator experimentat Linux / FreeBSD le poate considera enervante.
    Va rog sa nu va suparati, textul l-am lucrat ca sa fie accesibil si de catre cei care au pus mana pe un FreeBSD prima data acum doua-trei zile. Ori singur ori impreuna cu unu...doi prieteni daca parcurg ce e mai jos, eventual prin telefon cu tocilarul din vecini care "le are cu calculatoarele", sa reduca la minim datul cu capul de pereti, sa rezolve corect si rapid iar reactorul de energie sa poata fi stins mai tarziu cu cea mai strasnica si mai racoritoare bere.

Asadar: 
- icefact se ocupa de emis facturi, iar daca ai cumparat licenta - si pe bune isi merita din plin banii - indeplinesti ultra-rapid cerintele legislatiei, incarci rapid fara batai de cap in SPV si prinzi si timp sa fugi sa mai bagi o bere;

- icefact-server se ocupa de stocat baza de date cu facturile;

- daca esti firma mica si ai un singur calculator dedicat pentru facturare,  astia doi stau aici impreuna;

- daca in viitor iti mai trebuie inca un calculator de facturare in biroul de alaturi, si/sau daca ai si vreun punct de lucru, atunci iti mai trebuie inca vreo cativa "icefact" care sa se coordoneze printr-un singur "icefact-server" pentru ca de exemplu sa nu emita mai multe facturi cu acelasi numar, sa ai disponibili aceiasi clienti, aceleasi produse... si nonstop adica 24h/7 la dispozitie informatii despre toate facturile emise in trecut;

- asadar, documentatia de mai jos acopera 1 (unu) calculator avand instalat si icefact si icefact-server, urmand ca pe urmatoarele sa instalezi doar "icefact" care sa-l foloseasca pe primul ca server.

Avem nevoie de un calculator cu sistemul FreeBSD, icefact si icefact-server.
FreeBSD are avantajul ca e atat de fiabil incat uiti de el ca il ai in firma. Devine un fundament garantat al vietii zilnice asa cum este gravitatia sau lumina zilei.
Spre deosebire de Linux pe care il mai apuca strechea, sau mai rau Windows care dupa vreo juma de an te aduce in pragul disperarii. Adica nu-ti trebuie ca undeva in viitor sa te trezesti ca ai un mini-sistem propriu si personal de tip "cardurile de sanatate" care stim cu totii cum (nu) merg.

Atentie  - si o sa mai repet pe parcursul documentatiei de mai jos:
FreeBSD 14 instaleaza corect emulatia de Ubuntu - DAR - raporteaza ca "depozitele" ("repositories") lui Ubuntu nu sunt semnate digital, asa ca nu se pot descarca pachetele-dependinta pentru icefact. FreeBSD 13 functioneaza fara probleme.

Mi-a luat vreo doua ore ca sa ma prind de conditia esentiala:  interfata grafica a lui FreeBSD NU trebuie sa ruleze ca admin (root). Doar linia de comanda (shell din terminal) trebuie sa fie admin (root).

Pasul 1 - instalam FreeBSD. 
Foarte important:  calculatorul trebuie sa aiba componente de calitate:
- o placa de baza buna, nu performanta ca la gaming, nu server de zeci de mii de lei, dar nici chinezarie ordinara;
- cel putin 512 MB RAM - emulam un sistem in alt sistem, asta e cerinta minima;
- un hard disc sau un ssd dovedit ca pe termen lung nu face probleme. Minim 20 GB.

Download de aici: http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/13.2/FreeBSD-13.2-RELEASE-amd64-memstick.img
Flash pe stic 

dd if=FreeBSD-13.2-RELEASE-amd64-memstick.img of=/dev/<<usb_stick>>  bs=8M status=progress

Daca vrei din Windows, flash pe stic cu Win32 Disk Imager sau cu Balena Etcher.
Boot de pe stick, urmam pasii din meniu. Daca avem dubii cu partitionarea ii dam sa faca automat. Restul e intuitiv, e mod text, nu ne complicam cu placi video sa deseneze.
Instalam, restart, scoatem sticul, sistemul porneste, ajunge la promptul "login". Ne logam cu "root", punem parola, am intrat in sistem. Timp total de la inceputul instalarii si pana aici.... (surprinzator!) vreo 10 minute. Nu 3...4 ore ca la Windows sau ca la Linux.

Pe scurt, in FreeBSD (13, NU 14!) se instaleaza compatibilitatea cu Ubuntu dupa cum spune aici:

https://docs.freebsd.org/en/books/handbook/linuxemu/ 

atentie:  aici modificam - in loc de distributia "focal" peste tot punem "jammy" - pentru ca asta va avea suport pana in aprilie anul 2032. Focal o sa fie tras pe dreapta in curand.

Asadar, din FreeBSD din terminalul cu drept de admin (rut) procedam in felul urmator:


pkg install debootstrap
debootstrap jammy /compat/ubuntu
echo "deb http://archive.ubuntu.com/ubuntu jammy main universe restricted multiverse" > /compat/ubuntu/etc/apt/sources.list
echo "deb http://security.ubuntu.com/ubuntu/ jammy-security universe multiverse restricted main" >> /compat/ubuntu/etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu jammy-backports universe multiverse restricted main" >> /compat/ubuntu/etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu jammy-updates universe multiverse restricted main" >> /compat/ubuntu/etc/apt/sources.list
echo "devfs             /compat/ubuntu/dev      devfs           rw,late                         0       0" >> /etc/fstab
echo "tmpfs           /compat/ubuntu/dev/shm  tmpfs           rw,late,size=1g,mode=1777    0       0" >> /etc/fstab
echo "fdescfs         /compat/ubuntu/dev/fd   fdescfs         rw,late,linrdlnk             0       0" >> /etc/fstab
echo "linprocfs       /compat/ubuntu/proc     linprocfs       rw,late                      0       0" >> /etc/fstab
echo "linsysfs        /compat/ubuntu/sys      linsysfs        rw,late                      0       0" >> /etc/fstab
echo "/tmp            /compat/ubuntu/tmp      nullfs          rw,late                      0       0" >> /etc/fstab
echo "/home           /compat/ubuntu/home     nullfs          rw,late                      0       0" >> /etc/fstab
mount -al
echo "copiem /etc/hosts in /compat/ubuntu/etc/hosts"
echo "emulatorul nu poate iesi in afara chroot sa acceseze /etc/hosts. Prinde bine cand icefact server se afla pe alt sistem, sa-l putem accesa cu numele asociat cu IP din /etc/hosts."
cp /etc/hosts /compat/ubuntu/etc/hosts


Se pot instala ambele variante - si compatibilitate CentOS si compatibilitatea Ubuntu - pt ca functioneaza in paralel fara sa se impiedice una de alta: vezi capitolul 12.3.1. CentOS Base System si capitolul 12.3.2. Debian / Ubuntu Base System.
Atentie, partea de ubuntu se duce in /compat/ubuntu iar partea de CentOS se duce in /compat/linux deci nu apar conflicte.

Identificam sistemul din linie de comanda:

#  uname -a

FreeBSD freebsd14-test.seprom.ro 14.0-RELEASE FreeBSD 14.0-RELEASE #0 releng/14.0-n265380-f9716eee8ab4: Fri Nov 10 05:57:23 UTC 2023 root@releng1.nyi.freebsd.org:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64


Se schimba directorul de lucru si shellul astfel incat sa activam emulatorul Linux.
chroot /compat/ubuntu /bin/bash

atentie, de acum lucram cu directorul radacina schimbat si sub compatibilitatea/emulatia Linux.

Uite cum raporteaza ca a intrat emulatorul in functiune:

#  uname -a
Linux freebsd14-test.seprom.ro 5.15.0 FreeBSD 14.0-RELEASE #0 releng/14.0-n265380-f9716eee8ab4: Fri No x86_64 x86_64 x86_64 GNU/Linux


S-a schimbat. In momentul de fata rulam in compatibilitate Ubuntu.


La momentul intocmirii acestei documentatii, ce e mai jos a functionat pe FreeBSD 14.
La vreo 2 zile am repetat procedura si NU a mai vrut.
In concluzie, doar pentru FreeBSD 13 va functiona "apt update", "apt full-upgrade", "apt install":

apt update
apt full-upgrade
apt --fix-broken install

# atentie, foarte important: e nevoie de astea ca sa ruleze icefact.
# De exemplu binutils: penru comanda "ar" - arhivator/dezarhivator, pentru partea de instalare icefact-srv fara
# rularea automata a scripturilor post-install si post-rm
# extrage direct icefact-srv si il pune in /var/lib/icefact
# altfel prin instalarea automata, corupe baza de date cu pachetele pt ca nu se poate folosi de systemd
# intrucat asta nu exista si nu ruleaza. E explicat in scriptul de instalare icesoft-install.sh

apt install mc nano binutils wget xpdf libcups2 libfontconfig1 libfreetype6 libx11-6 libxcursor1 libxext6 libxfixes3 libxft2 libxi6 libxrandr2 libxrender1 lib32z1 libx11-xcb1


iesim din emulatie, suntem inapoi in sistemul gazda FreeBSD

exit


Scripturi complete pentru instalare icefact si icefact-srv cu toate explicatiile pentru administratorii de sistem, si sub forma de comentarii si sub forma de mesaje afisate in timpul instalarii.
In partea a 2-a a documentatiei le rulam. Deocamdata nu.

1. MANUAL_icesoft_updater.sh:  asta il rulam normal ca admin din FreeBSD fara a intra in emualtie cu chroot /compat/ubuntu /bin/bash
2. icesoft_install.sh:  asta trebuie sa stea in acelasi director.  Scriptul de la "1" il va copia in /compat/ubuntu si il va apela in emulatie astfel incat sa execute instalarea.

1.  MANUAL_icesoft_updater.sh

#!/bin/sh
echo "update /etc/hosts in /compat/ubuntu/etc/hosts"
echo "cp /etc/hosts /compat/ubuntu/etc/hosts"
cp /etc/hosts /compat/ubuntu/etc/hosts
echo " "
echo " "

echo "Copiem scriptul de instalare icefact in /compat/ubuntu/install*.sh"
echo "Atentie - icesoft_install.sh trebuie sa fie actualizat cu ultimul icefact"
echo "cp icesoft_install.sh /compat/ubuntu"
cp icesoft_install.sh /compat/ubuntu
#ok, l-am copiat, acuma oprim intai programul de facturare (daca ruleaza) si apoi serverul.

echo " "
echo " "

echo "Daca icefact si/sau icefactd sunt active, le oprim:"
echo -n "pkill icefact"
pkill icefact
echo -n "pkill icefactd"
pkill icefactd
echo " "
echo " "

# rulam scriptul de install/update din emulatia Linux:
echo "chroot /compat/ubuntu /bin/bash icesoft_install.sh"
# atentie, neaparat cu /bin/bash!!!
chroot /compat/ubuntu /bin/bash /icesoft_install.sh
echo " "
echo "icesoft updater terminat"
echo "Daca rulam treaba asta pe serverul care tine baza de date, "
echo "porneste manual icefact-srv: /usr/local/etc/rc.d/icefactd start "


2.  icesoft_install.sh   - scriptul responsabil cu instalarea/actualizarea.  Asta e rulat automat de catre scriptul de mai sus:

#!/bin/bash

# ATENTIE:  scriptul asta se ruleaza IN EMULATIA LINUX si NU IN FREEBSD!!!
# pentru instalare manuala din afara emulatiei Linux se foloseste scriptul "MANUAL_icesoft_updater.sh"
# atentie, /bin/sh nu recunoaste "[[ -z $DEBUG ]] &&"
# asta e specific /bin/bash

# completeaza cu numele pachetelor de pe saitul icesoft.ro
icefactprg="icefact_1.6.2-1_amd64.deb"
icefactsrv="icefact-srv_0.9.4-1_amd64.deb"

# dezactiveaza linia << unset DEBUG >> (pune-i un "#" in fata) ca sa rulezi scriptul in modul simulare

DEBUG=true
unset DEBUG

echo "icefact program = $icefactprg"
echo "icefact server  = $icefactsrv"

# directoarele unde se vor descarca programele:
mkdir -p /kits/icesoft/icefact
mkdir -p /kits/icesoft/icefact-server


#########  icefact ################

echo "cd /kits/icesoft/icefact"
[[ -z $DEBUG ]] && cd /kits/icesoft/icefact
echo "wget -c https://icesoft.ro/downloads/$icefactprg"
[[ -z $DEBUG ]] && wget -c https://icesoft.ro/downloads/$icefactprg
echo " "
echo " "
echo "dpkg -r icefact"
[[ -z $DEBUG ]] && dpkg -r icefact
echo " "
echo " "
echo "dpkg -i $icefactprg"
[[ -z $DEBUG ]] && dpkg -i $icefactprg
echo " "
echo " "


############  ICEFACT SERVER ###########################

echo "cd /kits/icesoft/icefact-server"
[[ -z $DEBUG ]] && cd /kits/icesoft/icefact-server
echo "wget -c https://icesoft.ro/downloads/$icefactsrv"
[[ -z $DEBUG ]] && wget -c https://icesoft.ro/downloads/$icefactsrv

# asta anulat  - nu instalam traditional cu dpkg --install pt ca corupe baza de date. Explicat mai jos ce se intampla.
#echo "dpkg --remove --force-all icefact-srv"
#[[ -z $DEBUG ]] && dpkg --remove --force-remove-reinstreq --force-all icefact-srv

# "ar" se gaseste in pachetul "binutils"
echo "ar x $icefactsrv"
[[ -z $DEBUG ]] && ar x $icefactsrv

# dupa despachetare obtinem 3 fisiere: control.tar.xz, data.tar.xz si "debian-binary"
# data.tar.xz contine serverul;
# debian-binary nu ne intereseaza;
# control.tar.xz = contine scripturile post-install si post-remove
# primul creaza directorul /var/lib/icefact unde va sta baza de date si seteaza drepturile, proprietarul si grupul
# adauga user+grup "icefact-srv" in /etc/passwd si /etc/group
# apoi instruieste systemd sa porneasca icefact-srv automat dupa instalare: "systemctl enable icefactd.service --now"
# In emulatia Linux din FreeBSD nu exista systemd, instalarea automata va raporta... eroare.
# apt-install invoca dpkg care va raporta ca nu ii convine, asadar instalarea va fi inregistrata ca "corupta".

# postrm ("post-remove") instruieste systemd sa inchida serviciul / serverul icefactd
# Nu avem nevoie de "postrm" intrucat sistemul va rula icefact-server pana iese la pensie.
# Cum in emulatia Linux din FreeBSD nu exista systemd, o sa strambe din nas cum ca eroare
# Avand deja raportat ca instalarea este corupta, va refuza dezinstalarea si ramanem blocati cu un pachet corupt.
# orice alte instalari de orice alte pachete pe vitor se vor bloca pana cand aceasta eroare este rezolvata.
# Rezolvare:
#     rm /var/lib/dpkg/info/icefact-srv*
#     dpkg --force --remove icefact-srv
#     apt-get update

#ls -l

echo "tar -xf data.tar.xz"
[[ -z $DEBUG ]] && tar -xf data.tar.xz

echo "cp usr/libexec/icefactd /usr/libexec/icefactd"
[[ -z $DEBUG ]] && cp usr/libexec/icefactd /usr/libexec/icefactd

echo "rm -rf usr"
[[ -z $DEBUG ]] && rm -rf usr

echo "rm control.tar.xz data.tar.xz debian-binary"
[[ -z $DEBUG ]] && rm control.tar.xz
[[ -z $DEBUG ]] && rm data.tar.xz
[[ -z $DEBUG ]] && rm debian-binary

# post-install manual conform script postinst:
# daca nu exista userul, grupul si directorul, le facem si setam permisiunile:
echo "getent group icefact-srv >/dev/null || groupadd -r icefact-srv"
[[ -z $DEBUG ]] && getent group icefact-srv >/dev/null || groupadd -r icefact-srv

echo "getent passwd icefact-srv >/dev/null || useradd -r -g icefact-srv -d /var/lib/icefact -s /sbin/nologin -c \"IceFact Server\" icefact-srv"
[[ -z $DEBUG ]] && getent passwd icefact-srv >/dev/null || useradd -r -g icefact-srv -d /var/lib/icefact -s /sbin/nologin -c "IceFact Server" icefact-srv

echo "test -d /var/lib/icefact || mkdir -p /var/lib/icefact"
[[ -z $DEBUG ]] && test -d /var/lib/icefact || mkdir -p /var/lib/icefact

echo "chmod 750 /var/lib/icefact"
[[ -z $DEBUG ]] && chmod 750 /var/lib/icefact

echo "chown -R icefact-srv:icefact-srv /var/lib/icefact"
[[ -z $DEBUG ]] && chown -R icefact-srv:icefact-srv /var/lib/icefact


# daca merg pe instalarea automata, o sa urle ca pachetul este instalat incorect.
# pentru ca nu exista systemd care sa interactioneze cu serverul icefactd
# asadar "curatarea"/"dezinstalarea" manuala nu va functiona nici cu slujba.
# e explicat mai sus.
# ce e mai jos e anulat dar ramane ca instructaj "cum se face".
#echo "dpkg -i $icefactsrv"
#[[ -z $DEBUG ]] && dpkg -i $icefactsrv

echo " "
echo " "



Atentie: la instalarea "traditionala" a lui icefact-srv (dpkg -i), sistemul o sa raporteze ceva eroare cum ca mizeria aia de systemd nu a fost regasita ca proces-radacina (PID 1). Este explicat acolo in detaliu artificiul de instalare.


echo "atentie, suntem in FreeBSD, nu in emulatia Linux."


Recomandare - pentru simplificarea activitatii, in freeBSD se creaza fisierele urmatoare:

/bin/icefact

# ATENTIE!!!  pentru cuplaj la icefact-server se ruleaza in felul urmator:
#  daca in icefact s-au emis deja facturi, selectam Unelte->Backup si redenumim fara spatii baza de date
#     numefirma.db
#  mutam baza de date obtinuta in /compat/ubuntu/var/lib/icefact
#       cauta mai jos textul "schimbare proprietar baza date" si vezi comenzile "chown" si "chgrp" pentru ca
#       din emulatie Ubuntu, linie de comanda,
#       sa ii setezi corect atributele "proprietar" si "grup".
#
#  scriptul curent - /bin/icefact pt freebsd - se completeaza astfel:
#  sudo chroot /compat/ubuntu   /opt/icefact/icefact numefirma@xxx.xxx.xxx.xxx
#  unde xxx.xxx.xxx.xxx este adresa IP al al cui va deveni server.
#  atentie: functioneaza si cu rezolvarea dupa corespondenta din /compat/ubuntu/etc/hosts:
# contab.localdomain    172.16.1.253
# caz in care se ruleaza astfel:
# sudo chroot /compat/ubuntu /opt/icefact/icefact numefirma@contab.localdomain.ro

# atentie, inlocuieste contab.localdomain.ro cu adresa IP locala a sistemului tau:
sudo chroot /compat/ubuntu /opt/icefact/icefact numefirma@contab.localdomain.ro


/bin/icefactd
#!/bin/sh

echo -n "start icefact server...."

chroot /compat/ubuntu /usr/libexec/icefactd

ps ax |grep icefactd
echo "OK"


Atentie, activarea automata a lui icefact-server (icefactd) se face pe un singur calculator din firma care are strict functia de server, cu backup periodic, cu tot ce trebuie.
Pentru pornire automata a lui icefact-server (icefactd) la startup sistem freeBSD, completam fisierul /etc/rc.conf.local (al lui FreeBSD, nu /compat/ubuntu/etc/rc.local):

/etc/rc.conf.local

#!/bin/sh
icefactd_enable="YES"     #la startup specificam ca scriptul "icefactd" cel din /usr/local/etc/rc.d trebuie activat.


apoi in /usr/local/etc/rc.d se creaza fisierul "icefactd" - care e responsabil de pornirea la "boot" si oprirea la "shutdown" a lui icefact-server.
Ca si explicatie - el va fi rulat automat imediat ce conditiile "REQUIRED" sunt indeplinite:  trebuiesc porniti toti "administratorii" in fundal, trebuiesc montate toate partitiile (filesystems), neaparat emulatia de linux activata... si imediat dupa serviciul de administrare al imprimantei (cupsd) care intotdeauna e pornit ultimul. Sa fiu sigur ca ultimul pornit este icefact-server.

/usr/local/etc/rc.d/icefactd

#!/bin/sh
#
# $FreeBSD$
#

# PROVIDE:      icefactd
# REQUIRE:      DAEMON FILESYSTEMS linux cupsd
# BEFORE:       LOGIN
# KEYWORD:      FreeBSD

. /etc/rc.subr

name="icefactd"
rcvar="${name}_enable"  # variabila din /etc/rc.conf care porneste treaba
load_rc_config $name    # fisierul de configurare, daca e valabil

start_cmd="/bin/icefactd"     #pornire /bin/icefactd - vezi ca a fost definit mai sus
stop_cmd="/usr/bin/pkill icefactd"
status_cmd="/bin/ps |grep icefactd"

run_rc_command "$1"


Facem executabili pe toti cei implicati:

chmod a+x /bin/icefact
chmod a+x /bin/icefactd
chmod a+x /etc/rc.conf.local
chmod a+x /usr/local/etc/rc.d/icefactd


sepromsrl

#12
Partea a 2-a:

ATENTIE:  baza de date "numefirma" trebuie intotdeauna sa stea in urmatorul loc:
vizibil din FreeBSD = /compat/ubuntu/var/lib/icefact
vizibil din emulatia Linux = /var/lib/icefact

Nu o putem muta intr-o partitie "share" din retea intrucat icefact-server cere neaparat ca baza de date sa aiba anumite permisiuni (proprietar, grup, drepturi de citire-scriere) care nu pot fi oferite prin retea:

# trecem din freeBSD in emulatia Linux cu linie de comanda:
chroot /compat/ubuntu /bin/bash

# schimbam directorul in /var/lib/icefact  (atentie, in emulatie directorul /compat/ubuntu devine director radacina  / )
cd /var/lib/icefact

# si acum vedem permisiunile:
ls -l
-rwxr-xr-x 1 icefact-srv icefact-srv 901120 Jan 12 11:40 numefirma.db

#atentie, inca suntem in emulatie, nu iesim


Asadar cand exportam si mutam din alta parte baza de date in [/compat/ubuntu]/var/lib/icefact, obligatoriu trebuiesc actualizati "proprietarul" si "grupul" corect. Asa a hotarat creatorul programului, dumnealui este autoritatea, asa trebuie sa functioneze, ne conformam, punct.

# schimbare proprietar baza date
# numefirma.db apartine utilizatorului "icefact-srv":
chown icefact-srv numefirma.db

# utilizatorii inregistrati in grupul "icefact-srv" au voie sa acceseze baza date:
chgrp  icefact-srv numefirma.db

#iesim din emulatie
exit

altfel icefact-server nu poate accesa baza de date, iar icefact va raporta imposibilitatea de a citi/scrie in baza de date.
ATENTIE - nu mutam baza de date pe partitie tip "share retea" cu gandul ca facem "shortcut" (symlink) in /compat/ubuntu]/var/lib/icefact/numefirma.db -  partitiile "share retea" NU mentin atributele mentionate mai sus - "proprietar" si "grup".


Cum pornim tot ce s-a muncit mai sus si s-a explicat mai sus:
Ne folosim de toate scripturile create mai devreme:

Suntem in FreeBSD adica am iesit din emulatie.

Rulam in felul urmator:
1. instalam icefact si icefact-server - va copia icesoft-install.sh in /compat/ubuntu, il ruleaza, instaleaza, iese din emulatie.

    ./MANUAL_icesoft_updater.sh


2.   pornim serverul:

/usr/local/etc/rc.d/icefactd start

icefact-server se gaseste in /compat/ubuntu/usr/libexec si se numeste "icefactd" adica "icefact" cu "d" in coada.
tentie: in emulatorul linux il gasim in /compat/ubuntu/usr/libexec.

3. pornim programul de facturare: atentie, suntem admin, nu va cere nici o parola

/bin/icefact
password:  daca esti user normal, bagi parola de root.  daca esti deja root, nu iti cere parola.


4. Aplicam licenta si spor la treaba.

OK, pana aici e totul in regula, sistemul porneste, atentie pe freeBSD 13 si nu 14. Cand pe 14 va functiona, dau de stire aici.

Bun, cum exportam/descarcam chestii si cum le stocam ca sa le putem accesa si din FreeBSD, eventual si de pe un alt calculator din retea?

# atentie, mai devreme am iesit din emulatie, acum suntem in FreeBSD

# creare director "local"
mkdir /compat/ubuntu/localshare

# creare director "retea"
mkdir  /compat/ubuntu/networkshare

# creare director "storage" in directorul-radacina al FreeBSD:
mkdir /storage

# "scurtaturi" / "symbolic link" din Ubuntu catre directorul-radacina al FreeBSD.
# ca sa fie mai comod cand cautam cu mausul
# sintaxa:  ln -s  <pe cine>  <unde>
ln -s /compat/ubuntu/localshare /storage/localshare
ln -s /compat/ubuntu/networkshare /storage/networkshare


"windows shared folder", il deschidem aici in FreeBSD si il facem sa fie vizibil in folderul "networkshare":

# "montam" un folder partajat ("sheruit" in jargonul IT) denumit "conta"
# de pe un sistem windows (IP = 172.16.1.1)
# cu utilizator = gogu si parola = gogu01.
# Atentie, nu vrea fara parola asa ca din windows trebuie setat user si parola.
# Se incearca intre doua windowsuri pana functioneaza, apoi se ruleaza urmatoarea comanda:

mount_smbfs -I 172.16.1.1 -U gogu //gogu@172.16.1.1/conta /compat/ubuntu/networkshare
password: gogu01


testam sa vedem daca a deschis folderul de pe windows - verificam ultima linie cu "gogu@172.16.1.1"

mount

/dev/ada0s1 on / (ufs, local, soft-updates, journaled soft-updates)   #("/" al lui FreeBSD)
devfs on /dev (devfs)                              #("device manager")
fdescfs on /compat/linux/dev/fd (fdescfs)        #("file descriptor file system" al emulatiei Linux)
devfs on /compat/ubuntu/dev (devfs)           #("device manager" al lui Linux)
tmpfs on /compat/ubuntu/dev/shm (tmpfs, local)         #("sistem de fisiere temporare")
linprocfs on /compat/ubuntu/proc (linprocfs, local)        #("informatii task manager")
linsysfs on /compat/ubuntu/sys (linsysfs, local)           #("infomatii sistem fisiere")
/tmp on /compat/ubuntu/tmp (nullfs, local, soft-updates, journaled soft-updates)     #("aici stau fisierele temporare")
/home on /compat/ubuntu/home (nullfs, local, soft-updates, journaled soft-updates)  # ("/home al lui FreeBSD")
//GOGU@172.16.1.1/CONTA on /compat/ubuntu/networkshare (smbfs)       #("aici e deschis folderul partajat din Windows")


Rulam icefact - scriptul /bin/icefact definit mai devreme:

/bin/icefact
password:  daca esti user normal, bagi parola de root.  daca esti deja root, nu iti cere parola.


Icefact porneste si e gata de treaba.

Putem tipari o factura in PDF selectand imprimanta "PDF Printer". Mai jos selectam folderul unde va fi salvat documentul PDF. 
Ne ducem in "/localshare"  -   atentie, icefact ruleaza in compatibilitatea linux asadar el nu va vedea "/compat/ubuntu/localshare" ci doar ceea ce exista in "/compat/ubuntu", deci cautam directorul "/localshare".  Salvam acolo.

Pe desktop dam click pe iconita "libreoffice".  Putem deschide PDF ori din "/compat/ubuntu/localshare" - nasol pana gasesti sa dai clic cu mausul -  sau din /storage/localshare  adica "scurtatura" creata mai devreme.

Daca tiparim PDF in /networkshare,  in FreeBSD il gasim in /storage/networkshare. De asemenea il vom gasi si pe calculatorul Windows care are partajat folderul "conta", accesat mai devreme cu "mount_smbfs".

Si acum solutia de BACKUP - pe langa asta e recomandat si un UPS:


#atentie, suntem in FreeBSD si NU in emulatie
mkdir /etc/bkupscripts
cd /etc/bkupscripts


Creem fisierul bkup_conta.sh

#!/bin/sh
echo "asta se ruleaza in fiecare zi la ora 00:01"
echo "copiere baza de date /compat/ubuntu/var/lib/icefact/numefirma.db in /storage/networkshare"
echo "se face prin arhivare (tar + gzip) ca sa se pastreze proprietarul+grupul icefact-srv"
echo "prin simpla copiere se pierde proprietar+grup"
echo "atentie: proprietarul si grupul sunt specifice emulatiei de linux. In FreeBSD ambele sunt 999."
echo "sintaxa:  tar -czvf  <unde>  <pe cine>"
echo "adica:     tar -czvf   <in_folderul_sheruit/icefactd.tar.gz>   <folderul_cu_baza_de_date>"

tar -czvf /compat/ubuntu/networkshare/icefactd.tar.gz /compat/ubuntu/var/lib/icefact

echo "gata".


il facem executabil:

chmod a+x /etc/bkupscripts/bkup_conta.sh


Si acum instruim sistemul sa ruleze treaba asta in fiecare noapte fix in primul minut al orei 0.
Editam fisierul /etc/crontab si adaugam urmatoarele:


# backup in fiecare noapte la minutul 1 ora 0 pentru baza de date cu facturile
#minute hour   day_of_month    month   day_of_week    who     command
     1   0      *               *         *          root    /etc/bkupscripts/bkup_conta.sh > /var/log/backupscript.log


si instruim pe "crond"  (pe limbaj windows = "task scheduler") sa re-incarce noua configuratie:


# trimit semnal "hang-up" catre crond. Adica opreste tot ce face, re-incarca configuratia, reia activitatea
killall -HUP crond


Pe sistemul windows - poate sa fie orice alt sistem de operare, exemplul e cu windows pentru ca e mai usor de inteles in scopul acestei documentatii - se poate rula un sistem de backup precum "Cobian" care in fiecare noapte la ora 00:05 preia ce gaseste in folderul "conta" si duce undeva in alta parte (hard local, hard extern, conexiune ftp in alta parte, mail) cu o denumire care include data si ora.

Sistemul trebuie sa ramana strict dedicat pentru facturare si activitati specifice de birou. Fara facebook/filme/stiri/ ca in timp umple hard-diskul cu nebunii si e pacat ca o sa il ingreuneze.

Daca mai reusesc sa imbunatatesc, completez cum reusesc sa prind un pic de timp liber.
Daca mai exista cineva cu acelasi stol de pasarele care ciripesc "Unix FreeBSD" si aveti vreo idee buna pentru imbunatatit ce e mai sus, dati de stire.
De exemplu pentru ca backupul periodic sa se poata efectua corect, mai trebuie adaugata partea de deschidere automata a folderului partajat ("sheruit") la restart sistem odata cu pornirea automata a lui icefact-server.
Alt exemplu - in loc de "symlink" sa se foloseasca mount_nullfs in /compat/ubuntu/storage a unor directoare disponibile in FreeBSD. E mai elegant.

Sper sa fie de ajutor tot instructajul. Pentru calculatoare care trebuie sa functioneze ani de zile nonstop si in care sa ai incredere 100%. Fara Windows si fara Linux care sa iti dea batai de cap la fiecare jumate de an. Mult mai stabil decat ce sisteme au cei de sus de la Imparatie. Ce e mai sus te protejeaza de dat cu capul de pereti pentru ca nu pica.

Va multumesc pentru munca depusa ca sa creati programul Icefact.