Puncte:4

Instalați din fișierul care conține rezultatul din lista apt --installed

drapel co

Am un fișier care conține rezultatul apt list --instalat de la o altă mașină.

adică

accountsservice-ubuntu-schemas/focal,focal,acum 0.0.7+17.10.20170922-0ubuntu1 all [instalat,automatic]
accountsservice/focal-updates,focal-security,acum 0.6.55-0ubuntu12~20.04.5 amd64 [instalat,automatic]
acl/focal, acum 2.2.53-6 amd64 [instalat, automat]

...și așa mai departe.

Există o modalitate ușoară de a instala aceste pachete folosind fișierul menționat mai sus și linia de comandă?

muru avatar
drapel us
Doriți să instalați acele versiuni specifice?
Gigi Bayte 2 avatar
drapel co
@muru Aceasta este o întrebare bună.Atâta timp cât totul din lista de pachete are dependențele sale, atunci sunt bine dacă versiunile sunt aceleași sau mai noi. (Așa cum este, se poate presupune că dependențele sunt îngrijite.)
Puncte:5
drapel zw

APT afirmă clar că nu este conceput pentru a fi utilizat cu scripturi:

UTILIZAREA SCRIPTULUI ȘI DIFERENȚELE DE ALTE INSTRUMENTE APT
The apt(8) linia de comandă este concepută ca un instrument pentru utilizatorul final și poate schimba comportamentul între versiuni. Deși încearcă să nu rupă compatibilitatea cu înapoi, acest lucru nu este garantat nici dacă o modificare pare benefică pentru utilizarea interactivă.

Toate caracteristicile apt(8) sunt disponibile în instrumente APT dedicate, cum ar fi apt-get(8) și apt-cache(8) de asemenea. apt(8) modifică doar valoarea implicită a unor opțiuni (vezi apt.conf(5) și în special domeniul de aplicare binar). Prin urmare, ar trebui să preferați să utilizați aceste comenzi (posibil cu unele opțiuni suplimentare activate) în scripturile dvs., deoarece păstrează compatibilitatea cu versiunea inversă cât mai mult posibil.

Folosești un instrument greșit. O modalitate mai bună este să folosești dpkg in sine:

dpkg -l | awk '$1 == "ii" {print $2}' > instalat
sudo apt-get install $(cat instalat)

Detalii:

Apropo, această metodă pare îngustă la minte (ca în acest ghid grozav pe Comunitate). Pierzi o cantitate mare de informații - originile pachetelor și cheile lor GPG.
Mai mult, această metodă va eșua la prima apariție a pachetului instalat local sau a pachetului instalat de la un PPA care nu există pe a doua mașină.


Dacă doriți un serviciu all-inclusive - încercați script python numit srslsud (Salvare/Restaurare Scriptul listei de software pentru resursele Ubuntu și Debian).
Acesta va salva toate depozitele APT, cheile lor GPG; liste de Snaps, Flatpaks și Ubuntu Faceți aplicații în fișierul JSON de la prima mașină.
Apoi puteți restaura această listă folosind același fișier JSON pe a doua mașină.

marcelm avatar
drapel cn
Îmi place cum spui că folosirea `apt` nu este destinată analizei directe a mașinii, iar apoi folosești o invocare `dpkg` care necesită doi pași de filtrare înainte de a putea fi analizată :P - Te-ai gândit la `dpkg --get-selections ` / `dpkg --set-selections`?
Nate T avatar
drapel it
Am mers cu apt pentru a ocoli erorile în cazul pachetelor deja instalate. Nu mi-am putut aminti dacă rularea direct `dpkg` în aceste cazuri va produce erori sau nu, dar știam sigur că apt le va ignora. Sincer, avertismentul Apt nu a avut niciodată sens pentru mine. Ei se plâng că actualizările pot rupe implementările actuale, dar acest lucru este valabil pentru orice software. Acesta este motivul pentru sistemul nostru de versiuni `X.X.XX`, care face distincția între modificările de tip breaking și non-breaking.
bac0n avatar
drapel cn
Ieșirea @NateT de la `apt` este sensibilă la locale.
Nate T avatar
drapel it
@bac0n văd. Asta are sens atunci. Bine de stiut. Funcționalitatea bazată pe locale este inclusă în logica apt-get sau doar în interfață?
Puncte:5
drapel us

Puteți extrage piesa înainte de prima / și folosește asta cu xargs pentru a instala prin apt:

xargs -a <(awk -F/ '{print $1}' some-file) apt install

Sau:

awk -F/ „{printează $1}” un fișier | xargs apt install -y
Puncte:1
drapel it

De fapt, recent am scris un script pe propria mașină care, în esență, face exact asta. O fac mai întâi prin conducta la sed 's/\/.*//g' pentru a elimina totul după slash. Apoi ieșirea este transmisă la xargs /usr/bin/sudo apt install.

După cum a menționat @N0rbert cu privire la soluția sa, principala slăbiciune aici este că este nevoie de un singur caz de eroare (cum ar fi un repo lipsă în surse.lista) pentru a opri întreaga operațiune. Prin urmare, dacă utilizați un fișier sursă diferit de sistemul care a generat intrarea, soluția cu care mergeți va trebui să verifice mai întâi dacă pachetul este disponibil pentru sistemul dumneavoastră. În general, alegerea dvs. va depinde de cazul (cazurile) de utilizare vizate.

De exemplu, probabil că ați putea scăpa fără să treceți sed, dar în cazul meu, scriptul folosește tee pentru a salva lista într-un fișier și apoi face procesări ulterioare folosind fișierul ca intrare.De fapt, lista în sine este tema centrală a acelui scenariu și a altor câteva care lucrează în tandem cu acesta.

Câteva note: nu trebuie să vă faceți griji pentru a verifica dacă pachetul este sau nu deja instalat pe computer. Dacă este, apt îl va omite pur și simplu. De asemenea, deoarece sunteți pe cale să instalați destul de multe pachete atunci când rulați, este o idee bună să începeți cu sudo apt update && sudo apt upgrade comanda. Acest lucru vă va scuti de a descărca o mulțime de pachete doar pentru a ajunge să descărcați o versiune puțin mai nouă pentru multe dintre ele puțin mai târziu.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.