Own ports and packages repos for CRUX
Posted: 2021-09-01 Filed under: system | Tags: apache, CRUX, pkg-get, prt-get, repo 5 CommentsI’ve been using CRUX as my main system for couple of months now. My PC has an nice CPU and lots of RAM, so compiling stuff on it is not a problem. This is not the case with my old ThinkPad x230, though… So, I want to turn the packages created on my PC, into a packages repository for the laptop, running the same distro.
The idea is analogous to what I describe in this previous post of mine for Slackware. Here, I do this on CRUX.
Home server
The steps I took are the same as in my previous post, but in CRUX, the configuration happens in /etc/apache, instead of /etc/httpd. I added apache to the SERVICES in /etc/rc.conf and started it.
HttpUp ports repository
My own, local, ports collection is called custom. I generated a repository from it, following the instructions for setting a HttpUp repo:
cd /usr/ports/custom
httpup-repgen
While there, let’s also make a nice page:
portspage . > index.html
I created a symlink to the collection:
cd /var/www/htdocs
ln -s /usr/ports/custom .
So, the repo can be accessed in my home network at:
http://XXX.XXX.X.XXX/custom
In order to sync to the repo from another computer (e.g. my ThinkPad x230), I made a HttpUp file:
# # /etc/ports/custom.httpup: Custom port collection # ROOT_DIR=/usr/ports/custom URL=http://XXX.XXX.X.XXX/custom # End of file
Make prt-get aware of the custom ports collection:
prtdir /usr/ports/custom
Packages repository
Packages were build with the default C(XX)FLAGS and I made pkgmk store them in a single folder:
PKGMK_PACKAGE_DIR="/ports/packages"
Clean any old packages:
oldfiles | grep "packages" | xargs rm -rf
Generate the repo:
cd /ports/packages
pkg-repgen
Create symlinks to the packages collection:
cd /var/www/htdocs
ln -s /ports/packages .
So, in my home network, the address of the packages is:
http://XXX.XXX.X.XXX/packages
Install scripts
When generating the packages repository, install scripts are collected by pkg-repgen into a single file called PKGINST. They are stored as individual functions and, upon a package install, its corresponding function is called by the if statement in the end of the file:
if [ ! -z "$1" ]; then $1; fi
Here I encountered a problem, because pkg-get was not able to find the functions for packages containing a dash in their name. It seems dashes become transformed into underscores: for example, the function for adwaita-icon-theme is named like this:
adwaita_icon_theme_post_install() {
...
}
I am not sure if this is a bug, or I simply did not configure something properly. For now, I modified the last line, to make it substitute all dashes with underscores:
if [ ! -z "$1" ]; then ${1//-/_}; fi
Installing packages with pkg-get
Configure pkg-get to find the repo and to execute install scripts:
# My packages pkgdir /var/pkgget|http://XXX.XXX.X.XXX/packages # runscripts: if "yes" pre-post install scripts are # automatically executed. Handle with care. runscripts yes
Packages will be stored locally in /var/pkgget. It’s time to start by syncing:
pkg-get sync
Then check for updates and update the whole system:
pkg-get diff
pkg-get sysup
Check for missing libraries
The dependencies parsed to pkg-get are the ones listed on the “Depends on” line in the Pkgfile used to build the package. When compiling, programs may get linked against additional (optional) dependencies, that happen to be present at build time. These will not be automatically pulled when installing with pkg-get and the system will end up with programs linked to missing libraries. So I did a check with revdep on my laptop:
revdep
If a package was reported (e.g. qt5), I checked what libraries were missing:
revdep qt5 -vvv
Then I searched for the package containing a library that was missing:
prt-get fsearch libQt5Pdf.so.5.15.2
For this to work, the ports that were used to build the packages should also be present (that’s why I prepared custom.httpup), since the program checks their .footprint files. Finally, install the package that provides the library:
pkg-get depinst qtwebengine
That’s it!

[…] ThinkPad x230 is running CRUX, with packages installed from my own custom repository. Things seem to work just fine, however, the touchpad did not behave nicely out-of-the-box, as was […]
I wrote a simpler pkg-get https://gitlab.com/sndwvs/pkg-get
hi, is you pkg-get a complete rewrite in bash?
hi,
he does the main thing
signs packages
updates installed
installs without dependencies
installs with dependencies
You may wish to speak with farkuhar in #crux or #crux-social at IRC. He’s been tweaking pkg-get, too.