Yum

Berinteraksi dengan YUM di CentOS menggunakan Python

Berinteraksi dengan YUM di CentOS menggunakan Python

Apa itu YUM?

YUM adalah alat pengurusan yang tersedia di distro RedHat dan CentOS Linux.  YUM (Yellowdog Updater Modified) bergantung pada pakej RPM (Red Hat Package Manager), dan dibuat untuk membolehkan pengurusan pakej sebagai bahagian sistem repositori perisian yang lebih besar dan bukannya fail pakej individu. YUM adalah pengurus pakej interaktif yang secara automatik dapat melakukan analisis ketergantungan dan kemas kini sistem, bersama dengan memasang pakej baru, menghapus pakej lama, melakukan pertanyaan pada pakej yang ada, dll. Untuk mengetahui lebih lanjut mengenai YUM, klik di sini.

Dalam artikel ini kita akan melihat kaedah mengakses fungsi yum menggunakan program Python dan mengetahui bagaimana ia dapat bermanfaat. Untuk tutorial ini, kami akan menggunakan CENTOS 7 menjalankan python 2.7.x dan akan memahami beberapa ciri asas python.

Mengaturcara dengan YUM

Mari mulai belajar mengenai pengaturcaraan yum menggunakan python dengan melihat skrip python sederhana yang menggunakan yum untuk membuat pertanyaan dan mencetak nama pakej. Ini dia:

import os
import sys
import yum
yb = yum.YumBase ()
yb.setCacheDir ()
hasil = yb.pkgSack.returnNewestByNameArch (corak = ["python", "perl"])
untuk hasil pkg:
cetak "% s% s (% s) \ n \ t% s"% (pkg.nama, pkg.versi, pkg.lengkungan, pkg.ringkasan)

Skrip ini mencari repositori YUM untuk pakej yang sesuai dengan nama "python" dan mencetak maklumat mengenai pakej yang sesuai. Kami akan meneliti skrip ini mengikut baris.

Untuk memulakan pengaturcaraan dengan YUM, kita perlu mengimport pakej python 'yum' - ini dipasang secara lalai di CENTOS 7. Bersama dengan 'yum', kita juga memerlukan pakej 'os' dan 'sys' - jadi program python khas yang menggunakan yum akan dimulakan dengan 3 baris berikut.

import os
import sys
import yum

Seterusnya, untuk membuat contoh yum untuk digunakan, sertakan baris di bawah.

yb = yum.YumBase ()

Ini hampir merupakan baris pertama kod fungsional dalam mana-mana program python menggunakan yum. Ini kerana, YumBase adalah kelas asas yang menempatkan kaedah dan objek yang diperlukan untuk melakukan semua fungsi pengurusan pakej menggunakan yum. Untuk struktur terperinci kelas YumBase, rujuk dokumentasinya.

Meneliti konfigurasi YUM

Setelah contoh YumBase tersedia, kita dapat menggunakannya untuk memeriksa konfigurasi yum. Berikut adalah jadual yang menyenaraikan arahan popular untuk menyenaraikan butiran konfigurasi.

Konfigurasi Penggunaan
cetak yb.pengesahan.config_file_path Cetak jalur fail untuk fail konfigurasi yum.
cetak yb.pengesahan.fail log Untuk mencetak jalan logfile
untuk i di yb.pengesahan.reposdir: cetak i Untuk mencetak direktori dan fail untuk repositori
cetak yb.pengesahan.langkau_pecah Nilainya biasanya salah. Apabila disetel ke true, perintah yum akan bertindak seolah-olah parameter -skip-rusak diberikan.
cetak yb.pengesahan.tahap kesalahan Untuk menetapkan tahap kesalahan yang anda ingin lihat dicetak pada output standard. Ini adalah nilai antara 0-10 di mana 0 hanya kritikal, sementara 10 semuanya termasuk debug. Secara lalai ia ditetapkan ke 2, tetapi anda boleh mengatasinya. Sekiranya anda menjalankan skrip, ada baiknya menetapkannya ke 0. Anda boleh menetapkannya ke nilai yang lebih besar seperti 3 semasa anda menyahpepijat skrip itu sendiri.

Pertanyaan untuk pakej

Kembali ke skrip kami, kami melihat baris kod seterusnya adalah menyiapkan Cache Directory baru untuk yum sehingga menjalankan semua tugas sebagai pengguna biasa (dan juga sebagai pengguna root sampai tahap tertentu - ia masih tidak dapat mengubah data dalam yumdb atau rpmdb misalnya).

yb.setCacheDir ()

Setelah membuat objek yum sebenar sekarang, kita dapat mengakses atribut pkgSack, rpmdb dan repos. Ini membolehkan kita melakukan fungsi-fungsi berikut:

yb.pkgSack - boleh digunakan untuk melakukan pertanyaan di semua repositori yang diaktifkan

yb.rpmdb - boleh digunakan untuk melakukan pertanyaan pada pakej yang dipasang

yb.repos - dapatkan objek RepositoryStorage yang boleh digunakan untuk menetapkan konfigurasi khusus untuk repos dan dapat digunakan untuk mengaktifkan atau mematikan repositori - e.g., yb.repos.aktifkanRepo (), yb.repos.lumpuhkanRepo () & yb.repos.senaraiDidayakan (). Lebih lanjut mengenai ini kemudian.

Buat masa ini kami akan mengkaji sifat pkgSack dan rpmdb. Kita boleh mencari repositori YUM & pakej yang dipasang secara tempatan dengan memanggil salah satu daripada beberapa fungsi yang disediakan oleh atribut pkgSack dan rpmdb. Fungsi-fungsi ini mengembalikan "objek paket" yang mengandungi maklumat mengenai paket. Beberapa fungsi yang berguna untuk mendapatkan objek pakej adalah: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Skrip kami menggunakan kaedah returnNewstByNameArch untuk mendapatkan objek pakej yang sesuai dengan rentetan corak "python" atau "perl".

Perhatikan bahawa nama kaedah adalah sama untuk kedua-dua yb.rpmdb dan yb.pkgSack. Walau bagaimanapun, mereka melakukan pertanyaan pada domain yang berbeza - rpmdb mencari pangkalan data pakej RPM yang dipasang tempatan sementara pkgSack mencari repositori YUM.

Kita juga boleh menyenaraikan pakej besar yang dipasang (dengan ukuran besar, katakanlah ukurannya> 10MB). Kod yum adalah:

plist = yb.rpmdb.pulanganPakej ()
l_plist = [p untuk p dalam plist jika p.saiz> 1024 * 1024 * 10]
cetak "Pakej yang dipasang dengan saiz> 10MB:"
untuk p dalam l_plist:
cetak "% s:% sMB"% (pkg, pkg.saiz / (1024 * 1024))

Itulah asasnya penggunaan python untuk mengakses yum. Dalam artikel yang selebihnya, kami akan mempelajari lebih mendalam tentang nuansa API modul yum dan mencuba beberapa tindakan komplikasi seperti memasang / menyahpasang pakej atau menyiapkan repositori kami sendiri.

Nevra, PRCO dan Tuples

Tidak ada kesalahan ketik dalam tajuk - ini adalah beberapa istilah khusus yum yang menjadikan pengenalan pakej dan pergantungan lebih mudah serta dalam menyampaikannya dengan pengguna yum lain, termasuk skrip python anda.

NEVRA adalah singkatan dari Name, Epoch, Version, Release, Architecture dan digunakan untuk mengenal pasti secara unik rasa atau contoh pakej - lima parameter ini secara bersamaan menunjukkan satu contoh unik pakej. Contohnya, pakej yang disebut "python" mungkin mempunyai pelbagai versi seperti 2.6, 2.7 dll., dan setiap versi boleh mempunyai banyak pelepasan untuk seni bina yang berbeza e.g., x86_64, i386 (Perhatikan bahawa perkataan seni bina di sini merujuk kepada seni bina CPU - e.g., i386 adalah Intel 32-bit). Bersama-sama kelima-lima ini mewakili gabungan yang unik dan disebut sebagai nevra.

PRCO bermaksud Menyediakan / Memerlukan / Konflik / Obsolet yang merangkum metadata pengurusan pakej untuk objek pakej.

Kaedah API tertentu dalam pkgSack / rpmdb, seperti yb.pkgSack.simplePkgList (), yb.pkgSack.pakejByTuple () dll., kembalikan maklumat NEVRA atau PRCO sebagai tupel python dan bukannya pkgobjects

Senaraikan dan pasang pakej

Untuk menggunakan perintah "yum list", kita dapat menggunakan 'yb.doPackageLists () 'untuk menyenaraikan semua pakej yang dipasang / pakej yang tersedia untuk dipasang / dipasang semula.

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

Sekarang daftar mengandungi 3 senarai pakej - masing-masing untuk pakej yang dipasang, pakej yang boleh dipasang dan yang tersedia untuk dipasang semula. Kami boleh mencetak / memasang / memasang semula pakej menggunakan kod di bawah:

sekiranya pl.dipasang:
cetak "Pakej yang Dipasang"
untuk pkg dalam urutan (pl.dipasang):
cetak pkg
sekiranya pl.ada:
cetak "Pakej yang Ada"
untuk pkg dalam urutan (pl.ada):
cetak pkg, pkg.repo
sekiranya pl.pasang semula_ tersedia:
cetak "Pasang Semula Pakej yang Ada"
untuk pkg dalam urutan (pl.pasang semula_ tersedia):
cetak pkg, pkg.repo

Begitu juga untuk menyenaraikan semua pakej terpasang yang boleh kita gunakan:

cetak "\ n".sertai ([x.nama untuk x dalam yb.rpmdb.returnPackages ()])

Memasang pakej

Memasang pakej melibatkan penyediaan dan pelaksanaan transaksi. Untuk melakukan tindakan mudah seperti memasang / membuang kami menggunakan 'yb.pasang 'atau' yb.hapus 'masing-masing untuk mengatur urus niaga. Kemudian kami memanggil 'yb.resolDeps () 'untuk mencetuskan penyelesaian kebergantungan dan' yb.processTransaction () 'untuk mengarahkan YUM untuk terus maju dan melaksanakan transaksi.

Semua langkah, tetapi yang terakhir, adalah persediaan dan hanya panggilan untuk proses Metode transaksi () sebenarnya mengakibatkan pemasangan / penyahpasangan berlaku. Berikut adalah coretan kod untuk pemasangan pakej.

yb = yum.YumBase ()
yb.pasang (name = 'packagename')
yb.menyelesaikanDep ()
yb.prosesTransaksi ()

Semasa melakukan transaksi tersebut, 'yb.Objek tsInfo menyimpan maklumat mengenai status transaksi semasa sehingga dilakukan. Anda boleh membaca lebih lanjut mengenainya dalam dokumentasinya.

Sediakan repositori di lokasi sewenang-wenangnya

Skrip di bawah ini membantu anda menyediakan yum untuk mengakses repositori di lokasi sewenang-wenangnya. Ia mengharapkan URL repositori diserahkan sebagai argumen baris perintah.

url = sys.argv [1]
yb = yum.YumBase ()
jika tidak yb.setCacheDir (force = True, reuse = False):
cetak >> sys.stderr, "Tidak dapat membuat tmp. cachedir. "
sys.jalan keluar (1)
yb.repos.lumpuhkanRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Untuk menjalankan skrip

skrip python.py url: // ke / my / repo

Ringkasan

Dalam artikel ini kami belajar bagaimana mengawal pengurus pakej YUM menggunakan API pythonnya. Kami melihat pilihan konfigurasi serta query / search API pada pakej yang tersedia dan dipasang dan akhirnya pada cara untuk melakukan operasi pengurusan pakej seperti memasang / menyahpasang / memasang semula pakej.

Artikel ini bertujuan untuk berfungsi sebagai jendela yang mungkin dilakukan melalui API yum python. Walaupun API tidak didokumentasikan dengan baik, ia mengikuti konvensyen standard dan berfungsi dengan baik. Berbekalkan pengetahuan tentang kemampuan YUM dan kemahiran python, sangat menyeronokkan untuk meneroka dan mempelajari semua yang boleh dilakukannya. Semoga anda seronok membaca setakat ini dan anda meneruskan penerokaan & penerapan yum dalam projek anda.

5 Kad Tangkap Permainan Teratas
Kita semua telah melihat dan menyukai streaming permainan permainan di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain terat...
Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...
Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...