Gentoo Linux

501 readers
1 users here now

The Gentoo Linux community for discussions, tips and tricks, and general kernel compiling

founded 1 year ago
MODERATORS
26
27
 
 

Hi ! I'd like to have a Gentoo computer. But also in the future a Gentoo cell phone. Why not a Gentoo home console?

Is it possible to provide all this hardware with pre-compiled updates with a NAS that would do this automatically periodically?

I have the impression that with Gentoo, I'll be able to create tailor-made systems for my devices, and it gives me lots of ideas, but compiling on all these machines makes me feel a bit cold

Sorry if this is a silly question, I'm neither a developer nor an administrator, but I'd really like to learn how to tinker with my PC !

28
7
submitted 1 year ago* (last edited 1 year ago) by [email protected] to c/[email protected]
 
 

Recently got a laptop from a friend after mine got smashed to smithereens. I was going to do a fresh install of my favourite binary distro, Void Linux on it but I recently found out they dropped Monero (and Crypto programs) for ideological reasons.

I guess its time to come home!

Booted Laptop/PC to the LiveUSB, time to do my gruelling ZFS installs :)

29
30
 
 

I haven't gotten an update in about a week which is strange for me. I've had this dependency conflict for a while:

WARNING: One or more updates/rebuilds have been skipped due to a dependency conflict:

dev-python/docutils:0

(dev-python/docutils-0.20.1:0/0::gentoo, ebuild scheduled for merge) USE="" ABI_X86="(64)" PYTHON_TARGETS="python3_11 (-pypy3) - 
   python3_10 (-python3_12)" conflicts with
  <dev-python/docutils-0.20[python_targets_python3_11(-)] required by (dev-python/sphinx-5.3.0:0/0::gentoo, installed) USE="-doc - 
   latex -test" ABI_X86="(64)" PYTHON_TARGETS="python3_11 (-pypy3) -python3_10"

Would that prevent me from getting updates? I'm able to install things just fine.

31
32
 
 

Posted something similar on the NixOS sublemmy, but it basically boils down to the fact that I tend to switch back and forth between both distros, and I enjoy both very much as both Gentoo and NixOS provide an immense degree of control over my system and allow me to go wild and do whatever I want. But I feel the need to settle on one system and tinker with the other on a VM instead, as this switching back and forth is becoming a time sink and hindering my studies somewhat. The question is, which to use as the main desktop system? Gentoo feels more intuitive to me, but NixOS is definitely powerful at managing complex systems, but then again, I only have a simple desktop system. Another thing that I thought of is that maybe I can somewhat replicate NixOS' rollback feature, which is my absolute favourite feature of it, using a combination of Git and ZFS snapshots? I'd like to hear your thoughts on this.

33
 
 

I've heard that you should be using the appropriate stage3 archive for the profile you want to use, but what exactly are the differences between them? I'm asking this because I want to try doing a Hardened/SELinux/Musl/LLVM install, and there's a profile for that, but not the stage3 archive. I was thinking of starting with either Hardened/Musl or LLVM/Musl. Any thoughts on that?

34
35
 
 

cross-posted from: https://lemmy.srcfiles.zip/post/3841

What is Kubler?

Kubler is a generic, extendable build orchestrator, written in Bash. It can be used to take advantage of Portage's features to build lightweight Docker or Podman images without needing to mess with crossdev, or as a tool to assist with ebuild development.

Why should you use it?

  • You like lightweight, easy-to-create, containers
  • You want to reduce the attack surface by including only what's required
  • You want to take advantage of USE flags to manage package features
  • You want the awesome package library offered by the Gentoo ebuild repository (and other ebuild repos)
  • You want up-to-date containers
  • You want a containerised environment for building and testing ebuilds

A real-world example

I recently needed to integrate a containerised application with a vendor-managed openldap instance that uses mTLS authentication. Unfortunately the containerised application does not work with mTLS and the vendor managed openldap instance can't be easily configured to use anything else.

I came up with the solution of using openldap's lloadd LDAP load balancer daemon to proxy connections from an encrypted internal network to the LDAP server but was left with the issue that I didn't have a working openldap container that contained lloadd - of the existing containers that I tried the only one that actually had an lloadd bin didn't actually include required dependencies!

Glossing over a recent ebuild update to openldap to enable the building of lloadd, enter Kubler - It's turned out to be an incredibly flexible and hands-off tool compared to trying to accomplish the same thing with (e.g.) Dockerfiles.

Kubler in action

This (lightly sanitised) real-world example creates create a new namespace called 'larry' which may contain multiple images.

Use the new command to take care of the boilerplate; choose 'multi' when asked for the namespace type:`

$ kubler new namespace larry
»»»
»»» <enter> to accept default value
»»»
»»» Working dir type? Choices:
»»»   single - You can't add further namespaces to the created working dir, it only holds images
»»»   multi  - Creates a working dir that can hold multiple namespaces
»[?]» Type (single): multi
»»»
»»» Top level directory name for new namespace 'larry'? The directory is created at /data/development/gentoo-containers/
»[?]» Namespaces Dir (kubler-images):
»»»
»»»»» Initial image tag, a.k.a. version?
»[?]» Image Tag (20230706):
»»»
»[!]» New namespace location:  /data/development/gentoo-containers/kubler-images/larry
»»»
»»»»» Who maintains the new namespace?
»[?]» Name (Your Name): Larry the Cow
»[?]» EMail ([email protected]): [email protected]
»»»
»»»»» Default build engine?
»[?]» Engine (docker):
»»»
»[✔]» Successfully created "larry" namespace at /data/development/gentoo-containers/kubler-images
»»»
»[!]» Configuration file: /data/development/gentoo-containers/kubler-images/larry/kubler.conf
»»»
»[!]» To manage the new namespace with GIT you may want to run:
»»»
»»» $ git init /data/development/gentoo-containers/kubler-images/larry
»»»
»[!]» To create images in the new namespace run:
»»»
»»» $ cd /data/development/gentoo-containers/kubler-images/larry
    $ kubler new image larry/<image_name>

Although not strictly required, installing Kubler's example images is a good idea.

$ cd larry/
$ kubler update

It is worthwhile to begin tracking this new namespace with Git so that images can be tracked as they are created and updated. Kubler has already placed a prepopulated a .gitignore file for convenience.

pushd /data/development/gentoo-containers/kubler-images/larry
git init .
git add .
git commit -m "Initial commit"
popd

Create the new 'openldap' within the existing 'larry' namespace, based on the 'kubler/busybox' image.

kubler new image larry/openldap
»»»
»»» <enter> to accept default value
»»»
»»» Extend an existing Kubler managed image? Fully qualified image id (i.e. kubler/busybox) or scratch
»[?]» Parent Image (scratch): kubler/busybox
»»»
»»» Add test template(s)? Possible choices:
»»»   hc  - Add a stub for Docker's HEALTH-CHECK, recommended for images that run daemons
»»»   bt  - Add a stub for a custom build-test.sh script, a good choice if HEALTH-CHECK is not suitable
»»»   yes - Add stubs for both test types
»»»   no  - Fck it, we'll do it live!
»[?]» Tests (hc): yes
»»»
»[✔]» Successfully created new image at /data/development/gentoo-containers/kubler-images/larry/images/openldap
»»»

Note: This step is ''not'' required; it is possible to directly edit the build.sh file if you are familiar with Portage.

Kubler brings a unique feature to the table when constructing an container image: the --interactive build argument. As the name implies, this launches the build container in an interactive manner, enabling users to investigate the current / inherited configuration.

$ kubler build larry/openldap -i

This will build any missing parent images/builders; the first run may take quite a bit of time - once the local binary package cache and build containers are seeded future runs will be much faster. Once the prerequisite images are ready the build container will present a shell.

For first-time users it may be convenient to search for the openldap package to ensure that the correct atom is selected and investigate any USE flags that are of interest:

# eix openldap|output=<pre>
* net-nds/openldap
     Available versions:  2.4.59-r2^t 2.5.14(0/2.5)^t 2.6.3-r7(0/2.6)^t ~2.6.4-r1(0/2.6)^t ~2.6.4-r2(0/2.6)^t {argon2 autoca +berkdb +cleartext crypt cxx debug experimental gnutls iodbc ipv6 kerberos kinit minimal odbc overlays pbkdf2 perl samba sasl selinux sha2 smbkrb5passwd ssl static-libs +syslog systemd tcpd test ABI_MIPS="n32 n64 o32" ABI_S390="32 64" ABI_X86="32 64 x32"}
     Homepage:            https://www.openldap.org/
     Description:         LDAP suite of application and development tools

Edit the image's build script:

nano /config/build.sh

Note: The /config directory in the build container is the host mounted image directory at larry/images/openldap/. Feel free to use a local IDE/editor to edit build.sh instead.

Add the net-nds/openldap and net-misc/curl packages to the _packages variable in build.sh, update cURL USE flags, enable the ~arch (~amd64 - the Gentoo 'testing' keyword) for packages we care about:

_packages="net-nds/openldap net-misc/curl"
...
configure_rootfs_build()
{
    # Update a Gentoo package use flag.
    update_use 'net-misc/curl' '+ldap'
    # ..or a Gentoo package keyword
    update_keywords 'net-misc/curl' '+~amd64'
    update_keywords 'net-nds/openldap' '+~amd64'
...
}

Note: If using the busybox image as a parent, unset the su USE flag from sys-apps/util-linux in the build.sh.

Perform a test run of the first build phase:

$ kubler-build-root

Once this completes successfully exit the interactive builder using exit.

Building the image

Assuming that build.sh has been configured as described above, it should be safe to attempt to build the image.

$ kubler build larry/openldap -nF
»[✘]»[larry/openldap]» fatal: build-test.sh for image larry/openldap:20230704 failed with exit signal: 1

Note: The arguments are short hand for --no-deps and --force-full-image-build, omitting -n would also rebuild all parent images, which is waste of time in this case.

The build will fail, as expected, due to the build-test.sh script not being implemented. This is a good time to implement the build-test.sh script, which will be used to verify that the image is functional.

Note: pipefail will cause build-test.sh to fail on busybox-based images

#!/usr/bin/env sh

set -eo

# Do some tests and exit with either 0 for healthy or 1 for unhealthy
# Check that the openldap bin launches and provides some expected output
/usr/lib/openldap/lloadd -VV  2>&1 | grep "OpenLDAP" || exit 1

exit 0

Unfortunately this image is not suitable for a build-time docker health check via the docker-healthcheck.sh mechanism, so must be disabled in larry/images/openldap/build.conf:

POST_BUILD_HC=false

A health check suitable for your environment should be provided using standard docker syntax in the image's Dockerfile.template instead. Ensure that the provided docker-healthcheck.sh script iS updated (or commented out of the dockerfile) as the default will fail.

Modify the image's Dockerfile.template to add any finishing touches, such as the ENTRYPOINT or CMD directives. In this example the container will act as an LDAP proxy via lloadd; additional configuration will be provided at runtime by mounting the configuration into the container.

FROM ${IMAGE_PARENT}
LABEL maintainer="${MAINTAINER}"

ADD rootfs.tar /

COPY docker-healthcheck.sh /usr/bin/docker-healthcheck
HEALTHCHECK --interval=60s --timeout=5s --start-period=5s --retries=3 CMD ["docker-healthcheck"]

CMD ["/usr/lib/openldap/lloadd"]

Re-run the build:

$ kubler build larry/openldap -nF
»[✔]»[larry/openldap]» done.

At this point the image should exist in the local Docker/Podman registry and be ready for use:

docker images
REPOSITORY                                              TAG                       IMAGE ID       CREATED          SIZE
larry/openldap                                          20230704                  09347c55282b   2 minutes ago    56.4MB
larry/openldap                                          latest                    09347c55282b   2 minutes ago    56.4MB

Hopefully this has been useful and you are now ready to build your own images! I've been incredibly impressed with how easy it is to use the tool (and it it'll run from any distro with a recent version of Docker/Podman), and the quality of the resulting images. I'm a recent convert, but have updated the Gentoo Wiki with the above information (and some extra info on using it for ebuild development) and will be using Kubler in future wherever I need to create images.

Happy containering!

36
 
 

Was able to install gentoo on a Oracle always-free instance. It has 4x ARM CPUs and 24 GB RAM. Those specs are really nice for a free instance.

for now I'll use it to self host some public facing services. Who knows, maybe I'll host a personal lemmy instance on it :)

37
 
 

A neofetch screenshot from the machine I just unpacked and am finally ready to do actual work on. I swear I have a 6.4 kernel pending a reboot!

38
 
 

cross-posted from: https://reddthat.com/post/221970

Hello friends! I kept searching how to do this but had trouble finding the information, but now that I have found out how to do it, I thought I would post it here in case others are looking for it.

Problem we are solving

You want to set the DNS server's address for your network connection. Typically, this is handled by DHCP server, but if you have enabled EnableNetworkConfiguration in the iwd config, then iwd is the one deciding which is your DNS server, and relays that information to your resolver, which in most cases is systemd-resolved but sometimes openresolv.

This is also the same as setting the standalone USE flag

How to Set DNS

Go to /var/lib/iwd folder, and look for the file that holds NETWORK_NAME.psk (where NETWORK_NAME is the SSID of the network you are connected to).

In this file, you will find some text pre-written. If it does not exist already, create a [IPv4] section. Under this section, add the line DNS=192.168.1.1 or whatever you wanted the DNS server to be. Your file should end up having a section that looks like this:

[IPv4]
DNS=192.168.1.1

restart iwd server and now you should be connecting to the right DNS server!

39
40
 
 

Personally for me, I've always been a fan of bspwm

I've been using hyprland as of recent to try it out. But I think I'll be trying something else soon. But I do want to stick with wayland.

41
 
 

I tried wayland with Hyprland on gentoo with proprietary nvidia drivers. I have the RTX 3060 Ti card. It works out of the box without having to mess with anything.

I tried sway as well. I have to specify the --unsupported-gpu flag for it to launch. The one issue I noticed with sway is that the background does not seem to load. I did not spend time debugging so it maybe a super simple fix. I'll report back if I ever do.

But I'm happy to see its all working flawlessly!

42
 
 

What can I do, as an end user, when a testing package on the gentoo tree has been outdated for a while? I know I can just download the tar file of the source code and compile it myself, but I wonder if there is anything else I can do to help on the gentoo repos.

For example Waybar has a 0.9.18 version available upstream, but not on gentoo. This version was released about a month ago, and includes compatibility for dwl. It's not really an issue for me, since I compiled the 0.9.18 version manually, but I'd like to know if there is anything I can do to help.

Sorry if I'm not using all the correct terminology; I'm new to gentoo.

43
 
 

When emerging nvidia proprietary drivers, portage warned me that I have certain kernel configurations either set wrong, or unset, which could cause trouble for nvidia to work.

I was impressed that emerging nvidia drivers involves scanning current kernel config to see what it is missing.

44
45
46
47
48
49
50
view more: ‹ prev next ›