Yum

Sąveika su „YUM“ sistemoje „CentOS“ naudojant „Python“

Sąveika su „YUM“ sistemoje „CentOS“ naudojant „Python“

Kas yra YUM?

„YUM“ yra valdymo įrankis, prieinamas „RedHat“ ir „CentOS Linux“ distronuose.  YUM (modifikuotas „Yellowdog Updater Modified“) priklauso nuo RPM („Red Hat Package Manager“) paketų ir buvo sukurtas tam, kad paketus būtų galima valdyti kaip didesnės programinės įrangos saugyklų sistemos dalis, o ne atskirus paketų failus. YUM yra interaktyvus paketų tvarkytuvas, kuris gali automatiškai atlikti priklausomybės analizę ir sistemos atnaujinimus, taip pat įdiegti naujus paketus, pašalinti senus paketus, atlikti užklausas esamiems paketams ir kt. Norėdami sužinoti daugiau apie YUM, spustelėkite čia.

Šiame straipsnyje mes apžvelgsime būdus, kaip pasiekti „yum“ funkciją naudojant „Python“ programas, ir sužinoti, kaip tai gali būti naudinga. Šiai pamokai naudosime „CENTOS 7“, kuriame veikia „python 2“.7.x ir prisiimtų tam tikrą pagrindinių pitono funkcijų išmanymą.

Programavimas su YUM

Pradėkime mokytis apie „yum“ programavimą naudojant „python“, žiūrėdami į paprastą „python“ scenarijų, kuris naudoja „yum“ užklausoms ir spausdinant paketų pavadinimus. Štai jis:

importuoti os
importuoti sistemas
importuoti yum
yb = yum.„YumBase“ ()
yb.setCacheDir ()
rezultatai = yb.pkg maišas.returnNewestByNameArch (modeliai = ["python", "perl"])
už pkg rezultatuose:
spausdinti "% s% s (% s) \ n \ t% s"% (pkg.pavadinimas, pkg.versija, pkg.arka, pkg.santrauka)

Šis scenarijus ieško YUM saugyklose paketų, atitinkančių pavadinimą „python“, ir spausdina informaciją apie suderintą paketą (-us). Mes nagrinėsime šį scenarijų eilutėmis.

Norėdami pradėti programuoti su YUM, turime importuoti „yum“ python paketą - jis pagal numatytuosius nustatymus įdiegtas CENTOS 7. Kartu su „yum“ mums taip pat reikalingi „os“ ir „sys“ paketai, taigi tipinė „python“ programa, naudojanti „yum“, prasidėtų šiomis 3 eilutėmis.

importuoti os
importuoti sistemas
importuoti yum

Tada, norėdami sukurti yum egzempliorių, su kuriuo norite dirbti, įtraukite žemiau esančią eilutę.

yb = yum.„YumBase“ ()

Tai yra beveik pirmoji funkcinio kodo eilutė bet kurioje „python“ programoje, naudojant „yum“. Taip yra todėl, kad „YumBase“ yra pagrindinė klasė, kurioje yra metodai ir objektai, reikalingi visoms paketų valdymo funkcijoms atlikti naudojant „yum“. Išsamią „YumBase“ klasės struktūrą rasite jos dokumentuose.

Nagrinėjama YUM konfigūracija

Kai tik bus pasiektas „YumBase“ egzempliorius, mes galime tai naudoti norėdami patikrinti „YumBase“ konfigūraciją. Žemiau yra lentelė, kurioje pateikiamos populiarios komandos, nurodančios išsamią konfigūracijos informaciją.

Konfigūracija Naudojimas
spausdinti yb.konf.config_file_path Atsispausdinkite yum konfigūracijos failo kelią.
spausdinti yb.konf.žurnalo failas Norėdami atsispausdinti žurnalo failo kelią
nes aš yb.konf.reposdir: spausdinti i Norėdami išspausdinti saugyklų katalogus ir failus
spausdinti yb.konf.praleisti_sudaužytas Vertė paprastai yra klaidinga. Nustačius į „true“, „yum“ komandos veiks taip, tarsi būtų pateiktas parametras -skip-broken.
spausdinti yb.konf.klaidų lygis Norėdami nustatyti klaidų lygį, kurį norite matyti atspausdintą ant standartinės išvesties. Tai reikšmė tarp 0-10, kur 0 yra tik kritinė, o 10 yra viskas, kas apima derinimą. Pagal numatytuosius nustatymus ji nustatyta į 2, bet galite ją nepaisyti. Jei paleisite scenarijų, patartina tai nustatyti kaip 0. Galite nustatyti didesnę vertę, pvz., 3, kai derinate patį scenarijų.

Pakuočių užklausa

Grįžtant prie scenarijaus, matome, kad kita kodo eilutė nustato naują „Cache Directory“, kad jis atliktų visas užduotis kaip įprastas vartotojas (taip pat tam tikru mastu kaip ir pagrindinis vartotojas) - jis vis tiek negalės pakeisti duomenų pvz., „yumdb“ arba „rpmdb“).

yb.setCacheDir ()

Dabar sukūrę tikrą yum objektą, galime pasiekti atributus pkgSack, rpmdb ir repos. Tai leidžia mums atlikti šias funkcijas:

yb.pkgSack - gali būti naudojamas užklausoms atlikti visose įgalintose saugyklose

yb.rpmdb - gali būti naudojamas atliekant užklausas apie įdiegtus paketus

yb.repos - gaukite „RepositoryStorage“ objektą, kuris gali būti naudojamas nustatant konkrečias repo konfigūracijas ir gali būti naudojamas įgalinti ar išjungti saugyklas - el.g., yb.atpirkimas.enableRepo (), yb.atpirkimas.disableRepo () ir yb.atpirkimas.listEnabled (). Daugiau apie tai vėliau.

Kol kas gilinsimės į pkgSack ir rpmdb savybes. Mes galime ieškoti YUM saugyklose ir atitinkamai vietoje įdiegtuose paketuose iškvietę vieną iš kelių funkcijų, kurias teikia atributai pkgSack ir rpmdb. Šios funkcijos pateikia „paketo objektus“, kuriuose yra informacijos apie paketą. Keletas naudingų funkcijų paketo objektams gauti yra: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Mūsų scenarijus naudoja metodą returnNewstByNameArch, kad paketo objektai atitiktų šablonų eilutes „python“ arba „perl“.

Atkreipkite dėmesį, kad abiejų yb metodų pavadinimai yra vienodi.rpmdb ir yb.pkg maišas. Tačiau jie atlieka užklausas skirtinguose domenuose - rpmdb ieško vietinių įdiegtų RPM paketų duomenų bazėje, o pkgSack ieško YUM saugyklose.

Panašiai galėtume išvardyti įdiegtus didelius paketus (kur didelės reiškia, tarkime, dydis yra> 10 MB). Yum kodas yra:

plist = yb.rpmdb.returnPackages ()
l_plist = [p už p plist, jei p.dydis> 1024 * 1024 * 10]
print "Įdiegti paketai, kurių dydis> 10 MB:"
p p l_plist:
spausdinti "% s:% sMB"% (pkg, pkg.dydis / (1024 * 1024))

Iš esmės tai yra pitono naudojimo esmė, norint pasiekti „yum“. Likusioje straipsnio dalyje gilinsimės į „yum module“ API niuansus ir išbandysime dar keletą komplikacijų, tokių kaip paketų diegimas / pašalinimas ar savo saugyklos sukūrimas.

Nevra, PRCO ir „Tuples“

Antraštėje nėra rašybos klaidos - tai yra keletas yum specifinių terminų, kurie palengvina paketų ir priklausomybių identifikavimą, taip pat bendraujant su kitais yum vartotojais, įskaitant jūsų python scenarijus.

NEVRA reiškia pavadinimą, epochą, versiją, leidimą, architektūrą ir yra naudojamas unikaliam paketo skonio ar egzemplioriaus identifikavimui - šie penki parametrai kartu vienareikšmiškai rodo vieną unikalų paketo egzempliorių. Pavyzdžiui, paketas, vadinamas „python“, gali turėti kelias versijas, pvz., 2.6, 2.7 ir kt., ir kiekviena versija gali turėti kelis leidimus skirtingoms architektūroms, pvz.g., x86_64, i386 (Atkreipkite dėmesį, kad žodis architektūra čia nurodo procesoriaus architektūrą - el.g., „i386“ yra 32 bitų „Intel“). Kartu šie penki reiškia unikalų derinį ir yra vadinami nevra.

PRCO reiškia Provides / Requises / Conflict / Obsoletes, kurie apibendrina paketo objekto paketo valdymo metaduomenis.

Tam tikri API metodai pkgSack / rpmdb, pvz., Yb.pkg maišas.simplePkgList (), yb.pkg maišas.paketaiByTuple () ir kt., grąžinkite NEVRA ar PRCO informaciją kaip pitono rinkinius, o ne „pkgobjects“

Išvardinkite ir įdiekite paketus

Naudodami komandą „yum list“ galime naudoti „yb“.„doPackageLists ()“ - nurodykite visus įdiegtus paketus / paketus, kuriuos galima įdiegti / iš naujo įdiegti.

plist = yb.doPackageLists (modeliai = sys.argv [1:])

Dabar „Plist“ yra 3 paketų sąrašai - po vieną kiekvienam įdiegtam paketui, įdiegiamam paketui ir turimiems iš naujo įdiegti. Mes galime atsispausdinti / įdiegti / iš naujo įdiegti paketus naudodami žemiau esantį kodą:

jei pl.įdiegta:
spausdinti „Įdiegti paketai“
už pkg rūšiuojant (pl.įdiegta):
spausdinti pkg
jei pl.galima:
spausdinti "Galimos pakuotės"
už pkg rūšiuojant (pl.galima):
spausdinti pkg, pkg.atpirkimas
jei pl.reinstall_available:
spausdinti „Iš naujo įdiekite turimus paketus“
už pkg rūšiuojant (pl.reinstall_available):
spausdinti pkg, pkg.atpirkimas

Panašiai, kad išvardytume visus įdiegtus paketus, kuriuos galime naudoti:

spausdinti „\ n“.prisijungti ([x.x pavadinimas yb.rpmdb.returnPackages ()])

Diegiant paketus

Diegiant paketus reikia nustatyti ir įvykdyti operaciją. Norėdami atlikti paprastus veiksmus, pvz., Įdiegti / pašalinti, naudojame „yb“.įdiegti “arba„ yb.atitinkamai pašalinti, kad nustatytumėte operaciją. Tada mes iškviečiame 'yb.resolDeps () “, kad sukeltų priklausomybių išsprendimą, ir„ yb.processTransaction () “nurodyti YUM tęsti ir įvykdyti operaciją.

Visi veiksmai, išskyrus paskutinį, yra parengiamieji ir tik iškvietimas į processTransaction () metodą iš tikrųjų lemia tai, kad diegimas / pašalinimas įvyksta. Žemiau pateikiamas paketo diegimo kodo fragmentas.

yb = yum.„YumBase“ ()
yb.įdiegti (vardas = 'paketo pavadinimas')
yb.resolDeps ()
yb.processTransaction ()

Vykdydamas tokias operacijas, „yb.„tsInfo“ objekte yra informacija apie dabartinę operacijos būseną, kol ji bus įvykdyta. Daugiau apie tai galite perskaityti jo dokumentacijoje.

Nustatykite saugyklą savavališkoje vietoje

Žemiau esantis scenarijus padeda jums nustatyti, ar norite pasiekti saugyklą savavališkoje vietoje. Ji tikisi, kad saugyklos URL bus pateiktas kaip komandinės eilutės argumentas.

URL = sys.argv [1]
yb = yum.„YumBase“ ()
jei ne yb.setCacheDir (jėga = tiesa, pakartotinis naudojimas = klaidingas):
spausdinti >> sys.stderr: "Nepavyko sukurti tmp. cachedir. "
sys.išėjimas (1)
yb.atpirkimas.„disableRepo“ („*“)
yb.add_enable_repo ('myrepo', [url])

Norėdami paleisti scenarijų

pitono scenarijus.py url: // to / my / repo

Santrauka

Šiame straipsnyje mes sužinojome, kaip valdyti „YUM“ paketų tvarkyklę naudojant jos python API. Mes apžvelgėme konfigūravimo parinktis, taip pat užklausos / paieškos API prieinamuose ir įdiegtuose paketuose bei galiausiai būdus, kaip atlikti paketų valdymo operacijas, pvz., Įdiegti / pašalinti / iš naujo įdiegti paketus.

Šis straipsnis skirtas kaip langas į tai, kas įmanoma per „yum python“ API. Nors API nėra labai gerai dokumentuota, ji vadovaujasi standartinėmis taisyklėmis ir veikia nuspėjamai. Ginkluota žiniomis apie YUM galimybes ir „python“ įgūdžius, smagu tyrinėti ir sužinoti viską, ką ji gali padaryti. Tikiuosi, kad jums iki šiol patiko skaityti ir kad jūs toliau tyrinėjate ir taikote yum savo projektuose.

Naudingi įrankiai „Linux“ žaidėjams
Jei jums patinka žaisti žaidimus „Linux“ sistemoje, yra tikimybė, kad galbūt naudojote tokias programas ir įrankius kaip „Wine“, „Lutris“ ir „OBS Stud...
„HD Remastered“ žaidimai, skirti „Linux“, kurie niekada anksčiau nebuvo išleisti „Linux“
Daugelis žaidimų kūrėjų ir leidėjų siūlo senų žaidimų HD remasterį, kad prailgintų franšizės laiką. Prašome gerbėjų, prašančių suderinamumo su šiuolai...
Kaip naudoti „AutoKey“, norint automatizuoti „Linux“ žaidimus
„AutoKey“ yra darbalaukio automatizavimo įrankis, skirtas „Linux“ ir „X11“, užprogramuotas „Python 3“, „GTK“ ir „Qt“. Naudodami scenarijų ir „MACRO“ f...