» »

težave z deployem na linux distribucije

težave z deployem na linux distribucije

win64 ::

Temo odpiram kot nadaljevanje debate glede težav z deployem programov na različne Linux distribucije.
Sam sicer delam večinoma v windows okolju z .Net frameworkom, tako da če bi kaj deployal na Linux vsaj težal s knjižnicami ne bi imel.
Me pa kot programerja zanimajo take stvari, tudi če ne delam direktno z njimi, tako da vsaka informacija bo dobrodošla.

Kot uporabnik Fedore(ene izmed bolj podprtih distribuciji) opažam, da že za navadnega uporabnika, ki namešča stvari iz repositorja lahko pride do težav z nekompatibilnimi knjižicami(dependencies), .Net core/standard celo podpira deploy vseh potrebnih knjižnic poleg aplikacije.
Potem, ko malo berem se je v Fedori kot nadomestek za package manager yum razvil dnf, vzporedno pa se razvija flatpak, ki naj bi podpiral lažji deploy aplikaciji, neodvisno od sistema. Flatpak, čeprav zveni mamljivo je veliko manj podprt od dnf/apt-get.

AndrejO je izjavil:

win64 je izjavil:

xmetallic je izjavil:

Vse kar sem napisal drži. Sem moral podpreti sw za dve različni distribuciji. Never again.

Me zanima bolj podrobno tvoj usecase. Ker če ne ravno upravljaš s sistemskimi stvarmi si lahko precej dela olajšaš s statičnim linkanjem knjižnic ali pa uporabljene knjižice distribuiraš zraven programa.
Še celo Linus je bolj naklonjen takemu načinu(če ga prav razumem).

Mislim, da tega pristopa povprečno slovensko "IT" podjetje ni sposobno pravilno izpeljati - ne tehnično, ne organizacijsko, ne ekonomsko.

Če te zanima, katere so slabosti statičnega povezovanja in na kaj vse je potrebno paziti, kadar izbiraš statično vs. dinamično, odpri temo v programiranju, pa lahko tam usekamo eno debato na to temo.


xmetallic je izjavil:

win64 je izjavil:

Me zanima bolj podrobno tvoj usecase. Ker če ne ravno upravljaš s sistemskimi stvarmi si lahko precej dela olajšaš s statičnim linkanjem knjižnic ali pa uporabljene knjižice distribuiraš zraven programa.
Še celo Linus je bolj naklonjen takemu načinu(če ga prav razumem).

Težave so bile od sistemskih zadev pa do trivialnih zadev kot npr. default installation path (ni ravno težava je pa debilno). Že samo to, da je privzeti path za shranjevanje sw-ja med distribucijami različen je nadležno, potem pa še vsak shranjuje user data na neke svoje lokacije, posebej moraš handlat uporabo package managerja za vsako distribucijo, itd, itd. Teh stvari je malo morje. Zgledajo trivialne zadeve ampak ko moraš 150 stvari spreminjat zato ker se je en bedak spomnil, da bo pa njegova distribucija imela drugačen package manager se ni prav nič zabavno s tem ukvarjat.

jype ::

Večina "vendorjev" (Oracle, IBM in podobni) svoje reči stlači v /opt.

Bistvo Linux distribucij je, da uporabniki svobodno odločajo o tem, kaj se na njihovih računalnikih dogaja, zato je prav, da tisti, ki pred uporabniki skrivajo izvorno kodo in s tem onemogočajo izboljšave, tudi malce trpijo. Če izdaš izvorno kodo, bo vsaka resna distribucija bodisi sama poskrbela za vključitev, bodisi se bo našel prostovoljec, ki bo to počel, ker ceni tvoje delo.

win64 ::

Za samo vprašanje niti ni pomembno ali je stvari open/closed source.
Predvsem me zanima kakšne prilagoditve so vse potrebne za prenos aplikacije iz ene distribucije v drugo. In kako se s tem spopasti? So kakšna orodja na voljo, ki olajšajo prenos?

Iz odgovora, ki ga je pripravil @xmetallic so njegove težave:
- path za shranjevanje programov (je to mišljeno /usr/bin?)
- različni package manager-ji
- user data lokacije (tega ne razmem najbolj)

Jype, zgleda imaš izkušnje s tem? Kaj je tebe najbolj jezilo?

LightBit ::

Jaz najraje vidim, da je navaden tar paketek, ki ga extractaš kamor hočeš in zaženeš.
Tako kot ima Mozilla Firefox na uradni strani.

WhiteAngel ::

Za zacetek moras povedati, kaksno aplikacijo imas v mislih? Ce desktop, potem Qt ali Java. Ce web, potem python, ruby, nodejs, java itd. Od jezika oz. frameworka potem zavisi, koliko bo dela s pakiranjem za razlicne distribucije. .net klice po tezavah na dolgi rok na ne-windows sistemih.

Aja, vedno pa lahko zapakiras aplikacijo z appimage, snap ali flatpak. Logika je v tem, da ti zmounta file system v paketu in s tem s sabo prinese vse odvisnosti. Osebno mi najbolj lezi appimage, ki naredi executable skripto prakticno brez odvisnosti navzven.

AndrejO ::

win64 je izjavil:

Me zanima bolj podrobno tvoj usecase. Ker če ne ravno upravljaš s sistemskimi stvarmi si lahko precej dela olajšaš s statičnim linkanjem knjižnic ali pa uporabljene knjižice distribuiraš zraven programa.
Še celo Linus je bolj naklonjen takemu načinu(če ga prav razumem).


Recimo, da sta ta dva načina ekvivalentna, ker aplikacija s seboj vleče vse knjižnice, ki jih potrebuje za svoje delovanje.

Aplikacija je odposlana, stranke jo imajo nameščene, potem pa ...

Nekdo mora spremljati razvoj vseh teh knjižnic, da lahko opazi, če ima katera izmed njih hrošča, ki vpliva na delovanje aplikacije.

Sistem upravljanja s kodo moraš imeti dovolj dobro dorečen in dosledno izvajan, da boš lahko ponovno prevedel in povezal aplikacijo X v natančno tisti verziji, ki je bila razposlana ven in ne 10 verzij in 5 dodatkov (featurjev) kasneje, ker je to pač trenutna verzija kode. Tudi za to mora nekdo skrbeti.

Razvojno okolje moraš imeti takšno, da lahko narediš t.i. "repeatable build", ker ne želiš ustvarjati novih napak. To seveda vključuje vse od prevajalnika naprej, če se koda prevaja in seveda takratne verzije vseh tistih knjižnic, ki jih ni potrebno ali pa dovoljeno spremeniti.

Ker pri vsakem prevajanju sprememb dobiš nov paket, ki se morda tudi drugače obnaša (pa ne samo v delu, kjer je bila odpravljena ena napaka), je dobro imeti za to kodo teste. Unit in end-to-end, sicer ne veš če je kaj drugega odpovedalo.

Statično povezovanje je odlično iz vidika zagotavljanja ponovljivosti delovanja. Ni pa zastonj ali rešitev vseh težav, še zlasti ne, kadar pride do varnostnih napak. Recimo knjižnica, ki je potrebna za prikaz JPEG slik, je statično povezana v tvojo aplikacijo. Torej bo tvoja aplikacija na sistemu tudi potem, ko bodo nameščeni popravki za knjižnico, še vedno potencialno nevarna.

Jupi.

Za ekipe, ki jim manjka zgoraj opisane delovne discipline, je bolje, da ostanejo pri dinamičnem povezovanju, kjer za nameščanje vseh njihovih odvisnosti skrbijo večje ekipe ljudi, ki jih tiste odvisnosti bolj zanimajo. Cena, ki jo plačajo za to "lenobo", je sicer ta, da jim bo aplikacija pri nekaterih strankah "odletela", ko se bo namestilo posodobitve, bo pa njihova programska oprema še vedno bolj varna, kot pa Ford Pinto.

Kar se tiče mojega pavšalnega komentarja o "IT" podjetjih ... me prav zanima kolikšen delež podjetij v Sloveniji ima te osnove proizvodnje programske opreme vsaj koliko toliko urejene. Ko sem pred leti odhajal, je bilo meni znano stanje bolj bogo.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Hrošč v Windows 10 pri nadgradnji žre podatke (strani: 1 2 )

Oddelek: Novice / Operacijski sistemi
9537623 (30487) andromedar
»

Windows 10 bo končno nudil več zasebnosti (strani: 1 2 3 )

Oddelek: Novice / Zasebnost
10032249 (26552) Uporabnix
»

Programiranje za windows

Oddelek: Programiranje
428097 (6040) Iluvatar
»

Programi z Download.com oviti v dve plasti namestitve (strani: 1 2 )

Oddelek: Novice / Omrežja / internet
6315099 (12417) MrStein
»

[Linux] Kaj manjka na poti do uspeha (usability) ? (strani: 1 2 )

Oddelek: Operacijski sistemi
685191 (4018) jlpktnst

Več podobnih tem