pkg ABI

Tulkas

Well-Known Member
Hallo,
bei mir läuft neuerdings ein FreeBSD 13.0-BETA3 (geupdated von 12.2). Ich hatte vermutet, dass pkg(8) eine ABI von FreeBSD:13:amd64 anfragt. Tatsächlich steht ABI aber immer noch bei FreeBSD:12:amd64. Laut pkg.conf(5)-man-page sollte ABI von uname(1) bzw. sh(1) abgeleitet werden. Ein file auf beide Binaries melden bei mir aber auch FreeBSD 13 :
Code:
uname -a FreeBSD freebsd-t450 13.0-BETA3 FreeBSD 13.0-BETA3 #0 releng/13.0-n244525-150b4388d3b: Fri Feb 19 04:04:34 UTC 2021     root@releng1.nyi.freebsd.org:/usr/obj/usr/src/amd64.amd64/sys/GENERIC  amd64
file $(which uname)
/usr/bin/uname: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 13.0 (1300139), FreeBSD-style, stripped
Weiß jemand, wie man pkg dazu bewegt, Pakete vom 13er Paketserver zu nehmen? Ich habe es schon mit Gewalt ( pkg -o ABI=freebsd:13:amd64) probiert, aber da beschwert sich pkg auch drüber...
 
Probiere mal pkg bootstrap -f. Das müsste helfen, weil es pkg zwingt sich selbst neu zu installieren. Es tauscht das 12.x-Binary gegen ein 13.x-Binary aus, was dann beim nächsten pkg upgrade erkennen müsste, dass die installierten Pakete die falsche ABI haben und sie daraufhin alle gegen 13-xPakete ersetzt. Aber wenn das klappt bleibt die Frage, wieso pkg nicht von sich aus erkannt hat, dass das Betriebssystem aktualisiert wurde. Ich wollte morgen meinen Deskop im Büro auf 13.0 aktualisieren, dann achte ich mal drauf.
 
Code:
# pkg bootstrap -f
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/latest, please wait...
Installing pkg-1.16.2...
package pkg is already installed, forced install
Extracting pkg-1.16.2: 100%
# file /usr/local/sbin/pkg
/usr/local/sbin/pkg: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 12.2, FreeBSD-style, with debug_info, not stripped
 
In beiden FreeBSD.conf (/etc/pkg und /usr/local/etc/pkg) wird die Repository-URL mit ${ABI} gebildet. (/usr/local/etc/pkg überschreibt "quaterly" mit "latest")
 
Bei mir gibt es 2 verschiedene versionen:

Code:
# file /usr/local/sbin/pkg
/usr/local/sbin/pkg: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 12.1, FreeBSD-style, with debug_info, not stripped
# file /usr/sbin/pkg
/usr/sbin/pkg: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 12.2, FreeBSD-style, stripped
# where pkg
/usr/sbin/pkg
/usr/local/sbin/pkg

schaue doch unter /usr/sbin/pkg :)
 
das Update habe ich bisher nur einmal gemacht und da hat es automatisch geklappt. pkg wurde neu installiert, was man ja so zunächst gar nicht sieht.
freebsd-update macht ja ein Binär-Update des Systems und pkg ist da ja dann auch Teil davon.
Dabei werden alle Teile erst geladen, die Konfigurationen gemerged und dann erst installiert. Dabei kommt es einmal zu einem reboot, den man laut Ausgabe des Scripts manuell machen sollte und ich habe mir das auch angewöhnt, es sehr zeitnah zu dieser Ausgabe durchzuführen und dann den eigentlichen install laufen zu lassen.
Was ich nun vermute ist, dass hier bei dir etwas nicht wirklich gelaufen ist.
Erklären kann ich mir nicht wirklich, was da passiert. Die Ausgabe von freebsd-version sieht ja gut aus und trotzdem du manuell pkg zu einer neuen Version zwingst, bleibt es gegen die alte ABI gelinkt. Da fällt mir halt als unbedarftem Endanwender die /libexec/ld-elf.so.1 ins Auge. Wurde die vielleicht nicht ausgetauscht? Dann also vielleicht auch andere Teile des Basis-Systems nicht?
 
Code:
pit@Celsius ~:- > file /usr/local/sbin/pkg
/usr/local/sbin/pkg: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 13.0 (1300139), FreeBSD-style, with debug_info, not stripped
pit@Celsius ~:- > file /usr/sbin/pkg
/usr/sbin/pkg: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 13.0 (1300139), FreeBSD-style, stripped
pit@Celsius ~:- > whereis pkg
pkg: /usr/sbin/pkg /usr/local/man/man8/pkg.8.gz /usr/src/usr.sbin/pkg
pit@Celsius ~:- > where pkg
/usr/sbin/pkg
/usr/local/sbin/pkg
 
Ich habe es eben nachvollzogen. Man braucht ein aktuelles FreeBSD 13.0 /usr/sbin/pkg, damit pkg bootstrap -f das eigentliche pkg auf die 13.0 Version aktualisiert. Ich würde darauf tippen, dass es ist, wie @pit234a sagt. Dein System ist nicht vollständig aktualisiert. Schaue mal mit file /usr/sbin/pkg, welches Binary du dort hast.
 
Der system-pkg ist 13.0, der installierte (wie schon weiter oben gesehen) 12.2

Code:
#file /usr/sbin/pkg
/usr/sbin/pkg: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 13.0 (1300139), FreeBSD-style, stripped

#file /usr/local/sbin/pkg
/usr/local/sbin/pkg: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 12.2, FreeBSD-style, with debug_info, not stripped
Ein wiederholtes update bringt jedenfalls nichts:
Code:
#freebsd-update -F fetch  install
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 13.0-BETA3 from update4.freebsd.org... done.
Fetching metadata index... done. Inspecting system... done.
Preparing to download files... done.

No updates needed to update system to 13.0-BETA3-p0.
No updates are available to install.

Nachtrag:
Soweit ich das sehe ist /libexec/ld-elf.so.1 auch aktuell:
Code:
#file /libexec/ld-elf.so.1
/libexec/ld-elf.so.1: ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), dynamically linked, for FreeBSD 13.0 (1300139), stripped
 
Bei einem Upgrade kommt normalerweise die Meldung, dass du in einem ersten Schritt dir die Information aller installierter Pakete sicherst. Das kannst du zB per "pkg info > /home/foobar/installiertepakete" oder (wie @Yamagi mir gestern berichtet hat) über einen eingerichteten Alias "pkg noauto > /home/foobar/installiertepakete".

Im zweiten Schritt werden alle (!) Pakete gelöscht, damit sollte auch pkg gelöscht werden. Bitte stelle das sicher.

Übrig dürfte damit nur noch das Basissystem sein. In diesem enthalten ist, wie du bereits festgestellt hast, ein pkg der Version 13. Rufe zuerst einfach nur pkg (ohne weitere Variable auf). Es sollte pkg installiert werden. Installiere das und prüfe ob es das korrekte ist. Wenn ja: Installiere die Pakete "installiertepakete".

In den nächsten Tagen erscheint BETA4. Evtl. klappt es damit. Ich habe hier ein Notebook stehen, bei dem ich kürzlich eine Neuinstallation von BETA2 gemacht habe. Wenn dein Problem noch besteht, kann ich gerne mal versuchen 12.2 zu installieren und per freebsd-update upgrade auf 13.0-BETA3 hochzuziehen. Im ersten Schritt solltest du aber vorstehendes testen.
 
Zurück
Oben