431 lines
10 KiB
Bash
Executable file
431 lines
10 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
. /etc/pkg/pkg.conf
|
|
. /var/lib/pkg/functions
|
|
|
|
name=$(basename $0)
|
|
version=8.3
|
|
|
|
{ time \
|
|
{
|
|
echo "$version" > /etc/lfs-release
|
|
|
|
cat > /etc/lsb-release << "EOF"
|
|
DISTRIB_ID="Linux From Scratch"
|
|
DISTRIB_RELEASE="8.3"
|
|
DISTRIB_CODENAME="Emmett1"
|
|
DISTRIB_DESCRIPTION="Linux From Scratch"
|
|
EOF
|
|
|
|
cat > /etc/inittab << "EOF"
|
|
# Begin /etc/inittab
|
|
|
|
id:3:initdefault:
|
|
|
|
si::sysinit:/etc/rc.d/init.d/rc S
|
|
|
|
l0:0:wait:/etc/rc.d/init.d/rc 0
|
|
l1:S1:wait:/etc/rc.d/init.d/rc 1
|
|
l2:2:wait:/etc/rc.d/init.d/rc 2
|
|
l3:3:wait:/etc/rc.d/init.d/rc 3
|
|
l4:4:wait:/etc/rc.d/init.d/rc 4
|
|
l5:5:wait:/etc/rc.d/init.d/rc 5
|
|
l6:6:wait:/etc/rc.d/init.d/rc 6
|
|
|
|
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
|
|
|
|
su:S016:once:/sbin/sulogin
|
|
|
|
1:2345:respawn:/sbin/agetty --noclear tty1 9600
|
|
2:2345:respawn:/sbin/agetty tty2 9600
|
|
3:2345:respawn:/sbin/agetty tty3 9600
|
|
4:2345:respawn:/sbin/agetty tty4 9600
|
|
5:2345:respawn:/sbin/agetty tty5 9600
|
|
6:2345:respawn:/sbin/agetty tty6 9600
|
|
|
|
# End /etc/inittab
|
|
EOF
|
|
|
|
cat > /etc/inputrc << "EOF"
|
|
# Begin /etc/inputrc
|
|
# Modified by Chris Lynn <roryo@roryo.dynup.net>
|
|
|
|
# Allow the command prompt to wrap to the next line
|
|
set horizontal-scroll-mode Off
|
|
|
|
# Enable 8bit input
|
|
set meta-flag On
|
|
set input-meta On
|
|
|
|
# Turns off 8th bit stripping
|
|
set convert-meta Off
|
|
|
|
# Keep the 8th bit for display
|
|
set output-meta On
|
|
|
|
# none, visible or audible
|
|
set bell-style none
|
|
|
|
# All of the following map the escape sequence of the value
|
|
# contained in the 1st argument to the readline specific functions
|
|
"\eOd": backward-word
|
|
"\eOc": forward-word
|
|
|
|
# for linux console
|
|
"\e[1~": beginning-of-line
|
|
"\e[4~": end-of-line
|
|
"\e[5~": beginning-of-history
|
|
"\e[6~": end-of-history
|
|
"\e[3~": delete-char
|
|
"\e[2~": quoted-insert
|
|
|
|
# for xterm
|
|
"\eOH": beginning-of-line
|
|
"\eOF": end-of-line
|
|
|
|
# for Konsole
|
|
"\e[H": beginning-of-line
|
|
"\e[F": end-of-line
|
|
|
|
# End /etc/inputrc
|
|
EOF
|
|
|
|
cat > /etc/shells << "EOF"
|
|
# Begin /etc/shells
|
|
|
|
/bin/sh
|
|
/bin/bash
|
|
|
|
# End /etc/shells
|
|
EOF
|
|
|
|
cat > /etc/fstab << "EOF"
|
|
# Begin /etc/fstab
|
|
|
|
# file system mount-point type options dump fsck
|
|
# order
|
|
|
|
#/dev/<xxx> / <fff> defaults 1 1
|
|
#/dev/<yyy> swap swap pri=1 0 0
|
|
proc /proc proc nosuid,noexec,nodev 0 0
|
|
sysfs /sys sysfs nosuid,noexec,nodev 0 0
|
|
devpts /dev/pts devpts gid=5,mode=620 0 0
|
|
tmpfs /run tmpfs defaults 0 0
|
|
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0
|
|
|
|
# End /etc/fstab
|
|
EOF
|
|
|
|
install -v -m755 -d /etc/modprobe.d
|
|
cat > /etc/modprobe.d/usb.conf << "EOF"
|
|
# Begin /etc/modprobe.d/usb.conf
|
|
|
|
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
|
|
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
|
|
|
|
# End /etc/modprobe.d/usb.conf
|
|
EOF
|
|
|
|
cat > /etc/sysconfig/ifconfig.wired << "EOF"
|
|
ONBOOT="no"
|
|
IFACE="eth0"
|
|
SERVICE="dhcpcd"
|
|
#DHCP_START="-b -q <insert appropriate start options here>"
|
|
#DHCP_STOP="-k <insert additional stop options here>"
|
|
EOF
|
|
|
|
|
|
cat > /etc/resolv.conf << "EOF"
|
|
# Begin /etc/resolv.conf
|
|
|
|
nameserver 8.8.8.8
|
|
nameserver 8.8.4.4
|
|
|
|
# End /etc/resolv.conf
|
|
EOF
|
|
|
|
echo "lfs" > /etc/hostname
|
|
|
|
cat > /etc/hosts << "EOF"
|
|
# Begin /etc/hosts
|
|
|
|
127.0.0.1 localhost lfs
|
|
::1 localhost lfs
|
|
|
|
# End /etc/hosts
|
|
EOF
|
|
|
|
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=/bin:/usr/bin
|
|
|
|
if [ $EUID -eq 0 ] ; then
|
|
pathappend /sbin:/usr/sbin
|
|
unset HISTFILE
|
|
fi
|
|
|
|
# Setup 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}
|
|
|
|
# Setup a red prompt for root and a green one for users.
|
|
NORMAL="\[\e[0m\]"
|
|
RED="\[\e[1;31m\]"
|
|
GREEN="\[\e[1;32m\]"
|
|
if [[ $EUID == 0 ]] ; then
|
|
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
|
|
else
|
|
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
|
|
fi
|
|
|
|
for script in /etc/profile.d/*.sh ; do
|
|
if [ -r $script ] ; then
|
|
. $script
|
|
fi
|
|
done
|
|
|
|
unset script RED GREEN NORMAL
|
|
|
|
# End /etc/profile
|
|
EOF
|
|
|
|
install --directory --mode=0755 --owner=root --group=root /etc/profile.d
|
|
|
|
cat > /etc/profile.d/bash_completion.sh << "EOF"
|
|
# Begin /etc/profile.d/bash_completion.sh
|
|
# Import bash completion scripts
|
|
|
|
for script in /etc/bash_completion.d/*.sh ; do
|
|
if [ -r $script ] ; then
|
|
. $script
|
|
fi
|
|
done
|
|
# End /etc/profile.d/bash_completion.sh
|
|
EOF
|
|
|
|
install --directory --mode=0755 --owner=root --group=root /etc/bash_completion.d
|
|
|
|
cat > /etc/profile.d/dircolors.sh << "EOF"
|
|
# Setup for /bin/ls and /bin/grep to support color, the alias is in /etc/bashrc.
|
|
if [ -f "/etc/dircolors" ] ; then
|
|
eval $(dircolors -b /etc/dircolors)
|
|
fi
|
|
|
|
if [ -f "$HOME/.dircolors" ] ; then
|
|
eval $(dircolors -b $HOME/.dircolors)
|
|
fi
|
|
|
|
alias ls='ls --color=auto'
|
|
alias grep='grep --color=auto'
|
|
EOF
|
|
|
|
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
|
|
|
|
# Set some defaults before other applications add to these paths.
|
|
pathappend /usr/share/man MANPATH
|
|
pathappend /usr/share/info INFOPATH
|
|
EOF
|
|
|
|
cat > /etc/profile.d/readline.sh << "EOF"
|
|
# Setup the INPUTRC environment variable.
|
|
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
|
|
INPUTRC=/etc/inputrc
|
|
fi
|
|
export INPUTRC
|
|
EOF
|
|
|
|
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
|
|
|
|
cat > /etc/profile.d/i18n.sh << "EOF"
|
|
# Set up i18n variables
|
|
export LANG=en_US.UTF-8
|
|
EOF
|
|
|
|
cat > /etc/bashrc << "EOF"
|
|
# Begin /etc/bashrc
|
|
# Written for Beyond Linux From Scratch
|
|
# by James Robertson <jameswrobertson@earthlink.net>
|
|
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>
|
|
|
|
# System wide aliases and functions.
|
|
|
|
# System wide environment variables and startup programs should go into
|
|
# /etc/profile. Personal environment variables and startup programs
|
|
# should go into ~/.bash_profile. Personal aliases and functions should
|
|
# go into ~/.bashrc
|
|
|
|
# Provides colored /bin/ls and /bin/grep commands. Used in conjunction
|
|
# with code in /etc/profile.
|
|
|
|
alias ls='ls --color=auto'
|
|
alias grep='grep --color=auto'
|
|
|
|
# Provides prompt for non-login shells, specifically shells started
|
|
# in the X environment. [Review the LFS archive thread titled
|
|
# PS1 Environment Variable for a great case study behind this script
|
|
# addendum.]
|
|
|
|
NORMAL="\[\e[0m\]"
|
|
RED="\[\e[1;31m\]"
|
|
GREEN="\[\e[1;32m\]"
|
|
if [[ $EUID == 0 ]] ; then
|
|
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
|
|
else
|
|
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
|
|
fi
|
|
|
|
unset RED GREEN NORMAL
|
|
|
|
# End /etc/bashrc
|
|
EOF
|
|
|
|
cat > ~/.bash_profile << "EOF"
|
|
# Begin ~/.bash_profile
|
|
# Written for Beyond Linux From Scratch
|
|
# by James Robertson <jameswrobertson@earthlink.net>
|
|
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>
|
|
|
|
# Personal environment variables and startup programs.
|
|
|
|
# Personal aliases and functions should go in ~/.bashrc. System wide
|
|
# environment variables and startup programs are in /etc/profile.
|
|
# System wide aliases and functions are in /etc/bashrc.
|
|
|
|
if [ -f "$HOME/.bashrc" ] ; then
|
|
source $HOME/.bashrc
|
|
fi
|
|
|
|
if [ -d "$HOME/bin" ] ; then
|
|
pathprepend $HOME/bin
|
|
fi
|
|
|
|
# Having . in the PATH is dangerous
|
|
#if [ $EUID -gt 99 ]; then
|
|
# pathappend .
|
|
#fi
|
|
|
|
# End ~/.bash_profile
|
|
EOF
|
|
|
|
cat > ~/.profile << "EOF"
|
|
# Begin ~/.profile
|
|
# Personal environment variables and startup programs.
|
|
|
|
if [ -d "$HOME/bin" ] ; then
|
|
pathprepend $HOME/bin
|
|
fi
|
|
|
|
# Set up user specific i18n variables
|
|
#export LANG=<ll>_<CC>.<charmap><@modifiers>
|
|
|
|
# End ~/.profile
|
|
EOF
|
|
|
|
cat > ~/.bashrc << "EOF"
|
|
# Begin ~/.bashrc
|
|
# Written for Beyond Linux From Scratch
|
|
# by James Robertson <jameswrobertson@earthlink.net>
|
|
|
|
# Personal aliases and functions.
|
|
|
|
# Personal environment variables and startup programs should go in
|
|
# ~/.bash_profile. System wide environment variables and startup
|
|
# programs are in /etc/profile. System wide aliases and functions are
|
|
# in /etc/bashrc.
|
|
|
|
if [ -f "/etc/bashrc" ] ; then
|
|
source /etc/bashrc
|
|
fi
|
|
|
|
# Set up user specific i18n variables
|
|
#export LANG=<ll>_<CC>.<charmap><@modifiers>
|
|
|
|
# End ~/.bashrc
|
|
EOF
|
|
|
|
cat > ~/.bash_logout << "EOF"
|
|
# Begin ~/.bash_logout
|
|
# Written for Beyond Linux From Scratch
|
|
# by James Robertson <jameswrobertson@earthlink.net>
|
|
|
|
# Personal items to perform on logout.
|
|
|
|
# End ~/.bash_logout
|
|
EOF
|
|
|
|
dircolors -p > /etc/dircolors
|
|
|
|
}
|
|
} 2>&1 | tee -a $LOG_DIR/$(basename $0).log
|
|
|
|
if [ $PIPESTATUS -ne 0 ]; then exit 1; fi;
|
|
|
|
#rm -fr $WORK_DIR/$name-$version
|
|
|
|
registerpkg $(basename $0) $version
|
|
|
|
exit 0
|