Portage

:: gentoo, linux

By: Maciej Barć

Switching from a git repository hosting

For nearly 2 years I have been synchronizing settings between my Gentoo machines via a git repository that is installed system-wide via portage itself.

This actually gets a little tiresome and slow as the package that installs the configuration has to be re-installed each time we want to update the settings.

So I thought it could be cool if I can just push files around between my machines with one command. Now: we can use rsync or scp but /etc/portage is owned by root so we either have to change the permissions to a user we use to ssh or a group that user is in.

Portage users

First change portage permissions of /etc/portage, now all users in the portage group will be able to modify the configuration

1
2
chown -R root:portage /etc/portage
chmod -R g+w /etc/portage

Synchronizing

We can do a rsync from different machine with:

1
rsync -r /etc/portage REMOTEHOST:/etc --exclude=".git" --exclude="make.profile" --copy-unsafe-links

Reminder that this can also be done as a cron job!

Portage snapshots with git

Probably the best thing I got out of genlica is that I engineered a script to automatically do a git commit of the changes to the portage configuration.

Emerge git

1
emerge --noreplace --verbose dev-vcs/git

Copy the file that does the snapshots

1
2
mkdir -p /etc/portage/postsync.d
curl -o /etc/portage/postsync.d/99-degitmerge.sh "https://gitlab.com/xgqt/genlica/-/raw/master/portage/postsync.d/99-degitmerge.sh"

HTML Renderers

:: emacs

By: Maciej Barć

How it should be?

I imagine that a web browser should have been a "window" to the Internet world that provides easy and efficient way to graphically access resources exposed by multiple protocols: HTTP(S), (S)FTP, Gopher, Gemini, etc…

How it is?

Only few protocols are supported!

Recently FTP support got "deprecated" in Firefox. It can still be enabled in by setting network.ftp.enabled to true. FTP support is announced to be completely gone in FF 90. Chrome dropped FTP some time ago. # BUT! Luckily we have Emacs! GNU Emacs has packages to support all kinds of protocols. - eww which is a simple HTTP(S) browser like w3m (also renders images) - tramp allows you to access files by SSH - elpher allows you to access Gemini and Gopher sites (graphically) - ange-ftp allows you to connect to FTP servers - and finally net-utils which wraps around system utilities to provide interactive mode for many protocols, ie.: gopher, irc, ntp, pop3, www

Awesome Racket language features

:: dev, lisp

By: Maciej Barć

Also see: Fast-Racket at Racket's GitHub Wiki

Creating binaries

You can create portable binaries with Racket's raco command! Use raco exe and raco distribute.

More -> https://docs.racket-lang.org/raco/exe.html

Sample games

Racket provides a executable plt-games, when ran (from console) it opens a menu of miscellaneous games, among them: jewel, minesweeper, aces, spider, checkers. & more (20 games total).

Plots

You can plot data in 2d & 3d forms.

2D

Sample code:

1
2
3
4
5
6
#lang racket/base
(require racket/gui/base racket/math plot)

(plot-new-window? #true)

(plot (function sin (- pi) pi #:label "y = sin(x)"))

3D

Sample code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#lang racket/base
(require racket/gui/base racket/math plot)

(plot-new-window? #true)

(plot3d
 (surface3d (lambda (x y) (* (cos x) (sin y)))
            (- pi) pi (- pi) pi)
 #:title "An R × R  R function"
 #:x-label "x" #:y-label "y" #:z-label "cos(x) sin(y)")

Browser

There's a included library to render web pages, just "(require browser)".

Sample code:

1
2
3
4
#lang racket
(require browser)

(open-url "https://xgqt.gitlab.io/")

FFI

You can use Racket's Foreign Function Interface to interact with non-Racket libraries to make use of very fast libraries written in (mainly) FORTRAN & C.

For example sci uses FFI for CBLAS & LAPACK.

Parallelism

For greater speed up with parallel execution there are futures, places and distributed places (for distributed programming).

Sage Math on Gentoo

:: gentoo, math, tutorial

By: Maciej Barć

Intro

Sage may be available on your distro but on Gentoo such frivolities for students are not there yet, so I had to install it the manual way.

User

I went to the Sage website, to the "download-source" link. The source mirror I picked was France.

Ok, so let's follow Sage Math build instructions and get it going

1
2
3
4
5
wget www-ftp.lip6.fr/pub/math/sagemath/src/sage-9.2.tar.gz
tar xvf sage-9.2.tar.gz
cd sage-9.2
./configure
make

And now, let's wait…

Portage

After a long, long, long time waiting I remembered that there existed a Gentoo overlay for Sage. And in the meantime I thought I'd try that solution instead since some good Gentoo people already did most of the effort.

Just a few files to edit…

File: /etc/portage/repos.conf/sage-on-gentoo.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# -*- conf -*-


[sage-on-gentoo]

auto-sync = yes
location = /var/db/repos/sage-on-gentoo
priority = 999
sync-git-clone-extra-opts = --depth=999999999 --no-shallow-submodules --verbose
sync-git-pull-extra-opts = --verbose
sync-type = git
sync-umask = 022
sync-uri = https://github.com/cschwan/sage-on-gentoo.git
sync-user = root:portage

File: /etc/portage/package.accept~keywords~/zz-sage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# -*- conf -*-


sci-mathematics/sage                    **

*/*::sage-on-gentoo

dev-python/cvxopt

media-gfx/tachyon

sci-libs/bliss
sci-libs/dsdp
sci-libs/fflas-ffpack
sci-libs/fplll
sci-libs/libhomfly
sci-libs/linbox
sci-libs/m4rie

sci-mathematics/glpk

File: /etc/portage/package.use/zz-sage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# -*- conf -*-


sci-mathematics/sage                    -doc-html -doc-html-bin
sci-mathematics/sage                    -doc-pdf -doc-pdf-bin
sci-mathematics/sage                    -jmol
sci-mathematics/sage                    X bliss meataxe

dev-python/pplpy                        doc

sci-libs/cddlib                         tools
sci-libs/pynac                          -giac

sci-mathematics/eclib                   flint
sci-mathematics/flint                   ntl
sci-mathematics/glpk                    gmp
sci-mathematics/gmp-ecm                 -openmp
sci-mathematics/lcalc                   pari
sci-mathematics/maxima                  ecls
sci-mathematics/pari                    gmp doc

Now - let's build Sage with Portage!

>>> Emerging (1 of 100) sci-mathematics/cliquer–1.21::gentoo

At least I know more or less how long I'm going to wait and know what exactly fails to build, if anything does.

Final

Build

$ qlop -tv sage

> 2021–03–23T20:49:12 >>> sci-mathematics/sage–9999: 55′04″

Git stats

Overlays

This info we can easily gather with executing:

1
emerge --info

Gentoo' HEAD: 33f2d770c28307b1e9a1199c681e1c543602c6d4

Sage-on-Gentoo's HEAD: f7eac5b7e1a844132164b7593dab85cd87918664

Sage

Sage repository's HEAD (because we are using the live (9999) ebuild):

1
cat /var/cache/distfiles/git3-src/sagemath_sage.git/refs/heads/develop

Which returns: 5cb72aade9b297c10bb0f1ae8529466e5b5eb41d

MTG alter-art collection

:: art, games, mtg

By: Maciej Barć

Story

In 2013–2017 I was very interested in Trading card game “Magic: the Gathering”. I started playing during the release of Theros and quit somewhere during Shadows over Innistrad. I still keep a small collection of alternative artwork that I have painted on the cards.

Binder

Those are pages from the binder I store the card in. Also a lone “Obsession” resource card from The Spoils.

Cards

This list is sorted by the time I created the alter-art. I do this from memory so it’s probably not accurate.

Mastodon

:: fediverse

By: Maciej Barć

I has decentralization

So, yea, I’m on Fosstodon. https://fosstodon.org/@xgqt

Hope I don’t get banned ;^)

But in all seriousness, it’s been pretty great. My colleagues warned me that there’s a lot of SJWs but only one person I spoke with wanted to be addressed “differently” + didn’t express that aggressively, so whatever.

Se yall on mastodon ;D

How to read this blog

:: dev, rss

By: Maciej Barć

Git

Because contents of this blog are stored in a git repository you can just

1
git clone --verbose --recursive https://gitlab.com/xgqt/blog

then, read the "raw" ORG files in 'posts' directory or make the HTML version executing the 'dev.sh' script (remember that you will need GNU Emacs to render the posts into HTML files).

Then, you can just git pull to read the news whenever you wish, maybe do it with cron or a script that will pull many repos at once, for example with this script.

RSS

Org-Static-Blog creates a RSS Feed file rss.xml, so to subscribe add the link https://xgqt.gitlab.io/blog/rss.xml to your favorite RSS reader.

You can also subscribe to the GitLab repository Atom feed.

EmojiD

:: joke

By: Maciej Barć

Short story long

We were discussing some vulnerabilities on the src~prepare~ group's [matrix] channel and when we're talking about systemd errors. I just felt like opening their GitHub and browsing the code. I was just reading the comments… and I saw a comment about kernel APIs and there a emoji. My feeling is probably best expressed my common "KEK". I chuckled. The "Abstract" in 0.0.1 is the original idea I typed on [matrix]. The funniest part of this "development" for me is probably that Emacs on my system doesn't display properly ANY of the emojis in emojid. I had to go back and forth between the source and log files opened in FF (because it renders the emojis properly), emojipedia and "broken" Emacs.

0.0.1 "😃 ️ 🌍 🍞 🚗 📞 🎉 ♥️ 🏁"

What you do is clone the repository, execute make and run the binary. Read your log and see if your system is "affected" :P.

👋

And remember emoticons made of the symbols found on the keyboard will always look better ;)

2020 recap

:: new year

By: Maciej Barć

Recap

What I did this year:

  • began studying at WSIiZ
  • drank a lot of alcohol with friends
  • installed NetBSD ;)
  • learned Nginx and Ansible
  • recruited new people to the src_prepare group
  • struck a nerve with some commies
  • took maintainership of gallery-dl and PPSSPP
  • tweaked my configs
  • went back to KDE and Firefox (missed them)
  • worked with Zigbee (probably not doing that again)

Wishes

What do you wish in new year?

I wish you all merry Christmas and happy new year. Less bugs, more resolved issues, no wontfixes, better compatibility. Faster compilation, less failures. And of course no lawsuits, no copyright infringements and better government.

Portage system replication

:: gentoo, linux

By: Maciej Barć

Intro

Backing up using this method takes a lot less space - ~60MB (without distfiles) and can be restored on almost any system (running portage) and tweaked afterwards for, say, CPU architecture. I've created a a short script with similar method in here.

What we need

  • ebuild repositories are installed with git
  • distfiles (those might be gone when we want to replicate)

Backup

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# System info
emerge --info > info.txt

# Portage tree
cp -Lr /etc/portage .

# Portage layout
tree -a -L 2 /etc/portage > layout.txt

# Packages in @world
cp /var/lib/portage/world .

# Installed sets
cp /var/lib/portage/world_sets .

# Installed packages (with versions)
qlist --installed --nocolor --umap > qlist-use.txt
qlist --installed --nocolor --verbose > qlist-ver.txt

# Distfiles
cp -rv "$(portageq envvar DISTDIR)" distfiles

# Ebuild database
cp -r /var/db/pkg pkgdb

Restoration

To faithfully restore the system perform those actions as root

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Copy the portage tree to /etc
rm -dr /etc/portage
cp -r portage /etc/portage

# Checkout the gentoo repo to a commit specified in info.txt
cd "$(portageq get_repo_path / gentoo)"
git checkout # <commit ID>

# Copy distfiles
cp -r distfiles/* "$(portageq envvar DISTDIR)"/

# Fake-install @world and sets
cp world /var/lib/portage/world
cp world_sets /var/lib/portage/world_sets

# Emerge the exact packages from qlist-ver.txt
emerge --keep-going=y -1Oav $(sed 's/^/=/' qlist-ver.txt)

Old Access Point

:: hardware, linux, net

By: Maciej Barć

Introduction

On some old routers, namely TP-Link's TL-WR840N version 2, there may not be a option to switch to access point mode. This is what you have to do to access that mode indirectly.

Steps

  • Power off the router
  • Unplug RJ cable from the WAN port
  • Connect the router to a PC (using one of the LAN ports)
  • Power on the router
  • Log it to the web console entering your router's IP, you can find out the IP by executing ip --color a (on a Linux box) if the router's DHCP server is still active
  • In LAN settings give your router a static client IP that fits into a network you want to connect it to; example: 192.168.100.100/24 (make sure no other hosts are associated with that IP in the target network)
  • Restart the router
  • Log in to the web console entering the IP you have set
  • Turn off the DHCP server (DHCP -> DHCP Settings -> DHCP Server: Disable & Save)
  • Power off the router
  • Plug the cable from a network you want the router connected to to one of the LAN ports
  • Power on the router
  • Log in to the web console entering the IP you have set
  • Turn on the wireless network and set it up (SSID, password, etc.)
  • Done! :D

Sources

Internet EU

:: politics

By: Maciej Barć

Polish original

Internet stał się tym czym jest, stał się takim światem w miniaturze dzięki dobrowolnemu zaangażowaniu zwykłych ludzi, dzięki brakowi regulacji. I to was boli, bo rozwój internatu jest przykładem tego, jak mógłby się rozwijać nasz świat, gdyby nie te wszystkie wasze regulacje, gdyby nie ten ciężki plecak przepisów i podatków który każdy z nas musi na co dzień dźwigać. Internet to jest po prostu ostatni bastion wolności i to wam nie daje spać, bo to jest dowód na to, że wszystkie wasze regulacje i te rozporządzenia, dyrektywy, są tak naprawdę zbędne i szkodliwe i świat bez tego rozwijałby się lepiej, rozwijałby się dokładnie tak jak Internet, że gdyby nie te wasze właśnie ambitne plany, wartości dodane, efekty dźwigni, wysyłanie silnych sygnałów, to wszystko, żyłoby się nam po prostu lepiej i prościej. Dlatego próbujecie to zniszczyć, dlatego próbujecie wsadzić stopę w drzwi za każdym razem kiedy pojawia się okazja. Ale my nie chcemy waszej nogi w tych drzwiach. Teraz cofacie się o parę centymetrów, bo ludzie protestują, ale my nie chcemy was tam w ogóle, nie chcemy waszych regulacji, nie chcemy waszych łap w Internacie. To działa dobrze, twórczość rozwija się w Internecie bez żadnych waszych regulacji.

English translation

Interent has become what it is, it has become a miniature world due to the voluntary involvement of ordinary people, thanks to the lack of regulation. And this hurts you, because the development of the Intenet is an example of how our world could develop, without all your regulations, without this heavy backpack of regulations and taxes that each of us must carry on a daily basis. The internet is simply the last bastion of freedom and this is the thing that doesn't let you sleep, because it is proof that all your regulations and those ordinances, directives, they are really unnecessary and harmful and the world would develop better without it, it would develop exactly like the Internet, that if it weren't for your ambitious plans, added values, leverage effects, sending strong signals, then everyone would have lived just better and simpler. That's why you try to destroy it, that's why you try to stick your foot in the door whenever there is an opportunity. But we don't want your leg in our door. Now you are retreating a few centimeters because people are protesting, but we don't want you there at all, we don't want your regulations, we don’t want your hands in the Internet. It works well, creativity develops on the Internet without any of your regulations.