CRUX : Home

Home :: Documentation :: Download :: Development :: Community :: Wiki :: Ports :: Bugs :: Links :: About

Configuration

Initialization Scripts

Runlevels

The following runlevels are used in CRUX (defined in /etc/inittab).

RunlevelDescription
0Halt
1 (S)Single-user Mode
2Multi-user Mode
3-5(Not used)
6Reboot

Layout

The initialization scripts used in CRUX follow the BSD-style (as opposed to the SysV-style) and have the following layout.

FileDescription
/etc/rcSystem boot script
/etc/rc.singleSingle-user startup script
/etc/rc.modulesModule initialization script
/etc/rc.multiMulti-user startup script
/etc/rc.localLocal multi-user startup script (empty by default)
/etc/rc.shutdownSystem shutdown script
/etc/rc.confSystem configuration
/etc/rc.d/Service start/stop script directory

Modify /etc/rc.modules, /etc/rc.local and /etc/rc.conf according to your needs.

Configuration Variables in /etc/rc.conf

The following configuration variables are found in /etc/rc.conf.

Variable Description
FONT

Specifies which console font to load at system startup. The contents of this variable will be passed as argument to setfont(1). The available fonts are located in /usr/share/kbd/consolefonts/.

Example: FONT=default

KEYMAP

Specifies which console keyboard map to load at system startup. The contents of this variable will be passed as argument to loadkeys(1). The available keyboard maps are located in /usr/share/kbd/keymaps/.

Example: KEYMAP=sv-latin1

TIMEZONE

Specifies the timezone used by the system. The available zone description files are located in /usr/share/zoneinfo/.

Example: TIMEZONE=Europe/Stockholm

HOSTNAME

Specifies the hostname.

Example: HOSTNAME=pluto

SYSLOG

Specifies the system logging daemon(s) to run at startup.

Example: SYSLOG=sysklogd

SERVICES

Specifies which services to start at system startup. The services specified in this array must have a matching start/stop script in /etc/rc.d/. When entering multi-user mode the specified scripts will be called in the specified order with the argument start. At system shutdown or when entering single-user mode these scripts will be called in the reverse order with the argument stop.

Example: SERVICES=(crond lo net sshd)

Generating locales

Starting with CRUX 2.5, glibc does not contain all possible locales anymore, thus you'll have to generate the locales you need/use. To ensure proper operation of pkgmk, the locale C.UTF-8 is generated as part of the CRUX installation. Any other desired locales must be created by the administrator.

The core port glibc provides a script to generate the desired locales based on the configuration file /etc/locale.gen, so you no longer need to run localedef manually. Just open /etc/locale.gen in an editor and uncomment the desired locales, then run /usr/sbin/locale-gen. With the appropriate UPGRADE directives in /etc/pkgadd.conf, you can safely upgrade glibc at a later date without losing your chosen locales; just make sure that the file /etc/locale.gen is protected from being overwritten when performing pkgadd -u.

Network Configuration

The network configuration is found in the service script /etc/rc.d/net. To enable this service you need to add net to the SERVICES array in /etc/rc.conf. By default this service script configures a dynamic IP address.
Example:

#!/bin/sh
#
# /etc/rc.d/net: start/stop network interface
#

# Connection type: "DHCP" or "static"
TYPE="DHCP"

# For "static" connections, specify your settings here:
# To see your available devices run "ip link".
DEV=enp11s0
ADDR=192.168.1.100
MASK=24
GW=192.168.1.1

# Optional settings:
DHCPOPTS="-h `/bin/hostname` -t 10"

case $1 in
        start)
                if [ "${TYPE}" = "DHCP" ]; then
                        /sbin/dhcpcd ${DHCPOPTS}
                else
                        /sbin/ip addr add ${ADDR}/${MASK} dev ${DEV} broadcast +
                        /sbin/ip link set ${DEV} up
                        /sbin/ip route add default via ${GW}
                fi
                ;;
        stop)
                if [ "${TYPE}" = "DHCP" ]; then
                        /sbin/dhcpcd -x
                else
                        /sbin/ip route del default
                        /sbin/ip link set ${DEV} down
                        /sbin/ip addr del ${ADDR}/${MASK} dev ${DEV}
                fi
                ;;
        restart)
                $0 stop
                $0 start
                ;;
        *)
                echo "Usage: $0 [start|stop|restart]"
                ;;
esac

# End of file

If you want to configure your system to use a static IP address, specify TYPE=static and the correct interface. You will also need to configure DNS settings in /etc/resolv.conf.
Example:

#!/bin/sh
#
# /etc/rc.d/net: start/stop network interface
#

# Connection type: "DHCP" or "static"
TYPE="static"

# For "static" connections, specify your settings here:
# To see your available devices run "ip link".
DEV=enp11s0
ADDR=192.168.1.100
MASK=24
GW=192.168.1.1

# Optional settings:
DHCPOPTS="-h `/bin/hostname` -t 10"

case $1 in
        start)
                if [ "${TYPE}" == "DHCP" ]; then
                        /sbin/dhcpcd ${DHCPOPTS}
                else
                        /sbin/ip addr add ${ADDR}/${MASK} dev ${DEV} broadcast +
                        /sbin/ip link set ${DEV} up
                        /sbin/ip route add default via ${GW}
                fi
                ;;
        stop)
                if [ "${TYPE}" == "DHCP" ]; then
                        /sbin/dhcpcd -x
                else
                        /sbin/ip route del default
                        /sbin/ip link set ${DEV} down
                        /sbin/ip addr del ${ADDR}/${MASK} dev ${DEV}
                fi
                ;;
        restart)
                $0 stop
                $0 start
                ;;
        *)
                echo "Usage: $0 [start|stop|restart]"
                ;;
esac

# End of file
#
# /etc/resolv.conf: resolver configuration file
#

search your internal domain>
nameserver your DNS server>

# End of file

To associate with a WPA2-protected wireless network, you should first create a configuration file for wpa_supplicant to use, then launch wpa_supplicant on that interface.

 $ wpa_passphrase MYNETWORK MYPASS > /etc/wpa_supplicant-wlan0.conf
 $ wpa_supplicant -i wlan0 -c /etc/wpa_supplicant-wlan0.conf
Replace MYNETWORK with the ssid of your network, MYPASS with its passphrase, and wlan0 with the name of your actual network interface. Run ip link to see the list of all available interfaces.

If the wpa_supplicant output indicates a successful authentication, you can background the process and run dhcpcd wlan0 to request an address from the DHCP server.

The wpa_supplicant package provides two startup scripts in /etc/rc.d. You might choose to put wlan in the SERVICES array of /etc/rc.conf (replacing net), which will let wpa_supplicant manage all your network interfaces. Another option is to let the net startup script call wpa_supplicant as needed, by copying into /lib/dhcpcd/dhcpcd-hooks/ the example file /usr/share/dhcpcd/hooks/10-wpa_supplicant.

Passwords and User Environment

CRUX uses SHA512 passwords by default. To change the password encryption method set the ENCRYPT_METHOD variable in /etc/login.defs to DES, MD5 or SHA256.

Furthermore, when compiling programs that use the crypt(3) function to authenticate users you should make sure that these programs are linked against the libcrypt library (i.e. use -lcrypt when linking) which contains the SHA512 version of the crypt function (this version is backwards compatible and understands DES passwords as well).

Also configurable in /etc/login.defs are the settings that govern how useradd(8) behaves when you create a new non-root user, such as CREATE_HOME and USERGROUPS_ENAB. First-time CRUX administrators might be surprised to learn that creating a new user via useradd -m will not automatically populate the home directory with a basic shell startup file, as happens on other Linux distributions whose /etc/skel/ contains their idea of an initial home directory.

A new default in CRUX 3.7 is that the value of PATH, for shells that rely on /etc/profile to set this variable, will be the same regardless of UID. This change allows non-root users easy access to any administrative command without having to type its full path (provided they use bash as their shell and are given the appropriate doas/sudo permissions). Users are always free to choose a different shell and manage PATH themselves, but the default behaviour is now less likely to cause confusion.

The core packages linux-pam and dumb_runtime_dir, and the contrib package pam_xdg, provide a variety of modules that can be loaded upon logging in. The files in /etc/pam.d govern the association between the type of login (eg., tty, SSH, su, X Display Manager) and the modules that get loaded (eg., pam_env, pam_exec, pam_limits). Some typical situations that can be handled cleanly with PAM modules are listed in the table below.

file in /etc/pam.d Typical usage
pam_dumb_runtime_dir.so

create an XDG_RUNTIME_DIR for applications that conform to the freedesktop.org specification

pam_env.so

export some common environment variables, no matter what login shell the user has chosen

pam_xdg.so

export the XDG environment variables defined in the freedesktop.org specification

pam_limits.so

increase the allowed number of opened files, to ensure proper operation of some games

pam_xauth.so

grant another user access to the X display of the logged-in user, so that programs invoked with su can work properly

pam_mount.so

automatically mount a LUKS-encrypted home partition after successful authentication

Note

The existence of a writable XDG_RUNTIME_DIR is required for proper operation of many desktop applications. A clean CRUX 3.7 installation will place a line in /etc/pam.d/common-session that loads the module pam_dumb_runtime_dir.so to satisfy this requirement. An upgrade to CRUX 3.7 might not do so, depending on your UPGRADE directives in /etc/pkgadd.conf. But any configuration that allows desktop applications to run smoothly on CRUX 3.6 will probably continue working after an upgrade to 3.7.
While pam_dumb_runtime_dir has a simple design and restricts itself to the creation of the runtime dir, the 'contrib' collection offers an alternative, pam_xdg, which exports all the environment variables defined in the freedesktop.org specification. You should choose ONE of these two options and edit /etc/pam.d/common-session accordingly.

If you find yourself in one of the other situations in the table above, read the man page for the corresponding PAM module to learn how to accomplish the desired configuration.

Upgrading the Kernel

The kernel source, which is found in /usr/src/linux-5.15.x/ is not installed using pkgadd. If you decide to upgrade your kernel you can safely do so by manually replacing the kernel source with a newer version (or unpack the newer source tree somewhere else). This will not make the package database inconsistent (since it's not installed with pkgadd) nor will it affect the kernel headers found in /usr/include/linux and /usr/include/asm since these are not symlinks to the kernel source, but instead contain copies of the headers.