Linux – How to systemd start without default.target

bootgentoolinuxsystemd

The systemd documentation and various online sources are declaring that systemd should start (by default) the "special" target called "default.target". It is possible to change this by systemctl set-default which basically makes a symlink from default.target to the desired target.

However in my system there is no such file. No /etc/systemd/system/default.target, no /usr/lib/systemd/system/default.target (actually this file is not exists in the whole system). The system is still booting. My question is how can it be?

(Of course I could make a symlink myself, I just want to know how it is possible to define a default without default.target)

Additional info:

# systemctl get-default
graphical.target

So my default target is graphical.target. But where (and how) is it defined?

# find /usr/lib -iname "default.target" # no results
# find /etc -iname "default.target" # no results
# lsb_release -a
LSB Version:    n/a
Distributor ID: Gentoo
Description:    Gentoo Base System release 2.4.1
Release:    2.4.1
Codename:   n/a

# systemctl list-units --type=target
UNIT                  LOAD   ACTIVE SUB    DESCRIPTION                  
basic.target          loaded active active Basic System                 
getty.target          loaded active active Login Prompts                
graphical.target      loaded active active Graphical Interface          
local-fs-pre.target   loaded active active Local File Systems (Pre)     
local-fs.target       loaded active active Local File Systems           
machines.target       loaded active active Containers                   
multi-user.target     loaded active active Multi-User System            
network-online.target loaded active active Network is Online            
network.target        loaded active active Network                      
nss-lookup.target     loaded active active Host and Network Name Lookups
paths.target          loaded active active Paths                        
remote-fs.target      loaded active active Remote File Systems          
slices.target         loaded active active Slices                       
sockets.target        loaded active active Sockets                      
sound.target          loaded active active Sound Card                   
swap.target           loaded active active Swap                         
sysinit.target        loaded active active System Initialization        
timers.target         loaded active active Timers                       

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

18 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Best Answer

Gentoo changed the location of the systemd files to /lib/systemd in July of 2017. On my system, I can see the default symlink in /lib/systemd/system:

$ ls -l /lib/systemd/system/default.target
lrwxrwxrwx 1 root root 16 Apr  2 15:48 /lib/systemd/system/default.target -> graphical.target

If you add a symlink in /etc/systemd/system (like systemctl set-default does), it will override the distribution's default setting.

Related Question