#! /bin/sh # # Copyright (C) 2000,2001,2002 by # Bernhard Rosenkraenzer # Oliver Paukstadt # Karsten Hopp # Florian La Roche # Nils Philippsen # Helge Deller # David Sainty # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # VERSION=1.01 export TEXTDOMAIN=s390installer export TEXTDOMAINDIR=/usr/lib/locale doshutdown() { exec /sbin/shutdown exit 0 } doreboot() { exec /sbin/shutdown -r exit 0 } startinetd() { echo echo $"Starting telnetd and sshd to allow login over the network." echo $"Welcome to the Red Hat Linux install environment $VERSION for $S390ARCH" > /etc/issue.net echo $"Welcome to the Red Hat Linux install environment $VERSION for $S390ARCH" > /etc/motd echo >> /etc/motd /sbin/xinetd -stayalive -reuse -pidfile /tmp/xinetd.pid /sbin/sshd if [ -z "$RUNKS" ]; then echo echo $"Please connect now to $IPADDR to start the installation." read while : ; do /bin/sh --login [ $? = 0 ] || break done fi } S390ARCH=`uname -m` if [ "$S390ARCH" = "s390" ]; then export S390ARCH="S/390" else export S390ARCH="zSeries" fi echo $"Starting the $S390ARCH initrd to configure networking. Version is $VERSION" # set up env vars as we do in init.c if [ `uname -m` = "s390x" ]; then LD_LIBRARY_PATH=/lib64:/usr/lib64:/usr/X11R6/lib64:/usr/kerberos/lib64:/lib:/usr/lib:/usr/X11R6/lib:/usr/kerberos/lib else LD_LIBRARY_PATH=/lib:/usr/lib:/usr/X11R6/lib:/usr/kerberos/lib fi export LD_LIBRARY_PATH PATH="PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin:/mnt/sysimage/usr/sbin:/mnt/sysimage/sbin:/mnt/sysimage/usr/X11R6/bin" export PATH HOME=/ export HOME PYTHONPATH=/tmp/updates export PYTHONPATH # remount root fs rw mount /dev/root / -o remount,rw mount -t proc none /proc mount -t devpts /dev/pts /dev/pts # limit output on x3270 console echo "1 4 1 1" > /proc/sys/kernel/printk # make /tmp/ramfs mount -t ramfs none /tmp mkdir /OCO mount -t ext2 /dev/ram /OCO >/dev/null 2>&1 # if there is no second initrd, remove mountpoint because # anaconda checks for its existance: if [ "$?" != "0" ]; then rm -rf /OCO 2>/dev/null fi ifconfig lo 127.0.0.1 netmask 255.0.0.0 route add -host 127.0.0.1 dev lo 2>/dev/null LO="" [ -L /sbin/insmod ] && LO=".o" # Parse configuration # Check for missing parameters, prompt for them if necessary while [ -z "$HOSTNAME" ]; do echo $"Please enter the FQDN of your new Linux guest (e.g. s390.redhat.com):" read HOSTNAME done while [ -z "$NETTYPE" ]; do echo $"Please enter which kind of network device do you intend to use" echo " (e.g. ctc, escon, iucv, eth, hsi, tr):" read NETTYPE done DEVICE=${NETTYPE}0 if [ ":$NETTYPE" != ":iucv" ]; then # iucv is the only interface without chandev config while [ -z "$CHANDEV" ]; do echo $"Please enter parameters you need to pass to the channel device layer." echo $"This includes the I/O ports of your ctc, escon, qeth, hsi and lcs devices." echo $"Additional parameters for QETH devices such as the portname" echo $"should be entered at the next prompt, not here !" echo $"(e.g. \"ctc0,0x600,0x601\" will activate the ctc0 interface at I/O" echo $"ports 0x600,0x601):" read CHANDEV done echo "$CHANDEV" |grep -q "qeth" if [ "$?" = "0" ]; then if [ -z "$QETHPARM" ]; then echo $"Each OSA-Express feature in QDIO mode must be associated with a port name" echo $"Please enter additional parameters for your QETH device" echo $"(e.g. \"add_parms,0x10,{lo_devno,hi_devno},portname:port_name\")" echo $"Press enter if you don't want to enter additional parameters" read QETHPARM if [ -z "$QETHPARM" ]; then echo $"You have been warned, but this will not work without an associated portname" fi fi fi echo "$CHANDEV" |grep -q "hsi" if [ "$?" = "0" ]; then if [ -z "$QETHPARM" ]; then echo $"Please enter additional parameters for your HSI device" echo $"(e.g. \"add_parms,0x10,{lo_devno,hi_devno},portname:port_name\")" echo $"Press enter if you don't want to enter additional parameters" read QETHPARM fi fi [ -n "$CHANDEV" ] && echo "$CHANDEV" >/proc/chandev [ -n "$QETHPARM" ] && echo "$QETHPARM" >/proc/chandev [ -n "$CHANDEV" ] && echo "reprobe" >/proc/chandev fi if [ ":$NETTYPE" = ":eth" ] || [ ":$NETTYPE" = ":tr" ] || [ ":$NETTYPE" = ":hsi" ]; then while [ -z "$IPADDR" ]; do echo $"Please enter the IP address of your new Linux guest:" read IPADDR done while [ -z "$NETWORK" ]; do echo $"Enter the network address of the new Linux guest:" read NETWORK done while [ -z "$NETMASK" ]; do echo $"Enter the netmask for the new Linux guest (e.g. 255.255.255.0):" read NETMASK done while [ -z "$BROADCAST" ]; do echo $"Enter the broadcast address for the new Linux guest:" read BROADCAST done while [ -z "$GATEWAY" ]; do echo $"Please enter your default gateway:" read GATEWAY done if echo "$CHANDEV" |grep -q "lcs"; then LCS="on" fi # qeth and nettype!= eth is hipersockets ! if echo "$CHANDEV" |grep -q "qeth"; then if echo "$NETTYPE" |grep -q "eth"; then QETH="on" elif echo "$NETTYPE" |grep -q "hsi"; then HSI="on" elif echo "$NETTYPE" |grep -q "tr"; then TR="on" fi fi else # ctc0, escon0, iucv0 while [ -z "$GATEWAY" ]; do echo $"Enter the IP of your ctc/escon/iucv point-to-point partner:" read GATEWAY done if [ "$NETTYPE" = "ctc" ]; then # if [ -z "$MTU" ]; then # echo $"Enter the maximal transfer unit (MTU) for this connection or leave empty:" # read MTU # fi if [ -z "$MTU" ]; then MTU="1500" fi MMTU="mtu 1500" # always use mtu 1500 for the installer fi if [ ":$NETTYPE" = ":iucv" ]; then while [ -z "$IUCV" ]; do echo $"Enter iucv kernel module options (usually iucv=HOST," echo $"where HOST is TCPIP for VM, \$TCPIP for VIF):" read IUCV done fi fi # don't ask for MTU, but use it if it has been set in the .parm file # don't overwrite MMTU if it has been set for CTC if [ -n "$MTU" -a -z "$MMTU" ]; then MMTU="mtu $MTU" fi # configure network-interface KERNELVERSION=`cat /proc/version | awk '{ print $3 }'` if [ ":$NETTYPE" = ":ctc" -o ":$NETTYPE" = ":escon" ]; then insmod fsm$LO insmod ctc$LO ifconfig $DEVICE $IPADDR $MMTU pointopoint $GATEWAY route add -host $IPADDR dev $DEVICE 2>/dev/null elif [ ":$NETTYPE" = ":iucv" ]; then insmod netiucv$LO $IUCV ifconfig $DEVICE $IPADDR $MMTU pointopoint $GATEWAY route add -host $IPADDR dev $DEVICE 2>/dev/null else # lcs, tr, qeth, hsi or older kernel without opensource-lcs if [ "$DEVICE" = "eth0" -a "$HSI" = "on" ]; then DEVICE="hsi0" fi insmod ipv6$LO if [ -n "$LCS" ]; then insmod -f lcs$LO if [ "$?" = "1" ]; then echo $"warning: no lcs module found in the first initrd, " echo $" looking for second initrd" else ifconfig $DEVICE $IPADDR $MMTU netmask $NETMASK broadcast $BROADCAST route add -net $NETWORK netmask $NETMASK dev $DEVICE 2>/dev/null fi fi if [ -d "/OCO" ]; then if [ -n "$LCS" ]; then if [ -f /OCO/$KERNELVERSION/kernel/drivers/s390/net/lcs.o ]; then insmod -f /OCO/$KERNELVERSION/kernel/drivers/s390/net/lcs$LO else echo $"error: no lcs module found" fi else # qeth or hsi if [ -f /OCO/$KERNELVERSION/kernel/drivers/s390/qdio.o -a -f /OCO/$KERNELVERSION/kernel/drivers/s390/net/qeth.o ]; then insmod -f /OCO/$KERNELVERSION/kernel/drivers/s390/qdio$LO insmod -f /OCO/$KERNELVERSION/kernel/drivers/s390/net/qeth$LO else echo $"error: The qdio and the qeth modules are needed for this" echo $"They cannot be found in /OCO/$KERNELVERSION/kernel/drivers/s390/, skipping..." fi fi ifconfig $DEVICE $IPADDR $MMTU netmask $NETMASK broadcast $BROADCAST route add -net $NETWORK netmask $NETMASK dev $DEVICE 2>/dev/null fi fi route add default gw $GATEWAY dev $DEVICE 2>/dev/null if [ -z "$DNS" ]; then echo $"Please enter your DNS server(s), separated by colons (:):" read DNS fi if [ -z "$DNS" ]; then echo $"You might encounter problems without a nameserver, especially" echo $"with FTP installs" fi if [ -n "$DNS" -a -z "$SEARCHDNS" ]; then echo $"Please enter your DNS search domain(s) (if any), separated by colons (:):" read SEARCHDNS fi [ -n "$HOSTNAME" ] && hostname $HOSTNAME # show interfaces and routing table ifconfig -a route -n echo $"Starting portmap." portmap # convert to space-separated lists if [ -n "$SEARCHDNS" ]; then SEARCHDNS=`echo $SEARCHDNS |sed -e 's/:/ /g'` for i in "$SEARCHDNS"; do echo "search $i"; done >> /etc/resolv.conf fi if [ -n "$DNS" ]; then DNS=`echo $DNS |sed -e 's/:/ /g'` for i in "$DNS"; do echo "nameserver $i"; done >> /etc/resolv.conf fi grep -q ext3 /proc/filesystems if [ "$?" != "0" ]; then insmod jbd$LO insmod ext3$LO fi # transfer options into install environment cat > /tmp/install.cfg << EOF LANG="$LANG" S390ARCH="$S390ARCH" TEXTDOMAIN="$TEXTDOMAIN" TEXTDOMAINDIR="$TEXTDOMAINDIR" CHANDEV="$CHANDEV" QETHPARM="$QETHPARM" HOSTNAME="$HOSTNAME" DEVICE="$DEVICE" NETTYPE="$NETTYPE" IPADDR="$IPADDR" GATEWAY="$GATEWAY" MTU="$MTU" NETWORK="$NETWORK" NETMASK="$NETMASK" BROADCAST="$BROADCAST" DNS="$DNS" SEARCHDNS="$SEARCHDNS" LCS="$LCS" QETH="$QETH" HSI="$HSI" TR="$TR" IUCV="$IUCV" ONBOOT="yes" export LANG CHANDEV QETHPARM S390ARCH TEXTDOMAIN TEXTDOMAINDIR HSI export HOSTNAME DEVICE NETTYPE IPADDR GATEWAY MTU export NETWORK NETMASK BROADCAST DNS SEARCHDNS export LCS QETH IUCV ONBOOT export TR EOF # immediately read it in again to export these into the shell below . /tmp/install.cfg cat /tmp/install.cfg >> /etc/profile cat > /tmp/netinfo << EOF DEVICE=$DEVICE ONBOOT=yes BOOTPROTO=static IPADDR=$IPADDR NETMASK=$NETMASK GATEWAY=$GATEWAY BROADCAST=$BROADCAST HOSTNAME=$HOSTNAME DOMAIN= MTU=$MTU EOF # so that the vars get propagated into the sshd shells mkdir /.ssh cat >> /.ssh/environment <> /etc/profile <> /tmp/netinfo echo "export REMIP=$GATEWAY" >> /etc/profile fi # I'm tired of typing this out... echo "loader" >> /.bash_history echo -n $$ > /var/run/init.pid # shutdown (halt) on SIGUSR1 trap doshutdown SIGUSR1 # reboot on SIGUSR2 trap doreboot SIGUSR2 startinetd if [ -n "$RUNKS" ]; then /sbin/loader fi doshutdown # ;;; Local Variables: *** # ;;; mode: sh *** # ;;; tab-width:3 *** # ;;; end: *** # vim:ts=3:sw=3