sd_notify() support in nghttp2


nghttp2 is an implementation of HTTP/2. It comes as a set of libraries and tiny programs using them – a client, WWW server and a proxy. I've started using the last one, nghttpx, as a reverse proxy in few project and I'm quite content with.

Recently I implemented sd_notify() support in it. Explicit main PID tracking and readiness signaling works like a charm with systemd. sd_notify() protocol let us reliably supervise service even during hot-swap. That is, after receiving SIGUSR2, nghttpx executes new binary and tells systemd “this is main process now”. Old binaries can finish serving current requests and exit.

The pull request, after a round of comments and fixes, was merged into trunk after v1.19.0, so it will be in the next release. If you're willing to test, I'd ask you to check USR2 graceful shutdown branch, also. At the moment you need to manually SIGQUIT old processes after hot-swap. This branch is supposed to automate it.

And if you're maintain nghttp2 package in a distribution, please be sure to check changes in the service unit file.

Drutostróż


Od końca zeszłego wieku używam IPSec to zabezpieczania ruchu sieciowego. Zgodnie z dziwactwami opensource, FreeS/WAN morfował się przez Openswan do Libreswan i strongSWAN. Równolegle korzystałem też z racoon. Interesował mnie racoon2 z uwagi na integrację z Kerberosem (KINK), ale ten wygląda na porzucony. Ostatnio zainteresował mnie Wireguard, który do niektórych zastosowań jest całkiem fajny.

Może najpierw zalety. Wireguard oparty jest na współczesnych algorytmach i protokołach kryptograficznych, autor chwali się całkiem niezłą wydajnością i niskimi opóźnieniami. Konfiguracja jest bardzo prosta i działa w zasadzie od strzału. W systemie pojawiają się dodatkowe interfejsy sieciowe, w które można zajrzeć tcpdumpem albo wyroutować w nie ruch do szyfrowania.

Miłym dodatkiem jest że tak powiem moshowatość. Po jednokrotnym nawiązaniu sesji, wymiana zaszyfrowanych pakietów odbywa się nawet jeśli jednej z końcówek zmienia się adres IP (oczywiście jeśli po zmiane odezwie się on do drugiej). Trudno więc wpaść w sytuację, w której sesja jest niby zestawiona, a ruchu trafia w czarną dziurę.

Są też wady. W zestawieniu z IPSec, Wireguard całkowicie ignoruje aspekt zarządzania kluczami. Końcówki mają swoje klucze publiczny z prywatnym, ale administrator pozostawiony jest sam sobie z kwestią ich propagacji. A to często jest najbardziej skomplikowane zagadnienie przy opracowywaniu architektury rozwiązania szyfrującego.

Jak można się domyśleć z obecności dedykowanego interfejsu sieciowego, Wireguard obsługuje tylko tryb tunelowy. Szkoda, bo o wiele częściej korzystam z trybu transportowego. Sieciowo jest bardziej oczywisty. Części scenariuszy nie da się za pomocą WG zrealizować. Można za to inne, jak np. przeniesienie tylko szyfrowanego interfejsu sieciowego do przestrzeni nazw jakiegoś kontenera. Niektórzy tego potrzebują, o czym świadczy chociażby pojawienie się w Linuksie interfejsów ip_vti*.

No i największa wada, WireGuard jeszcze nie jest w jądrze Linuksa. Jason (autor WG) ma plan włączenia gdzieś w drugiej połowie roku. Od tego uzależniona jest szeroka dostępność w dystrybucjach i włączenie obsługi w systemd-networkd. Jak na razie dostępne są repozytoria i samokompilujące się moduły dla różnych dystrybucji.

WireGuard ma jakąś taką trudną do uchwycenia elegancję i czuję, że coś z tego będzie. Może nawet pojawi się wsparcie dla innych niż Linux systemów.

In order to use the media directive, you must install the "micawber" Python package.

Zaciskanie pasa TLSa


Red Hat zdecydował się na nietypowy krok w swojej dystrybucji Linuksa. W wersji RHEL 6.9 usuną lub ograniczą obsługę przestarzałej kryptografii. Zmiana dotknie SSLv2, MD5, RC4 itp. W aktualizacji stabilnej wersji nie powinno się zmniejszać zakresu obsługi, jednak ten krok wymusiły odkryte problemy z bezpieczeństwem.

Zmiana nie dotknie osób ponadprzeciętnie dbających o bezpieczeństwo, bo Ci admini już dawno wprowadzili zalecenia z Applied Crypto Hardening PDF. I przeprowadzili analizę, do jakiego stanu można podśrubować security, żeby za bardzo nie utrudnić innym. Ja przykładowo na serwerze WWW chciałem ograniczyć TLS tylko do v1.2/1.3. Ale sprawdziłem, i oznaczałoby zablokowanie dostępu osobom z Androidem <5.0. Na takie poświęcenie nie jestem gotów ;-). Nie każdy działający tablet z 4.x można zaktualizować, a jeśli ktoś wchodzi na bloga mobilnie, to zazwyczaj jest w trudnej sytuacji bez dostępu do czegoś lepszego. Zablokowanie mu dostępu w takiej chwili byłoby bezsensowne. A może i okrutne, bo pewnie popsuł sobie dostęp do internetu i szuka sposóbu na naprawę.

Przy okazji, wspomniany dokument w wielu przypadkach specyfikuje wprowadzenie ciągu określającego dozwolone algorytmy w postaci EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+…. Jest to dosyć nieelastyczne, w Fedorze można to zrobić lepiej: wystarczy podać PROFILE=SYSTEM. Wtedy poziom zabezpieczeń dla wszystkich usług na raz ustawimy poprzez manipulacje w /etc/crypto-policies/ i wywołanie polecenia update-crypto-policies.

Adresy .onion w całej sieci lokalnej


Tor ma taką fajną umiejętność tworzenia ukrytych adresów z wykorzystaniem domeny .onion – jak http://sejnfjrq6szgca7v.onion, http://uj3wazyk5u4hnvtk.onion/ czy https://facebookcorewwwi.onion. Ma też drugą fajną umiejętność, dzięki czemu można udostępnić łączność do takich adresów wszystkim urządzeniom w sieci lokalnej, nawet nie znającym Tora.

Sztuczka działa dzięki temu, że Tor potrafi działać jako serwer DNS i syntetyzować rekordy dla domeny .onion. W konfiguracji podajemy z jakiej podsieci mają być zwracane. Trzeba tylko przekierować routing ww. podsieci na klienta tor i voila. Tor odbierając pakiety skierowane na adres X wie, że ten adres zwrócił po zapytaniu o xyz.onion i odpowiednio kieruje połączenia.

Konfiguracja jest prosta. Najpierw wybieramy sobie ta specjalne podsieci:

VirtualAddrNetworkIPv4 10.192.0.0/10
VirtualAddrNetworkIPv6 [fceb:001a::]/32

Dwa, każemy Torowi obsługiwać DNS na naszym wewnętrznym interfejsie. Dobrze się chwile zastanowić, czy nie mamy tu już przypadkiem jakiegoś unbound, deadwood, systemd-resolved czy innego serwera DNS nasłuchującego na tym porcie. Jeśli tak, trzeba go wyłączyć. There can be only one!

DNSPort 203.0.113.2:53
DNSPort [2001:db8:85a3::8a2e:370:7334]:53
AutomapHostsOnResolve 1

Na koniec konfiguracji Tora zostaje kazać mu nasłuchiwać jako transparetne proxy, tak jak umie to Squid:

TransPort 0.0.0.0:9040
TransPort [::]:9040

Zostały jeszcze 2 drobiazgi – przekierowanie ruchu do magicznych podsieci na naszego cichociemnego tora:

iptables -A PREROUTING -p tcp -d 10.192.0.0/10 -j REDIRECT --to-ports 9040
ip6tables -A PREROUTING -p tcp -d fceb:001a::/32 -j REDIRECT --to-ports 9040

Oraz poinformowanie naszego głównego DNS, że domenę .onion obsługuje ktoś inny:

  Zone name: onion.
  Zone active: TRUE
  Zone forwarders: 2001:db8:85a3::8a2e:370:7334, 203.0.113.2
  Forward policy: first
----------------------------
Number of entries returned 1
----------------------------

W tym momencie na każdej stacji powinno działać:

$ host facebookcorewwwi.onion
facebookcorewwwi.onion has address 10.207.220.42
facebookcorewwwi.onion has IPv6 address fceb:1a:39ba:123f:1d30:72d1:a46e:1f93

$ wget sejnfjrq6szgca7v.onion
--2016-11-03 13:14:09--  http://sejnfjrq6szgca7v.onion/
Resolving sejnfjrq6szgca7v.onion (sejnfjrq6szgca7v.onion)... 10.221.133.34, fceb:1a:437e:551f:ef67:b2c2:bb64:ece5
Connecting to sejnfjrq6szgca7v.onion (sejnfjrq6szgca7v.onion)|10.221.133.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14760 (14K) [text/html]
Saving to: 'index.html'

index.html  100%[======================================================================================>]  14.41K  34.0KB/s    in 0.4s

2016-11-03 13:14:10 (34.0 KB/s) - 'index.html' saved [14760/14760]

Konfigurację dla innych systemów znajdziemy oczywiście na stronie projektu.

The perils of long development cycles


As for today, latest version of systemd is v231, released in July 2016. This is the version that will be in Fedora 25 (to be GA in three weeks). That's quite a long time between releases for systemd – we used to have a new version every two weeks.

During the hackfest at systemd.conf 2016, I've tried to tackle three issues biting me with Fedora 24 (v229, released in February this year) and F25. The outcome was… unexpected.

First one was a minor in issue in networking part of systemd suite. Data received via LLDP protocol had last letter cut off. I started searching through networkd code, looking for this off-by-one error. But it looked different, the output I was seeing didn't match the code. Guess what? LLDP presentation was reworked shortly after v229. The rework fixed the issue, but Fedora 24 newer received the backport. Which is fair, as the issue was cosmetic and not really important.

So I gone through another cosmetic issue which was annoying me. In list-timers display, multi-byte characters in day names were causing columns to be misaligned. I've discussed the issue as it appeared in Fedora 25 (v231) with Zbyszek during the conference, and I was ready to fix it. Again, I wasn't able to find the code, because it was reworked after v231 and the problem was corrected. I just wasted some time digging through codebase.

Last issue, which I didn't have time to chase, was more serious. Sometimes output from services stopped appearing in journal. It turned out to be genuine bug (#4408). Zbyszek fixed it last week, it will be in v232. This is serious flaw, the fix should be backported to v231 in Fedora 25 and other stable versions.

In summary, long development periods increase the need to do backports, escalating the workload on maintainers. Delays cause contributors using stable versions to lose time looking through evolved code, which may no longer be buggy. Prolonged delays between stable releases make the distributions ship old code. Even Fedora, which tries to be first.

My first #FlockToFedora


I started August with a trip to Kraków. On Monday I worked with people at my company's remote office. Remaining of the week was for FLOCK, an annual gathering of Fedora users and developers. It was fantastic!

I've met few old friends, made new ones, but most importantly I got to put faces to various nicks and names from Fedora mailling lists, IRC channels, bugzilla and so on. The schedule was packed, with 5 tracks going in parallel and ongoing discussusions in the hallways. I'm waiting for the videos to be uploaded to see everything I've missed.

Additionally – as it happens – agenda was partly in flux during the conference. Big kudos to organisers for providing up-to-date analogue board with all the sessions. It was in central location and was tremendously helpful:

/dżogstaff/2016.08.13-IMG_20160802_210217170.thumbnail.jpg

Current schedule - brilliant idea

Of course on-line schedule was being constantly updated, too.

There were many great talks, sessions and workshops (most of which I haven't seen yet ;-), but I was really impressed by “Secure Automated Decryption” by Nathaniel McCallum. Go watch it now. If you are short on time, jump to 16:55 for the really cool stuff. (It's automated LUKS with flexible policies, using Tang and Shamir's Secret Sharing; there's also a short demo video, too):

I also strongly recommend “Progress on Enterprise Fedora Desktop”. Awesomely integrated SSO between GNOME, FreeIPA and various web apps.

Content, organisation, events… everything was top-notch. I was very happy to be a part of FLOCK!

Rejestr na PP


Lokalny oddział Poczty Polskiej ma niezłą innowację: rejestr przesyłek nierejestrowanych. Informacje o normalnych przesyłkach poleconych trzymane są w systemie komputerowym. Natomiast nierejestrowane spisywane są przez pracowników w zeszyciku…

Zamiast sprzedaży rajstop, resorówek i wprowadzania bezpłatne WiFi mogłaby ta firma zająć się dostarczaniem przesyłek zamiast tylko roznosić awizo. Zmniejszyło by to kolejki w wiecznie zatłoczonych oddziałach.

Migracja do bcache


Natywnego użycia SSD jako pamięci podręcznej (coś jak ZIL czy L2ARC) w btrfs się nie doczekałem, mimo planów sprzed 4 lat. Postanowiłem więc zastosować bcache, który wydaje się już stabilne (miało na dorośnięcie sześć lat), chociaż jego autor wpadł ostatnio na dziwny pomysł przerobienia go na system plików.

bcache ma jeden spory minus: wymaga specjalnego sformatowania dysku, który ma przyspieszać (taki dm-cache potrafi się dołączyć na żywca). Trzeba więc jakoś przenieść dane.

Stan wyjściowy

Celem była sensowniejsza konfiguracja pamięci masowej na moim domowym serwerku. Jest to maszynka wszystkomająca, czyli jest tam mój katalog domowy, archiwum i serwer poczty, bazy danych, backupy zdjęć z wyjazdów, skany dokumentów, blog, stronka www, dane multimedialne, maszyny wirtualne i przeróżne inne dane. Do tej pory zaorganizowane tak:

/dżogstaff/2016.05.25-stan-wyjściowy.svg

Na dysku SSD trzymałem większośc /var i katalogi domowe. Nie widzę finansowego sensu trzymania wszystkiego na SSD.

Skorzystanie z bcache to wetknięcie w tę jengę kolejnego klocka. A nawet dwóch. Pojawiają się dwie możliwości umieszczenia nowej warstwy.

Opcja 1 – bcache na szczycie

Czyli tuż pod systemem plików:

/dżogstaff/2016.05.25-opcja1.svg

Zalety:

  • cache nie jest szyfrowany, więc powinno być szybciej

Ale również wady:

  • cache nie jest szyfrowany; co prawda wydaje mi się, że będzie tam sieczka, ale zawsze jest ryzyko odzyskania mniejszych plików

Opcja 2 - bcache na spodzie

Umieszczenie warstwy bcache tuż nad dyskami wyglądałoby tak:

/dżogstaff/2016.05.25-opcja2.svg

Zalety:

  • układ wydaje mi się bardziej estetyczny, logiczniejszy

Wady:

  • więcej ruchomych elementów przy migracji – trzeba jeszcze zadbać o LUKSa na dm-crypt

W obu opcjach korzystam z tego, że jeden cache może obsługiwać dowolną liczbę urządzeń. Dzięki temu nie musiałem dzielić mojego SSD na kolejne partycje.

(opcji trzeciej miszmasz na krzyż nie ma co omawiać)

Plan i migracja

Planowałem wykorzystać właściwości RAID1 i migracji dokonać poprzez:

  1. oznaczenie jednego z dysków jako popsuty
  2. przeformatowanie pod bcache, przeLUKSowanie tego dysku
  3. dołączenie gotowego dysku z powrotem do puli btrfs
  4. odbudowa RAID1
  5. powtórka zabawy z drugim dyskiem
  6. przegranie /var i ~
  7. podpięcie zwolnionego dysku SSD jako cache

Zestawiłem sobie na maszynie wirtualnej identyczną konfigurację i zacząłem testy. Poległem na punkcie 1… btrfs nie ma możliwości grzecznego popsucia dysku (skandal!). Można co najwyżej wyrwać dysk z maszyny i szybko wyczyścić.

Nie chcąc tracić za dużo czasu (jakby coś nie poszło, to odwinięcie danych z backupu trochę jednak trwa), zacząłem szukać innej drogi. Wszystkie luźne dyski w pracy użyłem do postawienia małego klastra Ceph (fajna zabawka swoją drogą), nie miałem pomysłu skąd wziąć tymczasowe kilka terabajtów.

Postanowiłem sprawdzić konwerter o jakże nudnej nazwie blocks. I to był strzał w dziesiątkę. blocks potrafi przesunąć nagłówek LUKS i umieścić przed nim nagłówek bcache, nie ruszając danych. Kilka testów i dwa rebooty później miałem przearanżowaną pamięć masową zgodnie z opcją 2.

Zrobione

lsblk zeznaje:

└─sda3                                            93.8G   part
  ├─bcache0                                        5.5T   disk
  │ └─luks-142b6130-853c-4dab-ab7b-a102e7d71388    5.5T   crypt /
  └─bcache1                                        5.5T   disk
    └─luks-4e5418e6-fa2c-47b3-a4be-1b045d593a5a    5.5T   crypt

A wykres wykorzystania pamięci podręcznej wygląda dosyć optymistycznie:

/dżogstaff/2016.05.24-bcache_hit.png

I jakiś taki porządek jest.

Własny, prywatny mirror Fedory


Linuksowe dystrybucje od lat polegają na sieci serwerów lustrzanych (mirrorów) aby dotrzeć do użytkowników. Taka Fedora ma półtorej setki miejsc, z której można pobierać pakiety. Stworzenie prywatnego mirrora dla swoich systemów czasem się przydaje i na szczęście jest łatwiutkie.

Zgłoszenie w Fedorze

Pierwsze co, to wybieramy, skąd będziemy pobierać pakiety. Z oficjalnych serwerów Fedory mogą ciągnąć tylko publiczne serwery lustrzane – nam zostaje ściąganie właśnie z któregoś z nich. Wybieramy co nas interesuje i ustawiamy periodyczne wywołanie rsynca.

Teraz informujemy infrastrukturę Fedory, że mamy prywatny serwer lustrzany. Dopisujemy zakresy sieci, z których komputery mają korzystać z naszego mirrora [*]. Co jakiś czas uruchamiamy skrypt, który wysyła spis zawartości naszego prywatnego serwera lustrzanego. Serwery publiczne są przeczesywane automatycznie przez Fedorę.

Konfiguracja stacji klienckich

Nic. Od tej pory wszystko dzieje się automatycznie! A to dlatego, że każda fedora aktualizując się, najpierw pyta serwery dystrybucji o listę mirrorów. Dystrybucja widząc połączenie przychodzące z „naszych” sieci jako główny serwer lustrzany podaje nasz prywatny mirror. Wysłana wcześniej lista zawartości pozwala też wykluczyć mirror z odpowiedzi, jeśli nie zawiera pakietów dla odpowiedniego wydania i architektury.

Oczywiście zapytania z innych sieci (nie podanych w liście naszych) nigdy w odpowiedzi nie dostaną adresu naszego prywatnego mirrora.

Taka zero-konfiguracja po stronie klienta działa naprawdę fajnie. Każda wirtualka, kontener, komputer gościa czy nawet proces budowania pakietu w środowisku mock automatycznie korzysta z pakietów przechowywanych lokalnie.

[*] – własność sieci nie jest weryfikowana; można więc wyobrazić sobie sytuację, że chcąc zaatakować jakąś instytucje, podajemy jej podsieci jako mające korzystać z naszego mirrora. A potem ingerujemy w jego zawartość, np. nie wystawiając poprawek podatności, którą chcemy użyć w ataku.

Tak się nie powinno robić samochodów


Jakiś czas temu chwaliłem Teslę za ogarnięcie softwareowej części samochodu i połączonej infrastruktury. Różowo jednak nie jest, bo strona sprzętowa wydaje się być zrobiona z masy papierowej, delikatnej jak skorupka jajka.

Zimą trzeba na Model S chuchać i dmuchać, myć co najmniej raz dziennie:

If salt has been used on the highways (such as during winter months), thoroughly rinse all traces of road salt from the underside of the vehicle.

Najlepiej ręcznie, bo myjnia automatyczna ze szczotkami wchodzi w konflikt z gwarancją:

If washing in an automatic car wash, use “Touchless” car washes only. These car washes must have no parts, such as brushes, that can touch Model S. Using any other type of car wash could cause damage that is not covered by the warranty.

I bez chemii na felgi, bo rozpuści.

Samochód jest zrobiony z tak cienkiej i delikatnej blachy, że do zamykania maski trzeba używać obydwu rąk i naciskać w ściśle wyznaczonych miejscach (narysowanych w instrukcji). Tesla Model S, samochód który można powyginać jedną ręką:

Do not close the hood with one hand. Doing so applies concentrated force in one area and can result in a dent or crease.

Wracając do zimy – zdarzały się u nas porządne, kiedy zamarzały słabsze płyny do spryskiwaczy. A co z autem?

Do not expose Model S to ambient temperatures above 140° F (60° C) or below -22° F (-30° C) for more than 24 hours at a time.

Na szczęście mroźne miesiące się kończą i przychodzi wiosna. Przy zmianie opon na letnie trzeba pamiętać o zablokowaniu aktywnego zawieszenia, bo może zabić:

If you do not disable Active Air Suspension, Model S can attempt to self-level, causing serious damage, bodily injury, or death.

Na koniec pozytywna informacja. Jeśli uda nam się nie pognieść autka, to uzupełnianie płynów jest ograniczone do minimum:

Model S has only one reservoir into which you can add fluid. This is the washer fluid reservoir under the front trunk.

Może w ramach liftingu Tesla zastosuje wytrzymalszą blachę i lakier?

Schronisko dla kart SD


Aktualizacja 2017-02: Kolega na reddicie wyżalił się z tym samym problemem. Poradzono mu… wyłączyć telefon i włączyć ponownie. I co? I po tym działa. WTF Android?


W Androidzie 6.0 pojawiła się opcja sformatowania karty SD w sposób rozszerzający wewnętrzną pamięć masową telefonu. Nazywa się to adoptable storage i działa(?) dosyć dziwnie.

Karta tak spreparowana przestaje być dostępna przez np. AirDroid. Niby jest podmountowana w /mnt/expand, ale wedle dokumentacji wgląd mają tam tylko aplikacje systemowe. Podłączenie przez kabelek (MTP) też nie pokazuje katalogu. Można tam przenieść enigmatycznie określone dane korzystając z opcji Przenieś aplikacje i dane w ustawieniach pamięci masowej, ale normalnego zarządzania i wgrywania np. audiobooków z laptopa nie da się zrobić.

Oczywiście istnieje możliwość rozszyfrowania karty po jej przełożeniu do komputera, ale poziom rzeźby wykracza poza wygodne korzystanie z telefonu. Wróciłem więc do karty sformatowanej po staremu – VFAT zamiast dm-crypt+ext4.

Na marginesie, jakby ktoś się dał nabrać na obietnice Chińczyków z Lenovo/Motorola że będą wypuszczać aktualizację do telefonów na bieżąco… bullshit. Aktualizację Moto G do Androida 5.0 ogłosili(!) we wrześniu 2014, a tak naprawdę pojawiła się w lutym 2015. Android 6.0 wyszedł w październiku 2015, na Moto G pojawił się pod koniec marca 2016. Pół roku za każdym razem, dystrybucje linuksowe w tym czasie całe nowe wersje są w stanie opracować i wydać.

Telefon kupiony w sklepie, więc żadnego zasłaniania się opóźnieniami po stronie pośrednika/telekoma być nie może.

Mysteriously flapping network connection


Fool me once, shame on you. Fool me twice, and I will write a blogpost to remember.

For a few days I've been experiencing intermittent networking problems. Every couple of minutes iSCSI and FCoE connection seemed to break for a brief moment. This made filesystem quite unhappy. I've added another path to iSCSI target, over legacy IPv4, but it didn't help. And because all paths were disappearing at the same moment, multipath device was failing, too.

So, iSCSI-over-IPv6, iSCSI-over-IPv4 and FCoE were crumbling. Clearly, the network was at fault (as it always is!). Then it hit me. I have seen a bug like this before. It manifested a bit different because of a different driver (r8169 vs tg3), but even without hints in dmesg I've recognized the problem.

You see, ethernet port at gigabit speed is quite powerhungry. Limiting speed to 100MBps can reduce power draw, especially with multi-port and multi-gigabits NICs. This fact is utilized by tuned utility. If you put tuned into powersave profile – like my misbehaving station was – and you have dynamic_tuning = 1 in configuration file…

During idle periods, tuned dropped my NIC into one hundred megabits speed. When bandwidth usage rose, tuned flipped the network card to gigabit speed. Brief moment of layer-1 renegotation was enough to disturb the connection to the storage target.

Disabling dynamic tuning restored the network to rock-solid state instantly.

Intermedium


Tak… Jogger się kończy, więc trzeba się przenieść. Mój pierwszy post napisałem w czerwcu 2003, więc jestem tutaj praktycznie od początku. Zaczęło się od testowania ekg2, które wówczas rozwijałem. Potem pisałem trochę o rzeczach życiowych (w tym uczelnia), trochę o technicznych, trochę o ciekawostkach. Świetna społeczność joggerowa towarzyszyła mi ponad dekadę. Teraz idę na swoje.

W czasie weekendowego researchu spodobał mi się generator Nikola. Jest w miarę przejrzysty, wygląda na rozszerzalny, społeczność na IRCu jest bardzo pomocna i co ważne: jest spaczkowany w Fedorze. Trochę grzebania w konfiguracji, trochę poprawek w skrypcie https://gist.github.com/malpka/8273337 i działa. Udało się zachować URLe do archiwalnych wpisów, adres bloga https://enotty.pipebreaker.pl się nie zmienia, więc przepięcie powinno być prawie niezauważone.

Prawie, bo niestety nie dało się bezboleśnie przenieść największej zalety Joggera – komentarzy. Archiwalne podoklejałem pod wpisami. Nowe komentarze: tutaj trzeba skorzystać z zewnętrznego dostawcy. Wybrałem komentarze Google+. Nie do końca jeszcze ogarniam, jak mają działać, ale to się dotrze w praniu.

Następnej zmiany nie planuje wcześniej niż za kolejne 13 lat. ;-)


Archived comments:

Remigiusz 'lRem' Modrzejewski 2016-02-23 13:57:46

A jest już oficjalne API do podpinania komentarzy G+, czy nadal jakaś rzeźba na niesupportowanym haczyku który może jutro zniknąć?

zdz 2016-02-23 15:27:49

Z Google to nawet supportowane rzeczy mogą jutro zniknąć. Ale na pytanie konkretnie Ci nie odpowiem, bo jeszcze nie wiem na jakiej zasadzie to jest w ogóle zorganizowane. Strony supportu googla (do których odnosi dokumentacja pluginów G+ comments do różnych platform blogowych/CMS) wyglądają na przeterminowane. Jak przepnę domenę to zadziała albo nie ;)

Tak się powinno robić samochody


W weekend w końcu znalazłem trochę czasu na obejrzenie DEF CON 23 - Marc Rogers and Kevin Mahaffey - How to Hack a Tesla Model S. Potwierdziło się to, co czytałem wcześniej. Tesla naprawdę porządnie robi samochody.

Security IT mają zrobione bardzo dobrze zarówno wewnętrznie — izolowane podsieci CAN i infotainment z „firewallem” w postaci modułu gateway, szyfrowanie prawie wszędzie, użycie SSH do komunikacji między komponentami — ale również zewnętrznie: OpenVPN z dokładnym sprawdzaniem certyfikatów (keyUsage) itp. W przypadku „zabicia” elektroniki przez atakującego, samochodem nadal można kierować i działają hamulce.

Co prawda używają starego Ubuntu i było kilka drobnych niedoróbek, ale plusem Tesla Motors jest też sprawny system patchowania. I ekipa ludzi, którzy biorą IT Security poważnie. Poważniej, niż niektóre biznesy z którymi współpracowałem.

Prezentacja warto obejrzeć, sam chętnie bym zobaczył wycieczkę po serwerowni Tesla Motors i posłuchał więcej: jak zarządzają certyfikatami dla każdego samochodu, jaką mają infrastrukturę sieciową, jak przechowują i obrabiają telemetrię itp.


Archived comments:

sprae 2016-01-28 01:47:44

Dziękuję, też zobaczę.

Proste rozwiązanie Linuksa na pendrive


Linux zainstalowany na pendrive przydaje się od czasu do czasu. Czy to do uruchomienia jakiegoś obcego komputera, czy do ratowania systemu. Niestety, ponieważ pendrivy to crap, dość często nośnik pada i trzeba przygotować nowy.

Instalowanie Linuksa nie jest zupełnie porywające, więc powtarzanie tej czynności co parę lat po prostu nudzi. W pewnym momencie po instalacji zrobiłem tzw. golden image, który nagrywałem na nowy nośnik korzystając z dd. Ale to był tylko półśrodek: obraz nieużywany starzał się, a aktualizowanie pena USB który ma jakies 10 IOPSów trwało wieki.

Na szczęście wpadłem na o wiele prostsze i skuteczniejsze rozwiązanie. Obraz o wielkości niecałych 8GB trzymam dalej na dysku, ale dodatkowo jest podpięty pod maszynę wirtualną. Żeby zaktualizować albo zmienić konfigurację włączam VMkę, robię co trzeba i wyłączam. Obraz dysku jest w każdej chwili gotowy do przeniesienia na nowy pendrive za pomocą dd.

Pamiętać trzeba jedynie o odpowiednim initramfs. Ponieważ domyślnie utworzy się tylko taki ze sterownikami potrzebnymi w maszynie wirtualnej (więc np. sterownik dysku typu Virtio), trzeba wymusić dodanie sterowników potrzebnych do startu z pendrive. W pliku /etc/dracut.conf.d/usb-root.conf wpisujemy:

add_drivers+="usb_storage uas"
Od tej pory initramfs utworzony w maszynie wirtualnej będzie też w stanie uruchomić system z pendrive.

Got lazered!!!11


Celebrację premiery Star Wars: Episode 7 – Awakening of The Force by Disney™ należy przeprowadzać odpowiednio – z prawdziwymi laserami i prawdziwym odparowaniem fragmentów ciała. Wobec czego tydzień temu, po 25 latach noszenia okularów i soczewek kontaktowych (-4 i -4,25), przeszedłem operację TRANSK-PRK. Tylko na taką kwalifikowałem się z uwagi na cienką rogówkę, poniżej 500 µm.

(Ten akapit może być trudny w odbiorze dla osób wrażliwych). Metody laserowej korekcji wzroku (LASIK, LASEK, TRANS-PRK) poprawiają kształt rogówki w oku. Operacji poddawana jest głębsza warstwa – trzeba się jakoś dostać do środka przez warstwę nabłonka. W LASIKu rogówkę ciacha się i odkłada na bok, bo korekcji zakłada z powrotem. Oprócz noża, cięcie można zrobić laserem. Miejscowo podgrzewając tworzy się mikropęcherzyki rozrywające tkankę. TRANS-PRK idzie dalej, całkowicie anihiluje nabłonek odstrzeliwując go. Stąd dłuższa rekonwalescencja, ale i tak jest lepiej niż przy metodach z rozpuszczaniem nabłonka alkoholem.
Komu powyższy opis nie dostarcza wystarczająco silnych doznań gastrycznych, może obejrzeć początek Psa Andaluzyjskiego.

Operacja zaczyna się od przyjęcia środka uspokajającego, przeciwbólowego i czekaniu aż zaczną działać. W czepku, jednorazowej koszuli i ze zdezynfekowaną okolicą oczy ląduje się na stole. „Poduszka” trzyma głowe nieruchomo, przed twarz wjeżdża maszyneria. Światło na sali gaśnie. Jeszcze tylko pytanie o imię i nazwisko, czy aby na pewno mamy właściwą osobę i amputujemy właściwą nogę.

Lekarz do twarzy przykleja chustę chirurgiczną z wycięciem na oko, zakłada rozwieracz powiek. Jeszcze jedno zakroplenie i przecieranie oka gąbeczką z chemią. Dziwne uczucie – cały czas widzimy i czujemy smyranie po krzywiźnie oka. Następnie pada „proszę patrzeć w zieloną kropkę” i następuje uruchomienie baterii turbolaserów.

Zielona kropka w ciągu kilku sekund z punktu staje się poświatą wypełniającą większość pola widzenia. Jednocześnie można poczuć zapach palonych włosów (ciekawe, że wszyscy dobrze wiemy jak śmierdzą palone włosy). Nasz nabłonek rogówki właśnie dostał skrzydeł i unosi się w powietrzu po całej sali.

Następuje właściwa korekcja kształtu wnętrza rogówki. Po wyrównaniu przez chwilę robi się bardzo jasno, gdy do oka przykładają jakiś szklisty, żelowy przyrząd. Chwilę później następuje założenie „opatrunku” w formie szkła kontaktowego. Całość trwa dosłownie kilka minut, można znaleźć filmy TRANS-PRK na YouTube (oglądanie nie wywołuje torsji, w przeciwieństwie do np. film z LASIK na Wikipedii)

Tu następuje albo powtórzenie procedury dla drugiego oka, albo koniec. Wyjście z sali operacyjnej do oczekujących na nas osób jest doskonałą okazją do trollingu („Ciemność! Widzę ciemność!”). Po krótkiej kontroli zakładamy okulary przeciwsłoneczne z polaryzatorem (SwissMed w Gdańsku daje je w cenie zabiegu) i czekamy na wypis. W tym czasie powoli zaczyna się ból.

Po zabiegu w piątek, przeżycie weekendu było naprawdę ciężkie. Zakraplanie oczu serią specyfików 5× dziennie bardzo utrudnia opuchlizna i wrażliwość na światło. Ciało orientuje się w obrażeniach i zaczyna leczyć oparzenie. Dzięki opiece Żony* i mocy Ketonalu przetrwałem. Większość czasu oczy miałem zamknięte, co powodowało przysypianie w trakcie słuchania książek. Za to ze zdziwieniem odkryłem, jak dobrze znam swoje mieszkanie po omacku.
* – żona nie jest dostarczana przez SwissMed

Po trzech dniach pierwsza kontrola. Zdolny do walki z czołgami. Lekarz zdejmuje soczewki, ogląda oko. Już nie boli, Wszystko dobrze. Cała obsługa operacji i rekonwalescensji jest całkiem sprawna, ale brakowało mi informowania o tym co i kiedy będzie się działo. Np. jakie są etapy samej operacji. Albo jak długo zanim pojawi się ostrość. Po tygodniu oko jest już zaleczone, ale mózg musi od nowa nauczyć się akomodacji – w końcu takiego aparatu optycznego nie miał do dyspozycji od 25 lat.

Tydzień minął z incydentalnym łapaniem ostrości widzenia, co 3 godziny aplikacji czterech różnych kropli do oczu, słuchaniem audobooków i spaniem z osłonkami na oczy przyklejonymi do twarzy. Po ustawieniu fontu w rozmiarze dla ślepych da się korzystać z Kindla. Ponieważ nie mogę używać komputera, wpis został podyktowany kotu przy użyciu Jedi mind-tricks.


Archived comments:

Krystek 2015-12-12 03:15:01

Ja bym zemdlał na stole zabiegowym...

Blokada na głównej?


Ta opcja blokady użytkowników na głównej w końcu powstała? Bo deja vu, znowu wysyp grafomańskiej twórczości z przeszłości…


Archived comments:

Dandys 2015-11-22 12:28:28

Nie. Sam używam skryptu w greasemonkey, który usuwa mi niepożądanych autorów z głównej. Jeżeli masz możliwość, to polecam.

Joggerbocie gdzie jesteś?


Ostatnie braki w obecności bota joggerowego są upierdliwe. Nie ma bieżącej informacji kiedy spamerzy zaczynają dodawać bzdurne komentarze.


Archived comments:

m. 2015-07-22 17:38:44

https://en.support.wordpress.com/jabber/ ;-)

zdz 2015-07-24 06:20:41

Już jest OK, problem był niespodziewanie z drugiej strony: moje konto XMPP było zablokowane. Smoku szybko poprawił :)

m. 2015-07-24 18:47:40

Czyli fałszywy alarm.

Dzisiaj anegdota


Nasza kota ma w sypialni, na komodzie, budkę w której śpi. Przynajmniej w założeniu, bo to menda i czasem jak skuma, że śpimy to przenosi się na kołdrę. Mi to zwisa, ale żonie się niewygodnie śpi.

Interluda: zapewne każdy właściciel futra wie, że śpiący w optymalnym miejscu kot zaczyna ważyć 2x więcej, przybiera konsystencję przelewającą się przez ręce i generalnie utrudnia próby przeniesienia go.

Ponieważ żona ma skrupuły (kotek tak słodko śpi, nie można go ruszać) to zaproponowałem, że jak znowu menda przyjdzie, to ja ją wezmę i przeniosę do budy. Poszliśmy spać.

Następne wydarzenia znam z relacji małżonki, bo ja jak śpię to śpię.

Kot przyszedł na kołdrę. Małżonka budzi mnie. Otwieram oko, a małżonka wskazuje na obiekt mruczący i mówi:
– Kot!
Moja reakcja jest najbardziej adekwatna do tego zagrożenia. Wyciągam się nad żoną, sięgam ręką do kota. Głaszczę*.
Odwracam się i zasypiam z powrotem.

* kota, nie żonę