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
BH2017
źródło
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 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 
user.dz
źródło