OpenSsl reloaded

openssl-ék szerint az 1.0.1 az már nem olyan, mint a 0.9.8, hogy minden alverzió inkompatibilisnek számít. Nem, itt már az 1.0.1 kompatibilis az 1.0.0-lal.

Normálisan ilyenkor a verziószámot major+minor részre bontják, a major változása inkompatibilis fejlesztést jelent, a minor változása kompatibiliset (vagyis újrafordítás/szerkesztés nélkül használható az új) pl:

major=1.0.1g minor=(üres)
major=1.0.1 minor=g
major=1.0 minor=1
major=1.0 minor=1g
stb

Hát OpenSsl-éknél ez nem így van, ők azzal fejezik ki a kompatibilitást, hogy a majort 1.0.0-ra állítják, minor nincs. Először hallgattam a jobbik eszemre, és meghaxoltam a Makefile-t 1.0.1-re, de ma a kompatibilitás mián azt mondtam, hogy jó,legyen major=1.0.0, minor=1.0.1f (hogy azért mégis maradjon valami jele annak, hogy milyen verzió ez).

Természetesen minden jócselekedet elnyeri méltó büntetését, openssh a következő jó hírt közli velem:

fatal: OpenSSL version mismatch. Built against 1000007f, you have 1000106f

ez a szám az crypto/opensslv.h:OPENSSL_VERSION_NUMBER-ból jön,
1.0.1f esetén 0x1000106fL
1.0.1e esetén 0x1000105fL
1.0.0g esetén 0x1000007fL
(és még tovább is nézegethetném, ha érdekelne, a lényeg, hogy a betűjel változását is követi)

Na most akkor először is visszacsinálom azt a verziót, amivel az openssh buildelve volt, azután több ilyen hülyeséget nem csinálok, sőt, van egy olyan érzésem, hogy a major-ba beteszem a betűjelet is major='1.0.1f', minor=(üres)
(Persze lehet, hogy az openssh-t is cserélnem kellene, vagy az újabb verziókban már nincs / nem ilyen szigorú az ellenőrzés, vagy egyéb -- csak sajnos ez nem jó kifogás, amikor nekem egy működő rendszerre lenne szükségem.)

20140130.1900: Most talán eljutottunk egy stabil állapothoz:

/usr/local/lib/libcrypto.so.1.0.0 -- a régebbi verzió, openssh ezt használja, örül neki
/usr/local/lib/libcrypto.so.1.0.1f -- új verzió, az új /usr/local/bin/openssl ezt használja
/usr/local/lib/libcrypto.so -- symlink az előzőre

Megjegyzés: ez most egy AIX, itt a 'dump -H ' mutatja a használt shared libeket, ebből gondolom, amit gondolok; majd tesztelnem kell linuxon is, ott a 'readelf -d '-ből kell a 'NEEDED' sorokat megnéznem.

Hozzászólások

Miért is volt szükséges az ilyen mértékű önszivatás gyakorlása?

Nyilván azt is kellene, de nekem egyrészt az openssl sürgősebb most (mivel az alkalmazásaim https-sel mennek), másrészt meg szeretnék először ezzel elérni egy korrekt állapotot, hogy az édesanyám se csukladozzon éjszaka, ha pl. valaki nem jut be éjszaka ssh-val (nem, nem a haxor, hanem akinek valamit hibát kell 'adj, uram teremtőm, de rögtön' kijavítania).

Örülök a nyelvészeti szálnak is természetesen, csak azt kérem, hogy vegyük figyelembe, hogy a nyelvművelés kb. annyira tudomány és annyira vehető komolyan, mint pl. az asztrológia, vagy a spiritizmus. Ha valakit nem a nyelvművelés, hanem a nyelvészet érdekel, akkor pl. Nádasdy Ádám írásait ajánlhatnám figyelmébe.

Note to self: akkor most tessen ezt megismételni 1.0.1h-val is.
Talán most, hogy az openssh-t is frissítettem már, meg lehetne reckírozni egy major='1.0.1', minor='h' kombinációt... persze most mindenkit újra kell szerkeszteni, viszont a majdani '1.0.1i' már símán felmászna, hiszen azonos lenne a 'major'. Vagy esetleg visszamennék a start-mezőre... akarom mondani ezen topik elejére...

20140823: Mára kiforrott(nak tűnik) az a módszer, hogy a major=1.0.1, minor=i (pillanatnyilag). Valamint már kissé magabiztosabban fordítok OpenSsh-t is, még akkor is, ha a korábbi, gyári installból származó ssh-val kompatibilisnek kell lenni. Ilyesmi:
1. configure-nél --prefix=/usr/local # ez a default is
2. /usr/local/etc/ssh egy szimlink a /etc/ssh-ra # hogy megmaradjanak a kulcsok
3. /usr/[s]bin-ből a régi exekutablékat symlink-ekkel helyettesíteni (nem elfelejtve a /usr/local/libexec/sftp-server-t sem).

Kieg: egyes kőkorszakbeli szoftverek /opt/freeware/libcrypo.a(libcrypto.so.*)-ot használnak (a vége a 0.9.6-tól 1.0.0-ig bármi lehet), ezen az segít, ha a legfrissebb libcrypto.so shared lib-ből csinálunk hat másolatot ezeken a neveken, és azokat az 'ar'-ral össze ar-olva elhelyezzük ebbe a libbe, így a legfrissebb verzió van a régi programok alatt is (szerencsére ezek nem ellenőrzik a verziószámot, mint az ssh).