Bash skallets oppstartsfiler

Bash, eller skallet, kan opprette en fil ved oppstart som gjelder for alle brukere, noe som kan være svært nyttig for mange forskjellige formål. Dette kan innebære å sette mange nyttige variabler for å legge til ny funksjonalitet i skallet, vanligvis for enkelhets skyld. Denne delen anbefales derfor, og oppsett av pakker i denne boken vil avhenge av denne delen og de opprettede filene. Det er liten ulempe med å følge denne delen med mindre du ikke kan kopiere og lime inn følgende kommandoer, i så fall vil det være mye skriving involvert. Det anbefales å gjøre dette i en chroot før du starter opp igjen i LFS systemet.

[Notat]

Notat

De fleste instruksjonene nedenfor brukes til å opprette filer som ligger i /etc mappestrukturen som krever at du kjører kommandoene som root bruker. Hvis du velger å opprette filene i brukerens hjemmemapper i stedet, bør du kjøre kommandoene som en ikke-privilegert bruker.

[Notat]

Notat

Det finnes flere oppstartsfiler som kan opprettes. De som er her, etablerer et grunnleggende oppsett samtidig som de er praktiske. For flere oppstartsfiler, se Oppstartsfilene til Bash Skallet.

/etc/profile

Her er en grunnleggende /etc/profile. Denne filen starter med å sette opp noen hjelpefunksjoner og noen grunnleggende parametere. Den spesifiserer noen bash historikkparametere og, av sikkerhetshensyn, deaktiverer lagring av en permanent historikkfil for root bruker. Den angir også en standard brukerledetekst. Deretter kaller den små skript i /etc/profile.d mappen for å gi mesteparten av initialiseringen.

For mer informasjon om escape sekvensene du kan bruke for ledeteksten din (dvs. PS1 miljøvariabelen) se info bash -- Node: Printing a Prompt.

cat > /etc/profile << "EOF"
# Begin /etc/profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>

# System wide environment variables and startup programs.

# System wide aliases and functions should go in /etc/bashrc.  Personal
# environment variables and startup programs should go into
# ~/.bash_profile.  Personal aliases and functions should go into
# ~/.bashrc.

# Functions to help us manage paths.  Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
        local IFS=':'
        local NEWPATH
        local DIR
        local PATHVARIABLE=${2:-PATH}
        for DIR in ${!PATHVARIABLE} ; do
                if [ "$DIR" != "$1" ] ; then
                  NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
                fi
        done
        export $PATHVARIABLE="$NEWPATH"
}

pathprepend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}

pathappend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}

export -f pathremove pathprepend pathappend

# Set the initial path
export PATH=/usr/bin

# Attempt to provide backward compatibility with LFS earlier than 11
if [ ! -L /bin ]; then
        pathappend /bin
fi

if [ $EUID -eq 0 ] ; then
        pathappend /usr/sbin
        if [ ! -L /sbin ]; then
                pathappend /sbin
        fi
        unset HISTFILE
fi

# Set up some environment variables.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"

# Set some defaults for graphical systems
export XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/share}
export XDG_CONFIG_DIRS=${XDG_CONFIG_DIRS:-/etc/xdg}
export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/tmp/xdg-$USER}

for script in /etc/profile.d/*.sh ; do
        if [ -r $script ] ; then
                . $script
        fi
done

unset script

# End /etc/profile
EOF

/etc/profile.d Mappen

Nå oppretter du /etc/profile.d mappen, der de individuelle initialiseringsskriptene plasseres:

install --directory --mode=0755 --owner=root --group=root /etc/profile.d

/etc/profile.d/extrapaths.sh

Dette skriptet legger til noen nyttige stier til PATH og kan brukes til å tilpasse andre PATH relaterte miljøvariabler (f.eks. LD_LIBRARY_PATH osv.) som kan være nødvendige for alle brukere.

cat > /etc/profile.d/extrapaths.sh << "EOF"
if [ -d /usr/local/lib/pkgconfig ] ; then
        pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
fi
if [ -d /usr/local/bin ]; then
        pathprepend /usr/local/bin
fi
if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
        pathprepend /usr/local/sbin
fi

if [ -d /usr/local/share ]; then
        pathprepend /usr/local/share XDG_DATA_DIRS
fi

# Set some defaults before other applications add to these paths.
pathappend /usr/share/info INFOPATH
EOF
[Notat]

Notat

man programmet utleder automatisk søkestien for manualsider ved å undersøke innholdet i PATH variabelen, se manpath(5) for detaljer. Innstilling av MANPATH variabelen kan overstyre den automatiske utledningen, så BLFS redaktørene anbefaler ikke å sette den. Hvis du må sette den av en eller annen grunn, er det bedre å starte verdien med et kolon (:), for eksempel MANPATH=:/opt/somepkg/share/man:/opt/otherpkg/share/man så stiene som er oppført i MANPATH variabelen vil bli lagt til den automatisk utledede verdien i stedet for å overstyre den.

/etc/profile.d/readline.sh

Dette skriptet setter opp standard inputrc konfigurasjonsfil. Hvis brukeren ikke har individuelle innstillinger, bruker den den globale filen.

cat > /etc/profile.d/readline.sh << "EOF"
# Set up the INPUTRC environment variable.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
        INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF

/etc/profile.d/umask.sh

Innstilling av umask verdien er viktig for sikkerheten. Her er standard skrivetillatelser for gruppen slått av for systembrukere og når brukernavnet og gruppenavnet ikke er det samme.

cat > /etc/profile.d/umask.sh << "EOF"
# By default, the umask should be set.
if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
  umask 002
else
  umask 022
fi
EOF

/etc/profile.d/i18n.sh

Dette skriptet angir en miljøvariabel som er nødvendig for støtte for morsmål. En fullstendig diskusjon om hvordan du bestemmer denne variabelen finner du på Configuring the System Locale siden.

cat > /etc/profile.d/i18n.sh << "EOF"
# Set up i18n variables
for i in $(locale); do
  unset ${i%=*}
done

if [[ "$TERM" = linux ]]; then
  export LANG=C.UTF-8
else
  export LANG=<ll>_<CC>.<charmap><@modifiers>
fi
EOF