Minulla on Fedora-järjestelmä (A), johon olen asentanut joitain paketteja ajan myötä. Haluan nyt asentaa Fedoran toiselle tietokoneelle (B) ja haluan asentaa samat paketit siihen.

Debianin termeillä haluan saavuttaa jotain tällaista:

$ dpkg --get-selections > pkg_sel_host_a # on host_a $ dpkg --set-selections < pkg_sel_host_a # on host_b 

Mutta rehellisesti sanottuna haluan todella paremman tavan valita samat paketit uudessa Fedora 19 -järjestelmässä (B): Haluan vain asentaa paketit järjestelmästä A, jotka mainittiin erikseen dnf install (tai yum install) komentorivillä – eikä niitä, jotka asennettiin riippuvuuksina!

Miksi? Koska ehkä riippuvuudet ovat muuttuneet – enkä halua asentaa vanhentuneita riippuvuuksia uuteen järjestelmään. Plus, kun poistan paketteja, haluan poistaa myös (mahdollisesti) silloin tarpeettomat automaattisesti asennetut riippuvuudet (eli orpot).

Olen löytänyt dnf list installed – mutta se ei näy, jos paketti on nimenomaisesti valittu tai juuri asennettu riippuvuuden vuoksi.

Kuinka teen hae kyseiset tiedot Fedorasta?

Mikä on Fedora / dnf-tapa kopioida pakettivalintoja?

Vastaa

Fedora 26: n jälkeen Dnf repoquery -alikomentotuki tarjoaa uuden vaihtoehdon kaikkien käyttäjän asentamien pakettien listalle:

$ dnf repoquery --qf "%{name}" --userinstalled \ | grep -v -- "-debuginfo$" \ | grep -v "^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$" > pkgs_a.lst 

Toisin kuin muut menetelmät, siinä luetellaan myös kaikki debuginfopaketit. Yllä olevan esimerkin ylimääräinen grep suodattaa ne pois.

Luettelon asentaminen isäntään B:

$ < pkgs_a.lst xargs dnf -y install 

Dnf API

Uusimmilla Dnf-versioilla (esim. Fedora> = 23) pakettitietokannasta voidaan kysyä käyttäjän asentamien pakettien nimiä Dnf Python -sovellusliittymän kautta:

$ python3 -c "import dnf; b = dnf.Base(); b.fill_sack(); \ l = sorted(set(x.name for x in b.iter_userinstalled() \ if not x.name.endswith("-debuginfo") \ and x.name not in \ ["kernel-modules", "kernel", "kernel-core", "kernel-devel"] )); \ print("\n".join(l)) " > pkgs_a.lst # dnf install $(cat pkgs_a.lst) # on host_b 

Oletusarvon mukaan dnf install keskeyttää, jos yhtä tai useampaa pakettia ei ole enää saatavana. Vaihtoehtoisesti dnf voidaan pakottaa Asenna kaikki jäljellä olevat:

# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b 

PS: Laita yllä oleva koodi ja paljon muuta osioon user-installed.py , joka tukee myös muita jakeluja.

käyttäjän asentama historia

Fedora 23: ssa ja uudemmissa Dnf tarjoaa

# dnf history userinstalled 

-komennon, joka näyttää kaikki käyttäjän asentamat paketit. Vuodesta 2016-11 , sen hyödyllisyys on rajoitettua , koska ei ole mitään tapaa hallita tuotantoaan ja tulostaa paketit täysin päteviksi (ts. mukaan lukien versiotiedot).

käyttäjän asentamat rajoitukset

Huomaa, että pakettien merkinnällä käyttäjän asentamilla on joitain rajoituksia joissakin Fedora-versioissa, Fedora 23-ish-aikakauden järjestelmissä (noin vuodesta 2015) -11) seuraavat asiat ovat merkityksellisiä):

Repoquery

Vanhemmissa Fedora-järjestelmissä, joissa Dnf, Dnf API ja dnf history userinstalled ei ole käytettävissä, sen sijaan voidaan käyttää uudelleenjulkaisua , esim .:

$ repoquery --installed \ --qf "%{n} | %{yumdb_info.reason} | %{yumdb_info.installed_by}" --all \ | awk -F"|" " $2 ~ /user/ && ($3 != 4294967295) { print $1 }" \ | sort -u > pkgs_a.lst 

Toista awk-ehtoa käytetään sulkemaan pois asennusohjelman asentamat paketit. Asentajan käyttäjätunnus oli ilmeisesti tallennettu nimellä 4294967295 – vaihtoehtoisesti voit kirjoittaa jotain esimerkiksi

.

Huomaa, että tämä komento toimii Fedoralla julkaisuun 21 saakka – mutta esim. ei julkaisussa 23, koska komento repoquery korvattiin nimellä dnf repoquery. Ja dnf repoquery ei ymmärrä %{yumdb_info.reason} -tunnistetta.

Kommentit

  • En ’ ole varma, saako tämä lähestymistapa kaiken, huomasin nämä järjestelmässäni, kun Juoksin repoquery ...: ” Virheellinen yumdb-kysely ’ syy ’ asennetulle paketille: HandBrake-cli-0.9.5-1.fc14.x86_64 ”
  • @slm, hm, mistä arkisto oli käsijarru asennettu? Ehkä arkiston asetuksilla on jotain tekemistä sen kanssa?
  • Luulen, että se on voinut olla erillinen RPM, jonka asensin käyttämällä yum localinstall .... Minulla oli kuitenkin melko paljon paketteja, jotka putosivat tuohon leiriin.
  • repoquery --installed --qf '%{n} - %{yumdb_info.reason}' --all 2>&1|grep -v "user$"|grep -v "dep$" |wc -l palautti 90 pakettia.

Vastaa

Helpoin tapa, ja se toimi pitkään aikaan:

yum-debug-dump => gives file. yum-debug-restore <file-from-debug-dump> 

… joka toimii aivan kuten get / set selections dpkg -komento, AIUI.Huomaa myös, että jos toistat historiaa, voit käyttää:

yum history addon-info last saved_tx => gives file yum load-tx <file-from-addon-info> 

… sen sijaan, että sinun tarvitsisi jäsentää sitä itse.

Vastaus

Innoittamana slm ”s vastaus Olen keksinyt seuraavan yum history -pohjaisen ratkaisun:

Hanki kaikki yksityiskohtaiset tiedot kaikista asennustapahtumista (ts. ei päivityksiä) , lukuun ottamatta niitä, jotka on suoritettu osana alkuperäisiä asennusohjelman toimintoja (järjestelmässä tapahtuvat tapahtumat 1 ja 2, määritetty käyttäjän ”Järjestelmälle”):

$ yum history list all | awk -F"|" \ "$4 ~ /Install/ && $2 !~ /System/ {print $1}" \ | xargs yum history info > yum_history 

Suodata nimenomaisesti asennetut paketit ja leikkaa version etuliitteet.

$ < yum_history grep "[^-]\<Install\>" | \ awk "{ print $2 }" \ | sed "s/\(-[0-9]\+:\|-[0-9]\+\.[0-9]\|-[0-9]\+-\|-[0-9]\+git\).\+\(\.fc1[1-7]\.\|\.noarch\).*$//" \ | sort > hist_pkg_list 

Ruma säännöllinen lauseke tarvitaan siten, että kaikenlaiset versiotunnisteet sovitetaan yhteen.

Tulokset näyttää melko hyvältä järjestelmässäni.

Vertailu -julkaisuun ansatz (järjestelmässäni):

 method # packages ――――――――――――――――――――――――― repoquery 569 repoquery-2nd 216 yum history 214 

(Lähetin repo-kyselyn tuloksia eteenpäin ugh sort -u)

Miksi on eroja? Koska uudelleenpalautus sisältää kaikki tapahtumien 1 ja 2 paketit eli kaikki Fedora-asentajan asentamat paketit. Tämä selittää, miksi repoquery sisältää mainitut paketit xorg-x11- drv-mga ja ystävät.

Repoquery-2nd- ja yum-history-vertailu osoittaa, että repoquery-2nd on tarkempi – se ei sisällä joitain jo poistettuja paketteja. . Lisäksi näyttää siltä, että se sisältää muutaman (2 järjestelmässäni) paketteja ”yum update” -operaatioista.

Varoitus

Yllä oleva historiaan perustuva menetelmä listaa vain kaikki nimenomaisesti asennetut paketteja järjestelmän koko käyttöiän ajan. Se ei tasapainota niitä paketteja, jotka poistettiin myöhemmässä tapahtumassa. Siten tämä menetelmä vaatii tulosten manuaalista kuratointia ja sitä tulisi käyttää vain järjestelmissä, joissa repoquery ei ole käytettävissä.

Kommentit

  • Hieno tapa hyödyntää molemmat vastauksemme parhaat puolet! Annan sinulle ’ enemmän kuin +1, jos voisin mahdolliselle ratkaisulle + sen eri tapojen mukava vertailu.

vastaus

Minulla on vanhempi Fedoran versio (14), joten yum sisältää vähemmän monipuolisen version versiosta yum, mutta kannattaa ehkä tarkastella yum history -ominaisuutta. Uskon, että voit saada etsimäsi tiedot komennosta.

historialuettelo

$ sudo yum history list Loaded plugins: langpacks, presto, refresh-packagekit Adding en_US to language list ID | Login user | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 862 | System <unset> | 2013-07-12 18:00 | Install | 1 861 | System <unset> | 2013-07-09 03:11 | Install | 1 860 | System <unset> | 2013-07-01 13:40 | Install | 1 859 | System <unset> | 2013-06-29 22:07 | Install | 1 858 | System <unset> | 2013-06-25 22:33 | Install | 1 P< 857 | System <unset> | 2013-06-23 22:28 | Update | 1 >E 856 | System <unset> | 2013-06-23 21:33 | Install | 1 ... 

Voit palata ensimmäinen tapahtuma välittämällä numeroluettelo yum history list:

$ sudo yum history list `seq 1 10` Loaded plugins: langpacks, presto, refresh-packagekit Adding en_US to language list ID | Login user | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 10 | Sam M. (local) <saml> | 2010-12-18 23:23 | Install | 2 9 | Sam M. (local) <saml> | 2010-12-18 23:15 | Install | 38 8 | Sam M. (local) <saml> | 2010-12-18 23:12 | Install | 1 7 | Sam M. (local) <saml> | 2010-12-18 23:09 | Install | 1 < 6 | Sam M. (local) <saml> | 2010-12-18 22:37 | Install | 1 > 5 | Sam M. (local) <saml> | 2010-12-18 21:57 | Install | 1 4 | System <unset> | 2010-12-18 21:21 | Install | 5 3 | System <unset> | 2010-12-18 21:18 | Install | 4 2 | System <unset> | 2010-12-18 21:10 | Install | 3 1 | System <unset> | 2010-12-18 19:14 | Install | 1189 

historiatiedot

Seuraava näyttää, mitä asennettiin osana ensimmäistä yum-tapahtumaa:

$ sudo yum history info 1 | less Loaded plugins: langpacks, presto, refresh-packagekit Adding en_US to language list Transaction ID : 1 Begin time : Sat Dec 18 19:14:05 2010 Begin rpmdb : 0:da39a3ee5e6b4b0d3255bfef95601890afd80709 End time : 19:42:43 2010 (1718 seconds) End rpmdb : 1189:8c21e9e377c3ebdee936916208f74232d5d6235f User : System <unset> Return-Code : Success Transaction performed with: Packages Altered: Dep-Install ConsoleKit-0.4.2-3.fc14.x86_64 Dep-Install ConsoleKit-libs-0.4.2-3.fc14.x86_64 Dep-Install ConsoleKit-x11-0.4.2-3.fc14.x86_64 Dep-Install GConf2-2.31.91-1.fc14.x86_64 Dep-Install GConf2-gtk-2.31.91-1.fc14.x86_64 Dep-Install ModemManager-0.4-4.git20100720.fc14.x86_64 Install NetworkManager-1:0.8.1-10.git20100831.fc14.x86_64 Dep-Install NetworkManager-glib-1:0.8.1-10.git20100831.fc14.x86_64 Install NetworkManager-gnome-1:0.8.1-10.git20100831.fc14.x86_64 Install NetworkManager-openconnect-0.8.1-1.fc14.x86_64 

Huomaa, kuinka yum ilmoittaa, onko paketti nimenomaisesti asennettu vai asennettu, koska se tarvitsi riippuvuus. Voit jäsentää nämä tiedot ja saada luettelon paketeista, jotka on asennettu nimenomaisesti.

Kommentit

  • I ’ olet lisännyt vastauksen yum history -ideasi perusteella, se vertaa tuloksia myös repoquery -perusteiseen menetelmään . Sivuvaikutuksena olen ’ laajentanut vastaustani.

Vastaa

dnf repoquery --qf "%{name}" --userinstalled > userinstalled.txt 

Kommentit

  • Mitä huomaat vastauksessasi, kun tarkastelet muita viittä vastausta täällä? Ei ole mitään selitystä miksi tai miten vastauksesi on parempi erilainen. Olisi hyvä, jos voisit antaa kuvauksen vastauksestasi, joka kattaa nämä asiat.
  • @StephenRauch, tätä komentoa ei ’ sisälly muihin vastauksiin, koska se ’ on viimeisin dnf-lisäys. --userinstalled -kytkin lisättiin juuri dnf: hen toukokuussa . Olen ’ testannut sen, ja se antaa tarkat tulokset. Moduloi ytimen / kernel-core / kernel-modules paketteja, joita ’ ei ole todella asennettu käyttäjälle. Se sisältää myös kaikki *-debuginfo -paketit – mutta ne voidaan tarvittaessa suodattaa helposti.
  • @maxschlepzig, kiitos palautteesta, mutta tämä oli itse asiassa vähän retorista kysymystä, yrittäen kouluttaa / kehottaa vastaajaa selittämään sen vastauksessa.
  • @StephenRauch, riittävän oikeudenmukainen, jotkut muokkaukset olisivat varmasti sopivia ja antaisivat minun merkitä sen hyväksytyksi vastaus.

vastaus

Jos haluat luetteloida asentamasi paketit , kokeile tätä yhden linjan :

alias yum-userinstall="yumdb search command_line install* | grep command_line\ = | sort | uniq | sed -r -e "s/command_line = (.*)/yum \1/g"" 

Tulos:

# yum-userinstall yum install bind-utils yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install lsof yum install nano yum install nfs-utils libnfsidmap yum install nmap-ncat yum install openscap-scanner yum install open-vm-tools 

PS1: se ei näytä riippuvuuksia

PS2: se on lajiteltu aakkosjärjestyksessä

PS3: se ei näytä, jos olet poistanut paketin myöhemmin

Vastaa

Mitä tein (unohdin yksityiskohdat ja olen ”laiska pomo, joten …

Hanki kaikki asennetut paketit: rpm -qa > file

Käytä sed(1) päästäksesi eroon versionumeroista ja muista (säilytä arkkitehtuuri tarvittaessa). Tämä vaati muutama iterointi sen saamiseksi oikein, haluat korvata viimeisen -[0-9.]-[0-9].fc23 -osan tai muun vastaavan osan millään tavalla, mutta on myös hauskoja versionumeroita.

Jälkeen asentamalla normaalisti, tee yum -y install $(< file) (tai dnf tarpeen mukaan).

Saat jonkin verran laskeumaa paketeista, joita ei ole olemassa ymore, muutettu nimi tai korvattu muilla.

Kommentit

  • Ok, mutta tämä merkitsee kaikki aiemmin asennetut paketit käyttäjän sisäisiksi kohde-isäntä. Vaikka ne olisivat alun perin asennettu vain riippuvuuksina.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *