-
Am citit un articol în care cineva explica de ce a renunțat să își mai întrețină propriul server de mail. Motivul principal era că e prea multă muncă pentru a-l menține în regulă - reputație IP, liste negre, actualizări, configurări. La un moment dat nu mai merită. Acolo am citit despre SPF, DKIM și DMARC și mi-am dat seama că ar trebui să verific dacă le am configurate corect pe domeniile mele.
SPF, DKIM și DMARC sunt trei recorduri DNS care spun serverelor de mail că ești cine zici că ești. Fără ele, un server ca Gmail nu are cum să verifice dacă emailul vine cu adevărat de la tine sau de la cineva. Nu e o problemă nouă - phishing-ul și spam-ul au existat dintotdeauna - dar din februarie 2024 Google și Yahoo cer explicit aceste setări, altfel emailurile au șanse mari să ajungă la spam sau să fie respinse complet.
SPF răspunde la întrebarea „de pe ce servere are voie domeniul meu să trimită email?". E un record TXT în DNS care listează serverele autorizate. Când un server primește un email de la tine, verifică lista și dacă IP-ul expeditorului nu e acolo, emailul e tratat cu suspiciune. Arată cam așa:
v=spf1 include:_spf.furnizor.ro ~all~allînseamnă softfail - serverele neautorizate nu sunt respinse complet, doar marcate ca suspecte. Dacă folosești servicii terțe care trimit email în numele domeniului tău, adaugi și serverele lor în același record. Un singur record SPF per domeniu.DKIM funcționează prin semnătură digitală. Serverul de mail semnează fiecare mesaj cu o cheie privată, iar cheia publică e publicată în DNS. Serverul destinatar verifică semnătura și știe că emailul vine chiar de pe serverul tău și că nu a fost modificat pe drum. Cheia privată stă pe server, cheia publică apare în DNS ca un record CNAME sau TXT.
DMARC leagă totul și spune ce să facă serverul destinatar când SPF sau DKIM eșuează. Se adaugă ca un record TXT cu numele
_dmarc:v=DMARC1; p=none; sp=none; adkim=r; aspf=r; pct=100; ri=86400p=e politica principală și are trei variante:noneînseamnă că emailurile trec indiferent și ești doar în modul de monitorizare,quarantineînseamnă că emailurile care eșuează DMARC merg la spam, iarrejectînseamnă că sunt respinse complet.adkim=rșiaspf=rsetează verificarea în modul relaxed, mai permisiv.pct=100înseamnă că politica se aplică tuturor emailurilor.ri=86400setează frecvența rapoartelor la o dată pe zi.Se poate adăuga și
rua=mailto:adresa@domeniu.rodacă vrei să primești rapoarte zilnice despre cine trimite email în numele domeniului tău. Nu e obligatoriu - dacă domeniul e personal și nu trimiți volume mari, poți trăi fără. Rapoartele vin în XML, dar există servicii gratuite care le parsează și le afișează lizibil, cum ar fi dmarcian.com sau dmarc.postmarkapp.com.La domeniile mele de la Hosterion, care folosește cPanel, SPF și DKIM erau deja setate corect. Le-am verificat din cPanel → Email → Email Deliverability. Dacă apare „Invalid„ sau „Problems Exist" lângă vreunul, există un buton Repair care rezolvă totul automat - generează și instalează recordurile fără să fie nevoie să copiezi manual nimic.
DMARC lipsea complet. L-am adăugat din cPanel → Domains → Zone Editor → Manage → + Add Record → Add DMARC Record. cPanel are un formular dedicat care generează recordul automat. Am setat
p=nonepentru început - e varianta sigură când nu știi exact dacă ai servicii terțe care trimit email în numele domeniului și nu sunt configurate perfect. Dacă sari direct lap=rejectși ai un formular de contact sau un serviciu de newsletter care nu are DKIM configurat corect, emailurile respective sunt respinse.După ce am terminat, am verificat pe mail-tester.com - trimiți un email normal la adresa afișată pe sit și primești un scor din 10 cu detalii despre fiecare problemă. Am luat 10/10.
-
Odată, internetul era plin de sit-uri personale. Oameni care scriau despre ce îi pasiona, care împărțeau cunoștințe, care pur și simplu existau online ca ei înșiși. Acum, „prezența ta pe internet" înseamnă un profil de Facebook, un cont de TikTok sau o pagină de LinkedIn. Algoritmul decide ce vezi și ce nu vezi, conținutul tău aparține lor, nu ție. Ăsta e web-ul corporatist și tot mai mulți oameni se satură de el.
Există o mișcare - sau mai bine zis, un set de oameni cu aceleași valori - care încearcă să facă altfel. Unii o numesc IndieWeb, alții small web, alții human web. Fiecare termen are nuanțele lui, dar în general vorbesc despre același lucru: sit-uri făcute de oameni, pentru oameni, fără interese comerciale la mijloc. Fie că e un jurnal scris manual în HTML, un sit generat cu un tool static, sau ceva hostat pe un Raspberry Pi acasă - toate fac parte din același ecosistem. Nu există o definiție oficială universal acceptată, și poate că nici nu e nevoie de una. Important este că există alternativă.
Asta e întrebarea la care fiecare încearcă să răspundă: ce te face „indie"? Și am să fiu sincer - nici eu nu am un răspuns perfect. Dar câteva lucruri mi se par clare. Sit-ul e al tău, nu al unei platforme - ai un domeniu propriu, tu controlezi conținutul, nu o corporație. Dacă mâine platforma decide să închidă, conținutul tău nu dispare odată cu ea. Un sit indie are personalitate, nu arată ca toate celelalte - poți schimba fontul, culorile, structura, sau poți lăsa totul simplu și text. Și nu există un algoritm invizibil care decide că postarea ta trebuie să ajungă doar la 3% din urmăritori pentru că nu ai plătit pentru „boost".
Un lucru important pe care l-am înțeles din cele trei articole: IndieWeb-ul nu e o categorie binară. Nu înseamnă că ești ori complet indie, ori deloc. Chiar dacă ai serverul tău acasă și tot codul scris de mână, tot depinzi de un registrar pentru domeniu, de un ISP pentru conexiune, de certificate SSL emise de altcineva. Nu există independență absolută pe internet - și asta e în regulă. Ideea nu e purismul, ci direcția în care mergi. Un jurnal (jurnal) pe Neocities e mai indie decât un profil de LinkedIn. Un sit cu domeniu propriu, chiar dacă e hostat la un VPS comercial, e mai indie decât un jurnal pe Medium fără domeniu personal. E un spectru, nu o linie clară.
IndieWeb.org spune că sit-ul tău ar trebui să fie „conectat" - să aibă like-uri, comentarii, să distribuie conținut pe alte rețele. Eu cred că nu trebuie să exagerezi în nicio direcție. Nu ai nevoie de un sistem de like-uri pe jurnal. Dar nici să dispari complet în izolare nu e scopul. Ceva simplu - un feed RSS, o adresă de email, un link către Mastodon sau Matrix - e mai mult decât suficient pentru a fi parte dintr-o comunitate, fără să reaplici modelul rețelelor sociale pe care încercăm să le evităm.
Pentru mine, asta nu e doar o discuție tehnică. E despre cine controlează cum exiști online. Folosesc Linux de prin 2012 și de atunci am înțeles că software-ul liber nu e doar o chestiune de costuri sau de preferințe tehnice - e despre autonomie. Același principiu se aplică și la internet. Dacă tot conținutul tău e pe platformele altora, nu ești liber. Ești chiriaș într-un apartament în care proprietarul poate schimba regulile oricând. Un sit personal, cu domeniu propriu, cu conținut pe care îl controlezi tu, e echivalentul digital al libertății de exprimare reale. Nimeni nu poate bana postarea ta, nimeni nu îți scade vizibilitatea, nimeni nu îți vinde datele vizitatorilor fără acordul tău.
Nu trebuie să fii programator și nu trebuie să-ți configurezi singur serverul. Există opțiuni pentru orice nivel: Neocities pentru cei care vor ceva simplu și gratuit, Bear Jurnal pentru blogging minimal fără JavaScript și fără tracking, un VPS ieftin cu Hugo sau Eleventy pentru cei mai tehnici, sau self-hosted acasă dacă ai deja un homelab. Important e să începi undeva, restul vine cu timpul.
Internetul pe care îl vrem nu va fi construit de corporații. Va fi construit de oameni ca noi, câte un sit la un moment dat.
Articol inspirat din discuțiile și articolele lui Shellsharks, Brennan Day și Grub Dog.
-
Recent am făcut un mic server pe un Intel NUC. Pe el am instalat câteva servicii printre care și Scrutiny care să îmi monitorizeze stocarea.
După o zi am decis să pun acest serviciu și pe calculator pentru monitorizarea disk-urilor, fără să fie nevoie să intru manual în
smartctlperiodic.Ce părea simplu la instalare s-a dovedit puțin mai complicat: ambele drive-uri au apărut ca Failed în interfață imediat după primul scan. Spoiler: niciunul nu era defect.
În calculator am două disk-uri, și acestea sunt:
- ADATA Legend 710 - SSD NVMe, 1TB, drive de sistem (
/dev/nvme0) - Seagate ST6000VX009 - HDD SATA, 6TB, date (
/dev/sda)
Instalarea Scrutiny
Scrutiny rulează ca două componente separate în același container: un collector care citește datele S.M.A.R.T. și un web server care le afișează. Există o imagine all-in-one (
ghcr.io/analogj/scrutiny:master-omnibus) care le include pe amândouă.Creez directorul de configurare:
mkdir -p ~/.services/scrutiny/config~/.services/scrutiny/docker-compose.yml:services: scrutiny: image: ghcr.io/analogj/scrutiny:master-omnibus container_name: scrutiny restart: unless-stopped cap_add: - SYS_RAWIO - SYS_ADMIN ports: - "8088:8080" volumes: - /run/udev:/run/udev:ro - ./config:/opt/scrutiny/config devices: - /dev/nvme0:/dev/nvme0 - /dev/sda:/dev/sdacd ~/.services/scrutiny docker compose up -dDupă instalare și pornire, Scrutiny e accesibil la
http://localhost:8088. Și acum au început și problemele.Problema 1 - SSD-ul NVMe apare ca Failed
La primul scan, SSD-ul ADATA Legend 710 a apărut imediat ca Failed cu o eroare de tip checksum. Am verificat cu
smartctldirect:sudo smartctl -a /dev/nvme0 -d nvmeOutput-ul era clar: drive-ul e sănătos, SMART overall-health self-assessment: PASSED, temperatură 30°C, zero erori. Scrutiny vedea altceva.
În
docker-compose.ymlaveam inițial doarSYS_RAWIOîncap_add. FărăSYS_ADMIN, containerul nu poate citi corect datele NVMe prin interfața kernel-ului, ceea ce genera erori de checksum la parsarea atributelor SMART.Am adăugat
SYS_ADMINîncap_add:cap_add: - SYS_RAWIO - SYS_ADMINRestart container:
docker compose down docker compose up -dEroarea de checksum a dispărut după următorul scan.
Problema 2 - HDD-ul Seagate apare ca Failed
Chiar și după rezolvarea problemei NVMe, HDD-ul Seagate ST6000VX009 continua să apară ca Failed. Atributele incriminate erau Seek Error Rate (ID 7) și Read Error Rate (ID 1), ambele cu valori aparent catastrofale.
Aceasta e o problemă cunoscută cu drive-urile Seagate. Seagate folosește un format proprietar pentru aceste atribute: valorile brute sunt de fapt contoare pe 48 de biți care encodează atât numărul de erori cât și numărul total de operații. Scrutiny (și de fapt majoritatea tool-urilor S.M.A.R.T.) le interpretează greșit ca valori simple, rezultând cifre uriașe care declanșează alarme false.
Dacă rulezi
sudo smartctl -a /dev/sdași drive-ul aratăSMART overall-health self-assessment test result: PASSEDcu Reallocated Sectors, Pending Sectors și Uncorrectable Errors la zero, drive-ul e sănătos.Scrutiny stochează statusul drive-urilor într-o bază de date SQLite la
/opt/scrutiny/config/scrutiny.db. Resetez manual statusul fals:Pasul 1 - intru în container:
docker exec -it scrutiny /bin/bashPasul 2 - instalez sqlite3 (nu e inclus în imagine, nu persistă după restart):
apt-get update && apt-get install -y sqlite3Pasul 3 - resetez statusul:
sqlite3 /opt/scrutiny/config/scrutiny.db "UPDATE devices SET device_status = null;"Pasul 4 - rulez manual collector-ul:
/opt/scrutiny/bin/scrutiny-collector-metrics runPasul 5 - ies din container:
exitAtenție:
SYS_ADMINtrebuie să fie deja prezent încap_addînainte de acest pas. Dacă faci resetul înainte de fix, collector-ul va rescrie imediat statusul Failed și trebuie să repeți toată procedura.Verificare suplimentară - SMART extended test pe HDD
Deși eram convins că e o alertă falsă, am rulat și un test extended S.M.A.R.T. complet pe HDD, ca să fiu sigur:
sudo smartctl -t long /dev/sdaTestul durează în funcție de dimensiunea drive-ului - pentru un HDD de 6TB, estimarea a fost de 651 de minute (~10 ore). La final:
sudo smartctl -a /dev/sda | grep -A 1 "SMART overall"Rezultat:
Completed without error- drive-ul e perfect sănătos.Rezultatul final
După toate corecțiile, ambele drive-uri apar cu status verde în Scrutiny:
- ADATA Legend 710 (
/dev/nvme0) - Healthy - Seagate ST6000VX009 (
/dev/sda) - Healthy
Scrutiny rulează acum cu
restart: unless-stopped, scanează automat drive-urile și trimite notificări prin email dacă apare ceva real.Rezumat
Două lucruri de reținut dacă instalezi Scrutiny cu drive-uri NVMe sau Seagate:
1. NVMe necesită
SYS_ADMINîncap_add, nu doarSYS_RAWIO. Fără el, citirea atributelor NVMe eșuează cu erori de checksum.2. Seagate Seek/Read Error Rate sunt fals pozitive. Seagate encodează statistici complexe în atributele S.M.A.R.T. pe care Scrutiny le interpretează greșit. Verifică întotdeauna
smartctldirect și uită-te la atributele cu adevărat relevante: Reallocated Sectors (ID 5), Pending Sectors (ID 197) și Uncorrectable Errors (ID 198). Dacă acestea sunt la zero și testul overall e PASSED, drive-ul e sănătos. - ADATA Legend 710 - SSD NVMe, 1TB, drive de sistem (
-
De ceva timp rulam mai multe servicii self-hosted direct pe calculatorul meu cu Linux Mint. Funcționa, dar cu un dezavantaj major: dacă stingeam calculatorul, se opreau și serviciile. Nu tocmai ideal când vrei să accesezi FreshRSS sau Wallabag de pe telefon la miezul nopții.
Soluția evidentă era un server dedicat care să ruleze non-stop. Am ales un Intel NUC cu procesor Celeron J4025 și 4GB RAM - modest, dar perfect pentru uz personal. Consum mic de energie, fără zgomot, stă ascuns undeva pe un raft. Pe el am instalat Ubuntu Server 24.04.
Acest articol documentează tot procesul: de la instalarea Docker până la Tailscale, Caddy și Vaultwarden.
Starea inițială - ce rulam pe Mint
Pe Linux Mint aveam organizate serviciile în
~/.services/, fiecare cu propriuldocker-compose.yml:Serviciu Port Descriere Domain Locker 3000 Monitorizare domenii FreshRSS 8080 Agregator RSS Linkding 9090 Manager de bookmark-uri Booktracker 2341 Jurnal de lectură Wallabag 6500 Read-it-later Toate cu
restart: unless-stoppedși volume Docker gestionate de engine.Pasul 1 - Instalarea Docker pe NUC
Mă conectez la NUC prin SSH și instalez Docker din repository-ul oficial:
# Actualizează lista de pachete și instalează dependințele sudo apt update sudo apt install -y ca-certificates curl gnupg # Adaugă cheia GPG oficială Docker sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Adaugă repository-ul Docker echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Instalează Docker Engine + Compose plugin sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginAdaug userul meu în grupul
dockerca să nu fie nevoie desudola fiecare comandă:sudo usermod -aG docker $USERMă deconectez și reconectez prin SSH, apoi verific:
docker --version docker compose version docker run hello-worldOutput-ul
Hello from Docker!confirmă că totul e în regulă.Pasul 2 - Structura de directoare
Pe un server, convenția e diferită față de un desktop. În loc de
~/.services/(director ascuns în home), am ales/opt/services/- standard Linux pentru aplicații third-party, accesibil logic, separat de fișierele personale.Pe NUC:
sudo mkdir -p /opt/services/{domain-locker,freshrss,linkding,booktracker,wallabag} sudo chown -R thinkroot:thinkroot /opt/services
Pasul 3 - Copierea fișierelor Compose
De pe Mint, copiez fișierele
docker-compose.ymlpe NUC via SCP:scp ~/.services/domain-locker/docker-compose.yml thinkroot@192.168.1.x:/opt/services/domain-locker/ scp ~/.services/freshrss/docker-compose.yml thinkroot@192.168.1.x:/opt/services/freshrss/ scp ~/.services/linkding/docker-compose.yml thinkroot@192.168.1.x:/opt/services/linkding/ scp ~/.services/booktracker/docker-compose.yml thinkroot@192.168.1.x:/opt/services/booktracker/ scp ~/.services/wallabag/docker-compose.yml thinkroot@192.168.1.x:/opt/services/wallabag/
Pasul 4 - Exportul volumelor de pe Mint
Datele efective (feed-urile RSS, bookmark-urile, cărțile) trăiesc în volume Docker. Le export pe fiecare ca arhivă
.tar.gz:# Pe Mint - export volume docker run --rm \ -v freshrss_data:/data \ -v $HOME:/backup \ alpine tar czf /backup/freshrss_data.tar.gz -C /data . docker run --rm \ -v freshrss_extensions:/data \ -v $HOME:/backup \ alpine tar czf /backup/freshrss_extensions.tar.gz -C /data . docker run --rm \ -v linkding_data:/data \ -v $HOME:/backup \ alpine tar czf /backup/linkding_data.tar.gz -C /data . docker run --rm \ -v wallabag_data:/data \ -v $HOME:/backup \ alpine tar czf /backup/wallabag_data.tar.gz -C /data . docker run --rm \ -v wallabag_images:/data \ -v $HOME:/backup \ alpine tar czf /backup/wallabag_images.tar.gz -C /data .Booktracker stochează datele direct în directorul serviciului (bind mount), nu în volume Docker, deci e suficient să copiez directorul
data/:scp -r ~/.services/booktracker/data thinkroot@192.168.1.x:/opt/services/booktracker/Transfer arhivele pe NUC:
scp ~/*.tar.gz thinkroot@192.168.1.x:~/Pasul 5 - Importul volumelor pe NUC
Pornesc întâi serviciile o dată pentru ca Docker să creeze volumele corecte, apoi le opresc și import datele:
# Pe NUC - pornire inițială pentru creare volume cd /opt/services/freshrss && docker compose up -d cd /opt/services/linkding && docker compose up -d cd /opt/services/wallabag && docker compose up -d # Oprire înainte de import docker compose -f /opt/services/freshrss/docker-compose.yml down docker compose -f /opt/services/linkding/docker-compose.yml down docker compose -f /opt/services/wallabag/docker-compose.yml downO mică lecție de Docker: numele volumelor create de Compose au prefix dublu (ex.
freshrss_freshrss_data), nu simplu (freshrss_data). Verific cu:docker volume ls | grep -E "freshrss|linkding|wallabag"Import datele în volumele corecte:
docker run --rm \ -v freshrss_freshrss_data:/data \ -v $HOME:/backup \ alpine sh -c "cd /data && tar xzf /backup/freshrss_data.tar.gz" docker run --rm \ -v freshrss_freshrss_extensions:/data \ -v $HOME:/backup \ alpine sh -c "cd /data && tar xzf /backup/freshrss_extensions.tar.gz" docker run --rm \ -v linkding_linkding_data:/data \ -v $HOME:/backup \ alpine sh -c "cd /data && tar xzf /backup/linkding_data.tar.gz" docker run --rm \ -v wallabag_wallabag_data:/data \ -v $HOME:/backup \ alpine sh -c "cd /data && tar xzf /backup/wallabag_data.tar.gz" docker run --rm \ -v wallabag_wallabag_images:/data \ -v $HOME:/backup \ alpine sh -c "cd /data && tar xzf /backup/wallabag_images.tar.gz"
Pasul 6 - Pornirea tuturor serviciilor
cd /opt/services/domain-locker && docker compose up -d cd /opt/services/freshrss && docker compose up -d cd /opt/services/linkding && docker compose up -d cd /opt/services/booktracker && docker compose up -d cd /opt/services/wallabag && docker compose up -dVerific că totul rulează:
docker psToate containerele apar cu status
Up. Serviciile sunt accesibile la192.168.1.x:PORTdin rețeaua locală.Pasul 7 - Curățarea de pe Mint
Odată confirmat că totul merge pe NUC, șterg totul de pe Mint:
# Oprire containere + ștergere volume docker compose -f ~/.services/domain-locker/docker-compose.yml down -v docker compose -f ~/.services/freshrss/docker-compose.yml down -v docker compose -f ~/.services/linkding/docker-compose.yml down -v docker compose -f ~/.services/booktracker/docker-compose.yml down -v docker compose -f ~/.services/wallabag/docker-compose.yml down -v # Ștergere directoare și arhive temporare rm -rf ~/.services rm ~/*.tar.gz # Dezinstalare Docker sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo rm -rf /var/lib/docker /var/lib/containerd sudo rm /etc/apt/sources.list.d/docker.list sudo rm /etc/apt/keyrings/docker.gpg sudo apt autoremove -y
Pasul 8 - Tailscale: acces de oriunde
Serviciile rulează, dar sunt accesibile doar în rețeaua locală. Vreau să le accesez și când sunt în deplasare, fără să expun porturile pe internet.
Tailscale rezolvă asta elegant - creează un VPN mesh privat între dispozitivele mele, cu MagicDNS și certificate SSL automate.
Instalare pe NUC:
curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale upSe generează un link de autentificare - îl deschid în browser, mă autentific cu contul Tailscale. NUC-ul apare în dashboard cu hostname-ul
thinkserver.Activez HTTPS în Tailscale Admin Console (Settings → HTTPS Certificates), apoi generez certificatele pe NUC:
sudo tailscale cert thinkserver.tailxxxx.ts.netAceasta scrie două fișiere în directorul curent:
thinkserver.tailxxxx.ts.net.crtthinkserver.tailxxxx.ts.net.key
Mut certificatele într-un loc logic:
sudo mkdir -p /opt/services/caddy/certs sudo mv thinkserver.tailxxxx.ts.net.crt /opt/services/caddy/certs/ sudo mv thinkserver.tailxxxx.ts.net.key /opt/services/caddy/certs/ sudo chown -R thinkroot:thinkroot /opt/services/caddyInstalez Tailscale și pe celelalte dispozitive (Linux Mint, telefon) cu același cont.
Pasul 9 - Caddy: reverse proxy cu HTTPS
Vreau să accesez serviciile prin HTTPS la un singur domeniu, nu prin portul 8080 sau 9090. Instalez Caddy ca reverse proxy.
/opt/services/caddy/Caddyfile:thinkserver.tailxxxx.ts.net { tls /certs/thinkserver.tailxxxx.ts.net.crt /certs/thinkserver.tailxxxx.ts.net.key # Vaultwarden reverse_proxy vaultwarden:80 }/opt/services/caddy/docker-compose.yml:services: caddy: image: caddy:latest container_name: caddy restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./certs:/certs networks: - vaultwarden_default networks: vaultwarden_default: external: true cd /opt/services/caddy && docker compose up -d
Pasul 10 - Vaultwarden: manager de parole self-hosted
Trecerea de la Bitwarden cloud la Vaultwarden (implementare open-source compatibilă 100% cu clienții Bitwarden) era pe lista mea de ceva timp. Acum că am serverul și HTTPS-ul la locul lui, nu mai am scuze.
/opt/services/vaultwarden/docker-compose.yml:services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped ports: - "8222:80" volumes: - vaultwarden_data:/data environment: DOMAIN: "https://thinkserver.tailxxxx.ts.net" SIGNUPS_ALLOWED: "true" volumes: vaultwarden_data: cd /opt/services/vaultwarden && docker compose up -dAccesez
https://thinkserver.tailxxxx.ts.net, creez contul, import parolele din Bitwarden (export CSV → import în Vaultwarden). Instalez extensia de browser și aplicația mobilă, configurate cu serverul propriu.După ce am verificat că totul e importat corect, dezactivez înregistrările noi din Vaultwarden:
environment: SIGNUPS_ALLOWED: "false" docker compose up -d --force-recreateO perioadă am ținut ambele conturi (Bitwarden cloud + Vaultwarden) active în paralel, ca perioadă de tranziție.
Rezultatul final
Structura completă a serverului:
/opt/services/ ├── caddy/ │ ├── docker-compose.yml │ ├── Caddyfile │ └── certs/ ├── domain-locker/ │ └── docker-compose.yml ├── freshrss/ │ └── docker-compose.yml ├── linkding/ │ └── docker-compose.yml ├── booktracker/ │ ├── docker-compose.yml │ └── data/ ├── wallabag/ │ └── docker-compose.yml └── vaultwarden/ └── docker-compose.ymlServicii care rulează acum non-stop pe NUC, accesibile din orice loc prin Tailscale (nu toate, dar pe viitor așa o să fie):
Serviciu Acces Domain Locker 192.168.1.x:3000(local)FreshRSS 192.168.1.x:8080(local)Linkding 192.168.1.x:9090(local)Booktracker 192.168.1.x:2341(local)Wallabag 192.168.1.x:6500(local)Vaultwarden https://thinkserver.tailxxxx.ts.net(Tailscale) -
Dimineața asta a început prost. M-am trezit, am apăsat pe butonul de pornire și... ecran negru. Complet negru.
Singurul lucru care indica că ceva se întâmplă era că se auzea HDD-ul cum cârie, lumina de la tastatură era aprinsă și se auzeau 3 bipuri la pornire - primul mai lung, apoi două scurte. Sistemul de operare probabil pornea, dar nu vedeam absolut nimic pe ecran.
Am început să transpir. Primul gând? S-a dus placa video. Am un AMD Radeon RX 6600 și CPU-ul meu nu are modul grafic integrat, deci fără placă video dedicată funcțională nu pot vedea nimic. Am stat câteva minute să mă gândesc la toate variantele posibile și niciuna nu era bună.
M-am hotărât să acționez. Am oprit calculatorul, am desfăcut carcasa și prima dată am scos placa video. Am curățat contactele și am băgat-o la loc. Am pornit - același rezultat. Ecran negru și aceleași bipuri.
Atunci mi-am amintit că bipurile la pornire pot indica și o problemă cu RAM-ul, nu doar cu placa video. Aveam 4 stickuri de RAM Corsair Vengeance LPX instalate - două cumpărate noi și două luate second hand de pe OLX.
Am început să le testez pe rând. Am scos toate cele 4 stickuri și le-am băgat înapoi unul câte unul, pornind calculatorul de fiecare dată.
Până la urmă am găsit vinovatul - unul dintre stickurile de RAM era defect. Când l-am scos pe cel stricat, calculatorul a pornit normal, cu imagine și fără bipuri.
Nu știu exact care dintre ele s-a stricat - cel nou sau unul dintre cele second hand de pe OLX. Probabil unul din SH-uri, dar nu pot fi 100% sigur.
-
Stăteam de vorbă cu un coleg la serviciu despre tot felul de lucruri: terenuri, livezi, garduri, case - știți voi, genul de discuții care pornesc de la nimic și ajung peste tot. La un moment dat a venit vorba despre nuci și am aflat ceva ce nu știam: nucii sunt protejați de lege în România.
Sincer, m-a surprins. Nu mă gândisem niciodată că un pom de pe proprietatea ta ar putea fi subiect de lege. Dar există motive bune pentru asta. În primul rând, lemnul de nuc este extrem de valoros - e folosit în mobilă de lux, instrumente muzicale și chiar arme. Tocmai din cauza asta, fără o reglementare, mulți ar fi tentați să taie nucii doar ca să vândă lemnul, iar asta ar duce la dispariția lor rapidă.
Pe lângă valoarea economică, nucii pot trăi sute de ani și sunt o parte importantă din peisajul rural tradițional românesc. Au și un rol ecologic: oferă umbră, hrană pentru animale și ajută la stabilizarea solului. Practic, dacă ai un nuc pe proprietatea ta și vrei să-l tai, trebuie să obții o autorizație de la primărie. În unele cazuri, ești obligat să și replantezi. Altfel, riști amenzi destul de serioase.
Nu știu voi, dar eu unul nu auzisem de asta până acum. E unul din acele lucruri pe care le afli întâmplător, la o poveste cu un coleg.
-
Dacă ai urmărit știrile din lumea Linux în ultimii ani, ai întâlnit cu siguranță termeni ca „distribuție atomică„ sau „distribuție imuabilă". Sunt folosiți adesea împreună, uneori interschimbabil - dar nu înseamnă același lucru.
Ce înseamnă „atomic"?
În informatică, o operație „atomică" este una care fie se execută complet, fie nu se execută deloc. Nu există stare intermediară.
Aplicat la distribuțiile Linux, atomic descrie modul în care sunt gestionate actualizările sistemului. În loc să actualizezi pachetele unul câte unul - cum face un sistem tradițional bazat pe
aptsaudnf- o distribuție atomică actualizează întregul sistem ca o singură unitate. Dacă ceva merge prost în timpul procesului, sistemul revine automat la starea anterioară (rollback). Dacă totul e în regulă, noua versiune devine activă la următorul reboot.Avantajele sunt clare: nu mai poți ajunge cu un sistem pe jumătate actualizat după o întrerupere de curent sau o eroare de rețea. Fie ai versiunea veche, fie ai versiunea nouă.
Exemple de distribuții cu actualizări atomice: Aeryn, Fedora Silverblue, openSUSE MicroOS, NixOS, Vanilla OS.
Ce adaugă „imuabil"?
O distribuție atomică imuabilă face un pas în plus față de simpla atomicitate a actualizărilor: partiția de sistem este montată doar în citire (read-only) în timpul rulării normale.
Practic, fișierele din
/usr(și parțial/etc) nu pot fi modificate direct atât timp cât sistemul rulează. Nu poți instala un pachet „clasic" care să scrie în/usr/bin. Orice schimbare a sistemului de bază generează o nouă imagine, care devine activă abia după reboot.Modificările utilizatorului se fac prin alte mecanisme:
- Layere suplimentare peste imaginea de bază (ex.
rpm-ostreeîn Fedora Silverblue) - Containere pentru aplicații de dezvoltare (ex.
toolbox,distrobox) - Pachete Flatpak/AppImage/Snap pentru aplicații desktop
- Generații noi declarative, ca în NixOS
Atomic fără imuabilitate - exemplul Aeryn
Aeryn (bazat pe OpenMandriva) este un exemplu interesant de distribuție atomică care nu este imuabilă. Actualizările sunt aplicate tranzacțional - dacă ceva eșuează, sistemul rămâne intact. Ai rollback. Dar sistemul de fișiere rădăcină rămâne inscriptibil în timpul rulării.
Asta înseamnă că poți instala pachete în mod tradițional, poți edita fișiere de sistem direct, te poți comporta ca pe orice distribuție obișnuită - doar că actualizările majore sunt mai sigure datorită mecanismului atomic.
Acest model e mai aproape de experiența clasică Linux, cu un nivel suplimentar de siguranță.
Comparație directă
Atomic (ex. Aeryn) Atomic Imuabil (ex. Silverblue) Actualizări tranzacționale ✅ ✅ Rollback ✅ ✅ Sistem de fișiere read-only ❌ ✅ Instalare directă de pachete ✅ ❌ Risc de „drift" al configurației Mai ridicat Minim Reproductibilitate Parțială Ridicată Curbă de învățare Mică Mai mare Care e mai bun?
Depinde de ce cauți.
Dacă vrei siguranța actualizărilor atomice fără să schimbi modul în care lucrezi cu Linux, o distribuție atomică dar mutabilă ca Aeryn e o alegere excelentă. Tranziția e aproape transparentă.
Dacă vrei reproductibilitate maximă, un sistem care arată exact la fel pe orice mașină și care nu poate fi degradat accidental de o instalare nereușită, atunci o distribuție imuabilă merită efortul de adaptare.
Ambele reprezintă un pas înainte față de modelul tradițional de gestionare a pachetelor. Diferența e cât de departe vrei să mergi pe acel drum.
Ai întrebări sau experiențe cu distribuții atomice? Scrie un comentariu mai jos sau vino pe forumul Linux România.
- Layere suplimentare peste imaginea de bază (ex.
-
În ultimele zile, lumea AI-ului a fost zguduită de un scandal major care a declanșat una dintre cele mai mari revolte ale consumatorilor din scurta istorie a inteligenței artificiale comerciale. Vorbim de mișcarea #QuitGPT - un val de oameni care își anulează abonamentele la ChatGPT, nemulțumiți de direcția pe care OpenAI o urmează cu tot mai multă îndrăzneală.
Ce s-a întâmplat
Pe 27 februarie 2026, OpenAI a anunțat că a încheiat un acord cu Pentagonul (pe care mulți îl numesc mai potrivit „Departamentul de Război") pentru a-și pune modelele AI la dispoziția rețelelor clasificate ale armatei americane. Deși Sam Altman a susținut pe X că tehnologia nu va fi folosită pentru supraveghere în masă, un oficial guvernamental a contrazis imediat această afirmație, precizând că modelele OpenAI vor fi utilizate „prin orice mijloace legale" - iar supravegherea în masă a cetățenilor americani este, în anumite scenarii, perfect legală conform Legii PATRIOT post-9/11.
Contextul este și mai semnificativ dacă îl privim în ansamblu: cu câteva ore înainte de anunțul OpenAI, Anthropic - compania din spatele Claude AI - a refuzat categoric să ofere Pentagonului acces nerestricționat la tehnologia sa. Motivul? Armata dorea să folosească Claude pentru supravegherea în masă a cetățenilor și pentru roboți de ucidere autonomi, fără supraveghere umană. Anthropic a spus simplu: nu.
Răspunsul administrației Trump nu a întârziat: Anthropic a fost practic pusă pe lista neagră a agențiilor guvernamentale americane. Iar câteva ore mai târziu, OpenAI și-a anunțat afacerea cu Pentagonul.
Mișcarea #QuitGPT
Reacția utilizatorilor a fost imediată. Pe Reddit, pe X și pe alte platforme, mii de oameni au început să posteze capturi de ecran cu abonamentele anulate, sub hashtagul #QuitGPT și #CancelChatGPT. Motivele sunt multiple și s-au acumulat în timp:
- acordul cu Pentagonul și riscul folosirii AI pentru supraveghere și arme autonome;
- legăturile politice ale conducerii OpenAI (președintele Greg Brockman și soția sa au donat 25 de milioane de dolari către MAGA Inc. în 2025, iar Sam Altman a contribuit cu 1 milion de dolari la fondul inaugural al lui Trump);
- calitatea ChatGPT, considerată în declin față de acum câteva luni;
- eliminarea modelului ChatGPT-4o, îndrăgit de mulți utilizatori.
Și, nu în ultimul rând, ceva ce m-a deranjat personal și pe mine: anunțul că OpenAI va introduce reclame în ChatGPT.
De ce eu am renunțat la ChatGPT
Eu am renunțat la ChatGPT chiar în momentul în care s-a anunțat că platforma urmează să introducă reclame. Pentru mine, acela a fost semnalul clar că OpenAI nu mai este o companie care prioritizează utilizatorul, ci una care urmează un model de business clasic - orientat spre profit cu orice preț, indiferent de experiența celui care plătește abonamentul.
Poate că unii se vor întreba: de ce nu ai ales un AI european sau unul open source? Este o întrebare legitimă, mai ales pentru cineva preocupat de independență digitală și confidențialitate. Răspunsul este simplu și sincer: momentan, niciun AI european nu se ridică la nivelul lui Claude AI sau măcar al ChatGPT. Apreciez enorm eforturile din Europa în domeniul inteligenței artificiale - și sper că lucrurile se vor schimba în viitor - dar nu îmi pot permite să sacrific calitatea instrumentului pe care îl folosesc zilnic din motive pur ideologice. Când va exista un AI european la același nivel, voi fi primul care îl adoptă. Până atunci, aleg cel mai bun instrument disponibil, de la o companie care, cel puțin deocamdată, demonstrează că are o coloană vertebrală.
Am trecut la Claude AI, de la Anthropic, și nu am regretat nicio clipă această decizie. Sincer vorbind, Claude este considerabil mai bun decât ChatGPT în ceea ce privește calitatea răspunsurilor, coerența conversațiilor lungi, capacitatea de analiză și, nu mai puțin important, onestitatea - Claude nu încearcă să-ți spună ce vrei să auzi, ci ceea ce este corect.
De ce Anthropic merită respectul nostru
Ceea ce s-a întâmplat săptămâna aceasta confirmă ceva ce mulți dintre noi bănuiam deja: Anthropic este o companie cu principii reale, nu doar declarative.
Când Pentagonul a venit cu cereri care încălcau valorile companiei - utilizarea AI pentru supravegherea cetățenilor și pentru arme letale autonome - Anthropic a spus nu. Nu condiționat, nu cu condiții negociabile, ci pur și simplu nu. Și au plătit un preț politic real pentru asta: excluderea din agențiile guvernamentale americane.
Îmi place enorm că Anthropic nu se lasă intimidată nici de guvernul SUA, nici de armată, nici de presiunile financiare imense care vin la pachet cu contractele de apărare. Într-o industrie în care Google a eliminat interdicțiile interne privind tehnologia militară, Microsoft a acceptat armele autonome „cu condiția ca un om să apese trăgaciul", Amazon nu are nicio restricție clară, iar Meta curtează activ Pentagonul - Anthropic rămâne o voce izolată, dar puternică.
Această decizie nu este doar un gest moral. Este și un argument solid pentru utilizatorii care, ca mine, vor să știe că AI-ul pe care îl folosesc zilnic nu este antrenat sau adaptat pentru a servi interesele militare sau de supraveghere.
Concluzie
Mișcarea #QuitGPT nu este doar despre un contract cu Pentagonul. Este despre o întrebare mai profundă pe care toți utilizatorii de AI ar trebui să și-o pună: cui servește, de fapt, instrumentul pe care îl folosesc?
Eu mi-am găsit deja răspunsul. Claude AI, de la o companie care a ales principiile în fața banilor și a puterii politice, este alegerea mea. Și, judecând după creșterea rapidă a mișcării #QuitGPT, nu sunt deloc singur în această decizie.
-
Într-o piață dominată de giganți precum Google Chrome, Microsoft Edge sau Mozilla Firefox, o companie românească din Iași îndrăznește să propună o alternativă construită în jurul unui principiu simplu, dar din ce în ce mai rar: tu ești utilizatorul, nu produsul.
Cine stă în spatele lui Cronos?
Cronos Browser este dezvoltat de AVALW SRL, o firmă de tehnologie înregistrată în România, cu sediul în Iași. Aceasta nu lucrează doar la browser, ci construiește un întreg ecosistem de produse orientate spre confidențialitate: propriul motor de căutare disponibil la avalw.org, o platformă de mesagerie criptată numită Thunder, un protocol propriu de securitate denumit AVALW Protocol și o platformă de publicitate etica numită AVALW Ads, care promite cookie-less tracking și tehnologie hologram.
Misiunea declarată a companiei este construirea de alternative reale la Big Tech, cu un angajament explicit față de regulamentele GDPR - beneficiu natural al faptului că operează din interiorul Uniunii Europene.
Ce este Cronos, concret?
Cronos este construit pe motorul Chromium, ceea ce îi asigură compatibilitate cu extensiile și siturile web cu care utilizatorii sunt deja obișnuiți, adăugând peste acest fundament un strat consistent de funcționalități axate pe confidențialitate.
Versiunea actuală, v11.1.0, se prezintă ca un browser descentralizat, construit pe AVALW Protocol, care operează cu dependență zero față de cloud - fără logare de IP, fără colectare de date și fără telemetrie ascunsă.
Browserul este gratuit și nu necesită niciun cont pentru utilizare. Este disponibil în Microsoft Store și App Store pentru iOS și iPadOS, iar versiunile pentru macOS și Linux sunt în dezvoltare.
Funcționalitățile principale
UIKI - Asistentul AI local. Probabil cea mai distinctivă caracteristică a lui Cronos este integrarea unui asistent de inteligență artificială care rulează exclusiv pe dispozitivul utilizatorului. Nu există procesare în cloud, nu există servere externe - UIKI funcționează complet offline, inclusiv pentru rezumarea paginilor, traduceri și răspunsuri la întrebări. Aceasta vine cu un compromis evident: asistentul nu are acces la internet în timp real și nu poate oferi informații actualizate, cum ar fi prognoza meteo.
AdBlocker nativ. Spre deosebire de alte browsere care impun instalarea de extensii terțe, Cronos include un blocator de reclame integrat, cu categorii separate pentru reclame, trackere și analytics, plus o listă personalizată de domenii blocate. Reclamele de pe YouTube rămân, deocamdată, o excepție.
Layout / Split Screen. O funcție de productivitate utilă concret: fereastra browserului poate fi împărțită în două sau patru panouri, permițând accesul simultan la mai multe situri. Suportul pentru ecran divizat permite lucrul cu patru pagini simultan, transformând modul în care utilizatorul lucrează în multitasking.
Manager de parole local. Parolele, cardurile și datele sensibile sunt stocate cu criptare AES-256. Spre deosebire de managerii bazați pe cloud, vault-ul este local, iar compania nu poate accesa aceste date.
AVALW Protocol. Un protocol de securitate propriu, prezentat ca un strat suplimentar față de HTTPS standard, menit să protejeze împotriva atacurilor de tip man-in-the-middle și a interceptării pachetelor. Deocamdată este în stadiu de dezvoltare.
Stellar Mode și Game Mode. Stellar Mode permite browsing în overlay în timpul jocurilor, iar Game Mode optimizează performanța pentru aplicații web intensive, cu utilizare minimă a CPU și RAM.
Pool Mode / Contributor Mode. Utilizatorii pot opta să contribuie cu resurse de calcul ale propriului dispozitiv la rețeaua distribuită AVALW - similar conceptului de nod într-un sistem descentralizat. Această funcție este dezactivată implicit.
Motor de căutare propriu. avalw.org este integrat direct în browser și promite căutare fără cookies, fără istoric și fără profilare a utilizatorului, cu propriul crawler denumit AvalwBot.
Transparență verificabilă
Unul dintre argumentele cele mai interesante ale echipei AVALW este introducerea, în versiunea 11.1.0, a telemetriei publice în timp real - o primă la nivel mondial în rândul browserelor. Spre deosebire de alte browsere care colectează date în spatele ușilor închise, Cronos publică metricile de performanță public, pentru ca oricine să poată verifica afirmațiile companiei.
Un test realizat cu Wireshark și Burp Suite pe versiunea de Windows a arătat că, la pornire, conexiunile merg aproape exclusiv către infrastructura CDN - pentru descărcarea de configurații sau resurse - fără endpointuri tipice de analytics sau tracking.
Fiecare versiune lansată trece prin scanare VirusTotal, iar rezultatele sunt publicate transparent.
Cum se finanțează?
Browserul este gratuit permanent, fără vânzare de date. Modelul de finanțare se bazează pe AVALW Ads, o platformă de publicitate respectuoasă față de confidențialitate, cu tracking fără cookies - în curs de lansare.
Limitări și aspecte de urmărit
Ca orice proiect în stadiu incipient, Cronos vine și cu câteva rugozități. Interfața, deși curată și rapidă, are mici probleme de UX: mutarea ferestrei cu mouse-ul este dificilă din orice punct în afara zonei de lângă butonul de minimizare. Lucrul pe multiple monitoare nu este încă bine acoperit - nu există suport simplu pentru a deschide ferestre separate pe ecrane diferite.
AVALW Protocol și ecosistemul descentralizat rămân în mare parte promisiuni pentru viitor. Versiunea pentru macOS și Linux nu este disponibilă încă, ceea ce limitează adresabilitatea browserului. UIKI, asistentul AI, ocupă aproape 8 GB dacă este instalat - o dimensiune semnificativă, justificată de procesarea locală a modelului.
Concluzie
Cronos Browser nu este un produs matur care să ia față lui Brave sau Firefox în acest moment. Este, în schimb, un proiect coerent și ambițios, construit în jurul unei idei solide: confidențialitatea ca implicită, nu ca opțiune. Faptul că vine din România, respectă GDPR prin design și propune un ecosistem complet - de la motor de căutare la AI local și protocol de securitate propriu - îl face cu siguranță un proiect demn de urmărit.
Dacă promisiunile de transparență se confirmă pe termen lung și echipa reușește să livreze restul ecosistemului, AVALW ar putea deveni unul din puținele exemple europene autentice de alternativă la dominația Big Tech în spațiul browserelor.
--- Cronos Browser poate fi descărcat gratuit din Microsoft Store sau de pe cronos.avalw.com. Versiunea pentru iOS și iPadOS este disponibilă în App Store.
-
De mult timp am avut jurnalul construit doar pe HTML/CSS, iar în ultimul an pe PHP/HTML/CSS/JavaScript. Îmi plăcea acest lucru pentru că îmi plăcea să modific câte ceva la jurnal din când în când.
Cu timpul m-am săturat să tot scriu cod HTML pe lângă articol - îmi lua prea mult timp. Așa că am trecut la PHP și automatizări care să citească fișiere text (
.txt) și markdown (.md) și să le afișeze ca articole. Am făcut și un panou de administrare, mai mult pentru postarea articolelor, ca să nu tot deschid aplicația de FTP.Îmi plăcea să mă ocup de jurnal în acest mod, dar a devenit prea complicat. Toate variantele și design-urile le-am făcut cu ajutorul AI-ului, iar la HTML/CSS nu mă pricep foarte bine, iar la PHP/JavaScript nu mă pricep deloc - cel puțin nu suficient cât să fac jurnalul cum trebuie și să nu mai intervin la el o bună perioadă de timp. AI-ul face multe greșeli care nu se văd imediat, dar se văd în cod. Și nu îmi plăcea acest lucru. De câte ori încercam să repar ceva, AI-ul strica altceva.
În urmă cu câteva săptămâni am citit un articol de la Kev Quirk în care anunța lansarea platformei Pure Blog. La momentul respectiv mi-am zis că nu am nevoie de ea - până de curând, când Kev a anunțat și lansarea Pure Comments. La asta s-au adăugat și articolele lui Jack Baty, care a testat Pure Blog și nu a avut decât cuvinte de laudă.
Așa că am trecut la testarea Pure Blog. Am personalizat design-ul și mi-a plăcut ce am văzut - atât felul în care se administrează platforma, cât și cât de ușor se publică articolele. Și am decis să pun platforma pe jurnalul meu.
Am ales un design pe placul meu, am integrat Pure Comments pentru o secțiune de comentarii, iar articolele sunt salvate în markdown, ceea ce înseamnă că am putut să îmi aduc și vechile articole înapoi fără niciun efort.
