diff options
Diffstat (limited to 'linux/ports.html')
-rw-r--r-- | linux/ports.html | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/linux/ports.html b/linux/ports.html new file mode 100644 index 0000000..78607bd --- /dev/null +++ b/linux/ports.html @@ -0,0 +1,265 @@ +<!DOCTYPE html> +<html dir="ltr" lang="en"> + <head> + <meta charset='utf-8'> + <title>1.4. Ports</title> + </head> + <body> + + <a href="index.html">Core OS Index</a> + + <h1>1.4. Ports</h1> + + <p>This instructions are done + <a href="configure.html#chroot">inside chroot</a>.</p> + + <h2 id="filesystem">1.4.1. Ports Layout</h2> + + <p>Make sure follow directories exist;</p> + + <pre> + # mkdir /usr/ports + # mkdir -p /usr/ports/{distfiles,packages,work,pkgbuild} + </pre> + + <h2 id="fakeroot">1.4.2. Build as user</h2> + + <p>For more information read + <a href="https://crux.nu/Wiki/FakerootPorts">Fakeroot Ports</a>. + Add a user that will be used by ports tools, this example pkgmk;</p> + + <pre> + # useradd -r -U -d /usr/ports -s /bin/false pkgmk + </pre> + + <p>You can add your self to group pkgmk. Check if members of this + group are under <a href="linux.html#sysctl">tpe</a> protection.</p> + + <pre> + # usermod -a -G pkgmk username + </pre> + + <pre> + # chown pkgmk /usr/ports/{distfiles,packages,work,pkgbuild} + # chown pkgmk:pkgmk /usr/ports/pkgbuild + # chmod g+w /usr/ports/pkgbuild + </pre> + + <p>Configure to + <a href="https://crux.nu/Wiki/HowToSpeedUpBuildingPackages#ram">compile in ram</a> + average of 3GB is recommended for core while firefox need at least 30G. + Discover id of pkgmk user;</p> + + <pre> + # id pkgmk + uid=102(pkgmk) gid=102(pkgmk) groups=102(pkgmk) + </pre> + + <p>Edit fstab, change uid to id of pkgmk, this example 102;</p> + + <pre> + pkgmk /usr/ports/work tmpfs size=30G,uid=102,defaults,mode=0750 0 0 + </pre> + + <h2 id="pkgmk">1.4.3. Configure pkgmk</h2> + + <p>Read <a href="https://crux.nu/Handbook3-3#ntoc22">4.5. Adjust/Configure the Package Build Process</a> + to take advantage of your specific hardware. Packages build with + native flag will not run on different hardware. This is the best choice + if you want gcc to find the best settings based on your hardware.</p> + + <p>Edit /etc/pkgmk.conf, remove pipe from compiler flags and let the system + get from nproc how many cpu's it can use for compiling;</p> + + <pre> + # + # /etc/pkgmk.conf: pkgmk(8) configuration + # + + export CFLAGS="-O2 -march=x86-64" + export CXXFLAGS="${CFLAGS}" + + export JOBS=$(nproc) + export MAKEFLAGS="-j $JOBS" + + case ${PKGMK_ARCH} in + "64"|"") + ;; + "32") + export CFLAGS="${CFLAGS} -m32" + export CXXFLAGS="${CXXFLAGS} -m32" + export LDFLAGS="${LDFLAGS} -m32" + export PKG_CONFIG_LIBDIR="/usr/lib32/pkgconfig" + ;; + *) + echo "Unknown architecture selected! Exiting." + exit 1 + ;; + esac + + PKGMK_SOURCE_MIRRORS=(https://tribu.semdestino.org/mirror-3.4/distfiles/) + # PKGMK_SOURCE_DIR="$PWD" + PKGMK_SOURCE_DIR="/usr/ports/distfiles" + # PKGMK_PACKAGE_DIR="$PWD" + PKGMK_PACKAGE_DIR="/usr/ports/packages" + # PKGMK_WORK_DIR="$PWD/work" + PKGMK_WORK_DIR="/usr/ports/work/${name}" + # PKGMK_DOWNLOAD="no" + # PKGMK_IGNORE_SIGNATURE="no" + # PKGMK_IGNORE_MD5SUM="no" + # PKGMK_IGNORE_FOOTPRINT="no" + # PKGMK_IGNORE_NEW="no" + # PKGMK_NO_STRIP="no" + # PKGMK_DOWNLOAD_PROG="wget" + # PKGMK_WGET_OPTS="" + # PKGMK_CURL_OPTS="" + # PKGMK_COMPRESSION_MODE="gz" + + # End of file + </pre> + + <p>If you want native build change the above example to;</p> + + <pre> + export CFLAGS="-O2 -march=native -mtune=native" + </pre> + + <p>Check <a href="toolchain.html">toolchain</a> for more options on how packages + are build.</p> + + <h2 id="prtget">1.4.4. Configure prt-get</h2> + + <p>Edit /etc/prt-get.conf;</p> + + <pre> + ### + ### prt-get conf + ### + + # note: the order matters: the package found first is used + prtdir /usr/ports/core + prtdir /usr/ports/opt + prtdir /usr/ports/xorg + + # the following line enables the multilib compat-32 collection + #prtdir /usr/ports/compat-32 + + # the following line enables the user maintained contrib collection + prtdir /usr/ports/contrib + prtdir /usr/ports/ports + prtdir /usr/ports/mate + prtdir /usr/ports/kde5 + + ### use mypackage form local directory + # prtdir /home/packages/build:mypackage + + ### log options: + writelog enabled # (enabled|disabled) + logmode overwrite # (append|overwrite) + rmlog_on_success yes # (no|yes) + logfile /usr/ports/pkgbuild/%n.log + # path, %p=path to port dir, %n=port name + # %v=version, %r=release + + ### use alternate cache file (default: /var/lib/pkg/prt-get.cache + # cachefile /mnt/nfs/cache + + ### print README information: + readme verbose # (verbose|compact|disabled) + + ### prefer higher versions in sysup / diff + preferhigher yes # (yes|no) + + ### use regexp search + # useregex no # (yes|no) + + ### run pre- and post-installs scripts; yes is equivalent to the + ### --install-scripts option + runscripts yes # (no|yes) + + ### expert section ### + + ### alternative commands + makecommand sudo -H -u pkgmk fakeroot pkgmk + addcommand sudo pkgadd + removecommand sudo pkgrm + runscriptcommand sudo sh + </pre> + + <h2 id="distcc">1.4.5. Ccache and distcc</h2> + + <p>Ccache avoids same code to be compiled by saving + the output from compilers and identifying same + input by using hashes and distcc distributes + compiling process across machines.</p> + + <p>Don't set native or generic on /etc/pkgmk.conf.</p> + <pre> + $ prt-get depinst ccache distcc + </pre> + + <p>Configure pkgmk and define number of cores available, + in this example get dynamically Edit + <a href="conf/pkgmk.conf">/etc/pkgmk.conf</a> and + set ccaching directory and instructs to use distcc + backend;</p> + + <pre> + # ccache settings + export PATH="/usr/lib/ccache/:$PATH" + export CCACHE_DIR="/usr/ports/ccache" + export CCACHE_PREFIX="distcc" + export CCACHE_COMPILERCHECK="%compiler% -dumpversion; crux" + </pre> + + <p>Set distcc hosts and respective number of + cpu cores to send work, hosts names, exp; "worker" must + be configured on /etc/hosts.</p> + + <pre> + ### compile using distcc without ccache + ##export PATH="/usr/lib/distcc/:$PATH" + ##export DISTCC_HOSTS="localhost/4,lzo,cpp xborg/4,lzo,cpp" + ##export PUMP_BUILD=yes + + # distcc settings + export JOBS=$(/usr/bin/distcc -j 2> /dev/null) + export DISTCC_DIR="/usr/ports/distcc" + export MAKEFLAGS="-j ${JOBS}" + export SCONSFLAGS="$MAKEFLAGS" + + # local compile only + #export JOBS=$(nproc) + #export MAKEFLAGS="-j $JOBS" + </pre> + + <p>Configure distcc daemon, edit + /etc/rc.d/distccd;</p> + + <pre> + #!/usr/bin/env bash + # + # /etc/rc.d/distccd: start/stop distcc daemon + # + + . /etc/distcc.conf + if [ -z "$DISTCC_ALLOW" ]; then + </pre> + + <p>Create /etc/distcc.conf;</p> + + <pre> + DISTCC_ALLOW="10.0.0.0/8" + DISTCC_USER="pkgmk" + DISTCC_LOG_LEVEL="info" + </pre> + + <a href="index.html">Core OS Index</a> + <p> + This is part of the Tribu System Documentation. + Copyright (C) 2020 + Tribu Team. + See the file <a href="../fdl-1.3-standalone.html">Gnu Free Documentation License</a> + for copying conditions.</p> + </body> +</html> |