AUTHOR: John Gnew DATE: 2005-08-11 LICENSE: Public Domain SYNOPSIS: How to install LFS on S/390 hardware PRIMARY URL: http://www.linuxfromscratch.org/hints/ DESCRIPTION: This hint should help to install Linux from scratch version 6.0 on a IBM S/390 mainframe. I was able to take the 6.0 install guide, with some minor modifications and three additional packages, and complete the install. This LFS system was installed on a 3390-3, my starter LFS 5.0 system was on a 3390-3. I also had a 3390-9 to use for general storage of files. At the compleation, I was able to IPL my LFS system as a VM guest. I have not included the CTC configuration as this will vary from system to system. Prior to compiling the kernel, I verified various kernl patches from IBM. It seems that all of the patches I came up with were already included in the kernel sources. I would recommend checking for patches prior to compiling different versions of the kernel. The IBM site for obtaining various patches is located at: (http://www-128.ibm.com/developerworks/linux/linux390/index.html) PREREQUISITES: None REQUIRED ADDITIONAL SOFTWARE: mingetty-1.06 (version 1.07-1 in now available) s390-tools-1.4.0 HINT: I followed the documentation for the LFS 6.0 install with the following exceptions: The first addition was to upgrade the 2.4 kernel in LFS 5. GCC was already at level 3.3. I needed to be at the 2.6 level. This upgrade caused changes in the networking so it took a few attempts before I got everything back in place. Install module-init-tools-3.0.tar.bz2 ./configure --prefix=/ make moveold make make install ./generate-modprobe.conf /etc/modprobe.conf copy the modprobe.devfs file into /etc. Upgrade kernel to 2.6.8.1 (or any 2.6 kernel) Create /sys dir and update fstab for sysfs entry I had problems with CTC network without /sys dir Set up CTC with the commands similar to the following: # device must be offline and should be by default echo 0.0.2000,0.0.2001 > /sys/bus/ccwgroup/drivers/ctc/group # echo 0 > /sys/bus/ccwgroup/drivers/ctc/0.0.2000/online echo 0 > /sys/bus/ccwgroup/drivers/ctc/0.0.2000/protocol echo 1 > /sys/bus/ccwgroup/drivers/ctc/0.0.2000/online The following is the command to freate your file system: mkfs.ext3 /dev/dasda1 linux-libc-headers needs to change the copy asm-i386 to asm-s390 in chapter 5 and chapter 6 glibc 2.3.4 touch /tools/glibc-kernheaders/autoconf.h And I initially received the following error: In file included from sys/ustat.h:30, from ../sysdeps/unix/sysv/linux/ustat.c:21: ../sysdeps/generic/bits/ustat.h:26: error: redefinition of `struct ustat' make[2]: *** [/LFS60/sources/glibc-build/misc/ustat.o] Error 1 make[2]: Leaving directory `/LFS60/sources/glibc-2.3.4/misc' To correct this problem I edited ./sysdeps/unix/sysv/linux/ustat.c by commenting #include and then adding #include . The following SED command will accomplish the same. sed -i 's@sys/ustat.h@sys/statfs.h@' \ '../glibc-2.3.4/sysdeps/unix/sysv/linux/ustat.c' The problem was related to a file including an obsolete header file. Chapter 5 Locking in GLIBC The next thing to do is to amend our GCC specs file so that it points to the new dynamic linker. A simple sed will accomplish this: SPECFILE=/tools/lib/gcc-lib/*/*/specs && sed -e 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \ $SPECFILE > tempspecfile && mv -f tempspecfile $SPECFILE && unset SPECFILE Change to sed -e 's@ /lib/ld.so.1@ /tools/lib/ld.so.1@g' \ There does not seem to be a ld-linux.so.2 in the /tools/lib. In chapter 6 I had to remove the coreutils patch for uname. Had a problem with asm: Besides, patch is for intel not 390. Gettext 0.14.3 check failed on msgfmt-6. This also failed on 0.14.4. I found a comment on problems with this test and AIX. +#ifdef linux +#define cpuid(in,a,b,c,d)\ + asm("cpuid": "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (in)); +int has_sse( void ); +#endif Besides, this patch is for intel type boxes not s390. Guess I’ll just have to live with uname -1 and uname -p displaying unknown. mingetty-1.06 (http://packages.qa.debian.org/m/mingetty.html) mingetty is required for non serial consoles. This had to be installed with "make&&make install" which puts mingetty in /sbin. The /etc/inittab needed the following added: # S/390 enable console login for all runlevels 1:012356:respawn:/sbin/mingetty /dev/ttyS0 I also commented the following lines: #1:2345:respawn:/sbin/agetty 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 Customization root:/usr/src# ln -s /usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz /usr/sh are/kbd/keymaps/defkeymap.map.gz KERNEL GEN For the install the kernel, the kernel is not under arch/i386/boot/BzImage but rather arch/s390/boot/image s390-tools-1.4.0 Tools that were built as follows: cd zipl make make install cd ../fdasd make make install cd ../dasdfmt make make install PROBLEMS TODO During boot the console will display messages that have ascii control characters. This make it hard to read. Especialy during a disk check. To correct this make sure bashrc has something similar to the following: # Provides a colored /bin/ls command. Used in conjunction with code in # /etc/profile. if [ $TERM = "dumb" ]; then alias ls='ls --color=never' else alias ls='ls --color=auto' fi To prevent the console from displaying weird lines during a filesystem check, change in /etc/rc.d/init.d/checkfs # fsck $options -a -A -C -T fsck $options -a -A -T ACKNOWLEDGMENTS: CHANGELOG: [2004-10-21] * Initial post [2004-11-05] * Corrected install for GCC-2.95.3 [2005-08-11] * Changed install to represent LFS 6