zapiski z podróży po świecie informatyki (ps. lisp jest lepszy)
Blog | Archiwum || StackOverflow | GitHub
2019-06-16

Swank Server.

Common Lisp daje tą magiczną możliwość - połączenia się z działającym programem i modyfikacji w locie. Słodkie!

Ale. To nie dzieje się samo. Żeby program napisany w Common Lispie dawał taką możliwość, trzeba to w nim uruchomić. Należy z użyciem quickload załadować bibliotekę swank, a następnie uruchomić swank server podając na jakim porcie ma nasłuchiwać. Np:

(ql:quickload :swank)
(swank:create-server :port 5000)

Aby się następnie z takim programem połączyć (z emacs'a), wystarczy M-x slime-connect RET <host> RET <port>.

Tagi: common-lisp interactive-programming lisp swank-server emacs
2019-06-15

WiFi ad-hoc z WPA.

WiFi ad-hoc?

W odróżnieniu od najczęściej stosowanej architektury WiFi master-slave (model klient-serwer), gdzie do pojedynczej maszyny zarządzającej ruchem (routera) łączy się wielu klientów, architektura ad-hoc to model klient-klient (ang. peer-to-peer). Nie ma więc pojedynczej maszyny, od której wszystko zależy, i przez która cały ruch przechodzi. W ad-hoc każdy klient łączy się z każdym bezpośrednio, więc sieć działa szybciej. Dodatkowo każdy punkt w sieci potrafi działać jako pośrednik w ruchu dla maszyn, które są poza zasięgiem! Więc sieć jest bardziej elastyczna, ma większy zasięg.

Same zalety więc w stosunku do klasycznego master-slave, ja czuję się przekonany!

Konfiguracja jest dość prosta. Dodatkowo każda maszyna jest klientem, więc każda konfigurowana jest tak samo.

1 Połączenie podstawowe.

Na początek w celach testowych, tymczasowo, zestawienie podstawowego połączenia bez kodowania. Sprawdzamy czy w najprostszy sposób, w trybie ad-hoc karty się połączą.

Uwaga! Jako że chwilowo będziemy udostępniać obie łączone maszyny w sieci ogólnodostępnej, warto wpierw wyłączyć wszystkie zewnętrzne usługi.

Założenia:

  • wszystkie komendy wykonujemy jako root
  • nasza karta WiFi to wlan0

1.1 Wpierw wyłączamy kartę WiFi żeby ją spokojnie przekonfigurować:

Jeżeli mamy jakiegoś szykownego network-manager'a, wyłączamy go żeby nam nie przeszkadzał, poleceniem typu (to bardzo zależy od dystrybucji):

service network-manager stop

Jeżeli karta była zablokowana, używamy rfkill do odblokowania:

rfkill unblock wifi

Wyłączamy (kładziemy) kartę:

ifconfig wlan0 down

1.2 Następnie konfigurujemy kartę:

Ustawiamy kartę WiFi w trybie ad-hoc:

iwconfig wlan0 mode ad-hoc

Ustawiamy jakieś ID sieci, np loza-0A0E1:

iwconfig wlan0 essid loza-0A0E1

Ustawiamy jakiś względnie wolny kanał, w przykładzie to kanał 6:

iwconfig wlan0 channel 6

1.3 Na koniec włączamy (podnosimy) kartę

…nadając jej przy okazji jakiś adres, np 192.168.0.1 z maską 24 bit (więc 255.255.255.0):

ifconfig wlan0 192.168.0.1/24 up

Teraz możemy sprawdzić, po wykonaniu powyższego na 2 maszynach, czy się połączyły. Dodatkowo (jeśli iptable nam nie blokuje) możemy jakieś ping'i czy co tam tylko pomiędzy nimi przesłać.

2 Bezpieczne połączenie z WPA.

Założenia:

  • wszystkie komendy wykonujemy jako root
  • nasza karta WiFi to wlan0
  • nasze ID sieci to loza-0A0E1

2.1 Konfiguracja

Cała konfiguracja połączenia zapisywana jest w jednym pliku. W dla przykładu będzie to /etc/wpa_supplicant/loza-0A0E1.conf.

echo "
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=root

network={
  mode=1
  ssid="loza-0A0E1"
  frequency=2412
  proto=RSN
  key_mgmt=WPA-PSK
  psk="super tajne haslo do lozy"
  pairwise=CCMP
  group=CCMP
}" > /etc/wpa_supplicant/loza-0A0E1.conf

2.2 Uruchomienie testowe, ręczne.

wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/loza-0A0E1.conf

2.3 Uruchomienie właściwe.

Od testowego różni się tylko tym, że komunikaty zapisuje do log'u (-f) i po uruchomieniu przechodzi do tła (-B).

wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/loza-0A0E1.conf -f /var/log/wifi-loza -B

3 Linki

Tagi: wifi wpa linux ifconfig iwconfig wpa_supplicant
2019-06-13

Domyślne hasło użytkownika postgres.

W postgre-sql nie ma domyślnego hasła dla użytkownika postgres. Oczywiste, prawda? Zamiast tego, na większości systemów Unix i Linux domyślnie autentykacja ustawiona jest w trybie ident, co oznacza że tylko wskazany użytkownik (postgres początkowo), zalogowany w systemie, może się połączyć z serwerem.

Aby móc łączyć się z postgres'em, wpierw z konta root przełączamy się na konto postgres i uruchamiamy klienta postgres:

su - postgres
psql

Teraz możemy opcjonalnie ustawić hasło dla użytkownika postgres:

alter user postgres password 'nowehaslo';

(to może wymagać zmiany w pg_hba.conf domyślnej autentykacji z ident na md5)

Ale nie jest to ważne. Ważniejsze jest (np ze względów bezpieczeństwa) dodanie własnego użytkownika z uprawnieniami do tworzenia nowych baz i użytkowników:

create user twojuzytk createdb createuser password 'haslouzytk';

…oraz użytkownika roboczego:

create user devuser01 password 'haslouzytk';

Teraz możemy już przejść do pracy, dodać nową bazę dla roboczego użytkownika:

create database proj01 owner devuser01;

Alternatywnie, można po przełączeniu się na użytkownika postgres, wpierw założyć bazę:

su - postgres
createdb proj01
psql -s proj01

A później dodać roboczego użytkownika i nadać mu na niej wszystkie uprawnienia:

create user devuser01 password 'haslouzytk';
grant all privileges on database proj01 to devuser01;
Tagi: postgres linux psql
2019-06-11

Server Side Includes część 1/2.

1 Apache+SSI

SSI to rozszerzenie do serwera Apache. Przychodzi razem z Apachem, więc "dostępność" jest bardzo wysoka (nawet jak się okazuje mój hosting provider domyślnie ma to włączone). Generalnie nie ma potrzeby niczego instalować, wystarczy włączyć.

1.1 Szybkość

W naiwnych testach typu ilość zapytań o dynamicznie tworzoną stronę "hello world" obsłużonych na sekundę, wychodzi że SSI jest szybsze od PHP, Pythona i całej reszty. Jeśli więc nie ma jakiś wielkich potrzeb dotyczących funkcjonalności, SSI jest na pewno najszybsze. Co za tym idzie najoszczędniejsze też dla zasobów serwera.

1.2 Funkcjonalność

Może w pierwszej chwili wydawać się skromna, ale nie ulegajmy złudzeniom, wiele fajnych rzeczy da się tym szybko i wygodnie zrobić. Funkcjonalność zawiera:

  • definiowanie zmiennych
  • wyświetlanie zmiennych
  • operacje warunkowe
  • dołączanie plików
  • dołączanie wyników wywołań url
  • wywoływanie poleceń shell
  • podstawową obsługę błędów

Oczywiście dekodera mpg w tym nie napiszemy, ale do budowy prostego serwisu web'owego w wielu przypadkach w zupełności wystarczy.

2 Konfiguracja

Dodać w pliku konfiguracyjnym vhost'a informację:

  • w którym katalogu (z podkatalogami) chcemy żeby apache przetwarzał pliki poprzez SSI, np:
<Directory /var/www/lisper>
  Options +Includes
</Directory>
  • które pliki są plikami dla SSI:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
  • dodatkowo, jeżeli wolimy żeby pliki dla SSI były wskazywane nie przez rozszerzenie (.shtml) a przez bit wykonywalności:
XBitHack on

Następnie zrestartować serwer Apache.

3 Test

Aby sprawdzić, czy wszystko dobrze poszło:

  • wrzucić do katalogu serwera wirtualnego plik index.html z prostym poleceniem dla SSI:
echo '<!--#echo var="DATE_LOCAL" -->' > index.html
  • i ustawić na nim bit wykonywalności:
chmod +x index.html

Po otworzeniu w przeglądarce, powinniśmy dostać stronę z aktualnym czasem i datą serwera.

4 Co dalej?

W następnej części opiszę na przykładach, co w zasadzie i jak z SSI możemy praktycznie zrobić.

5 Linki:

Tagi: apache ssi shtml
Pozostałe wpisy