You are not logged in.
A few days ago I changed the system to pentium4 packages. I would now like to create the latest package of teamviewer from the aur. But pentium4 architecture is not offered there. For the AUR I use yay. How should I proceed? When I try to do this always x686 packages are created with me. This can not be installed because the error comes from wrong architecture.
What I have done so far:
in the pacman.conf:
Architecture = pentium4
download teamviewer from aur:
[arch@myhost ~]$ yay -G teamviewer
:: Querying AUR...
1 aur/teamviewer 14.2.8352-1 (+1317 4.83%) (Installed: 14.1.18533-1)
:: Downloaded PKGBUILD (1/1): teamviewer
[arch@myhost ~]$ cd teamviewer
[arch@myhost teamviewer]$ nano PKGBUILD
in the PKGBUILD additionally pentium4 registered
org.
arch=('i686' 'x86_64' 'armv7h')
mod.
arch=('i686' 'pentium4' 'x86_64' 'armv7h')
Building package:
[arch@myhost teamviewer]$ makepkg -si
==> FEHLER: teamviewer steht für die 'pentium4'-Architektur nicht zur Verfügung.
nevertheless only x686 packages are created.
Last edited by ess (2019-05-23 09:00:14)
Offline
For clarity, does it actually build an i686 package or an x86_64 package? I can't grok your description there properly.
If it builds an i686 package then that's not the end of the world; it should still run on a pentium 4. I'm not sure which code is generating that localised string, so it's not clear to me what's actually spitting out that FEHLER (presumably a WARNING)
Architecture: pentium4, Testing repos: Yes, Hardware: EeePC 901+2GB RAM+OS half on the SD card.
Offline
Package is not created.
Last edited by ess (2019-05-22 19:00:16)
Offline
what's your value for Architecture in /etc/makepkg.conf? Any chance that you hard coded i686 there?
Offline
# /etc/makepkg.conf
#
#########################################################################
# SOURCE ACQUISITION
#########################################################################
#
#-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent'
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o')
# Other common tools:
# /usr/bin/snarf
# /usr/bin/lftpget -c
# /usr/bin/wget
#-- The package required by makepkg to download VCS sources
# Format: 'protocol::package'
VCSCLIENTS=('bzr::bzr'
'git::git'
'hg::mercurial'
'svn::subversion')
#########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
CARCH="pentium4"
CHOST="i686-pc-linux-gnu"
#-- Compiler and Linker Flags
CPPFLAGS="-D_FORTIFY_SOURCE=2"
CFLAGS="-march=pentium4 -mtune=generic -O2 -pipe -fno-plt"
CXXFLAGS="-march=pentium4 -mtune=generic -O2 -pipe -fno-plt"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"
#-- Debugging flags
DEBUG_CFLAGS="-g -fvar-tracking-assignments"
DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"
#########################################################################
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(!distcc !color !ccache check !sign)
# A negated environment option will do the opposite of the comments below.
#
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#-- check: Run the check() function if present in the PKGBUILD
#-- sign: Generate PGP signature file
#
BUILDENV=(!distcc color !ccache check !sign)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
#
#-- Specify a directory for package building.
#BUILDDIR=/tmp/makepkg
#########################################################################
# GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings
#########################################################################
#
# Default: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc directories specified by DOC_DIRS
#-- libtool: Leave libtool (.la) files in packages
#-- staticlibs: Leave static library (.a) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS
#-- debug: Add debugging flags as specified in DEBUG_* variables
#
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Options to be used when stripping binaries. See `man strip' for details.
STRIP_BINARIES="--strip-all"
#-- Options to be used when stripping shared libraries. See `man strip' for details.
STRIP_SHARED="--strip-unneeded"
#-- Options to be used when stripping static libraries. See `man strip' for details.
STRIP_STATIC="--strip-debug"
#-- Manual (man and info) directories to compress (if zipman is specified)
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Files to be removed from all packages (if purge is specified)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#-- Directory to store source code in for debug packages
DBGSRCDIR="/usr/src/debug"
#########################################################################
# PACKAGE OUTPUT
#########################################################################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source packages: specify a fixed directory where all src packages will be placed
#SRCPKGDEST=/home/srcpackages
#-- Log files: specify a fixed directory where all log files will be placed
#LOGDEST=/home/makepkglogs
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"
#-- Specify a key to use for package signing
#GPGKEY=""
#########################################################################
# COMPRESSION DEFAULTS
#########################################################################
#
COMPRESSGZ=(gzip -c -f -n)
COMPRESSBZ2=(bzip2 -c -f)
COMPRESSXZ=(xz -c -z -)
COMPRESSLRZ=(lrzip -q)
COMPRESSLZO=(lzop -q)
COMPRESSZ=(compress -c -f)
#########################################################################
# EXTENSION DEFAULTS
#########################################################################
#
# WARNING: Do NOT modify these variables unless you know what you are
# doing.
#
PKGEXT='.pkg.tar.xz'
SRCEXT='.src.tar.gz'
Offline
Now it works!
edit /etc/makepkg.conf
CFLAGS="-march=i686 -mtune=generic -O2 -pipe -fno-plt"etc mk
Offline
Have it checked again. If I want to install a package from the AUR and that does not offer Pentium4 as an architecture, I have to
1. Change the line from makepkg.conf to:
CFLAGS="-march=i686 -mtune=generic -O2 -pipe -fno-plt"etc
2. edit the PKGBUILD:
arch=('i686' 'pentium4')
After that he makes a Pentium4 package which I can install.
Thanks for the food for thought!
Offline
yes, adding "pentium4" to arch=() is mandatory (if it is not there yet).
Changing the CFLAGS should not change the name/architecture of the built package - it may prevent the package from compiling, though ...
Offline
Don't you need something in the cflags to tell it to spit out SSE2 instructions where sensible though? Or do pentium4 systems have that configured somewhere else? Looking at the gcc man page, it seems we should have -msse2 configured somewhere, but I can't find that declared anywhere in my /etc folder just now.
Of course, straight i686 code with no sse/mmx instrcuctions will work on pretty much any post-pentium pro machine, but it may not run quite as well.
Architecture: pentium4, Testing repos: Yes, Hardware: EeePC 901+2GB RAM+OS half on the SD card.
Offline
I'm not too familiar with compiler flags, but I thought, the "-march=pentium4' would enable sse2 instructions.
Besides CFLAGS, some packages also autodetect capabilities by other means (which usually creates trouble for i686, because our i686 build slaves are actually x86_64 machines which are chrooted and setarched)
Offline
It might do, but my last reading of ess's post suggests he's configuring his cflags in his makepkg.conf to be -march=i686 again, changing it from pentium4 to i686. Yes, it could be autodetecting, but presumably not inside the compiler otherwise why would it provide the option? I suspect he's not actually building sse enabled code, just plain i686 instructions.
Architecture: pentium4, Testing repos: Yes, Hardware: EeePC 901+2GB RAM+OS half on the SD card.
Offline
FWIW, 'gcc -march=pentium4 -Q -help=target' does show it's a valid architecture specification, and pretty close to what I get for -march=native on my machine. Perhaps the code in question just doesn't like building for sse enabled architectures though; I don't recognise that Fehler, and my understanding of the german suggests it could actually be a hard failure hardcoded into the teamview makefiles.
Architecture: pentium4, Testing repos: Yes, Hardware: EeePC 901+2GB RAM+OS half on the SD card.
Offline
I've pulled down the teamviewer AUR now, and looking at it it's not actually a buildscript thingy, it just downloads prebuilt binaries, and the 'i686' arch actually downloads an i386 binary. Oh well, it'll run, and there's nothing an -march can do about it.
Architecture: pentium4, Testing repos: Yes, Hardware: EeePC 901+2GB RAM+OS half on the SD card.
Offline
The error message translates to "ERROR:teamviewer is not available for the 'pentium4'-architecture." - so: yes: it looks like hard coded, sry, I missed that
Offline
Yes, I think it must actually be a makepkg error that's internationalised. It basically means you haven't defined a src_pentium4 variable for it to use to download the prebuilt binary (or source package). I can't find that variable actually used in the PKGBUILD or the single shell script in the project directory, so I guess makepkg searches for those variables.
That means that if PKGBUILDs do actually define different src_platforms (although the main use case I can think of for that is where you're actually downloading a binary), to get them to build on pentium4 architecures, as well as adding 'pentium4' to the arch variable, you also need to rename src_i686 as src_pentium4.
Architecture: pentium4, Testing repos: Yes, Hardware: EeePC 901+2GB RAM+OS half on the SD card.
Offline