Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/ash
- # Copyright 1999-2011 Gentoo Foundation
- # Distributed under the terms of the GNU General Public License, v2 or later
- export PATH="/usr/sbin:/usr/bin:/sbin:/bin"
- #// Path, basic vars
- #//--------------------------------------------------------------------------------
- BasicSetup() {
- #// Copyright year, Build date in YYYYMMDD format, and in MMDDYYYY to make busybox 'date' happy
- MYDATE="`/bin/cat /etc/build_date`"
- CPYYEAR="$(echo ${MYDATE} | cut -c 1-4)"
- BBDATE="$(echo ${MYDATE} | cut -c 5-8)$(echo ${MYDATE} | cut -c 1-4)"
- DISDATE="$(echo ${MYDATE} | cut -c 7-8) $(echo ${MYDATE} | cut -c 5-6) $(echo ${MYDATE} | cut -c 1-4)"
- . /etc/initrd.defaults
- # Clean input/output
- exec >${CONSOLE} <${CONSOLE} 2>&1
- }
- #//--------------------------------------------------------------------------------
- #// Startup Tasks
- #//--------------------------------------------------------------------------------
- StartUp() {
- if [ ! -f "/tmp/.startup" ]; then
- #// Mount proc && sys
- mount proc /proc -t proc # /proc
- mount sys /sys -t sysfs # /sys
- mount mdev /dev -t tmpfs -o size=800k # /dev for mdev
- #// Let busybox build its applets
- /bin/busybox --install -s
- #// Create additional mount points
- mkdir -m 0755 /dev/pts
- mkdir /dev/shm
- mkdir -p /mnt/cdrom
- mkdir /mnt/floppy
- mkdir /mnt/gentoo
- mkdir /tmp
- #// Mount remaining filesystems
- mount tmp /tmp -t tmpfs # /tmp
- mount devpts /dev/pts -t devpts -o gid=5,mode=0620 # /dev/pts
- mount shm /dev/shm -t tmpfs -o size=512k # /dev/shm
- #// Create mtab
- ln -sf /proc/mounts /etc/mtab # mtab (symlink -> /proc/mounts)
- #// Start mdev
- echo "/sbin/mdev" > /proc/sys/kernel/hotplug # mdev handles hotplug events
- /sbin/mdev -s # have mdev populate /dev
- #// Create standard (non-mdev) devices
- if [ ! -e /dev/md0 ]
- then
- makedevs /dev/md b 9 0 0 7
- fi
- if [ ! -e /dev/tty0 ]
- then
- makedevs /dev/tty c 4 0 0 12
- fi
- # We probably don't need any of these anymore with mdev
- # makedevs /dev/ptyp c 2 0 0 9
- # makedevs /dev/ttyp c 3 0 0 9
- # makedevs /dev/ttyq c 3 16 0 9
- # makedevs /dev/ttyS c 4 64 0 3
- # mknod /dev/console c 5 1
- # mknod /dev/kmsg c 1 11
- # mknod /dev/null c 1 3
- # mknod /dev/tty c 5 0
- # mknod /dev/urandom c 1 9
- # ln -s /dev/urandom /dev/random
- # mknod /dev/zero c 1 5
- #// Create std* devices
- ln -snf /proc/self/fd /dev/fd
- ln -snf /proc/self/fd/0 /dev/stdin
- ln -snf /proc/self/fd/1 /dev/stdout
- ln -snf /proc/self/fd/2 /dev/stderr
- #// Make some misc directories
- mkdir /var/log
- mkdir /var/run
- #// Start a minimal logger
- klogd
- syslogd
- #// Hostname
- hostname netboot
- if [ -n "`which dropbear 2>/dev/null`" ]
- then
- # Setup dropbear (sshd)
- echo -e ""
- mkdir /etc/dropbear
- echo -e ">>> Generating RSA hostkey ..."
- dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
- echo -e ""
- echo -e ">>> Generating DSS hostkey ..."
- dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
- echo -e ""
- dropbear
- fi
- #// Misc tasks
- chmod +x /bin/net-setup
- chmod +x /bin/ashlogin
- fi
- }
- #//--------------------------------------------------------------------------------
- #// Informative Message (copied from Gentoo /sbin/functions.sh)
- #//--------------------------------------------------------------------------------
- #// show an informative message (with a newline)
- einfo() {
- echo -e " * ${*}"
- return 0
- }
- #//--------------------------------------------------------------------------------
- #// Determine Mips Machine Type
- #//--------------------------------------------------------------------------------
- DetectMips() {
- MYARCH="MIPS"
- MACHINFO="$(cat /proc/cpuinfo | grep "system type" | tr -d "\t" | sed -e "s/: /:/g" | cut -d":" -f2)"
- CPUINFO="$(cat /proc/cpuinfo | grep "cpu model" | tr -d "\t" | sed -e "s/: /:/g" | cut -d":" -f2)"
- case "${MACHINFO}" in
- "SGI Indy") MACHTYPE="SGI Indy" ;; # Indy R4x00/R5000
- "SGI Indigo2")
- case "${CPUINFO}" in
- R4*) MACHTYPE="SGI Indigo2" ;; # I2 R4x00
- R8*) MACHTYPE="SGI Indigo2 Power" ;; # I2 R8000
- R10*) MACHTYPE="SGI Indigo2 Impact" ;; # I2 R10000
- esac
- ;;
- "SGI O2"|"SGI IP32") MACHTYPE="SGI O2" ;; # O2 R5K/RM5K2/RM7K/R10K/R12K
- "SGI Octane"|"SGI IP30") MACHTYPE="SGI Octane" ;; # Octane R10K/R12K/R14K
- "SGI Origin"|"SGI IP27") MACHTYPE="SGI Origin" ;; # Origin 200/2000 R10K/R12K
- "MIPS Cobalt"|*RaQ*|*Qube*) MACHTYPE="Cobalt Microserver" ;; # Cobalt Qube/RaQ (1/2)
- *) MACHTYPE="Unknown MIPS" ;; # ???
- esac
- }
- #//--------------------------------------------------------------------------------
- #// Determine Sparc Machine Type
- #//--------------------------------------------------------------------------------
- DetectSparc() {
- MYARCH="SPARC"
- MACHINFO="$(cat /proc/cpuinfo | grep "type" | tr -d "\t" | sed -e "s/: /:/g" | cut -d":" -f2)"
- case "${MACHINFO}" in
- sun4u) MACHTYPE="Sun UltraSparc" ;; # Sparc64
- sun4c|sun4d|sun4m) MACHTYPE="Sun Sparc32" ;; # Sparc32
- *) MACHTYPE="Unknown SPARC" ;; # ???
- esac
- }
- #//--------------------------------------------------------------------------------
- #// Determine Ppc Machine Type
- #//--------------------------------------------------------------------------------
- DetectPpc() {
- MACHINFO="$(cat /proc/cpuinfo | grep "machine" | tr -d "\t" | sed -e "s/: /:/g" | cut -d":" -f2)"
- case "${ARCHINFO}" in
- ppc)
- MYARCH="PPC"
- case "${MACHINFO}" in
- PowerMac*) MACHTYPE="Apple PowerMac" ;; # PowerMac
- PowerBook*) MACHTYPE="Apple PowerBook" ;; # PowerBook
- "CHRP Pegasos") MACHTYPE="Pegasos" ;; # Pegasos
- CHRP*|PReP) MACHTYPE="IBM PPC-Based" ;; # IBM PPC
- Amiga) MACHTYPE="Amiga" ;; # Amiga
- *) MACHTYPE="Unknown PPC" ;; # ???
- esac
- ;;
- ppc64)
- MYARCH="PPC64"
- case "${MACHINFO}" in
- PowerMac*) MACHTYPE="Apple G5" ;; # Apple G5
- CHRP*|PReP) MACHTYPE="IBM PPC-Based" ;; # IBM PPC
- *iSeries*) MACHTYPE="iSeries (Old)" ;; # Old iSeries
- *) MACHTYPE="Unknown PPC64" ;; # ???
- esac
- ;;
- esac
- }
- #//--------------------------------------------------------------------------------
- #// Discover if the network is already running for us or not
- #//--------------------------------------------------------------------------------
- DetectNetwork() {
- if [ ! -f "/tmp/.startup" ]; then
- #// If this image is loaded via NFS Root, chances are the network is autoconfigured for us
- if [ ! -z "$(ifconfig | grep "eth0")" ]; then
- MYIP="$(ifconfig | grep "inet addr" | cut -d":" -f2 | cut -d" " -f1 | head -n 1)"
- MYGW="$(route | grep default | cut -d" " -f10)"
- fi
- fi
- }
- #//--------------------------------------------------------------------------------
- #// For those in the Church of the SubGenius...
- #//--------------------------------------------------------------------------------
- SubGenius() {
- BUILDDATE="Build Date: $(date -d ${BBDATE} +"%B %d, %Y")"
- for CMDLINE in $(cat /proc/cmdline); do
- if [ "${CMDLINE}" = "discord" ]; then
- BUILDDATE="$(ddate +'Built on %{%A, the %e day of %B%} in the YOLD %Y. %NCelebrate %H!' ${DISDATE})"
- fi
- done
- }
- #//--------------------------------------------------------------------------------
- #// Basic Startup Stuff
- #//--------------------------------------------------------------------------------
- GenMotd() {
- echo -e "" > /etc/motd
- echo -e "" >> /etc/motd
- echo -e "Gentoo Linux; http://www.gentoo.org/" >> /etc/motd
- echo -e " Copyright 2001-${CPYYEAR} Gentoo Foundation; Distributed under the GPL" >> /etc/motd
- echo -e "" >> /etc/motd
- echo -e " Gentoo/${MYARCH} Netboot for ${MACHTYPE} Systems" >> /etc/motd
- echo -e " ${BUILDDATE}" >> /etc/motd
- echo -e "" >> /etc/motd
- #// If this is the initial startup, then display some messages, otherwise just execute a shell for the user
- if [ ! -f "/tmp/.startup" ]; then
- if [ -z "${MYIP}" ]; then
- einfo "To configure networking (eth0), do the following:" > /etc/motd2
- echo -e "" >> /etc/motd2
- einfo "For Static IP:" >> /etc/motd2
- einfo "/bin/net-setup <IP Address> <Gateway Address>" >> /etc/motd2
- echo -e "" >> /etc/motd2
- einfo "For Dynamic IP:" >> /etc/motd2
- einfo "/bin/net-setup dhcp" >> /etc/motd2
- echo -e "" >> /etc/motd2
- else
- echo -e "" > /etc/motd2
- einfo "Network interface eth0 has been started:" >> /etc/motd2
- einfo " IP Address: ${MYIP}" >> /etc/motd2
- einfo " Gateway: ${MYGW}" >> /etc/motd2
- echo -e "" >> /etc/motd2
- einfo "An sshd server is available on port 22. Please set a root" >> /etc/motd2
- einfo "password via \"passwd\" before using." >> /etc/motd2
- echo -e "" >> /etc/motd2
- fi
- fi
- }
- #//--------------------------------------------------------------------------------
- #// Display Motd
- #//--------------------------------------------------------------------------------
- DisplayMotd() {
- cat /etc/motd
- [ -f "/etc/motd2" ] && cat /etc/motd2
- }
- #//--------------------------------------------------------------------------------
- #// Launch Shell
- #//--------------------------------------------------------------------------------
- LaunchShell() {
- #// Completed Startup
- touch /tmp/.startup
- for i in 2 3 4 5 6; do
- getty -n -l /bin/ashlogin 38400 tty${i} &
- done
- # # We run the getty for tty1 in the foreground so our pid 1 doesn't end
- # getty -n -l /bin/ashlogin 38400 tty1
- # We were running the above code, but that doesn't work well on serial. Until
- # we can autodetect a serial console and start a getty there, we'll just run
- # ash on /dev/console
- /bin/ash
- }
- #//--------------------------------------------------------------------------------
- #// Main
- #//--------------------------------------------------------------------------------
- BasicSetup
- StartUp
- #// Detect Arch
- ARCHINFO="$(uname -m)"
- case "${ARCHINFO}" in
- mips*) DetectMips ;;
- sparc*) DetectSparc
- mount -t openpromfs openprom /proc/openprom
- ;;
- ppc*) DetectPpc ;;
- *) MACHTYPE=$ARCHINFO ;;
- esac
- DetectNetwork
- SubGenius
- GenMotd
- DisplayMotd
- LaunchShell
- #//--------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement