Eric Andersen преди 23 години
родител
ревизия
08782ae7d8

+ 2 - 0
.cvsignore

@@ -0,0 +1,2 @@
+UMlinux
+root_fs

+ 110 - 195
Makefile

@@ -1,218 +1,133 @@
-# Makefile for user-mode-linux with a simple busybox/uClibc root filesystem
+# Makefile for a simple busybox/uClibc root filesystem
 #
-# Copyright (C) 2001 by Erik Andersen <andersen@codepoet.org>
-# Copyright (C) 2001 by Alcove, Julien Gaulmin <julien.gaulmin@fr.alcove.com>
-# Copyright (C) 2001 by Jon Nelson <jnelson@boa.org>
+# Copyright (C) 2001-2002 by Erik Andersen <andersen@codepoet.org>
+# Copyright (C) 2002 by Tim Riker <Tim@Rikers.org>
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU Library 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 free software; you can redistribute it and/or modify
+# it under the terms of the GNU Library 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 Library General Public License for more
-# details.
+# 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
+# Library General Public License for more details.
 #
-# You should have received a copy of the GNU Library 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
+# You should have received a copy of the GNU Library 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
 
-# Known problems :
-#  - genext2fs: couldn't allocate a block (no free space)
-#    As genext2fs allocate only one group of blocks, the FS size
-#    is limited to 8Mb.
 
-# Update this stuff by hand :
-ARCH = i386
-# If you are running a cross compiler, you may want to set this
-# to something more interesting, like "arm-linux-".
-#CROSS = $(ARCH)-linux-
-
-#IMAGE_SIZE=8192 # Max size
-#IMAGE_INODES=500
-IMAGE_SIZE=550 # library is 550K
-IMAGE_INODES=300
+#############################################################
+#
+# EDIT this stuff to suit your system and preferences
+#
+# Use := when possible to get precomputation, thereby 
+# speeding up the build process.
+#
+#############################################################
 
-LINUX_SOURCE=linux-2.4.17.tar.bz2
-LINUX_URI=http://www.kernel.org/pub/linux/kernel/v2.4
+# What sortof target system shall we compile this for?
+ARCH:=i386
+#ARCH:=arm
+#ARCH:=whatever
 
-USERMODELINUX_PATCH=uml-patch-2.4.17-3.bz2
-USERMODELINUX_URI=http://prdownloads.sourceforge.net/user-mode-linux
+# Enable this to use the uClibc daily snapshot instead of a released
+# version.  Daily snapshots may contain new features and bugfixes. Or
+# they may not even compile at all, depending on what Erik is doing...
+USE_UCLIBC_SNAPSHOT:=true
 
-UCLIBC_SOURCE=uClibc-snapshot.tar.gz
-UCLIBC_URI=http://www.uclibc.org/downloads/
+# Enable large file (files > 2 GB) support
+BUILD_WITH_LARGEFILE:=false
 
-# Don't alter below this line unless you (think) you know
-# what you are doing! Danger, Danger!
+#############################################################
+#
+# The list of stuff to build for the target filesystem
+#
+#############################################################
+TARGETS:=user-mode-linux uclibc busybox tinylogin
 
-.SUFFIXES:            # Delete the default suffixes
-.SUFFIXES: .c .o .h   # Define our suffix list
+# Pick your root filesystem type.
+TARGETS+=ext2root
 
-# Directories
-BASE_DIR=${shell pwd}
-TARGET_DIR=$(BASE_DIR)/root
-STAGING_DIR=$(BASE_DIR)/staging_dir
-SOURCE_DIR=$(BASE_DIR)/sources
-LINUX_DIR=$(BASE_DIR)/linux
-UCLIBC_DIR=$(BASE_DIR)/uClibc
-GENEXT2FS_DIR=$(BASE_DIR)/genext2fs
+#############################################################
+#
+# You should probably leave this stuff alone unless you know 
+# what you are doing.
+#
+#############################################################
+BASE_DIR:=${shell pwd}
+HOSTCC:=gcc
+LINUX_KERNEL=$(BASE_DIR)/UMlinux
+SOURCE_DIR:=$(BASE_DIR)/sources
+DL_DIR:=$(SOURCE_DIR)/dl
+PATCH_DIR=$(SOURCE_DIR)/patches
+BUILD_DIR:=$(BASE_DIR)/build
+TARGET_DIR:=$(BUILD_DIR)/root
+STAGING_DIR:=$(BUILD_DIR)/staging_dir
+TARGET_CC:=$(STAGING_DIR)/bin/gcc
+TARGET_CROSS:=$(STAGING_DIR)/usr/bin/$(ARCH)-uclibc-
+TARGET_CC1:=$(TARGET_CROSS)gcc
+TARGET_PATH:=$(STAGING_DIR)/usr/bin:$(STAGING_DIR)/bin:/bin:/sbin:/usr/bin:/usr/sbin
+STRIP:=$(TARGET_CROSS)strip --remove-section=.comment --remove-section=.note
+IMAGE:=$(BASE_DIR)/root_fs
+ifneq ($(strip $(ARCH)),i386)
+CROSS:=$(ARCH)-linux-
+endif
 
-TARGET_CC=$(STAGING_DIR)/bin/gcc
-TARGET_CC1=$(STAGING_DIR)/usr/bin/$(ARCH)-uclibc-gcc
-TARGET_CROSS=$(STAGING_DIR)/usr/bin/$(ARCH)-uclibc-
-TARGET_PATH=$(STAGING_DIR)/usr/bin:$(STAGING_DIR)/bin:/bin:/sbin:/usr/bin:/usr/sbin
+all:   world
 
-LINUX=$(BASE_DIR)/UMlinux
-IMAGE=$(BASE_DIR)/root_fs
+TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS))
+TARGETS_DIRCLEAN:=$(patsubst %,%-dirclean,$(TARGETS))
 
-KCONFIG=$(SOURCE_DIR)/linux-uml.config
+world: $(DL_DIR) $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) $(TARGETS)
 
-all:   world
+.PHONY: all world clean dirclean distclean $(TARGETS) $(TARGETS_CLEAN) $(TARGETS_DIRCLEAN)
 
-#So what shall we build today?
-TARGETS=
+include make/*.mk
 
--include busybox.mk
--include boa.mk
+#############################################################
+#
+# staging and target directories do NOT list these as 
+# dependancies anywhere else
+#
+#############################################################
+$(DL_DIR):
+	mkdir $(DL_DIR)
 
-world:	$(TARGETS) root_fs $(LINUX)
+$(BUILD_DIR):
+	mkdir $(BUILD_DIR)
 
-root_fs:	$(GENEXT2FS_DIR)/genext2fs $(TARGET_DIR)
-	$(GENEXT2FS_DIR)/genext2fs \
-	 -b `echo $(IMAGE_SIZE) | bc` \
-	 -i `echo $(IMAGE_INODES) | bc` \
-	 -d $(TARGET_DIR) \
-	 -D $(SOURCE_DIR)/device_table.txt root_fs
+$(STAGING_DIR):
+	rm -rf $(STAGING_DIR)
+	mkdir $(STAGING_DIR)
 
-$(STAGING_DIR)/.target_dir_exists:
+$(TARGET_DIR):
 	rm -rf $(TARGET_DIR)
-	tar -xf $(SOURCE_DIR)/skel.tar
-	cp -a target_skeleton/* $(TARGET_DIR)/
+	zcat $(SOURCE_DIR)/skel.tar.gz | tar -C $(BUILD_DIR) -xf -
+	cp -a $(SOURCE_DIR)/target_skeleton/* $(TARGET_DIR)/
 	-find $(TARGET_DIR) -type d -name CVS -exec rm -rf {} \; > /dev/null 2>&1
-	touch $(STAGING_DIR)/.target_dir_exists
-
-# The kernel
-$(SOURCE_DIR)/$(LINUX_SOURCE):
-	while [ ! -f $(SOURCE_DIR)/$(LINUX_SOURCE) ] ; do \
-		wget -P $(SOURCE_DIR) --passive $(LINUX_URI)/$(LINUX_SOURCE); \
-	done
-
-$(LINUX_DIR)/.unpacked:	$(SOURCE_DIR)/$(LINUX_SOURCE)
-	rm -rf $(LINUX_DIR) # Keeps old versions from messing things up
-	bzip2 -dc $(SOURCE_DIR)/$(LINUX_SOURCE) | tar -xvf -
-	touch $(LINUX_DIR)/.unpacked
-
-$(SOURCE_DIR)/$(USERMODELINUX_PATCH):
-	while [ ! -f $(SOURCE_DIR)/$(USERMODELINUX_PATCH) ] ; do \
-		wget -P $(SOURCE_DIR) --passive $(USERMODELINUX_URI)/$(USERMODELINUX_PATCH); \
-	done
-        
-$(LINUX_DIR)/.patched:	$(LINUX_DIR)/.unpacked $(SOURCE_DIR)/$(USERMODELINUX_PATCH)
-	# This step cannot gracefully recover from interruption
-	@if [ -f $(LINUX_DIR)/.started_patch ]; then \
-		echo "Something went wrong patching the kernel."; \
-		echo "Please rm -rf the kernel directory (\"$(LINUX_DIR)\") and type \"make\" again."; \
-		exit 1; \
-	fi
-	touch $(LINUX_DIR)/.started_patch
-	bzcat $(SOURCE_DIR)/$(USERMODELINUX_PATCH) | patch -d $(LINUX_DIR) -p1
-	cp -f $(KCONFIG) $(LINUX_DIR)/.config
-	mv $(LINUX_DIR)/.started_patch $(LINUX_DIR)/.patched # Hah! Atomic
-
-$(LINUX_DIR)/.um:	$(LINUX_DIR)/.patched
-	sed -e 's/^ARCH :=.*/ARCH=um/g' < $(LINUX_DIR)/Makefile > \
-		$(LINUX_DIR)/Makefile.new
-	mv -f $(LINUX_DIR)/Makefile.new $(LINUX_DIR)/Makefile
-	touch $(LINUX_DIR)/.um
-
-$(LINUX_DIR)/.configdone:	$(LINUX_DIR)/.um
-	make -C $(LINUX_DIR) oldconfig
-	touch $(LINUX_DIR)/.configdone
-
-$(LINUX_DIR)/.dep:	$(LINUX_DIR)/.configdone
-	make -C $(LINUX_DIR) dep
-	touch $(LINUX_DIR)/.dep
-
-$(LINUX_DIR)/linux:	$(LINUX_DIR)/.dep
-	make -C $(LINUX_DIR) linux
-        
-$(LINUX): $(LINUX_DIR)/linux
-	ln -sf $(LINUX_DIR)/linux $(LINUX)
-
-# uClibc
-$(SOURCE_DIR)/$(UCLIBC_SOURCE):
-	while [ ! -f $(SOURCE_DIR)/$(UCLIBC_SOURCE) ] ; do \
-	    wget -P $(SOURCE_DIR) --passive $(UCLIBC_URI)/$(UCLIBC_SOURCE) ; \
-	done;
-
-$(UCLIBC_DIR)/Config:	$(SOURCE_DIR)/$(UCLIBC_SOURCE)
-	rm -rf $(UCLIBC_DIR) # Make sure no previous version interferes here
-	gzip -d -c $(SOURCE_DIR)/$(UCLIBC_SOURCE) | tar -xvf -
-	# The next step patches uClibc
-	# Place patches in the source directory, named uClibc-*.patch
-	for p in `find $(SOURCE_DIR) -name uClibc-*.patch | sort -g`;do \
-		patch -p0 < $$p ; \
-	done
-	# Finally, patch the Config file to our liking
-	# uClibc-Config.awk should be pretty staightforward
-	awk -f $(SOURCE_DIR)/uClibc-Config.awk < \
-		$(UCLIBC_DIR)/extra/Configs/Config.$(ARCH) > \
-		$(UCLIBC_DIR)/Config
-
-$(UCLIBC_DIR)/lib/libc.a:	$(LINUX_DIR)/.dep $(UCLIBC_DIR)/Config
-	$(MAKE) CROSS=$(CROSS) \
-		DEVEL_PREFIX=$(STAGING_DIR) \
-		SYSTEM_DEVEL_PREFIX=$(STAGING_DIR)/usr \
-		SHARED_LIB_LOADER_PATH=/lib \
-		KERNEL_SOURCE=$(LINUX_DIR) \
-		-C $(UCLIBC_DIR)
-
-$(TARGET_CC):	$(UCLIBC_DIR)/lib/libc.a
-	$(MAKE) CROSS=$(CROSS) \
-	DEVEL_PREFIX=$(STAGING_DIR) \
-	SYSTEM_DEVEL_PREFIX=$(STAGING_DIR)/usr \
-	SHARED_LIB_LOADER_PATH=$(STAGING_DIR)/lib \
-	-C $(UCLIBC_DIR) install
-
-$(UCLIBC_DIR)/.installed_runtime:	$(STAGING_DIR)/.target_dir_exists $(TARGET_CC)
-	$(MAKE) CROSS=$(CROSS) \
-	PREFIX=$(TARGET_DIR) \
-	DEVEL_PREFIX=/ \
-	SYSTEM_DEVEL_PREFIX=/usr \
-	SHARED_LIB_LOADER_PATH=/lib \
-	-C $(UCLIBC_DIR) install_runtime
-	touch $(UCLIBC_DIR)/.installed_runtime
-
-uclibc:	$(TARGET_CC) $(UCLIBC_DIR)/.installed_runtime
-
-# genext2fs
-$(GENEXT2FS_DIR)/genext2fs:
-	$(MAKE) -C $(GENEXT2FS_DIR)
-
-# others
-clean:	$(TARGETS_CLEAN)
-	make -C $(GENEXT2FS_DIR) clean
-	@if [ -d $(UCLIBC_DIR) ] ; then \
-		make -C $(UCLIBC_DIR) clean; \
-	fi;
-	@if [ -d $(LINUX_DIR) ] ; then \
-		make -C $(LINUX_DIR) clean; \
-	fi;
-	rm -rf $(STAGING_DIR) $(TARGET_DIR) $(IMAGE)
-	rm -f *~
-
-mrproper: $(TARGETS_MRPROPER)
-	rm -rf $(UCLIBC_DIR)
-	rm -rf $(LINUX_DIR)
-	rm -f root_fs $(LINUX)
-	make -C $(GENEXT2FS_DIR) clean
-	rm -rf $(STAGING_DIR) $(TARGET_DIR) $(IMAGE)
-	rm -f *~
-
-distclean: mrproper $(TARGETS_DISTCLEAN)
-	rm -f $(SOURCE_DIR)/$(UCLIBC_SOURCE)
-	rm -f $(SOURCE_DIR)/$(USERMODELINUX_PATCH)
-	rm -f $(SOURCE_DIR)/$(LINUX_SOURCE)
-
-.PHONY: uclibc uclibc-build uclibc-runtime $(TARGETS) world test clean mrproper distclean
+
+
+#############################################################
+#
+# Cleanup and misc junk
+#
+#############################################################
+clean: $(TARGETS_CLEAN)
+	rm -rf $(TARGET_DIR) $(STAGING_DIR) $(IMAGE)
+
+dirclean: $(TARGETS_DIRCLEAN)
+	rm -rf $(TARGET_DIR) $(STAGING_DIR) $(IMAGE)
+
+distclean:
+	rm -rf $(DL_DIR) $(BUILD_DIR) $(LINUX_KERNEL) $(IMAGE)
+
+sourceball: 
+	rm -rf $(BUILD_DIR)
+	set -e; \
+	cd ..; \
+	rm -f buildroot.tar.bz2; \
+	tar -cvf buildroot.tar buildroot; \
+	bzip2 -9 buildroot.tar; \

+ 0 - 62
busybox.mk

@@ -1,62 +0,0 @@
-TARGETS += busybox
-TARGETS_CLEAN += busybox_clean
-TARGETS_MRPROPER += busybox_mrproper
-TARGETS_DISTCLEAN += busybox_distclean
-
-BUSYBOX_VERSION=0.60.2
-
-# Don't alter below this line unless you (think) you know
-# what you are doing! Danger, Danger!
-
-BUSYBOX_URI=http://www.busybox.net/downloads/
-BUSYBOX_SOURCE=busybox-$(BUSYBOX_VERSION).tar.gz
-BUSYBOX_DIR=$(BASE_DIR)/${shell basename $(BUSYBOX_SOURCE) .tar.gz}
-BUSYBOX_WORKDIR=$(BASE_DIR)/busybox_workdir
-
-IMAGE_SIZE += +500
-
-$(SOURCE_DIR)/$(BUSYBOX_SOURCE):
-	while [ ! -f $(SOURCE_DIR)/$(BUSYBOX_SOURCE) ] ; do \
-	    wget -P $(SOURCE_DIR) --passive $(BUSYBOX_URI)/$(BUSYBOX_SOURCE) ; \
-	done
-
-$(BUSYBOX_DIR)/.unpacked:	$(SOURCE_DIR)/$(BUSYBOX_SOURCE)
-	rm -rf $(BUSYBOX_DIR) # Make sure no older version interferes
-	gzip -d -c $(SOURCE_DIR)/$(BUSYBOX_SOURCE) | tar -xvf -
-	touch $(BUSYBOX_DIR)/.unpacked
-	
-$(BUSYBOX_WORKDIR)/.config:	$(BUSYBOX_DIR)/.unpacked
-	rm -rf $(BUSYBOX_WORKDIR) # Make sure no half-configured busybox interferes
-	mkdir -p $(BUSYBOX_WORKDIR)
-	(cd $(BUSYBOX_WORKDIR) && sh $(BUSYBOX_DIR)/pristine_setup.sh)
-	@perl -i -p \
-		-e 's|//(#define\s+BB_)(?!FEATURE)|$$1|;' \
-		-e 's|//(#define\s+BB_FEATURE_VERBOSE_USAGE)|$$1|;' \
-		-e 's|//(#define\s+BB_FEATURE_NEW_MODULE_INTERFACE)|$$1|;' \
-		-e 's|//(#define\s+BB_FEATURE_COMMAND_USERNAME_COMPLETION)|$$1|;' \
-		-e 's|//(#define\s+BB_FEATURE_SH_FANCY_PROMPT)|$$1|;' \
-		-e 's|//(#define\s+BB_FEATURE_INSMOD_VERSION_CHECKING)|$$1|;' \
-		-e 's|//(#define\s+BB_FEATURE_IFCONFIG)|$$1|;' \
-		-e 's|//(#define\s+BB_FEATURE_DEVFS)|$$1|;' \
-		$(BUSYBOX_WORKDIR)/Config.h
-	touch $(BUSYBOX_WORKDIR)/.config
-
-$(BUSYBOX_WORKDIR)/.built:	$(TARGET_CC) $(BUSYBOX_WORKDIR)/.config
-	make CROSS="$(TARGET_CROSS)" -C $(BUSYBOX_WORKDIR)
-	touch $(BUSYBOX_WORKDIR)/.built
-
-$(TARGET_DIR)/bin/busybox:	$(BUSYBOX_WORKDIR)/.built
-	make PREFIX=$(TARGET_DIR) -C $(BUSYBOX_WORKDIR) install
-
-busybox: $(TARGET_DIR)/bin/busybox
-
-busybox_clean:
-	@if [ -d $(BUSYBOX_WORKDIR)/Makefile ] ; then \
-		make -C $(BUSYBOX_WORKDIR) clean ; \
-	fi;
-
-busybox_mrproper:
-	rm -rf $(BUSYBOX_DIR) $(BUSYBOX_WORKDIR)
-
-busybox_distclean:	busybox_mrproper
-	rm -f $(SOURCE_DIR)/$(BUSYBOX_SOURCE)

+ 0 - 0
boa.mk → make/boa.mk


+ 47 - 0
make/busybox.mk

@@ -0,0 +1,47 @@
+#############################################################
+#
+# busybox
+#
+#############################################################
+USE_BUSYBOX_SNAPSHOT=true
+ifeq ($(USE_BUSYBOX_SNAPSHOT),true)
+# Be aware that this changes daily....
+BUSYBOX_DIR:=$(BUILD_DIR)/busybox
+BUSYBOX_SOURCE=busybox-snapshot.tar.bz2
+BUSYBOX_SITE:=http://www.busybox.net/downloads/snapshots
+UNZIP=bzcat
+else
+BUSYBOX_DIR:=$(BUILD_DIR)/busybox-0.60.2
+BUSYBOX_SOURCE:=busybox-0.60.2.tar.gz
+BUSYBOX_SITE:=http://www.busybox.net/downloads
+UNZIP=zcat
+endif
+BUSYBOX_PATCH:=$(SOURCE_DIR)/busybox.patch
+
+
+$(DL_DIR)/$(BUSYBOX_SOURCE):
+	 wget -P $(DL_DIR) --passive-ftp $(BUSYBOX_SITE)/$(BUSYBOX_SOURCE)
+
+busybox-source: $(DL_DIR)/$(BUSYBOX_SOURCE) $(BUSYBOX_PATCH)
+
+$(BUSYBOX_DIR)/Config.h: $(DL_DIR)/$(BUSYBOX_SOURCE) $(BUSYBOX_PATCH)
+	$(UNZIP) $(DL_DIR)/$(BUSYBOX_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+	cat $(BUSYBOX_PATCH) | patch -d $(BUSYBOX_DIR) -p1
+ifeq ($(strip $(BUILD_WITH_LARGEFILE)),true)
+	perl -i -p -e "s/^DOLFS.*/DOLFS=true/;" $(BUSYBOX_DIR)/Makefile
+endif
+
+$(BUSYBOX_DIR)/busybox: $(BUSYBOX_DIR)/Config.h
+	make CROSS="$(TARGET_CROSS)" PREFIX="$(TARGET_DIR)" -C $(BUSYBOX_DIR)
+
+$(TARGET_DIR)/bin/busybox: $(BUSYBOX_DIR)/busybox
+	make CROSS="$(TARGET_CROSS)" PREFIX="$(TARGET_DIR)" -C $(BUSYBOX_DIR) install
+
+busybox: uclibc $(TARGET_DIR)/bin/busybox
+
+busybox-clean:
+	rm -f $(TARGET_DIR)/bin/busybox
+	-make -C $(BUSYBOX_DIR) clean
+
+busybox-dirclean:
+	rm -rf $(BUSYBOX_DIR)

+ 53 - 0
make/ext2root.mk

@@ -0,0 +1,53 @@
+#############################################################
+#
+# genext2fs to build to target ext2 filesystems
+#
+#############################################################
+GENEXT2_DIR=$(BUILD_DIR)/genext2fs-1.3.orig
+GENEXT2_SOURCE=genext2fs_1.3.orig.tar.gz
+GENEXT2_SITE=http://ftp.debian.org/debian/pool/main/g/genext2fs
+GENEXT2_PATCH=$(SOURCE_DIR)/genext2fs.patch
+
+$(DL_DIR)/$(GENEXT2_SOURCE):
+	wget -P $(DL_DIR) --passive-ftp $(GENEXT2_SITE)/$(GENEXT2_SOURCE)
+
+$(GENEXT2_DIR): $(DL_DIR)/$(GENEXT2_SOURCE) $(GENEXT2_PATCH)
+	zcat $(DL_DIR)/$(GENEXT2_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+	cat $(GENEXT2_PATCH) | patch -p1 -d $(GENEXT2_DIR)
+
+$(GENEXT2_DIR)/genext2fs: $(GENEXT2_DIR)
+	$(MAKE) CFLAGS="-Wall -O2 -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64" -C $(GENEXT2_DIR);
+	touch -c $(GENEXT2_DIR)/genext2fs
+
+genext2fs: $(GENEXT2_DIR)/genext2fs
+
+
+
+#############################################################
+#
+# Build the ext2 root filesystem image
+#
+# Known problems :
+#  - genext2fs: couldn't allocate a block (no free space)
+#  
+#    Since genext2fs allocates only one group of blocks, the FS 
+#    size is limited to a maximum of 8 Mb.
+#
+#############################################################
+# FIXME -- calculate these numbers...
+SIZE=4000
+INODES=1000
+
+ext2root: genext2fs #$(shell find $(TARGET_DIR) -type f)
+	-@find $(TARGET_DIR)/lib -type f -name \*.so\* | xargs $(STRIP) --strip-unneeded 2>/dev/null || true;
+	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
+	$(GENEXT2_DIR)/genext2fs -i $(INODES) -b $(SIZE) -d $(TARGET_DIR) -D $(SOURCE_DIR)/device_table.txt $(IMAGE)
+
+ext2root-source: $(DL_DIR)/$(GENEXT2_SOURCE)
+
+ext2root-clean:
+	-make -C $(GENEXT2_DIR) clean
+
+ext2root-dirclean:
+	rm -rf $(GENEXT2_DIR)
+

+ 38 - 0
make/tinylogin.mk

@@ -0,0 +1,38 @@
+#############################################################
+#
+# tinylogin
+#
+#############################################################
+TINYLOGIN_DIR:=$(BUILD_DIR)/tinylogin-1.00
+# FIXME - this changes daily. we should use a stable tarball and cvs up if desired
+#TINYLOGIN_SOURCE=tinylogin-snapshot.tar.bz2
+TINYLOGIN_SOURCE:=tinylogin-1.00.tar.bz2
+TINYLOGIN_SITE:=http://tinylogin.busybox.net/downloads
+
+$(DL_DIR)/$(TINYLOGIN_SOURCE):
+	wget -P $(DL_DIR) --passive-ftp $(TINYLOGIN_SITE)/$(TINYLOGIN_SOURCE)
+
+tinylogin-source: $(DL_DIR)/$(TINYLOGIN_SOURCE)
+
+$(TINYLOGIN_DIR)/Config.h: $(DL_DIR)/$(TINYLOGIN_SOURCE)
+	bzcat $(DL_DIR)/$(TINYLOGIN_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+	perl -i -p -e "s/\`id -u\` -ne 0/0 == 1/;" \
+		-e "s/4755 --owner=root --group=root/755/" \
+		$(TINYLOGIN_DIR)/install.sh
+	# date test this one
+	touch $(TINYLOGIN_DIR)/Config.h
+
+$(TINYLOGIN_DIR)/tinylogin: $(TINYLOGIN_DIR)/Config.h
+	make CROSS="$(TARGET_CROSS)" -C $(TINYLOGIN_DIR)
+
+$(TARGET_DIR)/bin/tinylogin: $(TINYLOGIN_DIR)/tinylogin
+	make CROSS="$(TARGET_CROSS)" PREFIX="$(TARGET_DIR)" -C $(TINYLOGIN_DIR) install
+
+tinylogin: uclibc $(TARGET_DIR)/bin/tinylogin
+
+tinylogin-clean:
+	rm -f $(TARGET_DIR)/bin/tinylogin
+	-make -C $(TINYLOGIN_DIR) clean
+
+tinylogin-dirclean:
+	rm -rf $(TINYLOGIN_DIR)

+ 75 - 0
make/uclibc.mk

@@ -0,0 +1,75 @@
+#############################################################
+#
+# uClibc (the C library)
+#
+#############################################################
+
+ifeq ($(USE_UCLIBC_SNAPSHOT),true)
+# Be aware that this changes daily....
+UCLIBC_DIR=$(BUILD_DIR)/uClibc
+UCLIBC_SOURCE=uClibc-snapshot.tar.bz2
+else
+UCLIBC_DIR:=$(BUILD_DIR)/uClibc-0.9.11
+UCLIBC_SOURCE:=uClibc-0.9.11.tar.bz2
+endif
+#UCLIBC_URI:=http://www.uclibc.org/downloads
+UCLIBC_URI:=http://de.busybox.net/downloads/uClibc
+ifeq ($(strip $(BUILD_WITH_LARGEFILE)),true)
+LARGEFILE=true
+else
+LARGEFILE=false
+endif
+ifneq ($(CROSS),)
+CROSSARG:=--cross="$(CROSS)"
+endif
+
+$(DL_DIR)/$(UCLIBC_SOURCE):
+	wget -P $(DL_DIR) --passive-ftp $(UCLIBC_URI)/$(UCLIBC_SOURCE)
+
+uclibc-source: $(DL_DIR)/$(UCLIBC_SOURCE)
+
+$(UCLIBC_DIR)/.unpacked: $(DL_DIR)/$(UCLIBC_SOURCE)
+	rm -rf $(UCLIBC_DIR)
+	bzcat $(DL_DIR)/$(UCLIBC_SOURCE) | tar -C $(BUILD_DIR) -xvf - 
+	touch $(UCLIBC_DIR)/.unpacked
+
+$(UCLIBC_DIR)/.configured: $(UCLIBC_DIR)/.unpacked
+	$(UCLIBC_DIR)/extra/Configs/uClibc_config_fix.pl \
+		--arch=$(ARCH) \
+		$(CROSSARG) --c99_math=true \
+		--devel_prefix=$(STAGING_DIR) \
+		--float=true \
+		--kernel_dir=$(LINUX_DIR) \
+		--large_file=$(LARGEFILE) \
+		--ldso_path="/lib" \
+		--long_long=true \
+		--rpc_support=true \
+		--shadow=true \
+		--shared_support=true \
+		--threads=true \
+		--debug=false \
+		--file=$(UCLIBC_DIR)/extra/Configs/Config.$(ARCH) \
+		> $(UCLIBC_DIR)/Config; 
+	perl -i -p -e 's,SYSTEM_DEVEL_PREFIX.*,SYSTEM_DEVEL_PREFIX=$(STAGING_DIR)/usr,g' $(UCLIBC_DIR)/Config
+
+	touch $(UCLIBC_DIR)/.configured
+
+$(UCLIBC_DIR)/lib/libc.a: $(UCLIBC_DIR)/.configured
+	$(MAKE) -C $(UCLIBC_DIR)
+
+$(STAGING_DIR)/lib/libc.a: $(UCLIBC_DIR)/lib/libc.a
+	$(MAKE) -C $(UCLIBC_DIR) install
+
+$(TARGET_DIR)/lib/libc.so.0: $(STAGING_DIR)/lib/libc.a
+	$(MAKE) -C $(UCLIBC_DIR) DEVEL_PREFIX=$(TARGET_DIR) \
+		SYSTEM_DEVEL_PREFIX=$(TARGET_DIR)/usr install_runtime install_utils
+
+uclibc: $(LINUX_KERNEL) $(TARGET_DIR)/lib/libc.so.0
+
+uclibc-clean:
+	rm -f $(TARGET_DIR)/lib/libc.so.0
+	-make -C $(UCLIBC_DIR) clean
+	rm -f $(UCLIBC_DIR)/Config
+
+uclibc-dirclean:
+	rm -rf $(UCLIBC_DIR)

+ 54 - 0
make/user-mode-linux.mk

@@ -0,0 +1,54 @@
+#############################################################
+#
+# Linux kernel targets
+#
+#############################################################
+UMLINUX_DIR=$(BUILD_DIR)/linux
+UMLINUX_SOURCE=linux-2.4.18.tar.bz2
+UMLINUX_SITE=http://ftp.us.kernel.org/pub/linux/kernel/v2.4
+UMLINUX_PATCH_1:=uml-patch-2.4.18-19.bz2
+UMLINUX_PATCH_1_SITE:=http://prdownloads.sourceforge.net/user-mode-linux
+UMLINUX_KCONFIG=$(SOURCE_DIR)/linux-uml.config
+
+$(DL_DIR)/$(UMLINUX_SOURCE):
+	wget -P $(DL_DIR) --passive-ftp $(UMLINUX_SITE)/$(UMLINUX_SOURCE)
+
+$(DL_DIR)/$(UMLINUX_PATCH_1):
+	wget -P $(DL_DIR) --passive-ftp $(UMLINUX_PATCH_1_SITE)/$(UMLINUX_PATCH_1)
+
+user-mode-linux-source: $(DL_DIR)/$(UMLINUX_SOURCE) $(DL_DIR)/$(UMLINUX_PATCH_1)
+
+$(UMLINUX_DIR)/.unpacked: $(DL_DIR)/$(UMLINUX_SOURCE) $(DL_DIR)/$(UMLINUX_PATCH_1)
+	bzcat $(DL_DIR)/$(UMLINUX_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+	touch $(UMLINUX_DIR)/.unpacked
+
+$(UMLINUX_DIR)/.patched: $(UMLINUX_DIR)/.unpacked
+	bzcat $(DL_DIR)/$(UMLINUX_PATCH_1) | patch -d $(UMLINUX_DIR) -p1
+	touch $(UMLINUX_DIR)/.patched
+
+$(UMLINUX_DIR)/.set_arch: $(UMLINUX_DIR)/.patched
+	perl -i -p -e "s/^ARCH :=.*/ARCH:=um/g;" $(UMLINUX_DIR)/Makefile
+	touch $(UMLINUX_DIR)/.set_arch
+
+$(UMLINUX_DIR)/.config: $(UMLINUX_DIR)/.set_arch
+	cp $(UMLINUX_KCONFIG) $(UMLINUX_DIR)/.config
+	make -C $(UMLINUX_DIR) oldconfig
+	touch -c $(UMLINUX_DIR)/.config
+
+$(UMLINUX_DIR)/linux: $(UMLINUX_DIR)/.config
+	make -C $(UMLINUX_DIR) dep
+	make -C $(UMLINUX_DIR) linux
+
+$(LINUX_KERNEL): $(UMLINUX_DIR)/linux
+	cp -fa $(UMLINUX_DIR)/linux $(LINUX_KERNEL)
+
+user-mode-linux: $(LINUX_KERNEL)
+
+# Renamed so it is not cleaned by default on a make clean
+user-mode-linux_clean: clean
+	rm -f $(LINUX_KERNEL)
+	-make -C $(UMLINUX_DIR) clean
+
+user-mode-linux-dirclean:
+	rm -rf $(UMLINUX_DIR)
+

+ 209 - 0
sources/busybox.patch

@@ -0,0 +1,209 @@
+--- busybox/Config.h	6 Apr 2002 04:22:15 -0000	1.116
++++ busybox/Config.h	26 Apr 2002 10:54:28 -0000
+@@ -18,9 +18,9 @@
+ #define BB_CHROOT
+ #define BB_CHVT
+ #define BB_CLEAR
+-//#define BB_CMP
++#define BB_CMP
+ #define BB_CP
+-//#define BB_CPIO
++#define BB_CPIO
+ #define BB_CUT
+ #define BB_DATE
+ //#define BB_DC
+@@ -29,7 +29,7 @@
+ #define BB_DF
+ #define BB_DIRNAME
+ #define BB_DMESG
+-//#define BB_DOS2UNIX
++#define BB_DOS2UNIX
+ //#define BB_DPKG
+ //#define BB_DPKG_DEB
+ //#define BB_DUTMP
+@@ -37,13 +37,13 @@
+ //#define BB_DUMPKMAP
+ #define BB_ECHO
+ #define BB_ENV
+-//#define BB_EXPR
+-//#define BB_FBSET
++#define BB_EXPR
++#define BB_FBSET
+ //#define BB_FDFLUSH
+ #define BB_FIND
+ #define BB_FREE
+-//#define BB_FREERAMDISK
+-//#define BB_FSCK_MINIX
++#define BB_FREERAMDISK
++#define BB_FSCK_MINIX
+ //#define BB_GETOPT
+ #define BB_GREP
+ #define BB_GUNZIP
+@@ -51,12 +51,12 @@
+ #define BB_HALT
+ #define BB_HEAD
+ //#define BB_HOSTID
+-//#define BB_HOSTNAME
++#define BB_HOSTNAME
+ //#define BB_HUSH
+ #define BB_ID
+-//#define BB_IFCONFIG
++#define BB_IFCONFIG
+ #define BB_INIT
+-//#define BB_INSMOD
++#define BB_INSMOD
+ #define BB_KILL
+ #define BB_KILLALL
+ #define BB_KLOGD
+@@ -72,10 +72,10 @@
+ #define BB_LS
+ #define BB_LSMOD
+ //#define BB_MAKEDEVS
+-//#define BB_MD5SUM
++#define BB_MD5SUM
+ #define BB_MKDIR
+ //#define BB_MKFIFO
+-//#define BB_MKFS_MINIX
++#define BB_MKFS_MINIX
+ #define BB_MKNOD
+ #define BB_MKSWAP
+ //#define BB_MKTEMP
+@@ -85,24 +85,24 @@
+ //#define BB_MSH
+ //#define BB_MT
+ #define BB_MV
+-//#define BB_NC
+-//#define BB_NSLOOKUP
++#define BB_NC
++#define BB_NSLOOKUP
+ #define BB_PIDOF
+-//#define BB_PING
+-//#define BB_PIVOT_ROOT
++#define BB_PING
++#define BB_PIVOT_ROOT
+ #define BB_POWEROFF
+ //#define BB_PRINTF
+ #define BB_PS
+ #define BB_PWD
+ //#define BB_RDATE
+-//#define BB_READLINK
++#define BB_READLINK
+ #define BB_REBOOT
+ //#define BB_RENICE
+ #define BB_RESET
+ #define BB_RM
+ #define BB_RMDIR
+-//#define BB_RMMOD
+-//#define BB_ROUTE
++#define BB_RMMOD
++#define BB_ROUTE
+ //#define BB_RPM2CPIO
+ #define BB_SED
+ //#define BB_SETKEYCODES
+@@ -114,29 +114,29 @@
+ #define BB_SYSLOGD
+ #define BB_TAIL
+ #define BB_TAR
+-//#define BB_TEE
+-//#define BB_TEST
+-//#define BB_TELNET
++#define BB_TEE
++#define BB_TEST
++#define BB_TELNET
+ //#define BB_TFTP
+-//#define BB_TIME
++#define BB_TIME
+ #define BB_TOUCH
+-//#define BB_TR
+-//#define BB_TRACEROUTE
++#define BB_TR
++#define BB_TRACEROUTE
+ #define BB_TRUE_FALSE
+ #define BB_TTY
+-//#define BB_UNIX2DOS
++#define BB_UNIX2DOS
+ //#define BB_UUENCODE
+ //#define BB_UUDECODE
+ #define BB_UMOUNT
+ #define BB_UNIQ
+ #define BB_UNAME
+-//#define BB_UPDATE
++#define BB_UPDATE
+ #define BB_UPTIME
+ //#define BB_USLEEP
+-//#define BB_VI
++#define BB_VI
+ //#define BB_WATCHDOG
+ #define BB_WC
+-//#define BB_WGET
++#define BB_WGET
+ #define BB_WHICH
+ #define BB_WHOAMI
+ #define BB_XARGS
+@@ -217,16 +217,16 @@
+ #define BB_FEATURE_USE_INITTAB
+ //
+ //Enable init being called as /linuxrc
+-#define BB_FEATURE_LINUXRC
++//#define BB_FEATURE_LINUXRC
+ //
+ //Have init enable core dumping for child processes (for debugging only) 
+ //#define BB_FEATURE_INIT_COREDUMPS
+ //
+ //Make sure nothing is printed to the console on boot
+-//#define BB_FEATURE_EXTRA_QUIET
++#define BB_FEATURE_EXTRA_QUIET
+ //
+ // enable syslogd -R remotehost
+-#define BB_FEATURE_REMOTE_LOG
++//#define BB_FEATURE_REMOTE_LOG
+ //
+ // enable syslogd -C
+ //#define BB_FEATURE_IPC_SYSLOG
+@@ -308,13 +308,13 @@
+ #define BB_FEATURE_ASH_JOB_CONTROL
+ //
+ //Turn on extra fbset options
+-//#define BB_FEATURE_FBSET_FANCY
++#define BB_FEATURE_FBSET_FANCY
+ //
+ //Turn on fbset readmode support
+-//#define BB_FEATURE_FBSET_READMODE
++#define BB_FEATURE_FBSET_READMODE
+ //
+ // Support insmod/lsmod/rmmod for post 2.1 kernels
+-//#define BB_FEATURE_NEW_MODULE_INTERFACE
++#define BB_FEATURE_NEW_MODULE_INTERFACE
+ //
+ // Support insmod/lsmod/rmmod for pre 2.1 kernels
+ //#define BB_FEATURE_OLD_MODULE_INTERFACE
+@@ -332,16 +332,16 @@
+ //#define BB_FEATURE_MINIX2
+ //
+ // Enable ifconfig status reporting output -- this feature adds 7k.
+-//#define BB_FEATURE_IFCONFIG_STATUS
++#define BB_FEATURE_IFCONFIG_STATUS
+ //
+ // Enable ifconfig slip-specific options "keepalive" and "outfill"
+-//#define BB_FEATURE_IFCONFIG_SLIP
++#define BB_FEATURE_IFCONFIG_SLIP
+ //
+ // Enable ifconfig options "mem_start", "io_addr", and "irq".
+-//#define BB_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
++#define BB_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
+ //
+ // Enable ifconfig option "hw".  Currently works for only with "ether".
+-//#define BB_FEATURE_IFCONFIG_HW
++#define BB_FEATURE_IFCONFIG_HW
+ //
+ // Allows "broadcast +" to set broadcast automatically based on hostaddr
+ // and netmask, at a cost of about 100 bytes of code (i386).
+@@ -379,7 +379,7 @@
+ #define BB_FEATURE_FIND_NEWER
+ //
+ // Support for the -A -B and -C context flags in grep
+-//#define BB_FEATURE_GREP_CONTEXT
++#define BB_FEATURE_GREP_CONTEXT
+ //
+ // Support for the EGREP applet (alias to the grep applet)
+ //#define BB_FEATURE_GREP_EGREP_ALIAS

+ 51 - 39
sources/device_table.txt

@@ -1,6 +1,14 @@
 # device list table
 #<name>		<type>	<mode>	<uid>	<gid>	<major>	<minor>	<start>	<inc>	<count>
 /dev		d	755	0	0	-	-	-	-	-
+/dev/pts	d	755	0	0	-	-	-	-	-
+
+# Fixme -- add support for type 'f'
+#/bin/tinylogin	f	4755	0	0	-	-	-	-	-
+#/etc/shadow	f	600	0	0	-	-	-	-	-
+#/etc/shadow	f	600	0	0	-	-	-	-	-
+
+# Normal stuff
 /dev/mem	c	640	0	0	1	1	0	0	-
 /dev/kmem	c	640	0	0	1	2	0	0	-
 /dev/null	c	640	0	0	1	3	0	0	-
@@ -13,53 +21,57 @@
 /dev/ram	b	640	0	0	1	1	0	0	-
 /dev/ram	b	640	0	0	1	0	0	1	4
 /dev/loop	b	640	0	0	7	0	0	1	2
-/dev/ttyS	c	640	0	0	4	64	0	1	4
-#
-#
+#/dev/ttyS	c	640	0	0	4	64	0	1	4
 #/dev/psaux	c	640	0	0	10	1	0	0	-
 #/dev/rtc	c	640	0	0	10	135	0	0	-
 #/dev/fd	b	640	0	0	2	0	0	0	1
 #
+# Raid device directories
+/dev/cciss	d	755	0	0	-	-	-	-	-
+/dev/ida	d	755	0	0	-	-	-	-	-
+/dev/rd		d	755	0	0	-	-	-	-	-
+#
 # IDE Devices
 /dev/hda	b	640	0	0	3	0	0	0	-
-/dev/hda	b	640	0	0	3	1	1	1	1
+/dev/hda	b	640	0	0	3	1	1	1	15
 /dev/hdb	b	640	0	0	3	64	0	0	-
-/dev/hdb	b	640	0	0	3	65	1	1	1
-#/dev/hdc	b	640	0	0	22	0	0	0	-
-#/dev/hdc	b	640	0	0	22	1	1	1	1
-#/dev/hdd	b	640	0	0	22	64	0	0	-
-#/dev/hdd	b	640	0	0	22	65	1	1	1
-#/dev/hde	b	640	0	0	33	0	0	0	-
-#/dev/hde	b	640	0	0	33	1	1	1	1
-#/dev/hdf	b	640	0	0	33	64	0	0	-
-#/dev/hdf	b	640	0	0	33	65	1	1	1
-#/dev/hdg	b	640	0	0	34	0	0	0	-
-#/dev/hdg	b	640	0	0	34	1	1	1	1
-#/dev/hdh	b	640	0	0	34	64	0	0	-
-#/dev/hdh	b	640	0	0	34	65	1	1	1
+/dev/hdb	b	640	0	0	3	65	1	1	15
+/dev/hdc	b	640	0	0	22	0	0	0	-
+/dev/hdc	b	640	0	0	22	1	1	1	15
+/dev/hdd	b	640	0	0	22	64	0	0	-
+/dev/hdd	b	640	0	0	22	65	1	1	15
+/dev/hde	b	640	0	0	33	0	0	0	-
+/dev/hde	b	640	0	0	33	1	1	1	15
+/dev/hdf	b	640	0	0	33	64	0	0	-
+/dev/hdf	b	640	0	0	33	65	1	1	15
+/dev/hdg	b	640	0	0	34	0	0	0	-
+/dev/hdg	b	640	0	0	34	1	1	1	15
+/dev/hdh	b	640	0	0	34	64	0	0	-
+/dev/hdh	b	640	0	0	34	65	1	1	15
 # SCSI Devices
-#/dev/sda	b	640	0	0	8	0	0	0	-
-#/dev/sda	b	640	0	0	8	1	1	1	1
-#/dev/sdb	b	640	0	0	8	16	0	0	-
-#/dev/sdb	b	640	0	0	8	17	1	1	1
-#/dev/sdc	b	640	0	0	8	32	0	0	-
-#/dev/sdc	b	640	0	0	8	33	1	1	1
-#/dev/sdd	b	640	0	0	8	48	0	0	-
-#/dev/sdd	b	640	0	0	8	49	1	1	1
-#/dev/sde	b	640	0	0	8	64	0	0	-
-#/dev/sde	b	640	0	0	8	65	1	1	1
-#/dev/sdf	b	640	0	0	8	80	0	0	-
-#/dev/sdf	b	640	0	0	8	81	1	1	1
-#/dev/sdg	b	640	0	0	8	96	0	0	-
-#/dev/sdg	b	640	0	0	8	97	1	1	1
-#/dev/sdh	b	640	0	0	8	112	0	0	-
-#/dev/sdh	b	640	0	0	8	113	1	1	1
-#/dev/sg		c	640	0	0	21	0	0	1	1
-#/dev/scd	b	640	0	0	11	0	0	1	1
-#/dev/st		b	640	0	0	9	0	1	1	4
-#/dev/st	b	640	0	0	9	32	1	1	4
-#/dev/st	b	640	0	0	9	64	1	1	4
-#/dev/st	b	640	0	0	9	96	1	1	4
+/dev/sda	b	640	0	0	8	0	0	0	-
+/dev/sda	b	640	0	0	8	1	1	1	15
+/dev/sdb	b	640	0	0	8	16	0	0	-
+/dev/sdb	b	640	0	0	8	17	1	1	15
+/dev/sdc	b	640	0	0	8	32	0	0	-
+/dev/sdc	b	640	0	0	8	33	1	1	15
+/dev/sdd	b	640	0	0	8	48	0	0	-
+/dev/sdd	b	640	0	0	8	49	1	1	15
+/dev/sde	b	640	0	0	8	64	0	0	-
+/dev/sde	b	640	0	0	8	65	1	1	15
+/dev/sdf	b	640	0	0	8	80	0	0	-
+/dev/sdf	b	640	0	0	8	81	1	1	15
+/dev/sdg	b	640	0	0	8	96	0	0	-
+/dev/sdg	b	640	0	0	8	97	1	1	15
+/dev/sdh	b	640	0	0	8	112	0	0	-
+/dev/sdh	b	640	0	0	8	113	1	1	15
+/dev/sg		c	640	0	0	21	0	0	1	15
+/dev/scd	b	640	0	0	11	0	0	1	15
+/dev/st		c	640	0	0	9	0	0	1	8
+/dev/nst	c	640	0	0	9	128	0	1	8
+#/dev/st	c	640	0	0	9	32	1	1	4
+#/dev/st	c	640	0	0	9	64	1	1	4
+#/dev/st	c	640	0	0	9	96	1	1	4
 # All the proprietary cdrom devices in the world
 #/dev/aztcd	b	640	0	0	29	0	0	0	-
 #/dev/bpcd	b	640	0	0	41	0	0	0	-

+ 800 - 0
sources/genext2fs.patch

@@ -0,0 +1,800 @@
+diff -urN genext2fs-1.3.orig/Makefile genext2fs/Makefile
+--- genext2fs-1.3.orig/Makefile	Wed Dec 31 17:00:00 1969
++++ genext2fs/Makefile	Fri Sep 28 15:48:58 2001
+@@ -0,0 +1,19 @@
++CC=gcc
++CFLAGS=-Wall -O2
++
++SRC=genext2fs.c
++OBJS=$(patsubst %.c,%.o, $(SRC))
++
++
++all: genext2fs
++
++genext2fs: $(OBJS)
++	$(CC) $(CFLAGS) -o $@ $(OBJS) -o $@
++
++$(OBJS): %.o : %.c
++	$(CC) $(CFLAGS) -c $< -o $@
++
++$(OBJS): Makefile
++
++clean:
++	rm -f *.o *.a core genext2fs
+diff -urN genext2fs-1.3.orig/dev.txt genext2fs/dev.txt
+--- genext2fs-1.3.orig/dev.txt	Thu Sep 28 09:03:19 2000
++++ genext2fs/dev.txt	Wed Dec 31 17:00:00 1969
+@@ -1,94 +0,0 @@
+-drwx		/dev
+-crw-	10,190	/dev/lcd
+-crw-	10,191	/dev/splc781
+-crw-	4,0	/dev/console
+-crw-	5,64	/dev/cua0
+-crw-	5,65	/dev/cua1
+-crw-	5,66	/dev/cua2
+-crw-	5,70	/dev/cua6
+-crw-	5,71	/dev/cua7
+-crw-	5,72	/dev/cua8
+-crw-	5,73	/dev/cua9
+-crw-	29,0	/dev/fb0
+-crw-	29,32	/dev/fb1
+-crw-	1,2	/dev/kmem
+-crw-	1,1	/dev/mem
+-crw-	1,3	/dev/null
+-crw-	2,2	/dev/ptyp2
+-crw-	2,3	/dev/ptyp3
+-crw-	2,5	/dev/ptyp5
+-crw-	2,4	/dev/ptyp4
+-crw-	10,178	/dev/triokb
+-crw-	2,0	/dev/ptyp0
+-crw-	2,6	/dev/ptyp6
+-crw-	2,7	/dev/ptyp7
+-crw-	2,8	/dev/ptyp8
+-crw-	2,9	/dev/ptyp9
+-crw-	2,10	/dev/ptypa
+-crw-	2,11	/dev/ptypb
+-crw-	2,12	/dev/ptypc
+-crw-	2,13	/dev/ptypd
+-crw-	2,14	/dev/ptype
+-crw-	2,15	/dev/ptypf
+-brw-	1,0	/dev/ram0
+-brw-	1,1	/dev/ram1
+-brw-	1,2	/dev/ram2
+-brw-	1,3	/dev/ram3
+-br--	31,0	/dev/rom0
+-brw-	31,1	/dev/rom1
+-brw-	31,2	/dev/rom2
+-brw-	31,3	/dev/rom3
+-crw-	5,0	/dev/tty
+-crw-	4,0	/dev/tty0
+-crwx	4,1	/dev/tty1
+-crwx	4,2	/dev/tty2
+-crwx	4,3	/dev/tty3
+-crwx	4,4	/dev/tty4
+-crw-	4,5	/dev/tty5
+-crwx	4,6	/dev/tty6
+-crw-	4,7	/dev/tty7
+-crw-	4,8	/dev/tty8
+-crw-	4,9	/dev/tty9
+-crw-	4,64	/dev/ttyS0
+-crw-	4,65	/dev/ttyS1
+-crw-	4,66	/dev/ttyS2
+-crw-	4,67	/dev/ttyS3
+-crw-	4,68	/dev/ttyS4
+-crw-	4,69	/dev/ttyS5
+-crw-	4,70	/dev/ttyS6
+-crw-	4,71	/dev/ttyS7
+-crw-	4,72	/dev/ttyS8
+-crw-	4,73	/dev/ttyS9
+-crw-	3,0	/dev/ttyp0
+-crw-	3,1	/dev/ttyp1
+-crw-	3,2	/dev/ttyp2
+-crw-	3,3	/dev/ttyp3
+-crw-	3,4	/dev/ttyp4
+-crw-	3,5	/dev/ttyp5
+-crw-	3,6	/dev/ttyp6
+-crw-	3,7	/dev/ttyp7
+-crw-	3,8	/dev/ttyp8
+-crw-	3,9	/dev/ttyp9
+-crw-	3,10	/dev/ttypa
+-crw-	3,11	/dev/ttypb
+-crw-	3,12	/dev/ttypc
+-crw-	3,13	/dev/ttypd
+-crw-	3,14	/dev/ttype
+-crw-	3,15	/dev/ttypf
+-crw-	1,5	/dev/zero
+-crwx	10,111	/dev/dtedrv
+-crwx	4,110	/dev/ttyM
+-crw-	77,1	/dev/tssnd
+-crw-	77,2	/dev/tstone
+-crw-	2,1	/dev/ptyp1
+-crwx	10,180	/dev/triohook
+-crw-	90,0	/dev/mtd0
+-brw-	44,0	/dev/ftl0
+-crw-	10,175	/dev/tporta
+-crw-	10,176	/dev/tportb
+-crwx	10,100	/dev/softmodem
+-crwx	10,101	/dev/softmodem_signals
+-crwx	10,181	/dev/triovoice
+-crw-	5,67	/dev/cua3
+-crw-	5,68	/dev/cua4
+-crw-	5,69	/dev/cua5
+diff -urN genext2fs-1.3.orig/device_table.txt genext2fs/device_table.txt
+--- genext2fs-1.3.orig/device_table.txt	Wed Dec 31 17:00:00 1969
++++ genext2fs/device_table.txt	Fri Mar 15 02:14:39 2002
+@@ -0,0 +1,78 @@
++# device list table
++#<name>		<type>	<mode>	<uid>	<gid>	<major>	<minor>	<start>	<inc>	<count>
++/dev		d	755	0	0	-	-	-	-	-
++#
++# Normal stuff
++/dev/mem	c	640	0	0	1	1	0	0	-
++/dev/kmem	c	640	0	0	1	2	0	0	-
++/dev/null	c	640	0	0	1	3	0	0	-
++/dev/zero	c	640	0	0	1	5	0	0	-
++/dev/random	c	640	0	0	1	8	0	0	-
++/dev/urandom	c	640	0	0	1	9	0	0	-
++/dev/tty	c	640	0	0	5	0	0	0	-
++/dev/tty	c	640	0	0	4	0	0	1	6
++/dev/console	c	640	0	0	5	1	0	0	-
++/dev/ram	b	640	0	0	1	1	0	0	-
++/dev/ram	b	640	0	0	1	0	0	1	4
++/dev/loop	b	640	0	0	7	0	0	1	2
++#/dev/ttyS	c	640	0	0	4	64	0	1	4
++#/dev/psaux	c	640	0	0	10	1	0	0	-
++#/dev/rtc	c	640	0	0	10	135	0	0	-
++#/dev/fd	b	640	0	0	2	0	0	0	1
++#
++# Raid device directories
++#/dev/cciss	d	755	0	0	-	-	-	-	-
++#/dev/ida	d	755	0	0	-	-	-	-	-
++#/dev/rd		d	755	0	0	-	-	-	-	-
++#
++# IDE Devices
++/dev/hda	b	640	0	0	3	0	0	0	-
++/dev/hda	b	640	0	0	3	1	1	1	15
++/dev/hdb	b	640	0	0	3	64	0	0	-
++/dev/hdb	b	640	0	0	3	65	1	1	15
++/dev/hdc	b	640	0	0	22	0	0	0	-
++/dev/hdc	b	640	0	0	22	1	1	1	15
++/dev/hdd	b	640	0	0	22	64	0	0	-
++/dev/hdd	b	640	0	0	22	65	1	1	15
++#/dev/hde	b	640	0	0	33	0	0	0	-
++#/dev/hde	b	640	0	0	33	1	1	1	15
++#/dev/hdf	b	640	0	0	33	64	0	0	-
++#/dev/hdf	b	640	0	0	33	65	1	1	15
++#/dev/hdg	b	640	0	0	34	0	0	0	-
++#/dev/hdg	b	640	0	0	34	1	1	1	15
++#/dev/hdh	b	640	0	0	34	64	0	0	-
++#/dev/hdh	b	640	0	0	34	65	1	1	15
++# SCSI Devices
++#/dev/sda	b	640	0	0	8	0	0	0	-
++#/dev/sda	b	640	0	0	8	1	1	1	15
++#/dev/sdb	b	640	0	0	8	16	0	0	-
++#/dev/sdb	b	640	0	0	8	17	1	1	15
++#/dev/sdc	b	640	0	0	8	32	0	0	-
++#/dev/sdc	b	640	0	0	8	33	1	1	15
++#/dev/sdd	b	640	0	0	8	48	0	0	-
++#/dev/sdd	b	640	0	0	8	49	1	1	15
++#/dev/sde	b	640	0	0	8	64	0	0	-
++#/dev/sde	b	640	0	0	8	65	1	1	15
++#/dev/sdf	b	640	0	0	8	80	0	0	-
++#/dev/sdf	b	640	0	0	8	81	1	1	15
++#/dev/sdg	b	640	0	0	8	96	0	0	-
++#/dev/sdg	b	640	0	0	8	97	1	1	15
++#/dev/sdh	b	640	0	0	8	112	0	0	-
++#/dev/sdh	b	640	0	0	8	113	1	1	15
++#/dev/sg		c	640	0	0	21	0	0	1	15
++#/dev/scd	b	640	0	0	11	0	0	1	15
++#/dev/st		c	640	0	0	9	0	0	1	15
++# All the proprietary cdrom devices in the world
++#/dev/aztcd	b	640	0	0	29	0	0	0	-
++#/dev/bpcd	b	640	0	0	41	0	0	0	-
++#/dev/capi20	c	640	0	0	68	0	0	1	2
++#/dev/cdu31a	b	640	0	0	15	0	0	0	-
++#/dev/cdu535	b	640	0	0	24	0	0	0	-
++#/dev/cm206cd	b	640	0	0	32	0	0	0	-
++#/dev/sjcd	b	640	0	0	18	0	0	0	-
++#/dev/sonycd	b	640	0	0	15	0	0	0	-
++#/dev/gscd	b	640	0	0	16	0	0	0	-
++#/dev/sbpcd	b	640	0	0	25	0	0	0	-
++#/dev/sbpcd	b	640	0	0	25	0	0	1	4
++#/dev/mcd	b	640	0	0	23	0	0	0	-
++#/dev/optcd	b	640	0	0	17	0	0	0	-
+diff -urN genext2fs-1.3.orig/genext2fs.c genext2fs/genext2fs.c
+--- genext2fs-1.3.orig/genext2fs.c	Fri Mar 15 02:26:01 2002
++++ genext2fs/genext2fs.c	Fri Mar 15 02:25:46 2002
+@@ -26,6 +26,10 @@
+ // 			Bugfix: getcwd values for Solaris	xavier.gueguen@col.bsf.alcatel.fr
+ // 			Bugfix: ANSI scanf for non-GNU C	xavier.gueguen@col.bsf.alcatel.fr
+ // 	28 Jun 2001	Bugfix: getcwd differs for Solaris/GNU	mike@sowbug.com
++// 	19 Jun 2001	Erik Andersen <andersee@debian.org> added 
++// 	                    the -n (nosquash) option.
++// 	03 Mar 2002	Erik Andersen <andersee@debian.org> added 
++// 	                    mkfs.jffs2 compatible device table support
+ 
+ 
+ // `genext2fs' is a mean to generate an ext2 filesystem
+@@ -33,10 +37,6 @@
+ // the image file to copy files on it. It doesn't even require
+ // you to be the superuser to make device nodes.
+ //
+-// Warning ! `genext2fs' has been designed for embedded
+-// systems. As such, it will generate a filesystem for single-user
+-// usage: all files/directories/etc... will belong to UID/GID 0
+-//
+ // Example usage:
+ //
+ // # genext2fs -b 1440 -d srcdir /dev/fd0
+@@ -45,28 +45,24 @@
+ // a new ext2 filesystem image. You can then mount the floppy as
+ // usual.
+ //
+-// # genext2fs -b 1024 -d builddir -f devices.txt flashdisk.img
++// # genext2fs -b 1024 -d builddir -D device_table.txt flashdisk.img
+ //
+ // This one would build a filesystem from all the files in builddir,
+-// then would read a devices list and make apropriate nodes. The
+-// format for the device list is:
+-//
+-// drwx            /dev
+-// crw-    10,190  /dev/lcd
+-// brw-    1,0     /dev/ram0
+-// 
+-// This device list builds the /dev directory, a character device
+-// node /dev/lcd (major 10, minor 190) and a block device node
+-// /dev/ram0 (major 1, minor 0)
+-
++// then would read a devices table  and make apropriate nodes. The
++// format for the device list is illustrared in the device_table.txt
++// file which in included with the source
+ 
++#define _GNU_SOURCE
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <dirent.h>
+ #include <stdarg.h>
++#include <time.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
++#include <ctype.h>
++#include <fcntl.h>
+ 
+ 
+ 
+@@ -390,6 +386,7 @@
+ #undef utdecl32
+ 
+ char * argv0;
++int nosquash = 0;
+ 
+ // error (un)handling
+ inline void errexit(const char *fmt, ...)
+@@ -663,14 +660,27 @@
+ }
+ 
+ // link an entry (inode #) to a directory
+-void add2dir(filesystem *fs, uint32 dnod, uint32 nod, const char* name)
++void add2dir(filesystem *fs, uint32 dnod, uint32 nod, const char* name, uint32 mode, uid_t uid, gid_t gid, time_t ctime)
+ {
+ 	blockwalker bw;
+ 	uint32 bk;
+ 	uint8 *b;
+ 	directory *d;
+ 	int reclen, nlen;
+-	if((get_nod(fs, dnod)->i_mode & FM_IFMT) != FM_IFDIR)
++	inode *node;
++	inode *pnode;
++
++	if (nosquash == 0) {
++	    /* Ok, squash everything */
++	    uid = 0;
++	    gid = 0;
++	    if(!S_ISDIR(mode))
++		mode &= ~(S_IWGRP | S_IWOTH); 
++	    mode &= ~(S_ISUID | S_ISGID); 
++	}
++	pnode = get_nod(fs, dnod);
++
++	if(!S_ISDIR(pnode->i_mode))
+ 		errexit("can't add '%s' to a non-directory", name);
+ 	if(!*name)
+ 		errexit("bad name '%s' (not meaningful)", name);
+@@ -691,9 +701,16 @@
+ 			if((!d->d_inode) && (d->d_rec_len >= reclen))
+ 			{
+ 				d->d_inode = nod;
+-				get_nod(fs, nod)->i_links_count++;
++				node = get_nod(fs, nod);
++				node->i_links_count++;
+ 				d->d_name_len = nlen;
+ 				strncpy(d->d_name, name, nlen);
++				node->i_mode = mode;
++				node->i_uid = uid;
++				node->i_gid = gid;
++				node->i_atime = ctime;
++				node->i_ctime = ctime;
++				node->i_mtime = ctime;
+ 				return;
+ 			}
+ 			// if entry with enough room (last one?), shrink it & use it
+@@ -705,9 +722,16 @@
+ 				d = (directory*) (((int8*)d) + d->d_rec_len);
+ 				d->d_rec_len = reclen;
+ 				d->d_inode = nod;
+-				get_nod(fs, nod)->i_links_count++;
++				node = get_nod(fs, nod);
++				node->i_links_count++;
+ 				d->d_name_len = nlen;
+ 				strncpy(d->d_name, name, nlen);
++				node->i_mode = mode;
++				node->i_uid = uid;
++				node->i_gid = gid;
++				node->i_atime = ctime;
++				node->i_ctime = ctime;
++				node->i_mtime = ctime;
+ 				return;
+ 			}
+ 		}
+@@ -716,10 +740,17 @@
+ 	b = get_workblk();
+ 	d = (directory*)b;
+ 	d->d_inode = nod;
+-	get_nod(fs, nod)->i_links_count++;
++	node = get_nod(fs, nod);
++	node->i_links_count++;
+ 	d->d_rec_len = BLOCKSIZE;
+ 	d->d_name_len = nlen;
+ 	strncpy(d->d_name, name, nlen);
++	node->i_mode = mode;
++	node->i_uid = uid;
++	node->i_gid = gid;
++	node->i_atime = ctime;
++	node->i_ctime = ctime;
++	node->i_mtime = ctime;
+ 	extend_blk(fs, dnod, b, 1);
+ 	get_nod(fs, dnod)->i_size += BLOCKSIZE;
+ 	free_workblk(b);
+@@ -770,27 +801,29 @@
+ }
+ 
+ // make a full-fledged directory (i.e. with "." & "..")
+-uint32 mkdir_fs(filesystem *fs, uint32 parent_nod, const char *name, uint32 mode)
++uint32 mkdir_fs(filesystem *fs, uint32 parent_nod, const char *name, uint32 mode, uid_t uid, gid_t gid, time_t ctime)
+ {
+ 	uint32 nod;
+ 	if((nod = find_dir(fs, parent_nod, name)))
+ 		return nod;
+        	nod = alloc_nod(fs);
+-	get_nod(fs, nod)->i_mode = FM_IFDIR | mode;
+-	add2dir(fs, parent_nod, nod, name);
+-	add2dir(fs, nod, nod, ".");
+-	add2dir(fs, nod, parent_nod, "..");
++	if (!(mode & FM_IFDIR))
++	    mode |= FM_IFDIR;
++	add2dir(fs, parent_nod, nod, name, mode, uid, gid, ctime);
++	add2dir(fs, nod, nod, ".", mode, uid, gid, ctime);
++	add2dir(fs, nod, parent_nod, "..", mode, uid, gid, ctime);
+ 	fs->gd.bg_used_dirs_count++;
+ 	return nod;
+ }
+ 
+ // make a symlink
+-uint32 mklink_fs(filesystem *fs, uint32 parent_nod, const char *name, size_t size, uint8 * b)
++uint32 mklink_fs(filesystem *fs, uint32 parent_nod, const char *name, size_t size, uint8 * b, uid_t uid, gid_t gid, time_t ctime)
+ {
++	uint32 mode;
+ 	uint32 nod = alloc_nod(fs);
+-	get_nod(fs, nod)->i_mode = FM_IFLNK | FM_IRWXU | FM_IRWXG | FM_IRWXO;
++	mode = FM_IFLNK | FM_IRWXU | FM_IRWXG | FM_IRWXO; 
+ 	get_nod(fs, nod)->i_size = size;
+-	add2dir(fs, parent_nod, nod, name);
++	add2dir(fs, parent_nod, nod, name, mode, uid, gid, ctime);
+ 	if(size <= 4 * (EXT2_TIND_BLOCK+1))
+ 	{
+ 		strncpy((char*)get_nod(fs, nod)->i_block, (char*)b, size);
+@@ -801,13 +834,13 @@
+ }
+ 
+ // make a file from a FILE*
+-uint32 mkfile_fs(filesystem *fs, uint32 parent_nod, const char *name, uint32 mode, size_t size, FILE *f)
++uint32 mkfile_fs(filesystem *fs, uint32 parent_nod, const char *name, uint32 mode, size_t size, FILE *f, uid_t uid, gid_t gid, time_t ctime)
+ {
+ 	uint8 * b;
+ 	uint32 nod = alloc_nod(fs);
+-	get_nod(fs, nod)->i_mode = FM_IFREG | mode;
++	mode |= FM_IFREG;
+ 	get_nod(fs, nod)->i_size = size;
+-	add2dir(fs, parent_nod, nod, name);
++	add2dir(fs, parent_nod, nod, name, mode, uid, gid, ctime);
+ 	if(!(b = (uint8*)malloc(rndup(size, BLOCKSIZE))))
+ 		errexit("not enough mem to read file '%s'", name);
+ 	memset(b, 0,rndup(size, BLOCKSIZE));
+@@ -824,6 +857,8 @@
+ uint32 get_mode(struct stat *st)
+ {
+ 	uint32 mode = 0;
++	if (nosquash == 1)
++	    return st->st_mode;
+ 	if(st->st_mode & S_IRUSR)
+ 		mode |= FM_IRUSR | FM_IRGRP | FM_IROTH;
+ 	if(st->st_mode & S_IWUSR)
+@@ -833,19 +868,6 @@
+ 	return mode;
+ }
+ 
+-// retrieves a mode info from a string
+-uint32 get_modestr(const char *p)
+-{
+-	uint32 mode = 0;
+-	if(p[0] == 'r')
+-		mode |= FM_IRUSR | FM_IRGRP | FM_IROTH;
+-	if(p[1] == 'w')
+-		mode |= FM_IWUSR | FM_IWGRP | FM_IWOTH;
+-	if(p[2] == 'x' || p[2] == 's')
+-		mode |= FM_IXUSR | FM_IXGRP | FM_IXOTH;
+-	return mode;
+-}
+-
+ // basename of a path - free me
+ char * basename(const char * fullpath)
+ {
+@@ -864,66 +886,6 @@
+ 	return n;
+ }
+ 
+-// adds entries to the filesystem from a text file
+-void add2fs_from_file(filesystem *fs, uint32 this_nod, FILE * fh)
+-{
+-	uint32 mode;
+-	uint32 nod, nod2;
+-	char cmod[11], *path, *name, *dir;
+-	int major, minor;
+-	while(fscanf(fh, "%10s", cmod))
+-	{
+-		if(feof(fh))
+-			break;
+-		mode = get_modestr(cmod + 1);
+-		switch(*cmod)
+-		{
+-			case 'd':
+-				fscanf(fh, "%" SCANF_PREFIX "s\n", SCANF_STRING(path));
+-				break;
+-			case 'c':
+-				mode |= FM_IFCHR;
+-				fscanf(fh, "%i, %i %" SCANF_PREFIX "s\n", &major, &minor, SCANF_STRING(path));
+-				break;
+-			case 'b':
+-				mode |= FM_IFBLK;
+-				fscanf(fh, "%i, %i %" SCANF_PREFIX "s\n", &major, &minor, SCANF_STRING(path));
+-				break;
+-			case '#':
+-				while(fgetc(fh) != '\n');
+-				continue;
+-			default:
+-				errexit("malformed text input file");
+-		}
+-		name = basename(path);
+-		dir = dirname(path);
+-		free(path);
+-		if(!(nod = find_path(fs, this_nod, dir)))
+-			errexit("can't find directory '%s' to create '%s''", dir, name);
+-		free(dir);
+-		if((!strcmp(name, ".")) || (!strcmp(name, "..")))
+-		{
+-			free(name);
+-			continue;
+-		}
+-		switch(*cmod)
+-		{
+-			case 'd':
+-				mkdir_fs(fs, nod, name, mode);
+-				break;
+-			case 'c':
+-			case 'b':
+-				nod2 = alloc_nod(fs);
+-				get_nod(fs, nod2)->i_mode = mode;
+-				((uint8*)get_nod(fs, nod2)->i_block)[0] = minor;
+-				((uint8*)get_nod(fs, nod2)->i_block)[1] = major;
+-				add2dir(fs, nod, nod2, name);
+-				break;
+-		}
+-		free(name);
+-	}
+-}
+-
+ // adds a tree of entries to the filesystem from current dir
+ void add2fs_from_dir(filesystem *fs, uint32 this_nod)
+ {
+@@ -948,24 +910,24 @@
+ 				get_nod(fs, nod)->i_mode = (((st.st_mode & S_IFMT) == S_IFCHR) ? FM_IFCHR : FM_IFBLK) | get_mode(&st);
+ 				((uint8*)get_nod(fs, nod)->i_block)[0] = (st.st_rdev & 0xff);
+ 				((uint8*)get_nod(fs, nod)->i_block)[1] = (st.st_rdev >> 8);
+-				add2dir(fs, this_nod, nod, dent->d_name);
++				add2dir(fs, this_nod, nod, dent->d_name, st.st_mode, st.st_uid, st.st_gid, st.st_ctime);
+ 				break;
+ 			case S_IFLNK:
+ 				if(!(b = (uint8*)malloc(rndup(st.st_size, BLOCKSIZE))))
+ 					errexit("out of memory");
+ 				if(readlink(dent->d_name, (char*)b, st.st_size) < 0)
+ 					pexit(dent->d_name);
+-				mklink_fs(fs, this_nod, dent->d_name, st.st_size, b);
++				mklink_fs(fs, this_nod, dent->d_name, st.st_size, b, st.st_uid, st.st_gid, st.st_ctime);
+ 				free(b);
+ 				break;
+ 			case S_IFREG:
+ 				if(!(fh = fopen(dent->d_name, "r")))
+ 					pexit(dent->d_name);
+-				mkfile_fs(fs, this_nod, dent->d_name, get_mode(&st), st.st_size, fh);
++				mkfile_fs(fs, this_nod, dent->d_name, st.st_mode, st.st_size, fh, st.st_uid, st.st_gid, st.st_ctime);
+ 				fclose(fh);
+ 				break;
+ 			case S_IFDIR:
+-				nod = mkdir_fs(fs, this_nod, dent->d_name, get_mode(&st));
++				nod = mkdir_fs(fs, this_nod, dent->d_name, st.st_mode, st.st_uid, st.st_gid, st.st_ctime);
+ 				if(chdir(dent->d_name) < 0)
+ 					pexit(dent->d_name);
+ 				add2fs_from_dir(fs, nod);
+@@ -983,7 +945,7 @@
+ {
+ 	int i;
+ 	int nblk = nod->i_blocks / INOBLK;
+-	if((nod->i_size && !nblk) || (nod->i_mode & (FM_IFBLK | FM_IFCHR)))
++	if(nod->i_size && !nblk)
+ 		for(i = 0; i <= EXT2_TIND_BLOCK; i++)
+ 			nod->i_block[i] = swab32(nod->i_block[i]);
+ 	if(nblk <= EXT2_IND_BLOCK)
+@@ -1004,7 +966,7 @@
+ {
+ 	int i;
+ 	int nblk = nod->i_blocks / INOBLK;
+-	if((nod->i_size && !nblk) || (nod->i_mode & (FM_IFBLK | FM_IFCHR)))
++	if(nod->i_size && !nblk)
+ 		for(i = 0; i <= EXT2_TIND_BLOCK; i++)
+ 			nod->i_block[i] = swab32(nod->i_block[i]);
+ 	if(nblk <= EXT2_IND_BLOCK)
+@@ -1147,7 +1109,7 @@
+ 	// make lost+found directory and reserve blocks
+ 	if(fs->sb.s_r_blocks_count)
+ 	{
+-		nod = mkdir_fs(fs, EXT2_ROOT_INO, "lost+found", FM_IRWXU | FM_IRWXG | FM_IRWXO);
++		nod = mkdir_fs(fs, EXT2_ROOT_INO, "lost+found", S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, 0, 0, time(NULL));
+ 		memset(b, 0, BLOCKSIZE);
+ 		((directory*)b)->d_rec_len = BLOCKSIZE;
+ 		for(i = 1; i < fs->sb.s_r_blocks_count; i++)
+@@ -1472,6 +1434,150 @@
+ 		swap_badfs(fs);
+ }
+ 
++char *simple_ltoa(unsigned long i)
++{
++    /* 21 digits plus null terminator, good for 64-bit or smaller ints */
++    static char local[21];
++    char *p = local;
++    *p-- = '\0';
++    do {
++	*p-- = '0' + i % 10;
++	i /= 10;
++    } while (i > 0);
++    return p + 1;
++}
++
++//# device list table
++//# <path>	<type> <mode>	<uid>	<gid>	<major>	<minor>	<start>	<inc>	<count>
++///dev/mem	c	640	0	0	1	1	0	0	-
++static int interpret_table_entry(filesystem *fs, char *line)
++{
++	int status;
++	char type, *path;
++	uint32 nod, nod2;
++	char *name, *dir;
++	unsigned long uid=0, gid=0, mode=755;
++	unsigned long major=0, minor=0, start=0, increment=1, count=0;
++
++	status = sscanf(line, "%" SCANF_PREFIX "s %c %lo %lu %lu %lu %lu %lu %lu %lu", 
++		    SCANF_STRING(path), &type, &mode, &uid, &gid, &major, &minor, 
++		    &start, &increment, &count); 
++	if (status<0)
++		return status;
++	
++	name = basename(path);
++	dir = dirname(path);
++	free(path);
++	if(!(nod = find_path(fs, EXT2_ROOT_INO, dir)))
++		errexit("can't find directory '%s' to create '%s''", dir, name);
++	free(dir);
++	if((!strcmp(name, ".")) || (!strcmp(name, "..")))
++	{
++		free(name);
++		return 1;
++	}
++	
++	switch(type)
++	{
++		case 'd':
++			mkdir_fs(fs, nod, name, mode|FM_IFDIR, uid, gid, time(NULL));
++			break;
++		case 'c':
++		case 'b':
++			mode|= (type=='c')? FM_IFCHR : FM_IFBLK;
++			if (count > 0) {
++			    int i, last;
++			    char buf[80];
++			    last = start+(count*increment);
++			    for(i = start; i<last; i++) {
++				nod2 = alloc_nod(fs);
++				((uint8*)get_nod(fs, nod2)->i_block)[0] = minor+(i*increment-start);
++				((uint8*)get_nod(fs, nod2)->i_block)[1] = major;
++				strncpy(buf, name, sizeof(buf)-1);
++				strncat(buf, simple_ltoa(i*increment), sizeof(buf)-1);
++				buf[79]='\0';
++				//fprintf(stderr, "start=%ld, i=%d adding '%s'(%ld, %ld)\n", start, i, buf, major, minor+(i*increment-start));
++				add2dir(fs, nod, nod2, buf, mode, uid, gid, time(NULL));
++			    }
++			}
++			else {
++			    nod2 = alloc_nod(fs);
++			    ((uint8*)get_nod(fs, nod2)->i_block)[0] = minor;
++			    ((uint8*)get_nod(fs, nod2)->i_block)[1] = major;
++			    add2dir(fs, nod, nod2, name, mode, uid, gid, time(NULL));
++			}
++			break;
++		default:
++			fprintf(stderr,"%s: Type '%c' is not supported\n", path, type);
++
++	}
++	free(name);
++	return 0;
++}
++
++int parse_device_table(filesystem *fs, char *filename)
++{
++	FILE *file;
++	char *line;
++	int status = 0;
++	size_t length = 0;
++	struct stat statbuf;
++
++	if (!filename) {
++		fprintf(stderr, "No filename specified.\n");
++		return(1);
++	}
++	if (!(file = fopen(filename, "r"))) {
++		perror(filename);
++		return(1);
++	}
++	if (fstat(fileno(file), &statbuf) < 0) {
++		perror(filename);
++		return(1);
++	}
++
++	if (statbuf.st_size < 10) {
++		fprintf(stderr, "%s: not a proper device table file\n", filename);
++		return(1);
++	}
++
++	/* Looks ok so far.  The general plan now is to read in one
++	 * line at a time, check for leading comment delimiters ('#'),
++	 * then try and parse the line as a device table.  If we fail
++	 * to parse things, try and help the poor fool to fix their
++	 * device table with a useful error msg... */
++	line = NULL;
++	while (getline(&line, &length, file) != -1) {
++		/* First trim off any whitespace */
++		int len = strlen(line);
++		/* trim trailing whitespace */
++		while ( len > 0 && isspace(line[len-1]))
++		    line[--len]='\0';
++		/* trim leading whitespace */
++		memmove(line, &line[strspn(line, " \n\r\t\v")], len);
++
++		/* If this is NOT a comment line, try to interpret it */
++		if (length && *line!='#') {
++			if (interpret_table_entry(fs, line))
++				status=1;
++		}
++
++		free(line);
++		line = NULL;
++	}
++
++
++	return status;
++}
++
++/*
++Local Variables:
++c-file-style: "linux"
++c-basic-offset: 4
++tab-width: 4
++End:
++*/
++
+ void showhelp(void)
+ {
+ 	fprintf(stderr, "Usage: %s [options] image\n"
+@@ -1485,6 +1591,8 @@
+ 	"  -g path                 Generate a block map file for this path\n"
+ 	"  -e value                Fill unallocated blocks with value\n"
+ 	"  -z                      Make files with holes\n"
++	"  -n                      Do not squash permissions and owners.  By default everythig is\n"
++	"                              owned by root.  This perserves file permissions and owners.\n"
+ 	"  -v                      Print resulting filesystem structure\n"
+ 	"  -h                      Show this help\n\n"
+ 	"Example of spec file:\n"
+@@ -1520,22 +1628,21 @@
+ 	int bigendian = !*(char*)&endian;
+ 	filesystem *fs;
+ 	int i;
+-	int c;
++	char c;
++	char * devtable = NULL;
+ 
+ 	argv0 = argv[0];
+-	if(argc <= 1)
+-	{
+-		showhelp();
+-		exit(1);
+-	}
+-	while((c = getopt(argc, argv, "x:f:d:b:i:r:g:e:zvh")) != EOF)
++	while((c = getopt(argc, argv, "D:x:f:d:b:i:r:g:e:zvhn")) != EOF)
+ 		switch(c)
+ 		{
+ 			case 'x':
+ 				fsin = optarg;
+ 				break;
+-			case 'd':
++			case 'D':
+ 			case 'f':
++				devtable = optarg;
++				break;
++			case 'd':
+ 				dopt[didx++] = optarg;
+ 				break;
+ 			case 'b':
+@@ -1556,6 +1663,9 @@
+ 			case 'z':
+ 				holes = 1;
+ 				break;
++			case 'n':
++				nosquash = 1;
++				break;
+ 			case 'v':
+ 				verbose = 1;
+ 				break;
+@@ -1595,17 +1705,10 @@
+ 	for(i = 0; i < didx; i++)
+ 	{
+ 		struct stat st;
+-		FILE *fh;
+ 		char *pdir;
+ 		stat(dopt[i], &st);
+ 		switch(st.st_mode & S_IFMT)
+ 		{
+-			case S_IFREG:
+-				if(!(fh = fopen(dopt[i], "r")))
+-					pexit(dopt[i]);
+-				add2fs_from_file(fs, EXT2_ROOT_INO, fh);
+-				fclose(fh);
+-				break;
+ 			case S_IFDIR:
+ 				if(!(pdir = getcwd(0, GETCWD_SIZE)))
+ 					pexit(dopt[i]);
+@@ -1617,13 +1720,15 @@
+ 				free(pdir);
+ 				break;
+ 			default:
+-				errexit("%s in neither a file nor a directory", dopt[i]);
++				errexit("%s must be a directory", dopt[i]);
+ 		}
+ 	}
+ 	if(emptyval)
+ 		for(i = 1; i < fs->sb.s_blocks_count; i++)
+ 			if(!allocated(fs->bbm, i))
+ 				memset(get_blk(fs, i), emptyval, BLOCKSIZE);
++	if(devtable)
++	    parse_device_table(fs, devtable);
+ 	if(verbose)
+ 		print_fs(fs);
+ 	for(i = 0; i < gidx; i++)

+ 32 - 0
sources/linux-uml.config

@@ -31,6 +31,11 @@ CONFIG_HOSTFS=y
 CONFIG_MCONSOLE=y
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_HOST_2G_2G is not set
+# CONFIG_UML_SMP is not set
+# CONFIG_SMP is not set
+CONFIG_CON_ZERO_CHAN="fd:0,fd:1"
+CONFIG_CON_CHAN="xterm"
+CONFIG_SSL_CHAN="pty"
 
 #
 # Loadable module support
@@ -49,6 +54,15 @@ CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
 # CONFIG_MMAPPER is not set
+# CONFIG_UML_SOUND is not set
+# CONFIG_SOUND is not set
+# CONFIG_HOSTAUDIO is not set
+CONFIG_FD_CHAN=y
+CONFIG_NULL_CHAN=y
+CONFIG_PORT_CHAN=y
+CONFIG_PTY_CHAN=y
+CONFIG_TTY_CHAN=y
+CONFIG_XTERM_CHAN=y
 
 #
 # Networking options
@@ -283,6 +297,7 @@ CONFIG_NLS_CODEPAGE_932=m
 CONFIG_NLS_CODEPAGE_949=m
 CONFIG_NLS_CODEPAGE_874=m
 CONFIG_NLS_ISO8859_8=m
+# CONFIG_NLS_CODEPAGE_1250 is not set
 CONFIG_NLS_CODEPAGE_1251=m
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_ISO8859_2=m
@@ -299,6 +314,23 @@ CONFIG_NLS_KOI8_R=m
 CONFIG_NLS_KOI8_U=m
 CONFIG_NLS_UTF8=m
 
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
 #
 # Kernel hacking
 #

BIN
sources/skel.tar


BIN
sources/skel.tar.gz


+ 7 - 15
sources/target_skeleton/etc/group

@@ -1,18 +1,10 @@
 root:x:0:
-wheel:x:10:
-bin:x:1:bin,daemon
-daemon:x:2:bin,daemon
-sys:x:3:bin,adm
-adm:x:4:adm,daemon
+daemon:x:1:
+bin:x:2:
+sys:x:3:
+adm:x:4:
 tty:x:5:
 disk:x:6:
-lp:x:7:daemon,lp
-mem:x:8:
-kmem:x:9:
-operator:x:11:
-uucp:x:14:uucp
-dip:x:40:
-utmp:x:45:
-www:x:63:
-nobody:x:65534:
-users:x:100:
+utmp:x:43:
+staff:x:50:
+default:x:1000:

+ 0 - 51
sources/target_skeleton/etc/init.d/S05ramdisk1

@@ -1,51 +0,0 @@
-#!/bin/sh
-
-# Build a ramdisk to overlay on /dev so we can scribble on it
-# all we want without needing rw access to the underlying filesystem
-
-SIZE=140
-INODES=1000
-
-echo -n "Building device ramdisk: "
-
-/bin/umount /dev/ram1 >/dev/null 2>&1
-
-/bin/dd if=/dev/zero of=/dev/ram1 bs=1k count=$SIZE >/dev/null 2>&1
-if [ $? != 0 ] ; then
-	echo "failed."
-	exit 1;
-fi
-
-/sbin/mkfs.minix -n30 -i$INODES /dev/ram1 $SIZE >/dev/null 2>&1
-if [ $? != 0 ] ; then
-	echo "failed."
-	exit 1;
-fi
-
-/bin/mount /dev/ram1 /mnt -t minix -o rw >/dev/null 2>&1
-if [ $? != 0 ] ; then
-	echo "failed."
-	exit 1;
-fi
-
-/bin/cp -a /dev/* /mnt >/dev/null 2>&1
-if [ $? != 0 ] ; then
-	echo "failed."
-	exit 1;
-fi
-
-/bin/umount /mnt >/dev/null 2>&1
-if [ $? != 0 ] ; then
-	echo "failed."
-	exit 1;
-fi
-
-/bin/mount /dev/ram1 /dev -t minix -o rw >/dev/null 2>&1
-if [ $? != 0 ] ; then
-	echo "failed."
-	exit 1;
-else
-	echo "done." 
-fi
-
-exit 0

+ 0 - 8
sources/target_skeleton/etc/init.d/S20syslogd

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-echo -n "Starting system log daemon: "
-# start syslogging
-/sbin/syslogd -m 0
-echo "ok"
-
-

+ 0 - 3
sources/target_skeleton/etc/init.d/S50hostname

@@ -1,3 +0,0 @@
-#!/bin/sh
-
-hostname tester.dev.null

+ 7 - 0
sources/target_skeleton/etc/init.d/S50networking

@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# start lo all the time
+ifconfig lo 127.0.0.1 up
+route add -net 127.0.0.0 netmask 255.0.0.0 lo
+
+hostname dev.null

+ 8 - 6
sources/target_skeleton/etc/inittab

@@ -16,15 +16,17 @@
 # main rc script
 ::sysinit:/etc/init.d/rcS
 
-# main setup program
-::respawn:-/bin/sh
+# Set up a couple of getty's
+tty1::respawn:/sbin/getty 38400 tty1
+tty2::respawn:/sbin/getty 38400 tty2
 
-# convenience shell
-tty2::askfirst:-/bin/sh
+# Put a getty on the serial port
+#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
 
-# set up stuff for logging
-null::sysinit:/bin/dmesg > /dev/tty4
+# Logging junk
+tty2::once:/bin/touch /var/log/messages
 tty3::respawn:/usr/bin/tail -f /var/log/messages
+tty4::once:/bin/dmesg
 tty4::respawn:/usr/bin/tail -f /proc/kmsg
 
 # Stuff to do for the 3-finger salute

+ 11 - 10
sources/target_skeleton/etc/passwd

@@ -1,11 +1,12 @@
-root:x:0:0:root:/root:/bin/ash
-bin:x:1:1:bin:/bin:/bin/sh
-daemon:x:2:2:daemon:/usr/sbin:/bin/sh
-adm:x:3:4:adm:/adm:/bin/sh
-lp:x:4:7:lp:/var/spool/lpd:/bin/sh
-sync:x:5:0:sync:/bin:/bin/sync
-shutdown:x:6:11:shutdown:/sbin:/sbin/shutdown
-halt:x:7:0:halt:/sbin:/sbin/halt
-uucp:x:10:14:uucp:/var/spool/uucp:/bin/sh
-operator:x:11:0:Operator:/var:/bin/sh
+root:x:0:0:root:/root:/bin/sh
+daemon:x:1:1:daemon:/usr/sbin:/bin/sh
+bin:x:2:2:bin:/bin:/bin/sh
+sys:x:3:3:sys:/dev:/bin/sh
+sync:x:4:100:sync:/bin:/bin/sync
+mail:x:8:8:mail:/var/spool/mail:/bin/sh
+proxy:x:13:13:proxy:/bin:/bin/sh
+www-data:x:33:33:www-data:/var/www:/bin/sh
+backup:x:34:34:backup:/var/backups:/bin/sh
+operator:x:37:37:Operator:/var:/bin/sh
 nobody:x:65534:65534:nobody:/home:/bin/sh
+default:x:1000:1000:Default non-root user:/home/default:/bin/sh

+ 1 - 0
sources/target_skeleton/etc/profile

@@ -1,3 +1,4 @@
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 alias ll='ls -l'
 
 echo " "

+ 27 - 17
sources/target_skeleton/etc/protocols

@@ -1,21 +1,31 @@
-# protocols     This file describes the various protocols that are
-#               available from the TCP/IP subsystem.  It should be
-#               consulted instead of using the numbers in the ARPA
-#               include files, or, worse, just guessing them.
+# /etc/protocols:
+# $Id: protocols,v 1.2 2002/04/26 11:45:52 andersen Exp $
 #
-# Version:      @(#)/etc/protocols      2.00    04/30/93
+# Internet (IP) protocols
 #
-# Author:       Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+#	from: @(#)protocols	5.1 (Berkeley) 4/17/89
 #
+# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
 
-ip      0       IP      # internet protocol, pseudo protocol number
-icmp    1       ICMP    # internet control message protocol
-igmp    2       IGMP    # internet group multicast protocol
-ggp     3       GGP     # gateway-gateway protocol
-tcp     6       TCP     # transmission control protocol
-pup     12      PUP     # PARC universal packet protocol
-udp     17      UDP     # user datagram protocol
-idp     22      IDP     # WhatsThis?
-raw     255     RAW     # RAW IP interface
-
-# End of protocols.
+ip	0	IP		# internet protocol, pseudo protocol number
+icmp	1	ICMP		# internet control message protocol
+igmp	2	IGMP		# Internet Group Management
+ggp	3	GGP		# gateway-gateway protocol
+ipencap	4	IP-ENCAP	# IP encapsulated in IP (officially ``IP'')
+st	5	ST		# ST datagram mode
+tcp	6	TCP		# transmission control protocol
+egp	8	EGP		# exterior gateway protocol
+pup	12	PUP		# PARC universal packet protocol
+udp	17	UDP		# user datagram protocol
+hmp	20	HMP		# host monitoring protocol
+xns-idp	22	XNS-IDP		# Xerox NS IDP
+rdp	27	RDP		# "reliable datagram" protocol
+iso-tp4	29	ISO-TP4		# ISO Transport Protocol class 4
+xtp	36	XTP		# Xpress Tranfer Protocol
+ddp	37	DDP		# Datagram Delivery Protocol
+idpr-cmtp	39	IDPR-CMTP	# IDPR Control Message Transport
+rspf	73	RSPF		#Radio Shortest Path First.
+vmtp	81	VMTP		# Versatile Message Transport
+ospf	89	OSPFIGP		# Open Shortest Path First IGP
+ipip	94	IPIP		# Yet Another IP encapsulation
+encap	98	ENCAP		# Yet Another IP encapsulation

+ 260 - 156
sources/target_skeleton/etc/services

@@ -1,147 +1,172 @@
-#       $NetBSD: services,v 1.18 1996/03/26 00:07:58 mrg Exp $
+# /etc/services:
+# $Id: services,v 1.2 2002/04/26 11:45:52 andersen Exp $
 #
 # Network services, Internet style
 #
 # Note that it is presently the policy of IANA to assign a single well-known
 # port number for both TCP and UDP; hence, most entries here have two entries
 # even if the protocol doesn't support UDP operations.
-# Updated from RFC 1340, ``Assigned Numbers'' (July 1992).  Not all ports
+# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
 # are included, only the more common ones.
-#
-#       from: @(#)services      5.8 (Berkeley) 5/9/91
-#
-tcpmux          1/tcp           # TCP port service multiplexer
-echo            7/tcp
-echo            7/udp
-discard         9/tcp           sink null
-discard         9/udp           sink null
-systat          11/tcp          users
-daytime         13/tcp
-daytime         13/udp
-netstat         15/tcp
-qotd            17/tcp          quote
-msp             18/tcp          # message send protocol
-msp             18/udp          # message send protocol
-chargen         19/tcp          ttytst source
-chargen         19/udp          ttytst source
-ftp-data        20/tcp          # default ftp data port
-ftp             21/tcp
-ssh             22/tcp
-ssh             22/udp
-telnet          23/tcp
+
+tcpmux		1/tcp				# TCP port service multiplexer
+echo		7/tcp
+echo		7/udp
+discard		9/tcp		sink null
+discard		9/udp		sink null
+systat		11/tcp		users
+daytime		13/tcp
+daytime		13/udp
+netstat		15/tcp
+qotd		17/tcp		quote
+msp		18/tcp				# message send protocol
+msp		18/udp				# message send protocol
+chargen		19/tcp		ttytst source
+chargen		19/udp		ttytst source
+ftp-data	20/tcp
+ftp		21/tcp
+fsp		21/udp		fspd
+ssh		22/tcp				# SSH Remote Login Protocol
+ssh		22/udp				# SSH Remote Login Protocol
+telnet		23/tcp
 # 24 - private
-smtp            25/tcp          mail
+smtp		25/tcp		mail
 # 26 - unassigned
-time            37/tcp          timserver
-time            37/udp          timserver
-rlp             39/udp          resource        # resource location
-nameserver      42/tcp          name            # IEN 116
-whois           43/tcp          nicname
-domain          53/tcp          nameserver      # name-domain server
-domain          53/udp          nameserver
-mtp             57/tcp                          # deprecated
-bootps          67/tcp          # BOOTP server
-bootps          67/udp
-bootpc          68/tcp          # BOOTP client
-bootpc          68/udp
-tftp            69/udp
-gopher          70/tcp          # Internet Gopher
-gopher          70/udp
-rje             77/tcp          netrjs
-finger          79/tcp
-www             80/tcp          http    # WorldWideWeb HTTP
-www             80/udp                  # HyperText Transfer Protocol
-link            87/tcp          ttylink
-kerberos        88/tcp          krb5    # Kerberos v5
-kerberos        88/udp
-supdup          95/tcp
+time		37/tcp		timserver
+time		37/udp		timserver
+rlp		39/udp		resource	# resource location
+nameserver	42/tcp		name		# IEN 116
+whois		43/tcp		nicname
+re-mail-ck	50/tcp				# Remote Mail Checking Protocol
+re-mail-ck	50/udp				# Remote Mail Checking Protocol
+domain		53/tcp		nameserver	# name-domain server
+domain		53/udp		nameserver
+mtp		57/tcp				# deprecated
+bootps		67/tcp				# BOOTP server
+bootps		67/udp
+bootpc		68/tcp				# BOOTP client
+bootpc		68/udp
+tftp		69/udp
+gopher		70/tcp				# Internet Gopher
+gopher		70/udp
+rje		77/tcp		netrjs
+finger		79/tcp
+www		80/tcp		http		# WorldWideWeb HTTP
+www		80/udp				# HyperText Transfer Protocol
+link		87/tcp		ttylink
+kerberos	88/tcp		kerberos5 krb5	# Kerberos v5
+kerberos	88/udp		kerberos5 krb5	# Kerberos v5
+supdup		95/tcp
 # 100 - reserved
-hostnames       101/tcp         hostname        # usually from sri-nic
-iso-tsap        102/tcp         tsap            # part of ISODE.
-csnet-ns        105/tcp         cso-ns  # also used by CSO name server
-csnet-ns        105/udp         cso-ns
-rtelnet         107/tcp         # Remote Telnet
-rtelnet         107/udp
-pop2            109/tcp         pop-2 postoffice        # POP version 2
-pop2            109/udp
-pop3            110/tcp         pop-3 # POP version 3
-pop3            110/udp
-sunrpc          111/tcp
-sunrpc          111/udp
-auth            113/tcp         authentication tap ident
-sftp            115/tcp
-uucp-path       117/tcp
-nntp            119/tcp         readnews untp   # USENET News Transfer Protocol
-ntp             123/tcp
-ntp             123/udp                         # Network Time Protocol
-netbios-ns      137/tcp                         # NETBIOS Name Service
-netbios-ns      137/udp
-netbios-dgm     138/tcp                         # NETBIOS Datagram Service
-netbios-dgm     138/udp
-netbios-ssn     139/tcp                         # NETBIOS session service
-netbios-ssn     139/udp
-imap2           143/tcp         imap            # Interim Mail Access Proto v2
-imap2           143/udp
-snmp            161/udp                         # Simple Net Mgmt Proto
-snmp-trap       162/udp         snmptrap        # Traps for SNMP
-cmip-man        163/tcp                         # ISO mgmt over IP (CMOT)
-cmip-man        163/udp
-cmip-agent      164/tcp
-cmip-agent      164/udp
-xdmcp           177/tcp                         # X Display Mgr. Control Proto
-xdmcp           177/udp
-nextstep        178/tcp         NeXTStep NextStep       # NeXTStep window
-nextstep        178/udp         NeXTStep NextStep       # server
-bgp             179/tcp                         # Border Gateway Proto.
-bgp             179/udp
-prospero        191/tcp                         # Cliff Neuman's Prospero
-prospero        191/udp
-irc             194/tcp                         # Internet Relay Chat
-irc             194/udp
-smux            199/tcp                         # SNMP Unix Multiplexer
-smux            199/udp
-at-rtmp         201/tcp                         # AppleTalk routing
-at-rtmp         201/udp
-at-nbp          202/tcp                         # AppleTalk name binding
-at-nbp          202/udp
-at-echo         204/tcp                         # AppleTalk echo
-at-echo         204/udp
-at-zis          206/tcp                         # AppleTalk zone information
-at-zis          206/udp
-z3950           210/tcp         wais            # NISO Z39.50 database
-z3950           210/udp         wais
-ipx             213/tcp                         # IPX
-ipx             213/udp
-imap3           220/tcp                         # Interactive Mail Access
-imap3           220/udp                         # Protocol v3
-ulistserv       372/tcp                         # UNIX Listserv
-ulistserv       372/udp
+hostnames	101/tcp		hostname	# usually from sri-nic
+iso-tsap	102/tcp		tsap		# part of ISODE.
+csnet-ns	105/tcp		cso-ns		# also used by CSO name server
+csnet-ns	105/udp		cso-ns
+# unfortunately the poppassd (Eudora) uses a port which has already
+# been assigned to a different service. We list the poppassd as an
+# alias here. This should work for programs asking for this service.
+# (due to a bug in inetd the 3com-tsmux line is disabled)
+#3com-tsmux	106/tcp		poppassd
+#3com-tsmux	106/udp		poppassd
+rtelnet		107/tcp				# Remote Telnet
+rtelnet		107/udp
+pop-2		109/tcp		postoffice	# POP version 2
+pop-2		109/udp
+pop-3		110/tcp				# POP version 3
+pop-3		110/udp
+sunrpc		111/tcp		portmapper	# RPC 4.0 portmapper TCP
+sunrpc		111/udp		portmapper	# RPC 4.0 portmapper UDP
+auth		113/tcp		authentication tap ident
+sftp		115/tcp
+uucp-path	117/tcp
+nntp		119/tcp		readnews untp	# USENET News Transfer Protocol
+ntp		123/tcp
+ntp		123/udp				# Network Time Protocol
+netbios-ns	137/tcp				# NETBIOS Name Service
+netbios-ns	137/udp
+netbios-dgm	138/tcp				# NETBIOS Datagram Service
+netbios-dgm	138/udp
+netbios-ssn	139/tcp				# NETBIOS session service
+netbios-ssn	139/udp
+imap2		143/tcp				# Interim Mail Access Proto v2
+imap2		143/udp
+snmp		161/udp				# Simple Net Mgmt Proto
+snmp-trap	162/udp		snmptrap	# Traps for SNMP
+cmip-man	163/tcp				# ISO mgmt over IP (CMOT)
+cmip-man	163/udp
+cmip-agent	164/tcp
+cmip-agent	164/udp
+xdmcp		177/tcp				# X Display Mgr. Control Proto
+xdmcp		177/udp
+nextstep	178/tcp		NeXTStep NextStep	# NeXTStep window
+nextstep	178/udp		NeXTStep NextStep	# server
+bgp		179/tcp				# Border Gateway Proto.
+bgp		179/udp
+prospero	191/tcp				# Cliff Neuman's Prospero
+prospero	191/udp
+irc		194/tcp				# Internet Relay Chat
+irc		194/udp
+smux		199/tcp				# SNMP Unix Multiplexer
+smux		199/udp
+at-rtmp		201/tcp				# AppleTalk routing
+at-rtmp		201/udp
+at-nbp		202/tcp				# AppleTalk name binding
+at-nbp		202/udp
+at-echo		204/tcp				# AppleTalk echo
+at-echo		204/udp
+at-zis		206/tcp				# AppleTalk zone information
+at-zis		206/udp
+qmtp		209/tcp				# The Quick Mail Transfer Protocol
+qmtp		209/udp				# The Quick Mail Transfer Protocol
+z3950		210/tcp		wais		# NISO Z39.50 database
+z3950		210/udp		wais
+ipx		213/tcp				# IPX
+ipx		213/udp
+imap3		220/tcp				# Interactive Mail Access
+imap3		220/udp				# Protocol v3
+ulistserv	372/tcp				# UNIX Listserv
+ulistserv	372/udp
+https		443/tcp				# MCom
+https		443/udp				# MCom
+snpp		444/tcp				# Simple Network Paging Protocol
+snpp		444/udp				# Simple Network Paging Protocol
+saft		487/tcp				# Simple Asynchronous File Transfer
+saft		487/udp				# Simple Asynchronous File Transfer
+npmp-local	610/tcp		dqs313_qmaster	# npmp-local / DQS
+npmp-local	610/udp		dqs313_qmaster	# npmp-local / DQS
+npmp-gui	611/tcp		dqs313_execd	# npmp-gui / DQS
+npmp-gui	611/udp		dqs313_execd	# npmp-gui / DQS
+hmmp-ind	612/tcp		dqs313_intercell# HMMP Indication / DQS
+hmmp-ind	612/udp		dqs313_intercell# HMMP Indication / DQS
 #
 # UNIX specific services
 #
-exec            512/tcp
-biff            512/udp         comsat
-login           513/tcp
-who             513/udp         whod
-shell           514/tcp         cmd             # no passwords used
-syslog          514/udp
-printer         515/tcp         spooler         # line printer spooler
-talk            517/udp
-ntalk           518/udp
-route           520/udp         router routed   # RIP
-timed           525/udp         timeserver
-tempo           526/tcp         newdate
-courier         530/tcp         rpc
-conference      531/tcp         chat
-netnews         532/tcp         readnews
-netwall         533/udp                         # -for emergency broadcasts
-uucp            540/tcp         uucpd           # uucp daemon
-remotefs        556/tcp         rfs_server rfs  # Brunhoff remote filesystem
-#
-webster         765/tcp                         # Network dictionary
-webster         765/udp
-# temporary entry (not officially registered by the Samba Team!)
-swat            901/tcp         # Samba Web Administration Tool
+exec		512/tcp
+biff		512/udp		comsat
+login		513/tcp
+who		513/udp		whod
+shell		514/tcp		cmd		# no passwords used
+syslog		514/udp
+printer		515/tcp		spooler		# line printer spooler
+talk		517/udp
+ntalk		518/udp
+route		520/udp		router routed	# RIP
+timed		525/udp		timeserver
+tempo		526/tcp		newdate
+courier		530/tcp		rpc
+conference	531/tcp		chat
+netnews		532/tcp		readnews
+netwall		533/udp				# -for emergency broadcasts
+uucp		540/tcp		uucpd		# uucp daemon
+afpovertcp	548/tcp				# AFP over TCP
+afpovertcp	548/udp				# AFP over TCP
+remotefs	556/tcp		rfs_server rfs	# Brunhoff remote filesystem
+klogin		543/tcp				# Kerberized `rlogin' (v5)
+kshell		544/tcp		krcmd		# Kerberized `rsh' (v5)
+kerberos-adm	749/tcp				# Kerberos `kadmin' (v5)
+#
+webster		765/tcp				# Network dictionary
+webster		765/udp
 #
 # From ``Assigned Numbers'':
 #
@@ -157,37 +182,116 @@ swat            901/tcp         # Samba Web Administration Tool
 #> does register or list uses of these ports as a convienence to the
 #> community.
 #
-ingreslock      1524/tcp
-ingreslock      1524/udp
-prospero-np     1525/tcp                # Prospero non-privileged
-prospero-np     1525/udp
-rfe             5002/tcp                # Radio Free Ethernet
-rfe             5002/udp                # Actually uses UDP only
+ingreslock	1524/tcp
+ingreslock	1524/udp
+prospero-np	1525/tcp			# Prospero non-privileged
+prospero-np	1525/udp
+datametrics	1645/tcp	old-radius	# datametrics / old radius entry
+datametrics	1645/udp	old-radius	# datametrics / old radius entry
+sa-msg-port	1646/tcp	old-radacct	# sa-msg-port / old radacct entry
+sa-msg-port	1646/udp	old-radacct	# sa-msg-port / old radacct entry
+radius		1812/tcp			# Radius
+radius		1812/udp			# Radius
+radacct		1813/tcp			# Radius Accounting
+radacct		1813/udp			# Radius Accounting
+cvspserver	2401/tcp			# CVS client/server operations
+cvspserver	2401/udp			# CVS client/server operations
+mysql		3306/tcp			# MySQL
+mysql		3306/udp			# MySQL
+rfe		5002/tcp			# Radio Free Ethernet
+rfe		5002/udp			# Actually uses UDP only
+cfengine	5308/tcp			# CFengine
+cfengine	5308/udp			# CFengine
+bbs		7000/tcp			# BBS service
 #
 #
 # Kerberos (Project Athena/MIT) services
-# Note that these are for Kerberos v4, and are unofficial.
-#
-klogin          543/tcp                 # Kerberos `rlogin'
-kshell          544/tcp         krcmd   # Kerberos `rsh'
-kerberos-adm    749/tcp                 # Kerberos `kadmin' (v5)
-kerberos4       750/udp         kdc     # Kerberos (server) udp
-kerberos4       750/tcp         kdc     # Kerberos (server) tcp
-kerberos-master 751/udp                 # Kerberos admin server udp
-kerberos-master 751/tcp                 # Kerberos admin server tcp
-krbupdate       760/tcp         kreg    # BSD Kerberos registration
-kpasswd         761/tcp         kpwd    # BSD Kerberos `passwd'
-eklogin         2105/tcp                # Kerberos encrypted `rlogin'
+# Note that these are for Kerberos v4, and are unofficial.  Sites running
+# v4 should uncomment these and comment out the v5 entries above.
+#
+kerberos4	750/udp		kerberos-iv kdc	# Kerberos (server) udp
+kerberos4	750/tcp		kerberos-iv kdc	# Kerberos (server) tcp
+kerberos_master	751/udp				# Kerberos authentication
+kerberos_master	751/tcp				# Kerberos authentication
+passwd_server	752/udp				# Kerberos passwd server
+krb_prop	754/tcp				# Kerberos slave propagation
+krbupdate	760/tcp		kreg		# Kerberos registration
+kpasswd		761/tcp		kpwd		# Kerberos "passwd"
+kpop		1109/tcp			# Pop with Kerberos
+knetd		2053/tcp			# Kerberos de-multiplexor
+zephyr-srv	2102/udp			# Zephyr server
+zephyr-clt	2103/udp			# Zephyr serv-hm connection
+zephyr-hm	2104/udp			# Zephyr hostmanager
+eklogin		2105/tcp			# Kerberos encrypted rlogin
 #
 # Unofficial but necessary (for NetBSD) services
 #
-supfilesrv      871/tcp                 # SUP server
-supfiledbg      1127/tcp                # SUP debugging
+supfilesrv	871/tcp				# SUP server
+supfiledbg	1127/tcp			# SUP debugging
+#
+# Datagram Delivery Protocol services
 #
-# AppleTalk DDP entries (DDP: Datagram Delivery Protocol)
+rtmp		1/ddp				# Routing Table Maintenance Protocol
+nbp		2/ddp				# Name Binding Protocol
+echo		4/ddp				# AppleTalk Echo Protocol
+zip		6/ddp				# Zone Information Protocol
 #
-rtmp            1/ddp                   # Routing Table Maintenance Protocol
-nbp             2/ddp                   # Name Binding Protocol
-echo            4/ddp                   # AppleTalk Echo Protocol
-zip             6/ddp                   # Zone Information Protocol
+# Services added for the Debian GNU/Linux distribution
+poppassd	106/tcp				# Eudora
+poppassd	106/udp				# Eudora
+mailq		174/tcp				# Mailer transport queue for Zmailer
+mailq		174/tcp				# Mailer transport queue for Zmailer
+omirr		808/tcp		omirrd		# online mirror
+omirr		808/udp		omirrd		# online mirror
+rmtcfg		1236/tcp			# Gracilis Packeten remote config server
+xtel		1313/tcp			# french minitel
+coda_opcons	1355/udp			# Coda opcons            (Coda fs)
+coda_venus	1363/udp			# Coda venus             (Coda fs)
+coda_auth	1357/udp			# Coda auth              (Coda fs)
+coda_udpsrv	1359/udp			# Coda udpsrv            (Coda fs)
+coda_filesrv	1361/udp			# Coda filesrv           (Coda fs)
+codacon		1423/tcp	venus.cmu	# Coda Console           (Coda fs)
+coda_aux1	1431/tcp			# coda auxiliary service (Coda fs)
+coda_aux1	1431/udp			# coda auxiliary service (Coda fs)
+coda_aux2	1433/tcp			# coda auxiliary service (Coda fs)
+coda_aux2	1433/udp			# coda auxiliary service (Coda fs)
+coda_aux3	1435/tcp			# coda auxiliary service (Coda fs)
+coda_aux3	1435/udp			# coda auxiliary service (Coda fs)
+cfinger		2003/tcp			# GNU Finger
+afbackup	2988/tcp			# Afbackup system
+afbackup	2988/udp			# Afbackup system
+icp		3130/tcp			# Internet Cache Protocol (Squid)
+icp		3130/udp			# Internet Cache Protocol (Squid)
+postgres	5432/tcp			# POSTGRES
+postgres	5432/udp			# POSTGRES
+fax		4557/tcp			# FAX transmission service        (old)
+hylafax		4559/tcp			# HylaFAX client-server protocol  (new)
+noclog		5354/tcp			# noclogd with TCP (nocol)
+noclog		5354/udp			# noclogd with UDP (nocol)
+hostmon		5355/tcp			# hostmon uses TCP (nocol)
+hostmon		5355/udp			# hostmon uses TCP (nocol)
+ircd		6667/tcp			# Internet Relay Chat
+ircd		6667/udp			# Internet Relay Chat
+webcache	8080/tcp			# WWW caching service
+webcache	8080/udp			# WWW caching service
+tproxy		8081/tcp			# Transparent Proxy
+tproxy		8081/udp			# Transparent Proxy
+mandelspawn	9359/udp	mandelbrot	# network mandelbrot
+amanda		10080/udp			# amanda backup services
+amandaidx	10082/tcp			# amanda backup services
+amidxtape	10083/tcp			# amanda backup services
+isdnlog		20011/tcp			# isdn logging system
+isdnlog		20011/udp			# isdn logging system
+vboxd		20012/tcp			# voice box system
+vboxd		20012/udp			# voice box system
+binkp           24554/tcp			# Binkley
+binkp           24554/udp			# Binkley
+asp		27374/tcp			# Address Search Protocol
+asp		27374/udp			# Address Search Protocol
+tfido           60177/tcp			# Ifmail
+tfido           60177/udp			# Ifmail
+fido            60179/tcp			# Ifmail
+fido            60179/udp			# Ifmail
+
+# Local services
 

+ 1 - 0
sources/target_skeleton/etc/shadow

@@ -9,3 +9,4 @@ halt:*:10933:0:99999:7:::
 uucp:*:10933:0:99999:7:::
 operator:*:10933:0:99999:7:::
 nobody:*:10933:0:99999:7:::
+default::10933:0:99999:7:::

+ 0 - 11
sources/uClibc-Config.awk

@@ -1,11 +0,0 @@
-BEGIN { FS=" ="; 
-        REG1="DODEBUG|INCLUDE_RPC|DOPIC";
-        REG2="DOLFS";
-}
-{  
-   if ($0 ~ "^" REG1) 
-     { print $1 " = false" } 
-   else if ($0 ~ "^" REG2)
-     { print $1 " = true" }
-   else { print $0 } 
-}