Jak mogę reprezentować $ ARCH-pc-linux-gnu w pliku instalacyjnym Debiana?


3

Obecnie pracuję nad GNU Octave PPA . Mój octave.installplik (który według mojej wiedzy jest zgodny z tymi samymi konwencjami formatowania plików reguł) musi zawierać pliki z:

usr/lib/${DEB_HOST_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/x86_64-pc-linux-gnu/*

dla wersji 64-bitowej (lub amd64) i:

usr/lib/${DEB_HOST_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/i386-pc-linux-gnu/*

dla wersji 32-bitowej. Jak napisać plik instalacyjny, aby zawierał te pliki w odpowiednich systemach? Próbowałem:

ARCH=$(uname -m)
usr/lib/${DEB_HOST_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/$ARCH-pc-linux-gnu/*

w nadziei, że podobieństwa między plikami reguł a skryptem powłoki, pod względem ich składni, pozwolą tej linii działać. Ale $ARCHzmienna pozostała nieoceniona (tj. Pozostała jako $ARCHi nie zastąpiła wartości, którą wcześniej zdefiniowałem w linii) i kompilacja nie powiodła się ( tutaj jest dziennik kompilacji).

EDYCJA : Launchpad właśnie zakończył próbę zbudowania sugestii do użycia ${ARCH}zamiast $ARCHwe wspomnianej wcześniej poprawce. Oto błąd:

find debian/tmp -name '*.la' -delete
make[1]: Leaving directory `/<<PKGBUILDDIR>>'
   dh_install -a -O--parallel
    install -d debian/octave//usr/bin
    cp -a debian/tmp/usr/bin/octave-4.2.0 debian/octave//usr/bin/
    cp -a debian/tmp/usr/bin/octave-cli debian/octave//usr/bin/
    cp -a debian/tmp/usr/bin/octave-cli-4.2.0 debian/octave//usr/bin/
    cp -a debian/tmp/usr/share/applications debian/octave//usr/share/
    install -d debian/octave/-m\)
    cp -a debian/tmp/ARCH=\$\(uname debian/octave/-m\)/
cp: cannot stat ‘debian/tmp/ARCH=$(uname’: No such file or directory
dh_install: cp -a debian/tmp/ARCH=$(uname debian/octave/-m)/ returned exit code 1
make: *** [binary-arch] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary-arch gave error exit status 2
--------------------------------------------------------------------------------
Build finished at 20161117-1936

1
Próbowałeś ${ARCH}?
— Seth

Nie, jesteś pewien, że to zadziała? Pytam, ponieważ za każdym razem, gdy próbuję, zajmuje to 30 MB przepustowości przesyłania, ponieważ muszę ponownie przesłać również plik orig.tar.gz.
— BH2017,

Nie, nie jestem pewien, czy to zadziała, ale jestem dość pewny siebie. Czytam teraz instrukcję. Dlaczego nie budujesz lokalnie przed przesłaniem?
— Seth

Podejrzewam rozwiązanie @Seth zaproponowane przy pracy. Jeśli plik instalacyjny jest zgodny z tą samą konwencją co plik reguł, a plik reguł jest Makefile (zgodnie z tą stroną), oznacza to, że zgodnie z instrukcją make „Aby zastąpić wartość zmiennej, napisz znak dolara, a następnie nazwa zmiennej w nawiasach lub nawiasach klamrowych ”
— fakedad

Ze wszystkiego, co mogę znaleźć w instrukcji, powinna ona działać, zakładając, że parametr zostanie odpowiednio ustawiony, czego nie jestem pewien, czy można to zrobić z pliku instalacyjnego.
— Seth

Odpowiedzi:


2

Podobnie ${DEB_HOST_MULTIARCH}, istnieją inne zmienne dla szczegółów informacji o architekturze. Jak udokumentowano poniżej z podręcznika zasad Debiana:

4.9 Główny skrypt budynku: debian/rules

Architektury, na których budujemy i dla których budujemy, są określane przez makezmienne używające narzędzia dpkg-architecture. Możesz określić architekturę Debiana i ciąg specyfikacji architektury stylu GNU dla architektury kompilacji, a także dla architektury hosta. Architektura kompilacji to architektura, na której debian/rulesjest uruchamiane i wykonywane jest budowanie pakietu. Architektura hosta to architektura, na której pakiet wynikowy zostanie zainstalowany i uruchomiony. Zazwyczaj są one takie same, ale mogą się różnić w przypadku kompilacji krzyżowej (budowanie pakietów dla jednej architektury na maszynach o innej architekturze).

Oto lista obsługiwanych zmiennych make:

DEB_*_ARCH (the Debian architecture)    
DEB_*_ARCH_CPU (the Debian CPU name)
DEB_*_ARCH_OS (the Debian System name)
DEB_*_GNU_TYPE (the GNU style architecture specification string)
DEB_*_GNU_CPU (the CPU part of DEB_*_GNU_TYPE)
DEB_*_GNU_SYSTEM (the System part of DEB_*_GNU_TYPE)

gdzie *jest albo BUILDdo specyfikacji architektury kompilacji, albo HOSTdo specyfikacji architektury hosta.

Kompatybilność wsteczna może być zapewniona w pliku reguł poprzez ustawienie potrzebnych zmiennych na odpowiednie wartości domyślne; Szczegółowe informacje można znaleźć w dokumentacji dpkg-architecture.

Ważne jest, aby zrozumieć, że DEB_*_ARCHciąg określa tylko, dla której architektury Debian budujemy lub dla której budujemy. Nie należy go używać do uzyskiwania informacji o procesorze lub systemie; do tego należy użyć zmiennych DEB_*_ARCH_CPUi DEB_*_ARCH_OS. Zmienne w stylu GNU powinny zasadniczo być używane tylko z wcześniejszymi systemami kompilacji.

Źródło: https://www.debian.org/doc/debian-policy/ch-source.html

Ten, którego szukasz, to DEB_HOST_GNU_CPU. Tak więc nowa linia instalacyjna powinna być:

usr/lib/${DEB_HOST_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/${DEB_HOST_GNU_CPU}-pc-linux-gnu/*

Możesz sprawdzić wartości tych zmiennych na swoim komputerze lokalnym, uruchamiając:

~$ dpkg-architecture
DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_BITS=64
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_BUILD_MULTIARCH=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_BITS=64
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_ARCH_ENDIAN=little
DEB_HOST_ARCH_OS=linux
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_MULTIARCH=x86_64-linux-gnu
DEB_TARGET_ARCH=amd64
DEB_TARGET_ARCH_BITS=64
DEB_TARGET_ARCH_CPU=amd64 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.