Linux: Raspberry Pi i Netflix!

2022-08-31

Ceny prądu idą w górę, bo jakoś w dół nie chcą chodzić. Tymczasem, jak się już liźnie bakcyla Linuxa, to chciałoby się pewne rzeczy w domu poatuomatyzować, a więc urządzenie musi być cały czas włączone.

Dlatego do takich celów można przeznaczyć urządzenie Raspberry Pi, które oprócz pełnienia funkcji serwera SAMBA, FTP, WWW, może pracować jako serwer multimediów. Istnieją gotowe dystrybucje do obsługi Raspberry Pi jako serwera mediów (np. LibreELEC https://libreelec.tv/), ale wiele rzeczy jesteśmy w stanie skonfigurować korzystajc ze standardowego systemu  Rasbian. Może czasami jest trochę trudniej, więcej trzeba się napisać albo naklikać, ale sie da.

Nie będę powtarzał dobrych instrukcji, ale chętnie na nie wskażę:

A dlaczego podaję aż tyle adresów? Bo, jak to bywa w open source, coś czasami zadziała, a czasami nie zadziała. W takim przypadku warto spróbować metody z innej strony. I najważniejsze – nie zrażać się!

By Rafał Kraik in Linuxy

PostgreSQL: Czy grozi Ci problem transaction wraparound?

2022-08-20

Pozwól, że nie będę tłumaczył skąd bierze się problem wraparound w PostgreSQL. Faktem jest jednak, że śpi się lepiej, kiedy masz świadomość, że taki problem Ci nie zagraża. Jak więc sprawdzić, czy jeszcze daleko do zderzenia z wraparound?

Oto query, które można uruchomić na bazie, żeby sprawdzić, co się dzieje z identyfikatorami transakcji:

  SELECT 
  datname, 
  age(datfrozenxid) AS frozen_xid_age, 
  ROUND(
    100 *(
      age(datfrozenxid)/ 2146483647.0 :: float
    )
  ) consumed_txid_pct, 
  current_setting('autovacuum_freeze_max_age'):: int - age(datfrozenxid) AS remaining_aggressive_vacuum 
FROM 
  pg_database 
WHERE 
  datname NOT IN (
    'cloudsqladmin', 'template0', 'template1'
  );

Query pochodzi z https://cloud.google.com/blog/products/databases/how-to-accelerate-transaction-id-freezing-in-cloud-sql-for-postgresql

Oj ciekawe obliczenia się tu dzieją:

  • Każda baza przechowuje w swoich metadanych datfrozenxid – jest to identyfikator ostatniej transakcji, jaka została zamrożona. Jeśli ten numer jest stosunkowo blisko numeru bieżącej transakcji txid_current(), to dobrze – do przepełnienia mamy daleką drogę 🙂
  • Ponieważ maksymalna liczba transakcji to 2^31, to można łatwo policzyć procent drogi do przepełnienia licznika transakcji, co dzieje się w drugiej kolumnie tego zapytania
  • Można wreszcie wyznaczyć, ile jeszcze transakcji zostało do uruchomienia agresywnego autovacuum. Wystarczy do parametru autovacuum_freeze_max_age odjąć wiek datfrozenxid. Co istotne – odejmujemy wiek (age), a nie sam numer transakcji.

Zdarza sie, że adminom myli się wiek z numerem transakcji. Pomocne może być pamiętanie o następującej równości:

age(datfrozenxid) = txid_current() - datforzenxid

Ogólnie rzecz ujmując powinniśmy unikać operacji obliczeniowych na identyfikatorach transakcji, bo po wraparound ta matematyka może już nie działać, ale przynajmniej w początkowym etapie działania bazy (przed pierwszym przekręceniem licznika transakcji, wyniki powinny być intuicyjne. Można nawet pokusić się o sprawdzenie, czy age() zwraca rzeczywiście wynik odejmowania wspomnianych wartości:

dvdrental=# SELECT
   datname,
   txid_current(),
   datfrozenxid, age(datfrozenxid),
   txid_current() - datfrozenxid::text::bigint AS age_calc
FROM pg_database;
  datname  | txid_current | datfrozenxid | age  | age_calc
-----------+--------------+--------------+------+----------
 postgres  |         1847 |         1596 |  251 |      251
 dvdrental |         1847 |         1826 |   21 |       21
 template1 |         1847 |          726 | 1121 |     1121
 template0 |         1847 |          726 | 1121 |     1121
(4 rows)

Widać, że age() zwraca wynik odejmowania txid_current() – datfrozenxid

Zapobiegliwy admin może więc sobie śledzić wyniki pierwszego z zaprezentowanych tu zapytań i w miarę możliwości… spać spokojnie

By Rafał Kraik in PostgreSQL

PostgreSQL: pg_dump: Aborting because of server version mismatch

2022-08-10

Błąd pojawia się przy poleceniu

pg_dump "host=... port=5432 dbname=... user=... password=... sslmode=require" -s -O > db_schema.sql

Rzeczywiście pg_dump był dość stary – 9.2.24, a serwer – też nie najnowszy – 11.16

Na serwerze było jednak zainstalowanych więcej wersji narzędzi Postgresa:

find / -name pg_dump -type f 2>/dev/null

Poz znalezieniu odpowiedniej wersji, można już odwołać się do konkretnej wersji pg_dump:

/usr/psql-11/pg_dump "host=... port=5432 dbname=... user=... password=... sslmode=require" -s -O > db_schema.sql
By Rafał Kraik in PostgreSQL

Linux Ubuntu: Hibernacja po zamknięciu laptopa

2022-07-11

Co jest najprzyjemniejsze po całym dniu pracy? Dźwięk zamykanej klapki laptopa. Pyk i masz wolne. Ufff

Ale co wtedy dzieje się na systemie? To zależy od tego jak jest skonfigurowane zdarzenie Lid closure.

Na moim ulubionym Ubuntu chcę, aby po zamknięciu klapki, system się zhibernował. Oto, co należy zrobić, żeby system się hibernował po zamknięciu laptopa.

  • Najpierw sprawdzamy, czy hibernacja w ogóle działa. Sprawdzisz to poleceniem
sudo systemctl hibernate
  • Po ponownym włączeniu można prześledzić, co odbiło się w logach:
sudo cat /var/log/syslog | grep "hibernation"

Powinno się tu udać wypatrzyć między innymi zdarzenia hibernation entry i hibernation exit

  • teraz pozostaje konfiguracja zdarzenia „zamykania klapki laptopa”. Otwórz plik  /etc/systemd/logind.conf

sudo vim /etc/systemd/logind.conf

Tutaj trzeba poszukać linijek

HandleLidSwitch=hibernate
HandleLidSwitchExternalPower=hibernate

HandleLidSwitch odpowiada za zdefiniowanie akcji, która ma być wykonana po zamknięciu klapki, gdy komputer nie jest podłączony do ładowarki, a HandleLidSwitchExternalPower odpowiada za tą samą sytuację, gdy komputer jest podłączony do ładowarki.  U mnie obie akcje są skonfigurowane na hibernate.

  • Po zapisaniu pliku należy zrestartować usługę systemd-login:
sudo systemctl restart systemd-logind.service
  • Właściwie już można zamknąć klapkę, poczekać, otworzyć, zalogować się i zajrzeć do pliku /var/log/syslog, żeby upewnić się, czy hibernacja została rzeczywiście wykonana:
sudo cat /var/log/syslog | grep "hibernation"
  • Jeśli nie, to spróbuj jeszcze zrestartować komputer. Koniec końców powinno zadziałać
By Rafał Kraik in Linuxy

PostgreSQL: PgAdmin4 – bardzo wolny

2022-07-03

Świeżo po instalacji znakomite narzędzie jakim jest PGAdmin4 nieco rozczarowało, bo działało okropnie wolno… Oto co pomogło (przynajmniej w pewnym stopniu).

Domyślnie serwer postgresql nasluchiwal na porcie 127.0.0.1 i w tym przypadku to śmiało wystarczało 🙂

Polecenie

show listen_addresses; 
 listen_addresses 
------------------
 localhost

pokazywało tylko adres localhost. Gdzieś jednak znalazłem info, żeby przełączyć go również na obslugę ipv6:

alter system set listen_addresses = '127.0.0.1,::1';
ALTER SYSTEM

Po restarcie:

sudo systemctl restart postgresql

listen_addresses zmienił swoją wartość na

show listen_addresses;
 listen_addresses 
------------------
 127.0.0.1,::1

A pgadmin4 po rozłączeniu i ponownym połączeniu działał znacznie lepiej 🙂

 

 

By Rafał Kraik in PostgreSQL

PostgreSQL: Instalacja PGAdmin4

2022-07-03

PGAdmin4 to aplikacja webowa stworzona w Python-Flask pozwalajaca na prace z baza danych PostgreSQL w interfejsie graficznym. Oto jak zainstalowac PGAdmin4 na Ubuntu:

Jak zwykle należy rozpocząć od aktualizacji:

sudo apt update

Teraz podłączamy repozytorium z PGAdmin4:

curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
sudo sh -c 'echo „deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main” > /etc/apt/sources.list.d/pgadmin4.list && apt update’

I już można instalować:

sudo apt install pgadmin4

Niestety to nie koniec instalacji. Na tym kroku na komputerze powinien już działać Apache2 i w katalogu /etc/apache2 powinien się nawet znajdować plik odpowiadający za konfigurację PGAdmin4. Niestety na razie jeszcze nieaktywny. Żeby go uaktywnić trzeba jeszcze uruchomić polecenie:

sudo /usr/pgadmin4/bin/setup-web.sh

Podczas konfiguracji trzeba podać poprawny adres email i potwierdzić instalację i restart usługi Apache2. Kiedy wszystko się zakończy można zacząć pracę z PGAdmin4 odwiedzając stronę:

http://127.0.0.1/pgadmin4

Zwróć uwagę, że logowanie do pgadmin jest dwuetapowe. Najpierw należy sie zalogować do aplikacji webowej pgadmin i tu możesz wykorzystać adres email i hasło wprowadzone podczas pracy setup-web.sh.

Następnie dodając serwer PostgreSQL należy podać nazwę użytkownika itniejącego w tej bazie danych.

Dodajmy, że instalując pgadmin4 na komputerze, instaluje się też aplikacja standalone pgadmin-desktop. Bardzo wygodna, jeśli myślisz o skonfigurowaniu środowiska tylko dla siebie, chciażby dlatego, że skrypty nie będą się zapisywały w dziwnej lokalizacji /var/lib/pgadmin/storage/<user_name>, tylko tam, gdzie sam/a zechcesz 🙂

 

By Rafał Kraik in PostgreSQL, SQL

Azure: Znajdowanie subnetid

2022-07-03

W konfiguracji pewnego programu musiałem podać subnetid, ale w portalu Azure nie udało mi się tej informacji znaleźć. Jest id dla VNET, ale dla subnet widać już tylko dość praktyczne informacje, a subnetid, raczej taką nie jest.

Po pierwsze wyświetliłem wszystkie informacje o podsieciach sieci:

az network vnet subnet list --resource-group MY_RESOURCEGROUP_NAME --vnet-name MY_VNET_NAME

Polecenie jak najbardziej zadziałało i wyświetliło to co trzeba, ale lista była dość długa, a mi przecież chodziło tylko o szczegóły jednego obiektu. No to jazda dalej:

az network vnet subnet show --resource-group MY_RESOURCEGROUP_NAME --vnet-name MY_VNET_NAME --name  MY_SUBNET_NAME

No i to był już całkiem fajny wynik

By Rafał Kraik in Azure