diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6ce3d9a --- /dev/null +++ b/Makefile @@ -0,0 +1,318 @@ +# +# Makefile for CRUX +# Copyright (c) 2003-2005 Per Liden +# + +CRUXVERSION = 2.3 +COLLECTIONS = core opt xorg +KERNEL_MIRROR = ftp://ftp.kernel.org +KERNEL_VERSION = 2.6.22.1 +KERNEL_PATCHES = squashfs3.2-patch +STATIC_BB = http://jaeger.morpheus.net/linux/crux/files/busybox.bz2 +SYSLINUX_VERSION = 3.51 +FAKE_ROOT_DIR = $(PWD)/tmp/fake_root +SQUASHFS_DIR = $(PWD)/tmp/squashfs +DATE_STR = `date +'%Y%m%d'` +ISO_ROOT_DIR = $(PWD)/tmp/iso_root +ISO_FILENAME = $(PWD)/crux-$(CRUXVERSION)-latest.iso +NETISO_FILENAME = $(PWD)/crux-$(CRUXVERSION)-latest-netinst.iso +ISO_PACKAGES = filesystem bash coreutils bzip2 e2fsprogs jfsutils \ + xfsprogs reiserfsprogs patch findutils glibc grep gzip kbd \ + module-init-tools less gawk ncurses net-tools pkgutils \ + procps readline sed shadow mktemp sysklogd sysvinit tar \ + util-linux vim which dialog nano mdadm pciutils libusb \ + sysfsutils usbutils hotplug udev zlib openssl openssh \ + dhcpcd wget iproute2 + +PORTS_core = $(shell /bin/ls -I README ports/core) +PORTS_opt = grub nano libpng glib glitz libjpeg hicolor-icon-theme \ + atk freetype cairo libtiff fontconfig pango gtk libidl \ + firefox cdrtools libtiff sudo blackbox dialog fetchmail \ + procmail mdadm wireless-tools cvs libxml2 libxslt libdrm \ + mutt xterm p5-xml-parser +PORTS_xorg = $(shell /bin/ls -I README ports/xorg) + +ifeq ($(FORCE),yes) +PKGMK_FORCE=-f +else +PKGMK_FORCE= +endif + +.PHONY: help check-root check-log $(COLLECTIONS) all all-chroot bootstrap kernel kernel-clean syslinux syslinux-clean clean iso + +help: + @echo "CRUX Makefile" + @echo "Targets:" + @echo " build single collection" + @echo " all build all collections" + @echo " bootstrap bootstrap all collections" + @echo " kernel download and build kernel" + @echo " iso create iso image" + @echo "Collections:" + @echo " $(COLLECTIONS)" + +check-root: + @if [ "$$UID" != "0" ]; then \ + echo "You need to be root to do this."; \ + exit 1; \ + fi + +check-log: + @grep "^=======> ERROR:"; \ + if [ "$$?" = "0" ]; then \ + echo "(see log file for details)"; \ + exit 1; \ + else \ + exit 0; \ + fi + + +# kernel +kernel/linux-$(KERNEL_VERSION).tar.bz2: + cd kernel && wget $(KERNEL_MIRROR)/pub/linux/kernel/v2.6/linux-$(KERNEL_VERSION).tar.bz2 + +kernel/linux-$(KERNEL_VERSION): kernel/linux-$(KERNEL_VERSION).tar.bz2 + tar -C kernel -xjmf kernel/linux-$(KERNEL_VERSION).tar.bz2 + for FILE in $(KERNEL_PATCHES); do \ + (cd kernel/linux-$(KERNEL_VERSION) && patch -p1 -i ../$$FILE;) \ + done + +kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage: kernel/linux-$(KERNEL_VERSION) kernel/linux-$(KERNEL_VERSION).config + make -C kernel/linux-$(KERNEL_VERSION) mrproper + cp -f kernel/linux-$(KERNEL_VERSION).config kernel/linux-$(KERNEL_VERSION)/.config + make -C kernel/linux-$(KERNEL_VERSION) oldconfig + make -C kernel/linux-$(KERNEL_VERSION) all + #touch kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage + +kernel: kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage + +kernel-clean: + rm -rf kernel/linux-$(KERNEL_VERSION) + +kernel-distclean: kernel-clean + rm -f kernel/linux-$(KERNEL_VERSION).tar.bz2 + + + +# busybox +busybox/busybox.bz2: + @cd busybox && wget $(STATIC_BB) + +busybox/busybox: busybox/busybox.bz2 + @cd busybox && bzip2 -d busybox.bz2 + +busybox: busybox/busybox + +busybox-clean: + rm -f busybox/busybox.bz2 busybox/busybox + + + +# isolinux +iso/syslinux-$(SYSLINUX_VERSION).tar.gz: + cd iso && wget $(KERNEL_MIRROR)/pub/linux/utils/boot/syslinux/syslinux-$(SYSLINUX_VERSION).tar.gz + +iso/syslinux-$(SYSLINUX_VERSION): iso/syslinux-$(SYSLINUX_VERSION).tar.gz + tar -C iso -xzmf iso/syslinux-$(SYSLINUX_VERSION).tar.gz + +iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin: iso/syslinux-$(SYSLINUX_VERSION) + +syslinux: iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin + +syslinux-clean: + rm -rf iso/syslinux-$(SYSLINUX_VERSION) + +syslinux-distclean: + rm -f iso/syslinux-$(SYSLINUX_VERSION).tar.gz + + + +clean: kernel-clean busybox-clean syslinux-clean squashfs-clean initramfs-clean + @rm -rf tmp modules_install.log $(ISO_FILENAME) $(NETISO_FILENAME) \ + `basename $(ISO_FILENAME) .iso`.md5 \ + `basename $(NETISO_FILENAME) .iso`.md5 + +distclean: clean kernel-distclean syslinux-distclean + +$(COLLECTIONS): check-root + @for p in $(PORTS_$(@)); do \ + echo "port: $$p"; \ + (cd ports/$@/$$p && pkgmk -d $(PKGMK_FORCE)); \ + done + +all: $(COLLECTIONS) + +all-chroot: check-root + @echo "Creating chroot environment" + @rm -rf $(FAKE_ROOT_DIR) + @mkdir -p $(FAKE_ROOT_DIR) + @echo "Installing packages" + @mkdir -p $(FAKE_ROOT_DIR)/var/lib/pkg + @touch $(FAKE_ROOT_DIR)/var/lib/pkg/db + @for COLL in $(COLLECTIONS); do \ + for PACKAGE in ports/$$COLL/*/*.pkg.tar.gz; do \ + echo " $$PACKAGE"; \ + pkgadd -r $(FAKE_ROOT_DIR) $$PACKAGE; \ + done; \ + done + @echo "Installing kernel source (linux-$(KERNEL_VERSION)) into $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION)..." + @mkdir -p $(FAKE_ROOT_DIR)/usr/src + @tar jxf kernel/linux-$(KERNEL_VERSION).tar.bz2 -C $(FAKE_ROOT_DIR)/usr/src/ + @for FILE in $(KERNEL_PATCHES); do \ + cp kernel/$$FILE $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION)/; \ + (cd $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION) && \ + patch -p1 -i $$FILE); \ + done + @cp kernel/linux-$(KERNEL_VERSION).config $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION)/.config + @echo "Preparing kernel source..." + @(cd $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION) && \ + make oldconfig && make) + @mkdir -p $(FAKE_ROOT_DIR)/lib/modules/$(KERNEL_VERSION) + @ln -s /usr/src/linux-$(KERNEL_VERSION) $(FAKE_ROOT_DIR)/lib/modules/$(KERNEL_VERSION)/build + @cp -L /etc/resolv.conf $(FAKE_ROOT_DIR)/etc/ + @echo "Mounting /dev on $(FAKE_ROOT_DIR)/dev" + @mount --bind /dev $(FAKE_ROOT_DIR)/dev + @echo "Mounting /proc on $(FAKE_ROOT_DIR)/proc" + @mount --bind /proc $(FAKE_ROOT_DIR)/proc + @echo "Mounting $$PWD on $(FAKE_ROOT_DIR)/src" + @mkdir $(FAKE_ROOT_DIR)/src + @mount --bind $$PWD $(FAKE_ROOT_DIR)/src + @echo "Entering chroot enrivonment" + @chroot $(FAKE_ROOT_DIR) /bin/bash --login -c "cd /src && $(MAKE) FORCE=yes all" + @echo "Exiting chroot enrivonment" + @echo "Unmounting $(FAKE_ROOT_DIR)/src" + @umount $(FAKE_ROOT_DIR)/src + @rmdir $(FAKE_ROOT_DIR)/src + @echo "Unmounting $(FAKE_ROOT_DIR)/proc" + @umount $(FAKE_ROOT_DIR)/proc + @echo "Unmounting $(FAKE_ROOT_DIR)/dev" + @umount $(FAKE_ROOT_DIR)/dev + @echo "Removing chroot environment" + @rm -rf $(FAKE_ROOT_DIR) + +bootstrap: check-root + @echo "Bootstrap started (`date +'%F %T'`)" + @echo "- Stage 0 (`date +'%F %T'`)" + @$(MAKE) all &> log.stage0 + @$(MAKE) check-log < log.stage0 + @echo "- Stage 1 (`date +'%F %T'`)" + @$(MAKE) all-chroot &> log.stage1 + @$(MAKE) check-log < log.stage1 + @echo "- Stage 2 (`date +'%F %T'`)" + @$(MAKE) all-chroot &> log.stage2 + @$(MAKE) check-log < log.stage2 + @echo "Bootstrap completed (`date +'%F %T'`)" + + + +# initramfs +initramfs: kernel busybox initramfs/init squashfs + @echo "Creating initramfs..." + @sed -e "s/#KERNEL_VERSION#/$(KERNEL_VERSION)/g" initramfs/initramfs.lst \ + > initramfs/initramfs.lst-sed + @cd initramfs && ../kernel/linux-$(KERNEL_VERSION)/usr/gen_init_cpio \ + initramfs.lst-sed > initramfs + +initramfs-clean: + if [ -e initramfs/initramfs.lst-sed ]; then rm -f initramfs/initramfs.lst-sed; fi + if [ -e initramfs/initramfs ]; then rm -f initramfs/initramfs; fi + + + +# squashfs +squashfs: kernel busybox + @echo "Creating squashfs filesystem..." + @mkdir -p $(SQUASHFS_DIR) + @for PACKAGE in $(ISO_PACKAGES); do \ + tar -C $(SQUASHFS_DIR) -xzpf ports/*/$$PACKAGE/$$PACKAGE\#*.pkg.tar.gz; \ + done + @sed -i -e 's/^#PermitRootLogin yes/PermitRootLogin yes/' \ + $(SQUASHFS_DIR)/etc/ssh/sshd_config + @echo "- Installing kernel..." + @cp kernel/linux-$(KERNEL_VERSION)/System.map $(SQUASHFS_DIR)/boot/System.map + @cp kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage $(SQUASHFS_DIR)/boot/vmlinuz + @echo "- Installing kernel modules (see modules_install.log)" + @make -C kernel/linux-$(KERNEL_VERSION) INSTALL_MOD_PATH=$(SQUASHFS_DIR) modules_install &> modules_install.log + @touch kernel/linux-$(KERNEL_VERSION).config kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage # stupid timestamp problem + @echo "- Deleting superfluous files..." + @cd $(SQUASHFS_DIR) && rm -rf var opt home + @mkdir -p $(SQUASHFS_DIR)/var/empty $(SQUASHFS_DIR)/var/lib + @cd $(SQUASHFS_DIR)/usr && rm -rf man include lib/*.a lib/*.o lib/gconv lib/locale src + @cd $(SQUASHFS_DIR)/usr/share && mkdir l v x; cp terminfo/l/linux l; cp terminfo/v/vt100 v; cp terminfo/x/xterm x; rm -rf terminfo/*; mv l v x terminfo + @cd $(SQUASHFS_DIR)/usr/share && rm -rf et ss vim i18n zoneinfo + @cd $(SQUASHFS_DIR)/usr/bin && rm cal locale localedef rpcgen compile_et mk_cmds + @cd $(SQUASHFS_DIR)/usr/sbin && rm group{add,del,mod} user{add,del,mod} grpck pwck iconvconfig rpcinfo zic zdump + @cd $(SQUASHFS_DIR)/etc && rm -rf cron {resolv,lilo,sysctl,pkgadd,pkgmk}.conf securetty + @cd $(SQUASHFS_DIR)/etc/rc.d && find . -type f ! -name "sshd" -exec rm -f '{}' \; + @cd $(SQUASHFS_DIR)/lib/modules/$(KERNEL_VERSION) && rm -f build + @echo "- Creating symlinks" + @ln -sf /tmp/var $(SQUASHFS_DIR)/var + @ln -sf /proc/mounts $(SQUASHFS_DIR)/etc/mtab + @cp iso/etc/{motd,fstab,hosts,inittab,issue,ld.so.conf,protocols,rc,rc.shutdown,rc.single,services} \ + $(SQUASHFS_DIR)/etc + @echo "- Updating library links and cache" + @ldconfig -r $(SQUASHFS_DIR) + @cp iso/bin/{setup,setup-helper,setup-chroot,net-setup,net-setup-helper,serial_console} $(SQUASHFS_DIR)/usr/bin + @mkdir -p squashfs + @mksquashfs $(SQUASHFS_DIR) squashfs/crux.squashfs -noappend -e usr/bin/net-setup -e usr/bin/net-setup-helper &> /dev/null + @mksquashfs $(SQUASHFS_DIR) squashfs/crux.squashfs-net -noappend -e usr/bin/setup -e usr/bin/setup-helper &> /dev/null + +squashfs-clean: + @rm -rf squashfs + + +iso: check-root kernel syslinux initramfs squashfs + @echo "Creating ISO image ($(ISO_FILENAME))" + @if [ -e $(ISO_ROOT_DIR) ]; then rm -rf $(ISO_ROOT_DIR); fi + @mkdir -p $(ISO_ROOT_DIR)/boot + @echo "- Installing kernel" + @cp kernel/linux-$(KERNEL_VERSION)/System.map $(ISO_ROOT_DIR)/boot/System.map + @cp kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage $(ISO_ROOT_DIR)/boot/vmlinuz + @echo "- Installing initramfs" + @cp initramfs/initramfs $(ISO_ROOT_DIR)/boot/initramfs + @echo "- Copying ISO specific files" + @mkdir -p $(ISO_ROOT_DIR)/etc $(ISO_ROOT_DIR)/boot/isolinux + @cp iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin $(ISO_ROOT_DIR)/boot/isolinux + @cp iso/isolinux/{isolinux.cfg,*.msg,memtest86plus} \ + $(ISO_ROOT_DIR)/boot/isolinux + @echo $(CRUXVERSION)-$(DATE_STR) > $(ISO_ROOT_DIR)/crux-cd + @echo "- Copying CRUX packages" + @mkdir -p $(ISO_ROOT_DIR)/crux + @cp doc/handbook/{handbook,releasenotes}.txt $(ISO_ROOT_DIR)/crux + @cp iso/setup.dependencies $(ISO_ROOT_DIR)/crux + @mkdir -p $(ISO_ROOT_DIR)/crux/kernel + @cp kernel/linux-$(KERNEL_VERSION).tar.bz2 $(ISO_ROOT_DIR)/crux/kernel + @cp kernel/linux-$(KERNEL_VERSION).config $(ISO_ROOT_DIR)/crux/kernel + @for FILE in $(KERNEL_PATCHES); do \ + cp kernel/$$FILE $(ISO_ROOT_DIR)/crux/kernel; \ + done + @for COLL in $(COLLECTIONS); do \ + mkdir -p $(ISO_ROOT_DIR)/crux/$$COLL; \ + cp ports/$$COLL/*/*.pkg.tar.gz $(ISO_ROOT_DIR)/crux/$$COLL; \ + done + @echo "- Copying squashfs filesystem" + @cp squashfs/crux.squashfs $(ISO_ROOT_DIR) + @echo "- Creating ISO sort table" + @echo "$(ISO_ROOT_DIR)/boot 100" > /tmp/iso.sort + @echo "$(ISO_ROOT_DIR)/boot/isolinux 200" >> /tmp/iso.sort + @echo "$(ISO_ROOT_DIR)/boot/isolinux/isolinux.bin 300" >> /tmp/iso.sort + @echo "- Starting mkisofs" + @if [ -f $(ISO_FILENAME) ]; then rm -f $(ISO_FILENAME); fi + @if [ -f $(NETISO_FILENAME) ]; then rm -f $(NETISO_FILENAME); fi + @mkisofs -R -l -J -V CRUX-$(CRUXVERSION)-$(DATE_STR) -A CRUX -b boot/isolinux/isolinux.bin \ + -c boot/isolinux/isolinux.boot -no-emul-boot -boot-load-size 4 \ + -boot-info-table -sort /tmp/iso.sort -o $(ISO_FILENAME) $(ISO_ROOT_DIR) + @md5sum `basename $(ISO_FILENAME)` > `basename $(ISO_FILENAME) .iso`.md5 + @rm $(ISO_ROOT_DIR)/crux.squashfs + @cp squashfs/crux.squashfs-net $(ISO_ROOT_DIR)/crux.squashfs + @mkisofs -R -l -J -V CRUX-NET-$(CRUXVERSION)-$(DATE_STR) -A CRUX -b \ + boot/isolinux/isolinux.bin -c boot/isolinux/isolinux.boot \ + -exclude-list iso/excludelist.net -no-emul-boot -boot-load-size 4 \ + -boot-info-table -sort /tmp/iso.sort -o $(NETISO_FILENAME) $(ISO_ROOT_DIR) + @md5sum `basename $(NETISO_FILENAME)` > \ + `basename $(NETISO_FILENAME) .iso`.md5 + @rm /tmp/iso.sort + @rm -rf $(ISO_ROOT_DIR) + @echo "Done" + +# End of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..f166ea1 --- /dev/null +++ b/TODO @@ -0,0 +1,5 @@ +2. Add an rsync mirror publishing script with: + multiple targets + remote cleanup with --delete + +3. Add proxy support to the net-setup script diff --git a/busybox/busybox-1.4.1.config b/busybox/busybox-1.4.1.config new file mode 100644 index 0000000..63d0ca0 --- /dev/null +++ b/busybox/busybox-1.4.1.config @@ -0,0 +1,671 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.4.1 +# Thu Mar 1 12:19:28 2007 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Busybox Settings +# + +# +# General Configuration +# +# CONFIG_NITPICK is not set +# CONFIG_DESKTOP is not set +# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_SHOW_USAGE=y +CONFIG_FEATURE_VERBOSE_USAGE=y +CONFIG_FEATURE_COMPRESS_USAGE=y +CONFIG_FEATURE_INSTALLER=y +# CONFIG_LOCALE_SUPPORT is not set +CONFIG_GETOPT_LONG=y +CONFIG_FEATURE_DEVPTS=y +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_SUID=y +CONFIG_FEATURE_SYSLOG=y +# CONFIG_FEATURE_SUID_CONFIG is not set +# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set +CONFIG_FEATURE_HAVE_RPC=y +# CONFIG_SELINUX is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" + +# +# Build Options +# +CONFIG_STATIC=y +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_LFS=y +# CONFIG_BUILD_AT_ONCE is not set + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_DEBUG_PESSIMIZE is not set +# CONFIG_NO_DEBUG_LIB is not set +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set +CONFIG_INCLUDE_SUSv2=y + +# +# Installation Options +# +CONFIG_INSTALL_NO_USR=y +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +CONFIG_PREFIX="./foo" + +# +# Busybox Library Tuning +# +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SIZE_VS_SPEED=2 + +# +# Applets +# + +# +# Archival Utilities +# +# CONFIG_AR is not set +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +CONFIG_BUNZIP2=y +# CONFIG_CPIO is not set +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set +CONFIG_GUNZIP=y +# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set +CONFIG_GZIP=y +# CONFIG_RPM2CPIO is not set +# CONFIG_RPM is not set +CONFIG_TAR=y +CONFIG_FEATURE_TAR_CREATE=y +CONFIG_FEATURE_TAR_BZIP2=y +# CONFIG_FEATURE_TAR_LZMA is not set +# CONFIG_FEATURE_TAR_FROM is not set +CONFIG_FEATURE_TAR_GZIP=y +# CONFIG_FEATURE_TAR_COMPRESS is not set +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +CONFIG_FEATURE_TAR_LONG_OPTIONS=y +# CONFIG_UNCOMPRESS is not set +# CONFIG_UNLZMA is not set +# CONFIG_FEATURE_LZMA_FAST is not set +CONFIG_UNZIP=y + +# +# Common options for cpio and tar +# +# CONFIG_FEATURE_UNARCHIVE_TAPE is not set +# CONFIG_FEATURE_DEB_TAR_GZ is not set +# CONFIG_FEATURE_DEB_TAR_BZ2 is not set +# CONFIG_FEATURE_DEB_TAR_LZMA is not set + +# +# Coreutils +# +CONFIG_BASENAME=y +# CONFIG_CAL is not set +CONFIG_CAT=y +# CONFIG_CATV is not set +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +CONFIG_CHROOT=y +# CONFIG_CKSUM is not set +CONFIG_CMP=y +# CONFIG_COMM is not set +CONFIG_CP=y +CONFIG_CUT=y +CONFIG_DATE=y +CONFIG_FEATURE_DATE_ISOFMT=y +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_IBS_OBS is not set +CONFIG_DF=y +# CONFIG_DIFF is not set +# CONFIG_FEATURE_DIFF_BINARY is not set +# CONFIG_FEATURE_DIFF_DIR is not set +# CONFIG_FEATURE_DIFF_MINIMAL is not set +CONFIG_DIRNAME=y +# CONFIG_DOS2UNIX is not set +# CONFIG_UNIX2DOS is not set +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set +CONFIG_EXPR=y +# CONFIG_EXPR_MATH_SUPPORT_64 is not set +CONFIG_FALSE=y +# CONFIG_FOLD is not set +CONFIG_HEAD=y +# CONFIG_FEATURE_FANCY_HEAD is not set +# CONFIG_HOSTID is not set +CONFIG_ID=y +CONFIG_INSTALL=y +# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set +# CONFIG_LENGTH is not set +CONFIG_LN=y +# CONFIG_LOGNAME is not set +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set +# CONFIG_MD5SUM is not set +CONFIG_MKDIR=y +# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set +# CONFIG_MKFIFO is not set +CONFIG_MKNOD=y +CONFIG_MV=y +# CONFIG_FEATURE_MV_LONG_OPTIONS is not set +# CONFIG_NICE is not set +# CONFIG_NOHUP is not set +# CONFIG_OD is not set +# CONFIG_PRINTENV is not set +# CONFIG_PRINTF is not set +CONFIG_PWD=y +# CONFIG_REALPATH is not set +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +# CONFIG_SHA1SUM is not set +CONFIG_SLEEP=y +# CONFIG_FEATURE_FANCY_SLEEP is not set +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_STAT is not set +# CONFIG_FEATURE_STAT_FORMAT is not set +# CONFIG_STTY is not set +# CONFIG_SUM is not set +CONFIG_SYNC=y +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +CONFIG_FEATURE_TEE_USE_BLOCK_IO=y +CONFIG_TEST=y +# CONFIG_FEATURE_TEST_64 is not set +CONFIG_TOUCH=y +CONFIG_TR=y +# CONFIG_FEATURE_TR_CLASSES is not set +# CONFIG_FEATURE_TR_EQUIV is not set +CONFIG_TRUE=y +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNIQ=y +CONFIG_USLEEP=y +# CONFIG_UUDECODE is not set +# CONFIG_UUENCODE is not set +# CONFIG_WATCH is not set +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +# CONFIG_WHO is not set +CONFIG_WHOAMI=y +CONFIG_YES=y + +# +# Common options for cp and mv +# +CONFIG_FEATURE_PRESERVE_HARDLINKS=y + +# +# Common options for ls, more and telnet +# +CONFIG_FEATURE_AUTOWIDTH=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y +# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +# CONFIG_DUMPKMAP is not set +# CONFIG_LOADFONT is not set +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +# CONFIG_RESIZE is not set +# CONFIG_FEATURE_RESIZE_PRINT is not set +# CONFIG_SETCONSOLE is not set +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_SETKEYCODES is not set +# CONFIG_SETLOGCONS is not set + +# +# Debian Utilities +# +CONFIG_MKTEMP=y +# CONFIG_PIPE_PROGRESS is not set +CONFIG_READLINK=y +# CONFIG_FEATURE_READLINK_FOLLOW is not set +# CONFIG_RUN_PARTS is not set +# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +# CONFIG_START_STOP_DAEMON is not set +# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set +# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set +CONFIG_WHICH=y + +# +# Editors +# +# CONFIG_AWK is not set +# CONFIG_FEATURE_AWK_MATH is not set +# CONFIG_ED is not set +# CONFIG_PATCH is not set +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +CONFIG_FEATURE_VI_USE_SIGNALS=y +CONFIG_FEATURE_VI_DOT_CMD=y +CONFIG_FEATURE_VI_READONLY=y +CONFIG_FEATURE_VI_SETOPTS=y +CONFIG_FEATURE_VI_SET=y +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_XDEV=y +# CONFIG_FEATURE_FIND_NEWER is not set +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_GREP=y +CONFIG_FEATURE_GREP_EGREP_ALIAS=y +CONFIG_FEATURE_GREP_FGREP_ALIAS=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y +CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y +CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y + +# +# Init Utilities +# +CONFIG_INIT=y +# CONFIG_DEBUG_INIT is not set +CONFIG_FEATURE_USE_INITTAB=y +# CONFIG_FEATURE_INIT_SCTTY is not set +CONFIG_FEATURE_EXTRA_QUIET=y +# CONFIG_FEATURE_INIT_COREDUMPS is not set +CONFIG_FEATURE_INITRD=y +CONFIG_HALT=y +# CONFIG_MESG is not set + +# +# Login/Password Management Utilities +# +# CONFIG_FEATURE_SHADOWPASSWDS is not set +# CONFIG_USE_BB_SHADOW is not set +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_ADDGROUP is not set +# CONFIG_DELGROUP is not set +# CONFIG_ADDUSER is not set +# CONFIG_DELUSER is not set +# CONFIG_GETTY is not set +# CONFIG_FEATURE_UTMP is not set +# CONFIG_FEATURE_WTMP is not set +# CONFIG_LOGIN is not set +# CONFIG_LOGIN_SCRIPTS is not set +# CONFIG_FEATURE_SECURETTY is not set +# CONFIG_PASSWD is not set +# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set +# CONFIG_SU is not set +# CONFIG_FEATURE_SU_SYSLOG is not set +# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set +# CONFIG_SULOGIN is not set +# CONFIG_VLOCK is not set + +# +# Linux Ext2 FS Progs +# +# CONFIG_CHATTR is not set +# CONFIG_FSCK is not set +# CONFIG_LSATTR is not set + +# +# Linux Module Utilities +# +CONFIG_INSMOD=y +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +CONFIG_RMMOD=y +CONFIG_LSMOD=y +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +CONFIG_MODPROBE=y +CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y +CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CHECK_TAINTED_MODULE=y +# CONFIG_FEATURE_2_4_MODULES is not set +CONFIG_FEATURE_2_6_MODULES=y +# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set + +# +# Linux System Utilities +# +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +# CONFIG_FBSET is not set +# CONFIG_FEATURE_FBSET_FANCY is not set +# CONFIG_FEATURE_FBSET_READMODE is not set +# CONFIG_FDFLUSH is not set +# CONFIG_FDFORMAT is not set +# CONFIG_FDISK is not set +CONFIG_FDISK_SUPPORT_LARGE_DISKS=y +# CONFIG_FEATURE_FDISK_WRITABLE is not set +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_FDISK_ADVANCED is not set +# CONFIG_FREERAMDISK is not set +# CONFIG_FSCK_MINIX is not set +# CONFIG_MKFS_MINIX is not set +# CONFIG_FEATURE_MINIX2 is not set +# CONFIG_GETOPT is not set +CONFIG_HEXDUMP=y +# CONFIG_HWCLOCK is not set +# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set +# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +# CONFIG_LOSETUP is not set +CONFIG_MDEV=y +CONFIG_FEATURE_MDEV_CONF=y +# CONFIG_FEATURE_MDEV_EXEC is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_V0 is not set +CONFIG_MORE=y +CONFIG_FEATURE_USE_TERMIOS=y +CONFIG_MOUNT=y +# CONFIG_FEATURE_MOUNT_NFS is not set +# CONFIG_FEATURE_MOUNT_CIFS is not set +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +# CONFIG_PIVOT_ROOT is not set +# CONFIG_RDATE is not set +# CONFIG_READPROFILE is not set +# CONFIG_SETARCH is not set +CONFIG_SWAPONOFF=y +CONFIG_SWITCH_ROOT=y +CONFIG_UMOUNT=y +# CONFIG_FEATURE_UMOUNT_ALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_CROND is not set +# CONFIG_DEBUG_CROND_OPTION is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_CRONTAB is not set +# CONFIG_DC is not set +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +# CONFIG_EJECT is not set +# CONFIG_LAST is not set +# CONFIG_LESS is not set +CONFIG_FEATURE_LESS_MAXLINES= +# CONFIG_FEATURE_LESS_BRACKETS is not set +# CONFIG_FEATURE_LESS_FLAGS is not set +# CONFIG_FEATURE_LESS_FLAGCS is not set +# CONFIG_FEATURE_LESS_MARKS is not set +# CONFIG_FEATURE_LESS_REGEXP is not set +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +# CONFIG_MAKEDEVS is not set +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +# CONFIG_FEATURE_MAKEDEVS_TABLE is not set +# CONFIG_MOUNTPOINT is not set +# CONFIG_MT is not set +# CONFIG_NMETER is not set +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +# CONFIG_RUNLEVEL is not set +# CONFIG_RX is not set +CONFIG_STRINGS=y +# CONFIG_SETSID is not set +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +CONFIG_TIME=y +# CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +# CONFIG_ARP is not set +# CONFIG_ARPING is not set +# CONFIG_DNSD is not set +# CONFIG_ETHER_WAKE is not set +# CONFIG_FAKEIDENTD is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +# CONFIG_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +# CONFIG_FEATURE_IFCONFIG_HW is not set +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +# CONFIG_IFUPDOWN is not set +# CONFIG_FEATURE_IFUPDOWN_IP is not set +# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set +# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set +# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set +# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set +# CONFIG_FEATURE_IFUPDOWN_IPX is not set +# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +# CONFIG_FEATURE_INETD_RPC is not set +# CONFIG_IP is not set +# CONFIG_FEATURE_IP_ADDRESS is not set +# CONFIG_FEATURE_IP_LINK is not set +# CONFIG_FEATURE_IP_ROUTE is not set +# CONFIG_FEATURE_IP_TUNNEL is not set +# CONFIG_FEATURE_IP_RULE is not set +# CONFIG_FEATURE_IP_SHORT_FORMS is not set +# CONFIG_IPADDR is not set +# CONFIG_IPLINK is not set +# CONFIG_IPROUTE is not set +# CONFIG_IPTUNNEL is not set +# CONFIG_IPRULE is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_NAMEIF is not set +# CONFIG_NC is not set +# CONFIG_NC_SERVER is not set +# CONFIG_NC_EXTRA is not set +# CONFIG_NETSTAT is not set +# CONFIG_NSLOOKUP is not set +CONFIG_PING=y +CONFIG_FEATURE_FANCY_PING=y +# CONFIG_PING6 is not set +# CONFIG_FEATURE_FANCY_PING6 is not set +CONFIG_ROUTE=y +# CONFIG_TELNET is not set +# CONFIG_FEATURE_TELNET_TTYPE is not set +# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set +# CONFIG_TELNETD is not set +# CONFIG_FEATURE_TELNETD_STANDALONE is not set +# CONFIG_TFTP is not set +# CONFIG_FEATURE_TFTP_GET is not set +# CONFIG_FEATURE_TFTP_PUT is not set +# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_DEBUG_TFTP is not set +# CONFIG_TRACEROUTE is not set +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +# CONFIG_APP_UDHCPD is not set +# CONFIG_APP_DHCPRELAY is not set +# CONFIG_APP_DUMPLEASES is not set +# CONFIG_APP_UDHCPC is not set +# CONFIG_FEATURE_UDHCP_SYSLOG is not set +# CONFIG_FEATURE_UDHCP_DEBUG is not set +# CONFIG_VCONFIG is not set +CONFIG_WGET=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_IP6_LITERAL=y +# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set +# CONFIG_ZCIP is not set + +# +# Process Utilities +# +CONFIG_FREE=y +# CONFIG_FUSER is not set +CONFIG_KILL=y +CONFIG_KILLALL=y +# CONFIG_KILLALL5 is not set +CONFIG_PIDOF=y +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +CONFIG_PS=y +# CONFIG_FEATURE_PS_WIDE is not set +# CONFIG_RENICE is not set +# CONFIG_BB_SYSCTL is not set +# CONFIG_TOP is not set +# CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set +CONFIG_UPTIME=y + +# +# Shells +# +CONFIG_FEATURE_SH_IS_ASH=y +# CONFIG_FEATURE_SH_IS_HUSH is not set +# CONFIG_FEATURE_SH_IS_LASH is not set +# CONFIG_FEATURE_SH_IS_MSH is not set +# CONFIG_FEATURE_SH_IS_NONE is not set +CONFIG_ASH=y + +# +# Ash Shell Options +# +CONFIG_ASH_JOB_CONTROL=y +# CONFIG_ASH_READ_NCHARS is not set +# CONFIG_ASH_READ_TIMEOUT is not set +CONFIG_ASH_ALIAS=y +CONFIG_ASH_MATH_SUPPORT=y +CONFIG_ASH_MATH_SUPPORT_64=y +# CONFIG_ASH_GETOPTS is not set +# CONFIG_ASH_BUILTIN_ECHO is not set +CONFIG_ASH_BUILTIN_TEST=y +# CONFIG_ASH_CMDCMD is not set +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +# CONFIG_ASH_RANDOM_SUPPORT is not set +# CONFIG_ASH_EXPAND_PRMT is not set +# CONFIG_HUSH is not set +# CONFIG_LASH is not set +# CONFIG_MSH is not set + +# +# Bourne Shell Options +# +# CONFIG_FEATURE_SH_EXTRA_QUIET is not set +# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set +CONFIG_FEATURE_COMMAND_EDITING=y +# CONFIG_FEATURE_COMMAND_EDITING_VI is not set +CONFIG_FEATURE_COMMAND_HISTORY=15 +CONFIG_FEATURE_COMMAND_SAVEHISTORY=y +CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y +# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set +CONFIG_FEATURE_SH_FANCY_PROMPT=y + +# +# System Logging Utilities +# +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +# CONFIG_FEATURE_REMOTE_LOG is not set +# CONFIG_FEATURE_IPC_SYSLOG is not set +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE= +# CONFIG_LOGREAD is not set +# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set +CONFIG_KLOGD=y +CONFIG_LOGGER=y + +# +# Runit Utilities +# +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set +# CONFIG_SV is not set +# CONFIG_SVLOGD is not set +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set diff --git a/crux-2.3-latest.changelog b/crux-2.3-latest.changelog new file mode 100644 index 0000000..6a93beb --- /dev/null +++ b/crux-2.3-latest.changelog @@ -0,0 +1,271 @@ +CHANGELOG for crux-2.3-latest.iso + + + 5 Oct, 2007 + + core: + bash -> 3.2.25-1 + curl -> 7.17.0-1 + dhcpcd -> 3.1.5-1 + ed -> 0.8-1 + exim -> 4.68-1 + jfsutils -> 1.1.12-1 + less -> 408-1 + libarchive -> 2.3.2-1 + man-pages -> 2.65-1 + openssh -> 4.7p1-1 + rsync -> 2.6.9-2 + sysklogd -> 1.5-1 + udev -> 115-1 + vim -> 7.1.123-1 + xfsprogs -> 2.9.4-1 + + opt: + fetchmail -> 6.3.8-2 + firefox -> 2.0.0.7-1 + glib -> 2.14.1-1 + gtk -> 2.12.0-1 + libpng -> 1.2.20-1 + libxml2 -> 2.6.30-1 + mdadm -> 2.6.3-1 + pango -> 1.18.0-1 + sudo -> 1.6.9p5-1 + xterm -> 229-1 + + xorg: + xorg -> 7.3-1 + xorg-inputproto -> 1.4.2.1-1 + xorg-libice -> 1.0.4-1 + xorg-libxaw -> 1.0.4-1 + xorg-libxcursor -> 1.1.9-1 + xorg-libxdamage -> 1.1.1-1 + xorg-libxfont -> 1.3.1-1 + xorg-libxi -> 1.1.3-1 + xorg-libxpm -> 3.5.7-1 + xorg-libxrandr -> 1.2.2-1 + xorg-libxrender -> 0.9.4-1 + xorg-libxtst -> 1.0.3-1 + xorg-libxxf86dga -> 1.0.2-1 + xorg-renderproto -> 0.9.3-1 + xorg-server -> 1.4-2 + xorg-sessreg -> 1.0.3-1 + xorg-xdriinfo -> 1.0.2-1 + xorg-xf86-input-acecad -> 1.2.1-1 + xorg-xf86-input-calcomp -> 1.1.1-1 + xorg-xf86-input-citron -> 2.2.1-1 + xorg-xf86-input-dmc -> 1.1.1-1 + xorg-xf86-input-dynapro -> 1.1.1-1 + xorg-xf86-input-elo2300 -> 1.1.1-1 + xorg-xf86-input-evdev -> 1.1.5-1 + xorg-xf86-input-joystick -> 1.2.3-1 + xorg-xf86-input-keyboard -> 1.2.2-1 + xorg-xf86-input-magellan -> 1.1.1-1 + xorg-xf86-input-microtouch -> 1.1.1-1 + xorg-xf86-input-penmount -> 1.2.1-1 + xorg-xf86-input-spaceorb -> 1.1.1-1 + xorg-xf86-input-vmmouse -> 12.4.2-1 + xorg-xf86-input-void -> 1.1.1-1 + xorg-xf86-video-mga -> 1.4.7-1 + xorg-xf86-video-nsc -> 2.8.3-1 + xorg-xf86-video-nv -> 2.1.5-1 + xorg-xf86-video-savage -> 2.1.3-1 + xorg-xf86-video-vmware -> 10.15.1-1 + xorg-xf86dgaproto -> 2.0.3-1 + xorg-xinit -> 1.0.7-1 + xorg-xproto -> 7.0.11-1 + xorg-xset -> 1.0.3-1 + xorg-xtrans -> 1.0.4-1 + xorg-xvinfo -> 1.0.2-1 + xorg-xwininfo -> 1.0.3-1 + + + added xorg-libpixman 0.9.5-1 + added xorg-xdm 1.1.6-1 + added xorg-xf86-video-amd 2.7.7.0-1 + added xorg-xf86-video-xgi 1.5.0-1 + + + Added device settling delay to init script for booting/installing + from USB CDROM drives + + +16 Aug, 2007 + + core: + dhcpcd -> 3.1.4-1 + hdparm -> 7.7-1 + libarchive -> 2.2.6-1 + openssl -> 0.9.8e-2 + strace -> 4.5.16-1 + xfsprogs -> 2.9.3-1 + + opt: + firefox -> 2.0.0.6-1 + glib -> 2.14.0-1 + gtk -> 2.10.14 + + xorg: + mesa3d -> 7.0.1-1 + xorg-libx11 -> 1.1.3-1 + xorg-xf86-input-mouse -> 1.2.2-1 + xorg-xf86-video-i810 -> 2.1.1-1 + xorg-xf86-video-nv -> 2.1.3-1 + xorg-xgamma -> 1.0.2-1 + xorg-xmag -> 1.0.2-1 + xorg-xmodmap -> 1.0.3-1 + xorg-xprop -> 1.0.3-1 + xorg-xrdb -> 1.0.4-1 + xorg-xsetroot -> 1.0.2-1 + + updated kernel to 2.6.22.1 + + +31 Jul, 2007 + + core: + cpio -> 2.9-1 + curl -> 7.16.4-1 + dhcpcd -> 3.0.19-1 + e2fsprogs -> 1.40.2-1 + ed -> 0.7-1 + hdparm -> 7.6-1 + iptables -> 1.3.8-1 + less -> 406-1 + libarchive -> 2.2.5-1 + libtool -> 1.5.24-1 + m4 -> 1.4.10-1 + man-pages -> 2.63-1 + pciutils -> 2.2.6-1 + pkg-config -> 0.22-1 + tar -> 1.18-1 + + opt: + cairo -> 1.4.10-1 + dialog -> 1.1-20070704-1 + firefox -> 2.0.0.5-1 + freetype -> 2.3.5-1 + xterm -> 227-1 + + xorg: + mesa3d -> 7.0-1 + xkeyboard-config -> 1.0-1 + xorg-compositeproto -> 0.4-1 + xorg-iceauth -> 1.0.2-1 + xorg-libxcomposite -> 0.4.0-1 + xorg-libxfont -> 1.3.0-1 + xorg-server -> 1.3.0.0-3 + xorg-setxkbmap -> 1.0.4-1 + xorg-xf86-input-joystick -> 1.2.2-1 + xorg-xf86-video-i810 -> 2.1.0-1 + xorg-xf86-video-nv -> 2.1.2-1 + xorg-xhost -> 1.0.2-1 + xorg-xrandr -> 1.2.2-1 + + added xorg-xbacklight 1.1-1 + + + updated kernel to 2.6.21.6 + + +21 Jun, 2007 + + core: + cpio -> 2.8-1 + expat -> 2.0.1-1 + file -> 4.21-1 + findutils -> 4.2.31-1 + hdparm -> 7.5-1 + less -> 403-1 + libarchive -> 2.2.3-1 + man-pages -> 2.56-1 + xfsprogs -> 2.8.21-1 + + opt: + firefox -> 2.0.0.4-1 + freetype -> 2.3.4-1 + libpng -> 1.2.18-1 + libxml2 -> 2.6.29-1 + mdadm -> 2.6.2-1 + mutt -> 1.5.16-1 + + xorg: + mesa3d -> 6.5.3-1 + xorg-libx11 -> 1.1.2-1 + xorg-libxtst -> 1.0.2-1 + xorg-server -> 1.3.0.0-2 + + + updated kernel to 2.6.21.5 + + +10 May, 2007 + + core: + bash -> 3.2.17-1 + bindutils -> 9.4.1-1 + hdparm -> 7.3-1 + libarchive -> 2.1.10-1 + man-pages -> 2.46-1 + psmisc -> 22.5-1 + vim -> 7.0-8 + + opt: + cairo -> 1.4.6-1 + nano -> 2.0.6-1 + + xorg: + xorg-bdftopcf -> 1.0.1-1 + xorg-xf86-input-acecad -> 1.2.0-1 + + +26 Apr, 2007 + + core: + bash -> 3.2.15-1 + coreutils -> 6.9-1 + dhcpcd -> 3.0.17-1 + exim -> 4.67-1 + filesystem -> 2.3-3 + gzip -> 1.3.12-2 + m4 -> 1.4.9-1 + man-pages -> 2.4.4-1 + pkgutils -> 5.30.0-1 + psmisc -> 22.4-1 + shadow -> 4.0.18.1-5 + vim -> 7.0-7 + + added libarchive 2.1.6-1 + + opt: + atk -> 1.18.0-1 + cairo -> 1.4.4-1 + dialog -> 1.1-20070409-1 + fetchmail -> 6.3.8-1 + firefox -> 2.0.0.3-1 + glib -> 2.12.11-1 + gtk -> 2.10.11-1 + libxml2 -> 2.6.28-1 + mutt -> 1.5.15-1 + nano -> 2.0.5-1 + pango -> 1.16.2-1 + xterm -> 225-1 + + xorg: + xorg-libx11 -> 1.1.1-2 + xorg-libxcb -> 1.0-2 + xorg-libxfont -> 1.2.8-1 + xorg-libxi -> 1.0.4-1 + xorg-libxinerama -> 1.0.2-1 + xorg-libxrandr -> 1.2.1-1 + xorg-makedepend -> 1.0.1-1 + xorg-mkfontdir -> 1.0.2-1 + xorg-randrproto -> 1.2.1-1 + xorg-server -> 1.3.0.0-1 + xorg-xdpyinfo -> 1.0.2-1 + xorg-xf86-input-joystick -> 1.2.1-1 + xorg-xf86-input-vmmouse -> 12.4.1-1 + xorg-xf86-video-i810 -> 2.0.0-1 + xorg-xf86-video-nv -> 2.0.2-1 + xorg-xrandr -> 1.2.0-1 + + added xorg-xgamma 1.0.1-1 diff --git a/doc/handbook/get_wiki_handbook b/doc/handbook/get_wiki_handbook new file mode 100755 index 0000000..4250dfa --- /dev/null +++ b/doc/handbook/get_wiki_handbook @@ -0,0 +1,24 @@ +#!/bin/bash +# Quick hack to generate handbook.txt from pmwiki +# Johannes Winkelmann, jw at tks6 dot net + +INFILE=handbook.in +OUTFILE=handbook.txt +CRUX_VERSION=2.3 +TITLE="HANDBOOK FOR CRUX $CRUX_VERSION" +URL="http://crux.nu/Main/Handbook${CRUX_VERSION/\./-}?action=print" + +set -x +links -no-numbering -no-references -dump $URL > $INFILE +cat $INFILE|while read n; do + if [ -n "$intext" ]; then + cat + elif [ "$n" = "1. Preface" ]; then + echo "$TITLE" + echo ""; + echo " $n"; + intext="yes"; + fi +done > $OUTFILE + +rm $INFILE diff --git a/doc/handbook/get_wiki_release_notes b/doc/handbook/get_wiki_release_notes new file mode 100755 index 0000000..3750547 --- /dev/null +++ b/doc/handbook/get_wiki_release_notes @@ -0,0 +1,20 @@ +#!/bin/bash +# Quick hack to generate handbook.txt from pmwiki +# Johannes Winkelmann, jw at tks6 dot net + +INFILE=releasenotes.in +OUTFILE=releasenotes.txt +CRUX_VERSION=2.3 +URL="http://crux.nu/Main/ReleaseNotes${CRUX_VERSION/\./-}?action=print" + +set -x +links -no-numbering -no-references -dump $URL > $INFILE +cat $INFILE|while read n; do + if [ -n "$intext" ]; then + cat + elif [ "$n" = "Main: ReleaseNotes${CRUX_VERSION/\./-}" ]; then + intext="yes"; + fi +done > $OUTFILE + +rm $INFILE diff --git a/initramfs/init b/initramfs/init new file mode 100755 index 0000000..d2e2ed9 --- /dev/null +++ b/initramfs/init @@ -0,0 +1,164 @@ +#!/bin/sh + +# initramfs /init (busybox ash) + +### CHANGELOG ############################################################### +# +# 2007.04.24 - remove extra status message for hidden CDROM unmount message +# 2007.04.22 - hide CDROM unmount message +# 2007.03.01 - initial creation +# +############################################################################# + +BOLD="\033[1m" +NORM="\033[0m" +RED="\033[31m" +GREEN="\033[32m" +YELLOW="\033[33m" +BLUE="\033[34m" +OK="${BOLD}${GREEN}OK${NORM}" +FAILED="${BOLD}${RED}FAILED${NORM}" +DONE="${BOLD}${GREEN}DONE${NORM}" + +checkReturn() { + if [ $? -ne 0 ] + then + echo -e $FAILED + # could spawn a shell here for the user to fix things + else + echo -e $OK + fi +} + +echoDone() { + echo -e $DONE +} + +echo "" +echo -e "${BOLD}CRUX 2.3 (UPDATED) - ${BLUE}http://crux.nu/${NORM}" +echo "" + +exec >/dev/console &1 + +echo -e -n " ${BOLD}${BLUE}*${NORM} Mounting " +echo -e -n "${BOLD}${GREEN}/proc${NORM}" +mount -t proc proc /proc + +PRINTK="`cat /proc/sys/kernel/printk`" +echo "0" > /proc/sys/kernel/printk + +echo -e ", ${BOLD}${GREEN}/sys${NORM}." +mount -t sysfs sysfs /sys + +echo -e -n " ${BOLD}${BLUE}*${NORM} Populating /dev via mdev... " +mdev -s +checkReturn +echo -e -n " ${BOLD}${BLUE}*${NORM} Registering mdev as hotplug agent... " +echo "/bin/mdev" > /proc/sys/kernel/hotplug +checkReturn + +echo -e -n " ${BOLD}${BLUE}*${NORM} Creating and mounting tmpfs... " +mkdir /.tmpfs +mount -t tmpfs tmpfs /.tmpfs +checkReturn + +if [ -d /lib/modules ] +then + echo -e -n " ${BOLD}${BLUE}*${NORM} Loading modules... " + # usb + for mod in ehci-hcd ohci-hcd uhci-hcd sl811-hcd usb-storage usbhid + do + modprobe $mod + done + + # firewire + for mod in ieee1394 ohci1394 sbp2 + do + modprobe $mod + done + + # sata + for mod in ata_piix sata_promise sata_sil sata_svw sata_via sata_nv \ + sata_sx4 sata_sis sata_uli sata_qstor ahci + do + modprobe $mod + done + + echoDone +else + echo -e " ${BOLD}${YELLOW}*${NORM} No modules were found in the initial RAM filesystem." +fi + +echo -e " ${BOLD}${BLUE}*${NORM} Waiting for devices to settle..." +sleep 10 # make this number configurable + +echo -e " ${BOLD}${BLUE}*${NORM} Searching for the CRUX CD..." +mkdir /.tmpfs/.cdrom +CRUXCD="" +CDROM_DEVICES="`grep 'drive name:' /proc/sys/dev/cdrom/info | cut -d: -f2`" +for DEV in $CDROM_DEVICES +do + DEV="/dev/$DEV" + mount -r -t iso9660 $DEV /.tmpfs/.cdrom + if [ $? -eq 0 ] + then + echo -e -n " ${BOLD}${GREEN}*${NORM} Found media on $DEV" + if [ -e /.tmpfs/.cdrom/crux-cd ] + then + echo ", CRUX CD." + CRUXCD=$DEV + ln -s $DEV /dev/cdrom + break + else + echo ", but it's not the CRUX CD." + umount /.tmpfs/.cdrom + fi + else + echo -e " ${BOLD}${YELLOW}*${NORM} No media found on $DEV." + fi +done + +echo -e -n " ${BOLD}${BLUE}*${NORM} Mounting squashfs filesystem... " +mkdir /.tmpfs/.squashfs +mount -r -t squashfs -o loop /.tmpfs/.cdrom/crux.squashfs /.tmpfs/.squashfs +checkReturn + +echo -e " ${BOLD}${BLUE}*${NORM} Populating root filesystem..." +mkdir -p /newroot +echo -e -n " ${BOLD}${BLUE}*${NORM} Mounting new root filesystem... " +mount -t tmpfs tmpfs /newroot +checkReturn +echo -e -n " ${BOLD}${BLUE}*${NORM} Copying files from squashfs... " +cp -af /.tmpfs/.squashfs/* /newroot/ +checkReturn +echo -e -n " ${BOLD}${BLUE}*${NORM} Copying devices from rootfs... " +cp -af /dev/* /newroot/dev/ +checkReturn +mkdir -p /newroot/dev/pts /newroot/cdrom + +echo -e -n " ${BOLD}${BLUE}*${NORM} Unmounting squashfs filesystem... " +umount /.tmpfs/.squashfs +checkReturn +rmdir /.tmpfs/.squashfs + +# even though the CDROM gets unmounted here, it gets remounted after +# the new init starts, so the message might be confusing... +#echo -e -n " ${BOLD}${BLUE}*${NORM} Unmounting CDROM... " +umount /.tmpfs/.cdrom +#checkReturn +rmdir /.tmpfs/.cdrom + +echo -e -n " ${BOLD}${BLUE}*${NORM} Unmounting tmpfs... " +umount /.tmpfs +checkReturn +rmdir /.tmpfs + +echo -e " ${BOLD}${BLUE}*${NORM} Switching root.\n" +echo "$PRINTK" > /proc/sys/kernel/printk +echo > /proc/sys/kernel/hotplug +umount /sys +umount /proc +exec /bin/switch_root /newroot /sbin/init + +echo "Something's broken, here's a shell." +exec /bin/sh diff --git a/initramfs/initramfs.lst b/initramfs/initramfs.lst new file mode 100644 index 0000000..0d34f6a --- /dev/null +++ b/initramfs/initramfs.lst @@ -0,0 +1,71 @@ +dir /proc 755 0 0 +dir /sys 755 0 0 + +dir /dev 755 0 0 +nod /dev/console 640 0 0 c 5 1 +nod /dev/null 664 0 0 c 1 3 + +file /init init 755 0 0 + +dir /bin 755 0 0 +file /bin/busybox ../busybox/busybox 4755 0 0 +slink /bin/sh busybox 777 0 0 +slink /bin/mount busybox 777 0 0 +slink /bin/umount busybox 777 0 0 +slink /bin/chroot busybox 777 0 0 +slink /bin/grep busybox 777 0 0 +slink /bin/echo busybox 777 0 0 +slink /bin/cut busybox 777 0 0 +slink /bin/mkdir busybox 777 0 0 +slink /bin/rmdir busybox 777 0 0 +slink /bin/[ busybox 777 0 0 +slink /bin/cp busybox 777 0 0 +slink /bin/ln busybox 777 0 0 +slink /bin/switch_root busybox 777 0 0 +slink /bin/mdev busybox 777 0 0 +slink /bin/modprobe busybox 777 0 0 +slink /bin/insmod busybox 777 0 0 +slink /bin/lsmod busybox 777 0 0 +slink /bin/sleep busybox 777 0 0 + +# modules (may be needed to find the CDROM) +dir /lib 755 0 0 +dir /lib/modules 755 0 0 +dir /lib/modules/#KERNEL_VERSION# 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/hid 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/hid/usbhid 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/core 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/host 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/input 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/storage 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/ieee1394 755 0 0 +dir /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata 755 0 0 +file /lib/modules/#KERNEL_VERSION#/modules.dep ../tmp/squashfs/lib/modules/#KERNEL_VERSION#/modules.dep 644 0 0 +# usb +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/core/usbcore.ko ../kernel/linux-#KERNEL_VERSION#/drivers/usb/core/usbcore.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/host/ehci-hcd.ko ../kernel/linux-#KERNEL_VERSION#/drivers/usb/host/ehci-hcd.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/host/ohci-hcd.ko ../kernel/linux-#KERNEL_VERSION#/drivers/usb/host/ohci-hcd.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/host/uhci-hcd.ko ../kernel/linux-#KERNEL_VERSION#/drivers/usb/host/uhci-hcd.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/host/sl811-hcd.ko ../kernel/linux-#KERNEL_VERSION#/drivers/usb/host/sl811-hcd.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/hid/usbhid/usbhid.ko ../kernel/linux-#KERNEL_VERSION#/drivers/hid/usbhid/usbhid.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/usb/storage/usb-storage.ko ../kernel/linux-#KERNEL_VERSION#/drivers/usb/storage/usb-storage.ko 644 0 0 +# firewire +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ieee1394/ieee1394.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ieee1394/ieee1394.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ieee1394/ohci1394.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ieee1394/ohci1394.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ieee1394/sbp2.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ieee1394/sbp2.ko 644 0 0 +# serial ATA +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/ata_piix.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/ata_piix.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_promise.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_promise.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_sil.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_sil.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_svw.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_svw.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_via.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_via.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_nv.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_nv.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_sx4.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_sx4.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_sis.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_sis.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/pata_sis.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/pata_sis.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_uli.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_uli.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/sata_qstor.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/sata_qstor.ko 644 0 0 +file /lib/modules/#KERNEL_VERSION#/kernel/drivers/ata/ahci.ko ../kernel/linux-#KERNEL_VERSION#/drivers/ata/ahci.ko 644 0 0 diff --git a/iso/bin/net-setup b/iso/bin/net-setup new file mode 100755 index 0000000..f211870 --- /dev/null +++ b/iso/bin/net-setup @@ -0,0 +1,481 @@ +#!/bin/bash +# +# CRUX Setup +# +# Copyright (c) 2001-2005 by Per Liden +# +# 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="2.3" +DEFAULT_MIRROR="http://crux.nu/updated/netinst/" + +do_dialog() { + dialog --backtitle "CRUX $VERSION Setup" --no-shadow "$@" +} + +do_abort() { + do_dialog --aspect 50 --defaultno --yesno "Abort installation?" 0 0 && exit 1 +} + +do_select() { + while true + do + do_dialog "$@" + if [ $? != 0 ] + then + do_abort + else + break + fi + done +} + +welcome() { + do_select --aspect 5 --yesno "Welcome!\n\nThis script will attempt to install CRUX via an http or ftp connection. If you haven't already configured/activated your network connection, you should do so now. The script will not do it for you.\n\nIt is not supported by anyone, use at your own risk.\n\nAre you sure you want to continue?" 0 0 +} + +select_action() { + do_select --menu "Install or upgrade?" 9 45 2 \ + "1" "Install CRUX $VERSION" \ + "2" "Upgrade to CRUX $VERSION" 2> $tmpfile + ACTION=`cat $tmpfile` + if [ "$ACTION" = "1" ] + then + ACTION="INSTALL" + else + ACTION="UPGRADE" + do_select --aspect 5 --yesno "NOTE!\n\nBefore upgrading make sure /etc/pkgadd.conf in the old installation is tuned to fit your needs, important files might otherwise be overwritten. Further, when this script has completed the upgrade you need to go though the rejected files in /var/lib/pkg/rejected/ and upgrade them manually if needed. See the pkgadd(8) man page for more information about /etc/pkgadd.conf.\n\nAre you really sure you want to continue?" 0 0 + fi +} + +select_root() { + while true + do + do_select --aspect 40 --inputbox "Enter directory where your CRUX root partition is mounted:" 0 0 \ + "/mnt" 2> $tmpfile + ROOT=`cat $tmpfile` + if [ -d "$ROOT" ] + then + if [ "$ACTION" = "INSTALL" ] || [ -f "$ROOT/var/lib/pkg/db" ] + then + break + fi + do_dialog --aspect 50 --msgbox "Directory does not look like a CRUX root directory. Try again." 0 0 + else + do_dialog --aspect 50 --msgbox "Directory not found. Try again." 0 0 + fi + done +} + +select_site() { + while true + do + do_dialog --aspect 40 --inputbox \ + "Enter the URL you wish to use to install CRUX packages:" 0 0 \ + "$DEFAULT_MIRROR" 2> $tmpfile + INSTURL=`cat $tmpfile` + + # verify the site is valid by fetching packages.lst and MD5SUMS + [ -f $ROOT/packages.lst ] && rm -f $ROOT/packages.lst + [ -f $ROOT/MD5SUMS ] && rm -f $ROOT/MD5SUMS + do_dialog --aspect 50 --infobox \ + "Attempting to download the package list..." 0 0 + wget --directory-prefix=$ROOT --tries=5 \ + ${INSTURL}/crux/packages.lst > $tmpfile 2>&1 + wget --directory-prefix=$ROOT --tries=5 \ + ${INSTURL}/crux/MD5SUMS >> $tmpfile 2>&1 + + if [ ! -f $ROOT/packages.lst ] || [ ! -f $ROOT/MD5SUMS ] + then + do_dialog --aspect 50 --msgbox \ + "Failed to download the package list! Try a different mirror." 0 0 + else + break + fi + + done +} + +select_collections() { + if [ "$ACTION" != "INSTALL" ] + then + return 0 + fi + # add some logic here to parse packages.lst for the available collections - + # if the required ones aren't available, bail + # + TITLE="Select collections to install:\n(detailed package selection will follow)" + do_select --separate-output --checklist "$TITLE" 13 60 6 \ + core "The core packages (required)" ON \ + opt "Optional packages" OFF \ + xorg "X.org packages" OFF 2> $collfile +} + +ask_detailed() { + if [ "$ACTION" != "INSTALL"] + then + return 0 + fi + do_dialog --aspect 50 --defaultno --yesno "Do you want the chance to select packages individually?" 0 0 && DO_DETAILED="yes" +} + +select_packages() { + do_dialog --aspect 50 --infobox "Collecting package information, please wait..." 0 0 + + if [ "$ACTION" = "INSTALL" ] + then + if [ "$DO_DETAILED" = "yes" ] + then + for collection in core opt xorg + do + presel=`grep $collection $collfile` + if [ "$presel" == "$collection" ] + then + checked=ON + else + checked=OFF + fi + do_dialog --aspect 50 --infobox "Gathering package information, please wait..." 0 0 + TITLE="Select $collection packages to install:" + PKG_LIST=`cat $ROOT/packages.lst | grep ^$collection | cut -d" " -f3 | awk -v col="$collection" -v chk="$checked" '{ print $1, "(" col ")", chk }' \ + | sed 's/.pkg.tar.gz//g' | sort | xargs echo ' '` + do_select --separate-output --checklist "$TITLE" 19 60 12 $PKG_LIST 2>> $pkgfile + done + else # no detailed selection + for collection in core opt xorg + do + presel=`grep $collection $collfile` + if [ "$presel" == "$collection" ] + then + cat $ROOT/packages.lst | grep ^$collection | cut -d" " -f3 | awk '{ print $1 }' | sed 's/.pkg.tar.gz//g' | sort >> $pkgfile + fi + done + fi + else + # Upgrade + do_dialog --aspect 50 --infobox "Gathering package information, please wait..." 0 0 + TITLE="Select packages to upgrade:" + INSTALLED_PACKAGES=`pkginfo -r $ROOT -i | gawk '{ print $1; }'` + for package in $INSTALLED_PACKAGES + do + CORE_LIST="$CORE_LIST `grep ^core $ROOT/packages.lst | grep \" ${package}#.*.pkg.tar.gz\" \ + | cut -d" " -f3 | awk '{print $1, "(core) ON\n" }' | sed 's/.pkg.tar.gz//g' \ + | sort | xargs echo ' '`" + OPT_LIST="$OPT_LIST `grep ^opt $ROOT/packages.lst | grep \" ${package}#.*.pkg.tar.gz\" \ + | cut -d" " -f3 | awk '{print $1, "(opt) ON\n" }' | sed 's/.pkg.tar.gz//g' \ + | sort | xargs echo ' '`" + done + do_select --separate-output --checklist "$TITLE" 19 60 12 $CORE_LIST $OPT_LIST 2> $pkgfile + fi +} + +check_dependencies() { + if [ "$ACTION" != "INSTALL" ] + then + return 0 + fi + do_dialog --aspect 50 --infobox "Checking dependencies, please wait..." 0 0 + get_missing_deps + if [ "$MISSING_DEPS" ] + then + for package in $MISSING_DEPS + do + MISSING_LIST="$MISSING_LIST `grep \"${package}#.*.pkg.tar.gz\" $ROOT/packages.lst | sed 's/.pkg.tar.gz/ /g' | awk '{ print $3, "(" $1 ")", "ON" }' | sort | xargs echo ' '`" + done + TITLE="The following packages are needed by the ones you selected:" + do_select --separate-output --checklist "$TITLE" 19 60 12 $MISSING_LIST 2>> $pkgfile + fi +} + +get_missing_deps() { + needed="" + toinstall=`sed 's/\#.*//g' $pkgfile` + for f in $toinstall + do + pdeps=`grep "^$f\:" $depsfile | sed "s|^$f: ||g"` + for d in $pdeps + do + needed="$needed $d" + done + done + sed 's/\#.*//g' $pkgfile | sort -u > $markedfile + echo $needed | tr ' ' '\n' | sort -u > $neededfile + MISSING_DEPS=`comm -1 -3 $markedfile $neededfile` +} + +confirm() { + if [ "$ACTION" = "INSTALL" ] + then + # Install + do_select --aspect 25 --yesno \ + "Selected packages will now be installed. Are you sure you want to continue?" 0 0 + else + # Upgrade + do_select --aspect 25 --yesno \ + "Selected packages will now be upgraded. Are you sure you want to continue?" 0 0 + fi +} + +progressbar() { + echo "XXX" + expr $COUNT '*' 100 / $TOTAL + echo "\n$*" + echo "XXX" +} + +install_packages() { + if [ ! -d $ROOT/var/lib/pkg ] + then + mkdir -p $ROOT/var/lib/pkg + touch $ROOT/var/lib/pkg/db + fi + + if [ -d $ROOT/var/lib/pkg/rejected ] + then + rm -rf $ROOT/var/lib/pkg/rejected + fi + + if [ "$ACTION" = "INSTALL" ] + then + PKGARGS="" + else + # We use -f here since we want to avoid pkgadd conflicts. + # Unwanted/Unexpected conflicts could arise if files are + # moved from one package to another, or if the user added + # the files himself. Instead of failing the whole upgrade + # we force the upgrade. This should be fairly safe and it + # will probably help to avoid some "semi-bogus" errors from + # pkgadd. The rules in /etc/pkgadd.conf will still be used. + PKGARGS="-f -u" + fi + + ( + # Log header + echo "Log ($logfile)" > $logfile + echo "----------------------------------------------------------" >> $logfile + + # Install packages + TOTAL=`cat $pkgfile | wc -l` + let $((TOTAL+=1)) + let $((COUNT=0)) + let $((ERRORS=0)) + for FILE in `cat $pkgfile` + do + progressbar "Downloading $FILE..." + ESCFILE="`echo $FILE | sed -e 's/#/%23/g'`" + TMP="`grep $FILE.pkg.tar.gz $ROOT/packages.lst | cut -d" " -f1`" + + let $((TRIES=0)) + while true + do + let $((TRIES+=1)) + if [ "$TRIES" = "5" ] + then + do_dialog --aspect 50 --msgbox "Failed to download $FILE.pkg.tar.gz 5 times. Please use another mirror or install it manually after setup completes." 0 0 + FAILED=1 + break + fi + # if the last md5 check failed there might be an incomplete file + if [ -f $ROOT/$FILE.pkg.tar.gz ] + then + rm -f $ROOT/$FILE.pkg.tar.gz > /dev/null + fi + # fetch the file + wget --tries=5 -O $ROOT/$FILE.pkg.tar.gz \ + ${INSTURL}/crux/$TMP/$ESCFILE.pkg.tar.gz > $tmpfile 2>&1 + # check its md5sum + if [ "`grep $FILE.pkg.tar.gz$ $ROOT/MD5SUMS | cut -d\" \" -f1`" \ + = "`md5sum $ROOT/$FILE.pkg.tar.gz | cut -d\" \" -f1`" ] + then + break + else + do_dialog --aspect 50 --infobox "$FILE.pkg.tar.gz failed MD5SUM check, refetching..." 0 0 + sleep 5 + fi + done + + if [ ! "$FAILED" = "1" ] + then + progressbar "Installing $FILE..." + echo -n "Installing $FILE....." >> $logfile + pkgadd -r $ROOT $PKGARGS $ROOT/$FILE.pkg.tar.gz >> $tmpfile 2>&1 + rm $ROOT/$FILE.pkg.tar.gz + let $((COUNT+=1)) + if [ $? = 0 ] + then + echo "OK" >> $logfile + else + let $((ERRORS+=1)) + echo "ERROR" >> $logfile + echo "" >> $logfile + cat $tmpfile >> $logfile + echo "" >> $logfile + fi + fi + done + rm -f $ROOT/packages.lst $ROOT/MD5SUMS + + # Log footer + echo "----------------------------------------------------------" >> $logfile + echo "$ERRORS error(s) found" >> $logfile + + cat $logfile > $tmpfile + + echo "" > $logfile + if [ "$ERRORS" = "0" ] + then + echo "Package $ACTION COMPLETED SUCCESSFULLY!" >> $logfile + else + echo "Package $ACTION FAILED!" >> $logfile + fi + echo "" >> $logfile + echo "" >> $logfile + cat $tmpfile >> $logfile + + ) | do_dialog --title " Please wait " --gauge "" 8 60 0 + + # Show log + do_dialog --exit-label "OK" --textbox $logfile 19 68 +} + +install_kernel() { + let $((TOTAL=1)) + let $((COUNT=0)) + let $((ERRORS=0)) + + # is the kernel already installed in $ROOT? if it's an upgrade, might be + if [ -d $ROOT/usr/src/linux-$KERNEL_VERSION ] + then + # already there; abort, abort! + do_dialog --aspect 40 --msgbox "Directory $ROOT/usr/src/linux-$KERNEL_VERSION already exists. Assuming linux-$KERNEL_VERSION is already installed." 0 0 + echo "Directory $ROOT/usr/src/linux-$KERNEL_VERSION already exists." >> $logfile + echo "Assuming linux-$KERNEL_VERSION is already installed." >> $logfile + else + while true + do + # download and install the kernel + do_dialog --aspect 40 --inputbox \ + "Enter the URL you wish to use to download the linux kernel:" 0 0 \ + "ftp://ftp.kernel.org/pub/linux/kernel/" 2> $tmpfile + KERNELURL=`cat $tmpfile` + #( + #progressbar "Downloading linux-$KERNEL_VERSION..." + do_dialog --aspect 50 --infobox "Downloading linux-$KERNEL_VERSION..." 0 0 + wget --directory-prefix=$ROOT/usr/src --tries=5 \ + ${KERNELURL}/v2.6/linux-$KERNEL_VERSION.tar.bz2 > $tmpfile 2>&1 + if [ ! -f $ROOT/usr/src/linux-$KERNEL_VERSION.tar.bz2 ] + then + do_dialog --aspect 40 --msgbox \ + "Failed to download the kernel source tarball. Try a different mirror." 0 0 + else + break + fi + #) | do_dialog --title " Please wait " --gauge "" 8 60 0 + done + # kernel should be downloaded now, install it + ( + progressbar "Installing `basename $KERNEL .config`..." + let $((COUNT+=1)) + echo -n "Installing `basename $KERNEL .config`....." >> $logfile + ( + set -e + tar -C $ROOT/usr/src -xjf $ROOT/usr/src/linux-$KERNEL_VERSION.tar.bz2 + cp -f ./kernel/linux-$KERNEL_VERSION.config \ + $ROOT/usr/src/linux-$KERNEL_VERSION/.config + chown -R root:root $ROOT/usr/src/linux-$KERNEL_VERSION + chmod -R go-w $ROOT/usr/src/linux-$KERNEL_VERSION + shopt -s nullglob + # modified to be filename-agnostic + #for patch in ./kernel/linux-$KERNEL_VERSION-*.patch; do + for patch in ./kernel/*patch + do + patch -s -d $ROOT/usr/src/linux-$KERNEL_VERSION -p1 < $patch + cp $patch $ROOT/usr/src/ + done + if [ ! -d $ROOT/lib/modules/$KERNEL_VERSION ] + then + mkdir -p $ROOT/lib/modules/$KERNEL_VERSION + depmod -b $ROOT -a $KERNEL_VERSION + fi + ) > $tmpfile 2>&1 + ) | do_dialog --title " Please wait " --gauge "" 8 60 0 + if [ $? = 0 ] + then + echo "OK" >> $logfile + else + let $((ERRORS+=1)) + echo "ERROR" >> $logfile + echo "" >> $logfile + cat $tmpfile >> $logfile + echo "" >> $logfile + fi + do_dialog --aspect 40 --msgbox "Kernel source install completed successfully." 0 0 + fi +} + +main() { + welcome + select_action + select_root + select_site + select_collections + ask_detailed + select_packages + check_dependencies + confirm + if [ "$ACTION" = "UPGRADE" ] && [ -f /usr/bin/net-setup-helper ] + then + (/usr/bin/net-setup-helper $ROOT $INSTURL &> $helperlogfile) | do_dialog \ + --title " Please wait [2.2 -> 2.3 check]" --gauge "" 8 60 0 + fi + install_packages + install_kernel +} + +tmpfile=/tmp/tmp.$$ +collfile=/tmp/collections.$$ +pkgfile=/tmp/packages.$$ +logfile=/tmp/log.$$ +helperlogfile=/tmp/log-helper.$$ +crux_dir=/cdrom/crux +depsfile=$crux_dir/setup.dependencies +neededfile=/tmp/needed.$$ +markedfile=/tmp/marked.$$ + +# Detailed selection of packages +DO_DETAILED="no" +MISSING_DEPS="" + +KERNEL=$crux_dir/kernel/linux-*.config +KERNEL_VERSION=`basename $KERNEL .config | sed "s/linux-//"` + +trap "rm -f $tmpfile $pkgfile $collfile $neededfile $markedfile" 0 1 2 5 15 + +if [ "$1" != "" ]; then + crux_dir=$1 +fi + +if [ -d $crux_dir ]; then + cd $crux_dir +else + do_dialog --aspect 50 --msgbox "Directory $crux_dir not found. Aborting." 0 0 + exit 1 +fi + +main + +# End of file diff --git a/iso/bin/net-setup-helper b/iso/bin/net-setup-helper new file mode 100755 index 0000000..af84c49 --- /dev/null +++ b/iso/bin/net-setup-helper @@ -0,0 +1,198 @@ +#!/bin/bash +# post setup +# +# Johannes Winkelmann, jw at tks6 dot net + +ROOT=$1 +INSTURL=$2 +DB=$ROOT/var/lib/pkg/db + +## those values should be changed: +TMPDB=$DB.tmp +BACKUPDB=$DB.backup +PKGADD="pkgadd" +PKGRM="pkgrm" +MV="mv" + +rename_packages() { + if [ -z "$1" ]; then + return + fi + pkg=$@ + + filter="sed " + runfilter="no" + for tuple in $@; do + split=($(echo $tuple|sed -e 's|:| |')) + if [ -n "${split[1]}" ] && [ `pkginfo -r $ROOT -i|gawk '{ print $1; }'|grep ^${split[0]}$` ]; then + echo "Package renamed: ${split[0]} -> ${split[1]}" + filter="$filter -e 's|^${split[0]}$|${split[1]}|'" + runfilter="yes" + fi + done + if [ "$runfilter" = "no" ]; then + return + fi + + :> $TMPDB + if [ -f $DB ]; then + nextIsName=1 + cat $DB|while read l; do + if [ $nextIsName -eq 1 ]; then + nextIsName=0 + echo $l|eval $filter >> $TMPDB + else + if [ "$l" = "" ]; then + nextIsName=1 + fi + echo $l >> $TMPDB + fi + done + fi + + $MV $DB $BACKUPDB + $MV $TMPDB $DB +} + + +remove_packages() { + for package in $@; do + if [ `pkginfo -r $ROOT -i|gawk '{ print $1; }'|grep ^$package$` ]; then + echo "Package removed: $package" + $PKGRM -r $ROOT $package + fi + done +} + +inject_packages() { + for package in $@; do + if [ -z "`pkginfo -r $ROOT -i|gawk '{ print $1; }'|grep ^$package$`" ]; then + echo "Injecting package: $package" + #pkg="`find core opt -name \"${package}#*.pkg.tar.gz\" &2> /dev/null`" + pkg="`grep \" $package \" $ROOT/packages.lst | cut -d" " -f3`" + ESCPKG="`echo $pkg | sed -e 's/#/%23/g'`" + TMP="`grep \" $package \" $ROOT/packages.lst | cut -d" " -f1`" + + let $((TRIES=0)) + while true + do + let $((TRIES+=1)) + if [ "$TRIES" = "5" ] + then + echo "Failed to download $pkg 5 times. Please install it manually after setup completes." + FAILED=1 + break + fi + # if the last md5 check failed there might be an incomplete file + if [ -f $ROOT/$pkg ] + then + rm -f $ROOT/$pkg > /dev/null + fi + # fetch the file + wget --tries=5 -O $ROOT/$pkg \ + ${INSTURL}/crux/$TMP/$ESCPKG > /tmp/log.wget.$$ 2>&1 + # check its md5sum + if [ "`grep ${pkg}$ $ROOT/MD5SUMS | cut -d\" \" -f1`" \ + = "`md5sum $ROOT/$pkg | cut -d\" \" -f1`" ] + then + break + else + echo "$pkg failed md5sum check, refetching..." + sleep 5 + fi + done + + if [ -n "$ROOT/$pkg" ]; then + $PKGADD -r $ROOT -f $ROOT/$pkg + rm -f $ROOT/$pkg + else + echo " ERROR: package $package not found" + fi + fi + done +} + +#################### + +if [ -z "$1" ]; then + echo "Usage: $0 " + exit -1 +fi + +# 2.2 -> 2.3 +echo "* crux 2.2 -> 2.3 net-setup-helper" + +# inject iproute2, backup old net script, remove net-tools +# and re-add it to avoid /etc/rc.d/net being deleted +# when net-tools is updated later. + +if [ -f "$ROOT/etc/rc.d/net" ] +then + cp $ROOT/etc/rc.d/net $ROOT/etc/rc.d/net.orig +fi +remove_packages net-tools +inject_packages iproute2 net-tools + +# split up netkit-base +remove_packages netkit-base +inject_packages inetd iana-etc iputils + +# modular xorg +if [ `pkginfo -r $ROOT -i | gawk '{ print $1; }' | grep ^x11$` ] +then + remove_packages x11 + inject_packages libdrm xorg-xproto xorg-glproto xorg-xextproto \ + xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto \ + xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto \ + xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto \ + xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto \ + xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto \ + xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto \ + xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto \ + xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto \ + expat xorg-font-util xorg-font-alias xorg-makedepend xorg-libxdmcp \ + xorg-libxau xorg-libfontenc xorg-rgb libxml2 freetype \ + xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb \ + xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale \ + xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm \ + xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp \ + xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga \ + xorg-libxmu xorg-libxpm xorg-libxtrap xorg-font-misc-misc \ + xorg-font-cursor-misc xorg-libxkbui xorg-xkbcomp xorg-libxrandr \ + xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d \ + xorg-libxvmc xorg-libxaw xkeyboard-config p5-xml-parser xorg-server \ + xorg-xf86-input-mouse xorg-xf86-input-keyboard xorg-xf86-video-vesa \ + xorg-xinit xorg-xauth xorg xterm xorg-libpixman + inject_packages xorg-font-adobe-100dpi xorg-font-adobe-75dpi \ + xorg-font-adobe-utopia-100dpi xorg-font-adobe-utopia-75dpi \ + xorg-font-adobe-utopia-type1 xorg-font-alias xorg-font-arabic-misc \ + xorg-font-bh-100dpi xorg-font-bh-75dpi \ + xorg-font-bh-lucidatypewriter-100dpi \ + xorg-font-bh-lucidatypewriter-75dpi xorg-font-bh-ttf \ + xorg-font-bh-type1 xorg-font-bitstream-100dpi \ + xorg-font-bitstream-75dpi xorg-font-bitstream-speedo \ + xorg-font-bitstream-type1 xorg-font-bitstream-vera \ + xorg-font-cronyx-cyrillic xorg-font-cursor-misc \ + xorg-font-daewoo-misc xorg-font-dec-misc xorg-font-ibm-type1 \ + xorg-font-isas-misc xorg-font-jis-misc xorg-font-micro-misc \ + xorg-font-misc-cyrillic xorg-font-misc-ethiopic \ + xorg-font-misc-meltho xorg-font-misc-misc xorg-font-mutt-misc \ + xorg-font-schumacher-misc xorg-font-screen-cyrillic \ + xorg-font-sony-misc xorg-font-sun-misc xorg-font-util \ + xorg-font-winitzki-cyrillic xorg-font-xfree86-type1 + inject_packages xorg-xf86-video-apm xorg-xf86-video-ark \ + xorg-xf86-video-ati xorg-xf86-video-chips xorg-xf86-video-cirrus \ + xorg-xf86-video-cyrix xorg-xf86-video-dummy xorg-xf86-video-fbdev \ + xorg-xf86-video-glint xorg-xf86-video-i128 xorg-xf86-video-i740 \ + xorg-xf86-video-i810 xorg-xf86-video-imstt xorg-xf86-video-mga \ + xorg-xf86-video-neomagic xorg-xf86-video-newport \ + xorg-xf86-video-nsc xorg-xf86-video-nv xorg-xf86-video-rendition \ + xorg-xf86-video-s3 xorg-xf86-video-s3virge xorg-xf86-video-savage \ + xorg-xf86-video-siliconmotion xorg-xf86-video-sis xorg-xf86-video-sisusb \ + xorg-xf86-video-sunbw2 xorg-xf86-video-suncg14 xorg-xf86-video-suncg3 \ + xorg-xf86-video-suncg6 xorg-xf86-video-sunffb xorg-xf86-video-sunleo \ + xorg-xf86-video-suntcx xorg-xf86-video-tdfx xorg-xf86-video-tga \ + xorg-xf86-video-trident xorg-xf86-video-tseng xorg-xf86-video-v4l \ + xorg-xf86-video-vga xorg-xf86-video-via xorg-xf86-video-vmware \ + xorg-xf86-video-voodoo +fi diff --git a/iso/bin/serial_console b/iso/bin/serial_console new file mode 100755 index 0000000..e149dc7 --- /dev/null +++ b/iso/bin/serial_console @@ -0,0 +1,17 @@ +#!/bin/sh +# +# /usr/bin/serial_console +# +# This script opens a tty on /dev/tts/0 if it is a valid terminal, otherwise +# goes to sleep for a year. This script is needed to prevent init(1) from +# respawning agetty over and over again on machines that doesn't have a serial +# port. +# + +if stty -F /dev/ttyS0 > /dev/null 2>&1; then + exec /sbin/agetty 38400 ttyS0 vt100 +else + exec /bin/sleep 365d +fi + +# End of file diff --git a/iso/bin/setup b/iso/bin/setup new file mode 100755 index 0000000..02f8532 --- /dev/null +++ b/iso/bin/setup @@ -0,0 +1,342 @@ +#!/bin/bash +# +# CRUX Setup +# +# Copyright (c) 2001-2005 by Per Liden +# +# 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="2.3" + +do_dialog() { + dialog --backtitle "CRUX $VERSION Setup" --no-shadow "$@" +} + +do_abort() { + do_dialog --aspect 50 --defaultno --yesno "Abort installation?" 0 0 && exit 1 +} + +do_select() { + while true; do + do_dialog "$@" + if [ $? != 0 ]; then + do_abort + else + break + fi + done +} + +welcome() { + do_select --aspect 5 --yesno "Welcome!\n\nThis script will guide you through the installation of CRUX packages.\n\nBefore starting the installation make sure you have read and understood the \"CRUX Installation Guide\". If you have done that then please continue, else abort the installation and come back later.\n\nAre you really sure you want to continue?" 0 0 +} + +select_action() { + do_select --menu "Install or upgrade?" 9 45 2 \ + "1" "Install CRUX $VERSION" \ + "2" "Upgrade to CRUX $VERSION" 2> $tmpfile + ACTION=`cat $tmpfile` + if [ "$ACTION" = "1" ]; then + ACTION="INSTALL" + else + ACTION="UPGRADE" + do_select --aspect 5 --yesno "NOTE!\n\nBefore upgrading make sure /etc/pkgadd.conf in the old installation is tuned to fit your needs, important files might otherwise be overwritten. Further, when this script has completed the upgrade you need to go though the rejected files in /var/lib/pkg/rejected/ and upgrade them manually if needed. See the pkgadd(8) man page for more information about /etc/pkgadd.conf.\n\nAre you really sure you want to continue?" 0 0 + fi +} + +select_root() { + while true; do + do_select --aspect 40 --inputbox "Enter directory where your CRUX root partition is mounted:" 0 0 "/mnt" 2> $tmpfile + ROOT=`cat $tmpfile` + if [ -d "$ROOT" ]; then + if [ "$ACTION" = "INSTALL" ] || [ -f "$ROOT/var/lib/pkg/db" ]; then + break + fi + do_dialog --aspect 50 --msgbox "Directory does not look like a CRUX root directory. Try again." 0 0 + else + do_dialog --aspect 50 --msgbox "Directory not found. Try again." 0 0 + fi + done +} + +select_collections() { + if [ "$ACTION" != "INSTALL" ]; then + return 0 + fi + if [ ! -d core ] || [ ! -d opt ] || [ ! -d xorg ] || [ ! -d kernel ]; then + do_dialog --aspect 50 --msgbox "Package directories (core, opt, xorg or kernel) were not found in $crux_dir. Aborting." 0 0 + exit 1 + fi + TITLE="Select collections to install:\n(detailed package selection will follow)" + do_select --separate-output --checklist "$TITLE" 13 60 6 \ + core "The core packages (required)" ON \ + opt "Optional packages" OFF \ + xorg "X.org packages" OFF 2> $collfile +} + +ask_detailed() { + if [ "$ACTION" != "INSTALL" ]; then + return 0 + fi + do_dialog --aspect 50 --defaultno --yesno "Do you want the chance to select packages individually?" 0 0 && DO_DETAILED="yes" +} + +select_packages() { + if [ ! -d core ] || [ ! -d opt ] || [ ! -d xorg ] || [ ! -d kernel ]; then + do_dialog --aspect 50 --msgbox "Package directories (core, opt, xorg, and kernel) were not found in $crux_dir. Aborting." 0 0 + exit 1 + fi + if [ "$ACTION" = "INSTALL" ]; then + if [ "$DO_DETAILED" = "yes" ]; then + for collection in core opt xorg; do + presel=`grep $collection $collfile` + if [ "$presel" == "$collection" ]; then + checked=ON + else + checked=OFF + fi + do_dialog --aspect 50 --infobox "Searching for packages, please wait..." 0 0 + TITLE="Select $collection packages to install:" + PKG_LIST=`find $collection -name '*.pkg.tar.gz' -printf "%f ($collection) $checked\n" | sed 's/.pkg.tar.gz//g' | sort | xargs echo ' '` + do_select --separate-output --checklist "$TITLE" 19 60 12 $PKG_LIST 2>> $pkgfile + done + else # no detailed selection + for collection in core opt xorg; do + presel=`grep $collection $collfile` + if [ "$presel" == "$collection" ]; then + find $collection -name '*.pkg.tar.gz' -printf "%f\n" | sed 's/.pkg.tar.gz//g' | sort >> $pkgfile + fi + done + fi + else + # Upgrade + do_dialog --aspect 50 --infobox "Searching for packages, please wait..." 0 0 + TITLE="Select packages to upgrade:" + INSTALLED_PACKAGES=`pkginfo -r $ROOT -i | gawk '{ print $1; }'` + for package in $INSTALLED_PACKAGES; do + CORE_LIST="$CORE_LIST `find core -name \"${package}#*.pkg.tar.gz\" -printf '%f (core) ON\n' | sed 's/.pkg.tar.gz/ /g' | sort | xargs echo ' '`" + OPT_LIST="$OPT_LIST `find opt -name \"${package}#*.pkg.tar.gz\" -printf '%f (opt) ON\n' | sed 's/.pkg.tar.gz/ /g' | sort | xargs echo ' '`" + done + do_select --separate-output --checklist "$TITLE" 19 60 12 $CORE_LIST $OPT_LIST 2> $pkgfile + fi +} + +check_dependencies() { + if [ "$ACTION" != "INSTALL" ]; then + return 0 + fi + do_dialog --aspect 50 --infobox "Checking dependencies, please wait..." 0 0 + get_missing_deps + if [ -n "$MISSING_DEPS" ]; then + for package in $MISSING_DEPS; do + MISSING_LIST="$MISSING_LIST `find . -name \"${package}#*.pkg.tar.gz\" -printf '%f %p ON\n' | sed 's/.pkg.tar.gz/ /g' | sed 's|./|(|;s|/.* O|) O|' | sort | xargs echo ' '`" + done + TITLE="The following packages are needed by the ones you selected" + do_select --separate-output --checklist "$TITLE" 19 60 12 $MISSING_LIST 2>> $pkgfile + fi +} + +get_missing_deps() { + needed="" + toinstall=`sed 's/\#.*//g' $pkgfile` + for f in $toinstall; do + pdeps=`grep "^$f\:" $depsfile|sed "s|^$f: ||g"` + for d in $pdeps; do + needed="$needed $d" + done + done + sed 's/\#.*//g' $pkgfile|sort -u > $markedfile + echo $needed|tr ' ' '\n'|sort -u > $neededfile + MISSING_DEPS=`comm -1 -3 $markedfile $neededfile` +} + +confirm() { + if [ "$ACTION" = "INSTALL" ]; then + # Install + do_select --aspect 25 --yesno "Selected packages will now be installed. Are you sure you want to continue?" 0 0 + else + # Upgrade + do_select --aspect 25 --yesno "Selected packages will now be upgraded. Are you sure you want to continue?" 0 0 + fi +} + +progressbar() { + echo "XXX" + expr $COUNT '*' 100 / $TOTAL + echo "\n$*" + echo "XXX" + let $((COUNT+=1)) +} + +install_packages() { + if [ ! -d $ROOT/var/lib/pkg ]; then + mkdir -p $ROOT/var/lib/pkg + touch $ROOT/var/lib/pkg/db + fi + + if [ -d $ROOT/var/lib/pkg/rejected ]; then + rm -rf $ROOT/var/lib/pkg/rejected + fi + + if [ "$ACTION" = "INSTALL" ]; then + PKGARGS="" + else + # We use -f here since we want to avoid pkgadd conflicts. + # Unwanted/Unexpected conflicts could arise if files are + # moved from one package to another, or if the user added + # the files himself. Instead of failing the whole upgrade + # we force the upgrade. This should be fairly safe and it + # will probably help to avoid some "semi-bogus" errors from + # pkgadd. The rules in /etc/pkgadd.conf will still be used. + PKGARGS="-f -u" + fi + + ( + # Log header + echo "Log ($logfile)" > $logfile + echo "----------------------------------------------------------" >> $logfile + + # Install packages + KERNEL=./kernel/linux-*.tar.bz2 + KERNEL_VERSION=`basename $KERNEL .tar.bz2 | sed "s/linux-//"` + TOTAL=`cat $pkgfile | wc -l` + let $((TOTAL+=1)) + let $((COUNT=0)) + let $((ERRORS=0)) + for FILE in `cat $pkgfile`; do + progressbar "Installing $FILE..." + echo -n "Installing $FILE....." >> $logfile + PKG_FILE=`find . -name "$FILE.pkg.tar.gz"` + pkgadd -r $ROOT $PKGARGS $PKG_FILE > $tmpfile 2>&1 + if [ $? = 0 ]; then + echo "OK" >> $logfile + else + let $((ERRORS+=1)) + echo "ERROR" >> $logfile + echo "" >> $logfile + cat $tmpfile >> $logfile + echo "" >> $logfile + fi + done + + # Install kernel + if [ ! -d $ROOT/usr/src/linux-$KERNEL_VERSION ]; then + progressbar "Installing `basename $KERNEL .tar.bz2`..." + echo -n "Installing `basename $KERNEL .tar.bz2`....." >> $logfile + ( + set -e + tar -C $ROOT/usr/src -xjf $KERNEL + cp -f ./kernel/linux-$KERNEL_VERSION.config $ROOT/usr/src/linux-$KERNEL_VERSION/.config + chown -R root.root $ROOT/usr/src/linux-$KERNEL_VERSION + chmod -R go-w $ROOT/usr/src/linux-$KERNEL_VERSION + shopt -s nullglob + # modified to be filename-agnostic + #for patch in ./kernel/linux-$KERNEL_VERSION-*.patch; do + for patch in ./kernel/*patch; do + patch -s -d $ROOT/usr/src/linux-$KERNEL_VERSION -p1 < $patch + cp $patch $ROOT/usr/src/ + done + if [ ! -d $ROOT/lib/modules/$KERNEL_VERSION ]; then + mkdir -p $ROOT/lib/modules/$KERNEL_VERSION + depmod -b $ROOT -a $KERNEL_VERSION + fi + ) > $tmpfile 2>&1 + if [ $? = 0 ]; then + echo "OK" >> $logfile + else + let $((ERRORS+=1)) + echo "ERROR" >> $logfile + echo "" >> $logfile + cat $tmpfile >> $logfile + echo "" >> $logfile + fi + else + echo "Directory $ROOT/usr/src/linux-$KERNEL_VERSION already exists." >> $logfile + echo "Assuming linux-$KERNEL_VERSION is already installed." >> $logfile + fi + + # Log footer + echo "----------------------------------------------------------" >> $logfile + echo "$ERRORS error(s) found" >> $logfile + + cat $logfile > $tmpfile + + echo "" > $logfile + if [ "$ERRORS" = "0" ]; then + echo "$ACTION COMPLETED SUCCESSFULLY!" >> $logfile + else + echo "$ACTION FAILED!" >> $logfile + fi + echo "" >> $logfile + echo "" >> $logfile + cat $tmpfile >> $logfile + + ) | do_dialog --title " Please wait " --gauge "" 8 60 0 + + # Show log + do_dialog --exit-label "OK" --textbox $logfile 19 68 +} + +main() { + welcome + select_action + select_root + select_collections + ask_detailed + select_packages + check_dependencies + confirm + if [ "$ACTION" = "UPGRADE" ] && [ -f /usr/bin/setup-helper ] + then + (/usr/bin/setup-helper $ROOT &> $helperlogfile) | do_dialog \ + --title " Please wait [2.2 -> 2.3 check]" --gauge "" 8 60 0 + fi + install_packages + + cat $helperlogfile 2> /dev/null +} + +tmpfile=/tmp/tmp.$$ +collfile=/tmp/collections.$$ +pkgfile=/tmp/packages.$$ +logfile=/tmp/log.$$ +helperlogfile=/tmp/log-helper.$$ +crux_dir=/cdrom/crux +depsfile=$crux_dir/setup.dependencies +neededfile=/tmp/needed.$$ +markedfile=/tmp/marked.$$ + +# Detailed selection of packages +DO_DETAILED="no" +MISSINGDEPS="" + +trap "rm -f $tmpfile $pkgfile $collfile $neededfile $markedfile" 0 1 2 5 15 + +if [ "$1" != "" ]; then + crux_dir=$1 +fi + +if [ -d $crux_dir ]; then + cd $crux_dir +else + do_dialog --aspect 50 --msgbox "Directory $crux_dir not found. Aborting." 0 0 + exit 1 +fi + +main + +# End of file diff --git a/iso/bin/setup-chroot b/iso/bin/setup-chroot new file mode 100755 index 0000000..83281a3 --- /dev/null +++ b/iso/bin/setup-chroot @@ -0,0 +1,7 @@ +#!/bin/sh + +mount --bind /dev /mnt/dev +mount --bind /tmp /mnt/tmp +mount -t proc proc /mnt/proc +mount -t sysfs none /mnt/sys +chroot /mnt /bin/bash diff --git a/iso/bin/setup-helper b/iso/bin/setup-helper new file mode 100755 index 0000000..16d0001 --- /dev/null +++ b/iso/bin/setup-helper @@ -0,0 +1,162 @@ +#!/bin/bash +# post setup +# +# Johannes Winkelmann, jw at tks6 dot net + +ROOT=$1 +DB=$ROOT/var/lib/pkg/db + +## those values should be changed: +TMPDB=$DB.tmp +BACKUPDB=$DB.backup +PKGADD="pkgadd" +PKGRM="pkgrm" +MV="mv" + +rename_packages() { + if [ -z "$1" ]; then + return + fi + pkg=$@ + + filter="sed " + runfilter="no" + for tuple in $@; do + split=($(echo $tuple|sed -e 's|:| |')) + if [ -n "${split[1]}" ] && [ `pkginfo -r $ROOT -i|gawk '{ print $1; }'|grep ^${split[0]}$` ]; then + echo "Package renamed: ${split[0]} -> ${split[1]}" + filter="$filter -e 's|^${split[0]}$|${split[1]}|'" + runfilter="yes" + fi + done + if [ "$runfilter" = "no" ]; then + return + fi + + :> $TMPDB + if [ -f $DB ]; then + nextIsName=1 + cat $DB|while read l; do + if [ $nextIsName -eq 1 ]; then + nextIsName=0 + echo $l|eval $filter >> $TMPDB + else + if [ "$l" = "" ]; then + nextIsName=1 + fi + echo $l >> $TMPDB + fi + done + fi + + $MV $DB $BACKUPDB + $MV $TMPDB $DB +} + + +remove_packages() { + for package in $@; do + if [ `pkginfo -r $ROOT -i|gawk '{ print $1; }'|grep ^$package$` ]; then + echo "Package removed: $package" + $PKGRM -r $ROOT $package + fi + done +} + +inject_packages() { + for package in $@; do + if [ -z "`pkginfo -r $ROOT -i|gawk '{ print $1; }'|grep ^$package$`" ]; then + echo "Package injected: $package" + pkg="`find core opt xorg -name \"${package}#*.pkg.tar.gz\" &2> /dev/null`" + if [ -n "$pkg" ]; then + $PKGADD -r $ROOT -f $pkg + else + echo " ERROR: package $package not found on ISO" + fi + fi + done +} + +#################### + +if [ -z "$1" ]; then + echo "Usage: $0 " + exit -1 +fi + +# 2.2 -> 2.3 +echo "* CRUX 2.2 -> 2.3 setup-helper" + +# inject iproute2, backup old net script, remove net-tools +# and re-add it to avoid /etc/rc.d/net being deleted on +# when net-tools is updated later. + +if [ -f "$ROOT/etc/rc.d/net" ]; then + cp $ROOT/etc/rc.d/net $ROOT/etc/rc.d/net.orig +fi +remove_packages net-tools +inject_packages iproute2 net-tools + +# split up netkit-base +remove_packages netkit-base +inject_packages inetd iana-etc iputils + +# modular xorg +if [ `pkginfo -r $ROOT -i|gawk '{ print $1; }'|grep ^x11$` ]; then + remove_packages x11 + inject_packages libdrm xorg-xproto xorg-glproto xorg-xextproto \ + xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto \ + xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto \ + xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto \ + xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto \ + xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto \ + xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto \ + xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto \ + xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto \ + expat xorg-font-util xorg-font-alias xorg-makedepend xorg-libxdmcp \ + xorg-libxau xorg-libfontenc xorg-rgb libxml2 freetype \ + xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb \ + xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale \ + xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm \ + xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp \ + xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga \ + xorg-libxmu xorg-libxpm xorg-libxtrap xorg-font-misc-misc \ + xorg-font-cursor-misc xorg-libxkbui xorg-xkbcomp xorg-libxrandr \ + xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d \ + xorg-libxvmc xorg-libxaw xkeyboard-config p5-xml-parser xorg-server \ + xorg-xf86-input-mouse xorg-xf86-input-keyboard xorg-xf86-video-vesa \ + xorg-xinit xorg-xauth xorg xterm xorg-libpixman + inject_packages xorg-font-adobe-100dpi xorg-font-adobe-75dpi \ + xorg-font-adobe-utopia-100dpi xorg-font-adobe-utopia-75dpi \ + xorg-font-adobe-utopia-type1 xorg-font-alias xorg-font-arabic-misc \ + xorg-font-bh-100dpi xorg-font-bh-75dpi \ + xorg-font-bh-lucidatypewriter-100dpi \ + xorg-font-bh-lucidatypewriter-75dpi xorg-font-bh-ttf \ + xorg-font-bh-type1 xorg-font-bitstream-100dpi \ + xorg-font-bitstream-75dpi xorg-font-bitstream-speedo \ + xorg-font-bitstream-type1 xorg-font-bitstream-vera \ + xorg-font-cronyx-cyrillic xorg-font-cursor-misc \ + xorg-font-daewoo-misc xorg-font-dec-misc xorg-font-ibm-type1 \ + xorg-font-isas-misc xorg-font-jis-misc xorg-font-micro-misc \ + xorg-font-misc-cyrillic xorg-font-misc-ethiopic \ + xorg-font-misc-meltho xorg-font-misc-misc xorg-font-mutt-misc \ + xorg-font-schumacher-misc xorg-font-screen-cyrillic \ + xorg-font-sony-misc xorg-font-sun-misc xorg-font-util \ + xorg-font-winitzki-cyrillic xorg-font-xfree86-type1 + inject_packages xorg-xf86-video-apm xorg-xf86-video-ark \ + xorg-xf86-video-ati xorg-xf86-video-chips xorg-xf86-video-cirrus \ + xorg-xf86-video-cyrix xorg-xf86-video-dummy xorg-xf86-video-fbdev \ + xorg-xf86-video-glint xorg-xf86-video-i128 xorg-xf86-video-i740 \ + xorg-xf86-video-i810 xorg-xf86-video-imstt xorg-xf86-video-mga \ + xorg-xf86-video-neomagic xorg-xf86-video-newport \ + xorg-xf86-video-nsc xorg-xf86-video-nv xorg-xf86-video-rendition \ + xorg-xf86-video-s3 xorg-xf86-video-s3virge xorg-xf86-video-savage \ + xorg-xf86-video-siliconmotion xorg-xf86-video-sis xorg-xf86-video-sisusb \ + xorg-xf86-video-sunbw2 xorg-xf86-video-suncg14 xorg-xf86-video-suncg3 \ + xorg-xf86-video-suncg6 xorg-xf86-video-sunffb xorg-xf86-video-sunleo \ + xorg-xf86-video-suntcx xorg-xf86-video-tdfx xorg-xf86-video-tga \ + xorg-xf86-video-trident xorg-xf86-video-tseng xorg-xf86-video-v4l \ + xorg-xf86-video-vga xorg-xf86-video-via xorg-xf86-video-vmware \ + xorg-xf86-video-voodoo +fi + diff --git a/iso/etc/fstab b/iso/etc/fstab new file mode 100644 index 0000000..344d8f4 --- /dev/null +++ b/iso/etc/fstab @@ -0,0 +1,5 @@ +/dev/cdrom /cdrom iso9660 defaults 0 0 +devpts /dev/pts devpts defaults 0 0 +proc /proc proc defaults 0 0 +sysfs /sys sysfs defaults 0 0 +tmpfs /tmp tmpfs defaults 0 0 diff --git a/iso/etc/hosts b/iso/etc/hosts new file mode 100644 index 0000000..73ed4d5 --- /dev/null +++ b/iso/etc/hosts @@ -0,0 +1,7 @@ +# +# /etc/hosts: static lookup table for host names +# + +127.0.0.1 localhost + +# End of file diff --git a/iso/etc/inittab b/iso/etc/inittab new file mode 100644 index 0000000..13a12ec --- /dev/null +++ b/iso/etc/inittab @@ -0,0 +1,23 @@ +# +# /etc/inittab: system runlevel description +# + +id:2:initdefault: + +rc::sysinit:/etc/rc +rs:S1:wait:/etc/rc.single +rd:06:wait:/etc/rc.shutdown +su:S:wait:/sbin/sulogin -p + +c1:2:respawn:/sbin/agetty 38400 tty1 linux +c2:2:respawn:/sbin/agetty 38400 tty2 linux +c3:2:respawn:/sbin/agetty 38400 tty3 linux +c4:2:respawn:/sbin/agetty 38400 tty4 linux +c5:2:respawn:/sbin/agetty 38400 tty5 linux +c6:2:respawn:/sbin/agetty 38400 tty6 linux + +s1:2:respawn:/usr/bin/serial_console + +ca::ctrlaltdel:/sbin/shutdown -t3 -r now + +# End of file diff --git a/iso/etc/issue b/iso/etc/issue new file mode 100644 index 0000000..1aeecc5 --- /dev/null +++ b/iso/etc/issue @@ -0,0 +1,3 @@ + +CRUX (\l) + diff --git a/iso/etc/ld.so.conf b/iso/etc/ld.so.conf new file mode 100644 index 0000000..f4ce15b --- /dev/null +++ b/iso/etc/ld.so.conf @@ -0,0 +1,5 @@ +# +# /etc/ld.so.conf: dynamic linker configuration file +# + +# End of file diff --git a/iso/etc/motd b/iso/etc/motd new file mode 100644 index 0000000..781e198 --- /dev/null +++ b/iso/etc/motd @@ -0,0 +1,3 @@ + +Welcome to the CRUX 2.3 Updated CD! + diff --git a/iso/etc/protocols b/iso/etc/protocols new file mode 100644 index 0000000..1154b54 --- /dev/null +++ b/iso/etc/protocols @@ -0,0 +1,149 @@ +# /etc/protocols: +# $Id: protocols,v 1.1 2003/11/24 17:45:31 per Exp $ +# +# Internet (IP) protocols +# +# from: @(#)protocols 5.1 (Berkeley) 4/17/89 +# +# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992). +# +# See also http://www.iana.org/assignments/protocol-numbers + +ip 0 IP # internet protocol, pseudo protocol number +#hopopt 0 HOPOPT # hop-by-hop options for ipv6 +icmp 1 ICMP # internet control message protocol +igmp 2 IGMP # internet group management protocol +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 +cbt 7 CBT # CBT, Tony Ballardie +egp 8 EGP # exterior gateway protocol +igp 9 IGP # any private interior gateway (Cisco: for IGRP) +bbn-rcc 10 BBN-RCC-MON # BBN RCC Monitoring +nvp 11 NVP-II # Network Voice Protocol +pup 12 PUP # PARC universal packet protocol +argus 13 ARGUS # ARGUS +emcon 14 EMCON # EMCON +xnet 15 XNET # Cross Net Debugger +chaos 16 CHAOS # Chaos +udp 17 UDP # user datagram protocol +mux 18 MUX # Multiplexing protocol +dcn 19 DCN-MEAS # DCN Measurement Subsystems +hmp 20 HMP # host monitoring protocol +prm 21 PRM # packet radio measurement protocol +xns-idp 22 XNS-IDP # Xerox NS IDP +trunk-1 23 TRUNK-1 # Trunk-1 +trunk-2 24 TRUNK-2 # Trunk-2 +leaf-1 25 LEAF-1 # Leaf-1 +leaf-2 26 LEAF-2 # Leaf-2 +rdp 27 RDP # "reliable datagram" protocol +irtp 28 IRTP # Internet Reliable Transaction Protocol +iso-tp4 29 ISO-TP4 # ISO Transport Protocol Class 4 +netblt 30 NETBLT # Bulk Data Transfer Protocol +mfe-nsp 31 MFE-NSP # MFE Network Services Protocol +merit-inp 32 MERIT-INP # MERIT Internodal Protocol +sep 33 SEP # Sequential Exchange Protocol +3pc 34 3PC # Third Party Connect Protocol +idpr 35 IDPR # Inter-Domain Policy Routing Protocol +xtp 36 XTP # Xpress Tranfer Protocol +ddp 37 DDP # Datagram Delivery Protocol +idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport Proto +tp++ 39 TP++ # TP++ Transport Protocol +il 40 IL # IL Transport Protocol +ipv6 41 IPv6 # IPv6 +sdrp 42 SDRP # Source Demand Routing Protocol +ipv6-route 43 IPv6-Route # Routing Header for IPv6 +ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6 +idrp 45 IDRP # Inter-Domain Routing Protocol +rsvp 46 RSVP # Resource ReSerVation Protocol +gre 47 GRE # Generic Routing Encapsulation +mhrp 48 MHRP # Mobile Host Routing Protocol +bna 49 BNA # BNA +ipv6-crypt 50 IPv6-Crypt # Encryption Header for IPv6 +ipv6-auth 51 IPv6-Auth # Authentication Header for IPv6 +i-nlsp 52 I-NLSP # Integrated Net Layer Security TUBA +swipe 53 SWIPE # IP with Encryption +narp 54 NARP # NBMA Address Resolution Protocol +mobile 55 MOBILE # IP Mobility +tlsp 56 TLSP # Transport Layer Security Protocol +skip 57 SKIP # SKIP +ipv6-icmp 58 IPv6-ICMP icmpv6 icmp6 # ICMP for IPv6 +ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6 +ipv6-opts 60 IPv6-Opts # Destination Options for IPv6 +# 61 # any host internal protocol +cftp 62 CFTP # CFTP +# 63 # any local network +sat-expak 64 SAT-EXPAK # SATNET and Backroom EXPAK +kryptolan 65 KRYPTOLAN # Kryptolan +rvd 66 RVD # MIT Remote Virtual Disk Protocol +ippc 67 IPPC # Internet Pluribus Packet Core +# 68 # any distributed file system +sat-mon 69 SAT-MON # SATNET Monitoring +visa 70 VISA # VISA Protocol +ipcv 71 IPCV # Internet Packet Core Utility +cpnx 72 CPNX # Computer Protocol Network Executive +cphb 73 CPHB # Computer Protocol Heart Beat +wsn 74 WSN # Wang Span Network +pvp 75 PVP # Packet Video Protocol +br-sat-mon 76 BR-SAT-MON # Backroom SATNET Monitoring +sun-nd 77 SUN-ND # SUN ND PROTOCOL-Temporary +wb-mon 78 WB-MON # WIDEBAND Monitoring +wb-expak 79 WB-EXPAK # WIDEBAND EXPAK +iso-ip 80 ISO-IP # ISO Internet Protocol +vmtp 81 VMTP # Versatile Message Transport +secure-vmtp 82 SECURE-VMTP # SECURE-VMTP +vines 83 VINES # VINES +ttp 84 TTP # TTP +nsfnet-igp 85 NSFNET-IGP # NSFNET-IGP +dgp 86 DGP # Dissimilar Gateway Protocol +tcf 87 TCF # TCF +eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco) +ospf 89 OSPFIGP # Open Shortest Path First IGP +sprite-rpc 90 Sprite-RPC # Sprite RPC Protocol +larp 91 LARP # Locus Address Resolution Protocol +mtp 92 MTP # Multicast Transport Protocol +ax.25 93 AX.25 # AX.25 Frames +ipip 94 IPIP # Yet Another IP encapsulation +micp 95 MICP # Mobile Internetworking Control Pro. +scc-sp 96 SCC-SP # Semaphore Communications Sec. Pro. +etherip 97 ETHERIP # Ethernet-within-IP Encapsulation +encap 98 ENCAP # Yet Another IP encapsulation +# 99 # any private encryption scheme +gmtp 100 GMTP # GMTP +ifmp 101 IFMP # Ipsilon Flow Management Protocol +pnni 102 PNNI # PNNI over IP +pim 103 PIM # Protocol Independent Multicast +aris 104 ARIS # ARIS +scps 105 SCPS # SCPS +qnx 106 QNX # QNX +a/n 107 A/N # Active Networks +ipcomp 108 IPComp # IP Payload Compression Protocol +snp 109 SNP # Sitara Networks Protocol +compaq-peer 110 Compaq-Peer # Compaq Peer Protocol +ipx-in-ip 111 IPX-in-IP # IPX in IP +vrrp 112 VRRP # Virtual Router Redundancy Protocol +pgm 113 PGM # PGM Reliable Transport Protocol +# 114 # any 0-hop protocol +l2tp 115 L2TP # Layer Two Tunneling Protocol +ddx 116 DDX # D-II Data Exchange +iatp 117 IATP # Interactive Agent Transfer Protocol +stp 118 STP # Schedule Transfer +srp 119 SRP # SpectraLink Radio Protocol +uti 120 UTI # UTI +smp 121 SMP # Simple Message Protocol +sm 122 SM # SM +ptp 123 PTP # Performance Transparency Protocol +isis 124 ISIS # ISIS over IPv4 +fire 125 FIRE +crtp 126 CRTP # Combat Radio Transport Protocol +crdup 127 CRUDP # Combat Radio User Datagram +sscopmce 128 SSCOPMCE +iplt 129 IPLT +sps 130 SPS # Secure Packet Shield +pipe 131 PIPE # Private IP Encapsulation within IP +sctp 132 SCTP # Stream Control Transmission Protocol +fc 133 FC # Fibre Channel +# rsvp-e2e-ignore 134 RSVP-E2E-IGNORE +# 134-254 # Unassigned +# 255 # Reserved diff --git a/iso/etc/rc b/iso/etc/rc new file mode 100755 index 0000000..7690010 --- /dev/null +++ b/iso/etc/rc @@ -0,0 +1,30 @@ +#!/bin/sh +# +# /etc/rc: system boot script +# + +echo "The system is coming up. Please wait." + +# Start userspace device management daemon +/bin/mount -t sysfs none /sys +/bin/mount -t proc none /proc +#/sbin/udevstart +/sbin/udevd --daemon + +# Mount filesystems +/bin/mount -n -a &> /dev/null + +# Create /tmp/var +/bin/mkdir /tmp/var +/bin/chmod 0755 /tmp/var +/bin/mkdir /var/lock /var/log /var/run /var/tmp +/bin/touch /var/run/utmp + +# Start log daemons +/usr/sbin/syslogd +/usr/sbin/klogd -c 4 + +# Setup network +/sbin/ifconfig lo 127.0.0.1 + +# End of file diff --git a/iso/etc/rc.shutdown b/iso/etc/rc.shutdown new file mode 100755 index 0000000..645c1d1 --- /dev/null +++ b/iso/etc/rc.shutdown @@ -0,0 +1,26 @@ +#!/bin/sh +# +# /etc/rc.shutdown: system shutdown script +# + +# Set linefeed mode to avoid staircase effect +/bin/stty onlcr + +echo "The system is coming down. Please wait." + +# Terminate all processes +/sbin/killall5 -15 +/bin/sleep 5 +/sbin/killall5 -9 + +# Umount file systems +/bin/umount -n -a &> /dev/null + +# Halt or reboot +if [ $RUNLEVEL = 0 ]; then + /sbin/poweroff -d -f -i +else + /sbin/reboot -d -f -i +fi + +# End of file diff --git a/iso/etc/rc.single b/iso/etc/rc.single new file mode 100755 index 0000000..a028586 --- /dev/null +++ b/iso/etc/rc.single @@ -0,0 +1,14 @@ +#!/bin/sh +# +# /etc/rc.single: single-user setup script +# + +# Terminate all processes +/sbin/killall5 -15 +/bin/sleep 5 +/sbin/killall5 -9 + +# Enter single-user mode +exec /sbin/init -t1 S + +# End of file diff --git a/iso/etc/services b/iso/etc/services new file mode 100644 index 0000000..e757381 --- /dev/null +++ b/iso/etc/services @@ -0,0 +1,512 @@ +# /etc/services: +# $Id: services,v 1.1 2003/11/24 17:45:31 per 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 1700, ``Assigned Numbers'' (October 1994). Not all ports +# are included, only the more common ones. +# +# The latest IANA port assignments can be gotten from +# http://www.iana.org/assignments/port-numbers +# The Well Known Ports are those from 0 through 1023. +# The Registered Ports are those from 1024 through 49151 +# The Dynamic and/or Private Ports are those from 49152 through 65535 +# +# Each line describes one service, and is of the form: +# +# service-name port/protocol [aliases ...] [# comment] + +tcpmux 1/tcp # TCP port service multiplexer +tcpmux 1/udp # TCP port service multiplexer +rje 5/tcp # Remote Job Entry +rje 5/udp # Remote Job Entry +echo 7/tcp +echo 7/udp +discard 9/tcp sink null +discard 9/udp sink null +systat 11/tcp users +systat 11/udp users +daytime 13/tcp +daytime 13/udp +qotd 17/tcp quote +qotd 17/udp 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-data 20/udp +ftp 21/tcp +ftp 21/udp +ssh 22/tcp # SSH Remote Login Protocol +ssh 22/udp # SSH Remote Login Protocol +telnet 23/tcp +telnet 23/udp +# 24 - private mail system +smtp 25/tcp mail +smtp 25/udp mail +time 37/tcp timserver +time 37/udp timserver +rlp 39/tcp resource # resource location +rlp 39/udp resource # resource location +nameserver 42/tcp name # IEN 116 +nameserver 42/udp name # IEN 116 +nicname 43/tcp whois +nicname 43/udp whois +tacacs 49/tcp # Login Host Protocol (TACACS) +tacacs 49/udp # Login Host Protocol (TACACS) +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 +whois++ 63/tcp +whois++ 63/udp +bootps 67/tcp # BOOTP server +bootps 67/udp +bootpc 68/tcp # BOOTP client +bootpc 68/udp +tftp 69/tcp +tftp 69/udp +gopher 70/tcp # Internet Gopher +gopher 70/udp +netrjs-1 71/tcp # Remote Job Service +netrjs-1 71/udp # Remote Job Service +netrjs-2 72/tcp # Remote Job Service +netrjs-2 72/udp # Remote Job Service +netrjs-3 73/tcp # Remote Job Service +netrjs-3 73/udp # Remote Job Service +netrjs-4 74/tcp # Remote Job Service +netrjs-4 74/udp # Remote Job Service +finger 79/tcp +finger 79/udp +http 80/tcp www www-http # WorldWideWeb HTTP +http 80/udp www www-http # HyperText Transfer Protocol +kerberos 88/tcp kerberos5 krb5 # Kerberos v5 +kerberos 88/udp kerberos5 krb5 # Kerberos v5 +supdup 95/tcp +supdup 95/udp +hostname 101/tcp hostnames # usually from sri-nic +hostname 101/udp hostnames # usually from sri-nic +iso-tsap 102/tcp tsap # part of ISODE. +csnet-ns 105/tcp cso # also used by CSO name server +csnet-ns 105/udp cso +# 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 +pop2 109/tcp pop-2 postoffice # POP version 2 +pop2 109/udp pop-2 +pop3 110/tcp pop-3 # POP version 3 +pop3 110/udp pop-3 +sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP +sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP +auth 113/tcp authentication tap ident +auth 113/udp authentication tap ident +sftp 115/tcp +sftp 115/udp +uucp-path 117/tcp +uucp-path 117/udp +nntp 119/tcp readnews untp # USENET News Transfer Protocol +nntp 119/udp 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 +imap 143/tcp imap2 # Interim Mail Access Proto v2 +imap 143/udp imap2 +snmp 161/tcp # Simple Net Mgmt Proto +snmp 161/udp # Simple Net Mgmt Proto +snmptrap 162/udp snmp-trap # Traps for SNMP +cmip-man 163/tcp # ISO mgmt over IP (CMOT) +cmip-man 163/udp +cmip-agent 164/tcp +cmip-agent 164/udp +mailq 174/tcp # MAILQ +mailq 174/udp # MAILQ +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 # Quick Mail Transfer Protocol +qmtp 209/udp # Quick Mail Transfer Protocol +z39.50 210/tcp z3950 wais # NISO Z39.50 database +z39.50 210/udp z3950 wais +ipx 213/tcp # IPX +ipx 213/udp +imap3 220/tcp # Interactive Mail Access +imap3 220/udp # Protocol v3 +link 245/tcp ttylink +link 245/ucp ttylink +rsvp_tunnel 363/tcp +rsvp_tunnel 363/udp +rpc2portmap 369/tcp +rpc2portmap 369/udp # Coda portmapper +codaauth2 370/tcp +codaauth2 370/udp # Coda authentication server +ulistproc 372/tcp ulistserv # UNIX Listserv +ulistproc 372/udp ulistserv +ldap 389/tcp +ldap 389/udp +svrloc 427/tcp # Server Location Protocl +svrloc 427/udp # Server Location Protocl +mobileip-agent 434/tcp +mobileip-agent 434/udp +mobilip-mn 435/tcp +mobilip-mn 435/udp +https 443/tcp # MCom +https 443/udp # MCom +snpp 444/tcp # Simple Network Paging Protocol +snpp 444/udp # Simple Network Paging Protocol +microsoft-ds 445/tcp +microsoft-ds 445/udp +kpasswd 464/tcp kpwd # Kerberos "passwd" +kpasswd 464/udp kpwd # Kerberos "passwd" +photuris 468/tcp +photuris 468/udp +saft 487/tcp # Simple Asynchronous File Transfer +saft 487/udp # Simple Asynchronous File Transfer +gss-http 488/tcp +gss-http 488/udp +pim-rp-disc 496/tcp +pim-rp-disc 496/udp +isakmp 500/tcp +isakmp 500/udp +gdomap 538/tcp # GNUstep distributed objects +gdomap 538/udp # GNUstep distributed objects +iiop 535/tcp +iiop 535/udp +dhcpv6-client 546/tcp +dhcpv6-client 546/udp +dhcpv6-server 547/tcp +dhcpv6-server 547/udp +rtsp 554/tcp # Real Time Stream Control Protocol +rtsp 554/udp # Real Time Stream Control Protocol +nntps 563/tcp # NNTP over SSL +nntps 563/udp # NNTP over SSL +whoami 565/tcp +whoami 565/udp +submission 587/tcp msa # mail message submission +submission 587/udp msa # mail message submission +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 +ldaps 636/tcp # LDAP over SSL +ldaps 636/udp # LDAP over SSL +acap 674/tcp +acap 674/udp +ha-cluster 694/tcp # Heartbeat HA-cluster +ha-cluster 694/udp # Heartbeat HA-cluster +kerberos-adm 749/tcp # Kerberos `kadmin' (v5) +kerberos-iv 750/udp kerberos4 kerberos-sec kdc +kerberos-iv 750/tcp kerberos4 kerberos-sec kdc +webster 765/tcp # Network dictionary +webster 765/udp +phonebook 767/tcp # Network phonebook +phonebook 767/udp +rsync 873/tcp # rsync +rsync 873/udp # rsync +telnets 992/tcp +telnets 992/udp +imaps 993/tcp # IMAP over SSL +imaps 993/udp # IMAP over SSL +ircs 994/tcp +ircs 994/udp +pop3s 995/tcp # POP-3 over SSL +pop3s 995/udp # POP-3 over SSL + +# +# 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 +printer 515/udp spooler # line printer spooler +talk 517/udp +ntalk 518/udp +utime 519/tcp unixtime +utime 519/udp unixtime +efs 520/tcp +router 520/udp route routed # RIP +ripng 521/tcp +ripng 521/udp +timed 525/tcp timeserver +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 +klogin 543/tcp # Kerberized `rlogin' (v5) +kshell 544/tcp krcmd # Kerberized `rsh' (v5) +afpovertcp 548/tcp # AFP over TCP +afpovertcp 548/udp # AFP over TCP +remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem + +# +# From ``PORT NUMBERS'': +# +#>REGISTERED PORT NUMBERS +#> +#>The Registered Ports are listed by the IANA and on most systems can be +#>used by ordinary user processes or programs executed by ordinary +#>users. +#> +#>Ports are used in the TCP [RFC793] to name the ends of logical +#>connections which carry long term conversations. For the purpose of +#>providing services to unknown callers, a service contact port is +#>defined. This list specifies the port used by the server process as +#>its contact port. +#> +#>The IANA registers uses of these ports as a convienence to the +#>community. +# +socks 1080/tcp # socks proxy server +socks 1080/udp # socks proxy server +h323hostcallsc 1300/tcp # H323 Host Call Secure +h323hostcallsc 1300/udp # H323 Host Call Secure +ms-sql-s 1433/tcp # Microsoft-SQL-Server +ms-sql-s 1433/udp # Microsoft-SQL-Server +ms-sql-m 1434/tcp # Microsoft-SQL-Monitor +ms-sql-m 1434/udp # Microsoft-SQL-Monitor +ica 1494/tcp # Citrix ICA Client +ica 1494/udp # Citrix ICA Client +wins 1512/tcp # Microsoft's Windows Internet Name Service +wins 1512/udp # Microsoft's Windows Internet Name Service +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 +kermit 1649/tcp +kermit 1649/udp +l2tp 1701/tcp l2f +l2tp 1701/udp l2f +h323gatedisc 1718/tcp +h323gatedisc 1718/udp +h323gatestat 1719/tcp +h323gatestat 1719/udp +h323hostcall 1720/tcp +h323hostcall 1720/udp +tftp-mcast 1758/tcp +tftp-mcast 1758/udp +hello 1789/tcp +hello 1789/udp +radius 1812/tcp # Radius +radius 1812/udp # Radius +radius-acct 1813/tcp radacct # Radius Accounting +radius-acct 1813/udp radacct # Radius Accounting +mtp 1911/tcp # +mtp 1911/udp # +hsrp 1985/tcp # Cisco Hot Standby Router Protocol +hsrp 1985/udp # Cisco Hot Standby Router Protocol +licensedaemon 1986/tcp +licensedaemon 1986/udp +gdp-port 1997/tcp # Cisco Gateway Discovery Protocol +gdp-port 1997/udp # Cisco Gateway Discovery Protocol +nfs 2049/tcp nfsd +nfs 2049/udp nfsd +zephyr-srv 2102/tcp # Zephyr server +zephyr-srv 2102/udp # Zephyr server +zephyr-clt 2103/tcp # Zephyr serv-hm connection +zephyr-clt 2103/udp # Zephyr serv-hm connection +zephyr-hm 2104/tcp # Zephyr hostmanager +zephyr-hm 2104/udp # Zephyr hostmanager +cvspserver 2401/tcp # CVS client/server operations +cvspserver 2401/udp # CVS client/server operations +venus 2430/tcp # codacon port +venus 2430/udp # Venus callback/wbc interface +venus-se 2431/tcp # tcp side effects +venus-se 2431/udp # udp sftp side effect +codasrv 2432/tcp # not used +codasrv 2432/udp # server port +codasrv-se 2433/tcp # tcp side effects +codasrv-se 2433/udp # udp sftp side effectQ +corbaloc 2809/tcp # CORBA naming service locator +icpv2 3130/tcp # Internet Cache Protocol V2 (Squid) +icpv2 3130/udp # Internet Cache Protocol V2 (Squid) +mysql 3306/tcp # MySQL +mysql 3306/udp # MySQL +trnsprntproxy 3346/tcp # Trnsprnt Proxy +trnsprntproxy 3346/udp # Trnsprnt Proxy +rwhois 4321/tcp # Remote Who Is +rwhois 4321/udp # Remote Who Is +krb524 4444/tcp # Kerberos 5 to 4 ticket xlator +krb524 4444/udp # Kerberos 5 to 4 ticket xlator +rfe 5002/tcp # Radio Free Ethernet +rfe 5002/udp # Actually uses UDP only +cfengine 5308/tcp # CFengine +cfengine 5308/udp # CFengine +cvsup 5999/tcp CVSup # CVSup file transfer/John Polstra/FreeBSD +cvsup 5999/udp CVSup # CVSup file transfer/John Polstra/FreeBSD +x11 6000/tcp X # the X Window System +afs3-fileserver 7000/tcp # file server itself +afs3-fileserver 7000/udp # file server itself +afs3-callback 7001/tcp # callbacks to cache managers +afs3-callback 7001/udp # callbacks to cache managers +afs3-prserver 7002/tcp # users & groups database +afs3-prserver 7002/udp # users & groups database +afs3-vlserver 7003/tcp # volume location database +afs3-vlserver 7003/udp # volume location database +afs3-kaserver 7004/tcp # AFS/Kerberos authentication service +afs3-kaserver 7004/udp # AFS/Kerberos authentication service +afs3-volser 7005/tcp # volume managment server +afs3-volser 7005/udp # volume managment server +afs3-errors 7006/tcp # error interpretation service +afs3-errors 7006/udp # error interpretation service +afs3-bos 7007/tcp # basic overseer process +afs3-bos 7007/udp # basic overseer process +afs3-update 7008/tcp # server-to-server updater +afs3-update 7008/udp # server-to-server updater +afs3-rmtsys 7009/tcp # remote cache manager service +afs3-rmtsys 7009/udp # remote cache manager service +sd 9876/tcp # Session Director +sd 9876/udp # Session Director +amanda 10080/tcp # amanda backup services +amanda 10080/udp # amanda backup services +pgpkeyserver 11371/tcp # PGP/GPG public keyserver +pgpkeyserver 11371/udp # PGP/GPG public keyserver +h323callsigalt 11720/tcp # H323 Call Signal Alternate +h323callsigalt 11720/udp # H323 Call Signal Alternate +quake 26000/tcp +quake 26000/udp +wnn6-ds 26208/tcp +wnn6-ds 26208/udp +traceroute 33434/tcp +traceroute 33434/udp + +# +# Datagram Delivery Protocol services +# +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 +# +# Kerberos (Project Athena/MIT) services +# Note that these are for Kerberos v4, and are unofficial. Sites running +# v4 should uncomment these and comment out the v5 entries above. +# +kerberos_master 751/udp # Kerberos authentication +kerberos_master 751/tcp # Kerberos authentication +passwd_server 752/udp # Kerberos passwd server +krbupdate 760/tcp kreg # Kerberos registration +kpop 1109/tcp # Pop with Kerberos +knetd 2053/tcp # Kerberos de-multiplexor +# +# Kerberos 5 services, also not registered with IANA +# +krb5_prop 754/tcp # Kerberos slave propagation +eklogin 2105/tcp # Kerberos encrypted rlogin +# +# Unofficial but necessary (for NetBSD) services +# +supfilesrv 871/tcp # SUP server +supfiledbg 1127/tcp # SUP debugging +# +# Unofficial but useful/necessary other services +# +netstat 15/tcp # (was once asssigned, no more) +fsp 21/udp fspd # +linuxconf 98/tcp # Linuxconf HTML access +poppassd 106/tcp # Eudora +poppassd 106/udp # Eudora +smtps 465/tcp # SMTP over SSL (TLS) +gii 616/tcp # gated interactive interface +omirr 808/tcp omirrd # online mirror +omirr 808/udp omirrd # online mirror +swat 901/tcp # Samba Web Administration Tool +rndc 953/tcp # rndc control sockets (BIND 9) +rndc 953/udp # rndc control sockets (BIND 9) +skkserv 1178/tcp # SKK Japanese input method +rmtcfg 1236/tcp # Gracilis Packeten remote config server +xtel 1313/tcp # french minitel +support 1529/tcp prmsd gnatsd # GNATS, cygnus bug tracker +cfinger 2003/tcp # GNU Finger +ninstall 2150/tcp # ninstall service +ninstall 2150/udp # ninstall service +afbackup 2988/tcp # Afbackup system +afbackup 2988/udp # Afbackup system +squid 3128/tcp # squid web proxy +prsvp 3455/tcp # RSVP Port +prsvp 3455/udp # RSVP Port +postgres 5432/tcp # POSTGRES +postgres 5432/udp # POSTGRES +fax 4557/tcp # FAX transmission service (old) +hylafax 4559/tcp # HylaFAX client-server protocol (new) +sgi-dgl 5232/tcp # SGI Distributed Graphics +sgi-dgl 5232/udp +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) +x11-ssh-offset 6010/tcp # SSH X11 forwarding offset +ircd 6667/tcp # Internet Relay Chat +ircd 6667/udp # Internet Relay Chat +xfs 7100/tcp # X font server +tircproxy 7666/tcp # Tircproxy +http-alt 8008/tcp +http-alt 8008/udp +webcache 8080/tcp # WWW caching service +webcache 8080/udp # WWW caching service +tproxy 8081/tcp # Transparent Proxy +tproxy 8081/udp # Transparent Proxy +jetdirect 9100/tcp laserjet hplj # +mandelspawn 9359/udp mandelbrot # network mandelbrot +kamanda 10081/tcp # amanda backup services (Kerberos) +kamanda 10081/udp # amanda backup services (Kerberos) +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 +canna 5680/tcp +tfido 60177/tcp # Ifmail +tfido 60177/udp # Ifmail +fido 60179/tcp # Ifmail +fido 60179/udp # Ifmail + +# Local services + diff --git a/iso/excludelist.net b/iso/excludelist.net new file mode 100644 index 0000000..f87d84a --- /dev/null +++ b/iso/excludelist.net @@ -0,0 +1,5 @@ +core +opt +xorg +*.pkg.tar.gz +linux-2.6*.tar* diff --git a/iso/isolinux/boot.msg b/iso/isolinux/boot.msg new file mode 100644 index 0000000..decb06f --- /dev/null +++ b/iso/isolinux/boot.msg @@ -0,0 +1,16 @@ + Welcome to the CRUX 2.3 Updated CD! + +Press to boot using the CD-ROM/initramfs. + +Available images: + + CRUX - Install CRUX + fb1280 - 1280x1024 framebuffer console + fb1024 - 1024x768 framebuffer console + fb800 - 800x600 framebuffer console + fb640 - 640x480 framebuffer console + memtest86+, - Test your system's RAM + memtest86 + +Press F3 to see miscellaneous boot options (acpi, etc.) + diff --git a/iso/isolinux/isolinux.cfg b/iso/isolinux/isolinux.cfg new file mode 100644 index 0000000..24e0853 --- /dev/null +++ b/iso/isolinux/isolinux.cfg @@ -0,0 +1,33 @@ +SERIAL 0 38400 +DISPLAY /boot/isolinux/boot.msg +PROMPT 1 +DEFAULT CRUX + +F1 boot.msg +F3 options.msg + +LABEL CRUX + KERNEL /boot/vmlinuz + APPEND initrd=/boot/initramfs console=ttyS0,38400 console=tty0 + +LABEL fb1280 + KERNEL /boot/vmlinuz + APPEND initrd=/boot/initramfs console=ttyS0,38400 console=tty0 vga=0x307 + +LABEL fb1024 + KERNEL /boot/vmlinuz + APPEND initrd=/boot/initramfs console=ttyS0,38400 console=tty0 vga=0x305 + +LABEL fb800 + KERNEL /boot/vmlinuz + APPEND initrd=/boot/initramfs console=ttyS0,38400 console=tty0 vga=0x303 + +LABEL fb640 + KERNEL /boot/vmlinuz + APPEND initrd=/boot/initramfs console=ttyS0,38400 console=tty0 vga=0x301 + +LABEL memtest86 + KERNEL memtest86plus + +LABEL memtest86+ + KERNEL memtest86plus diff --git a/iso/isolinux/memtest86plus b/iso/isolinux/memtest86plus new file mode 100644 index 0000000..e1b88e4 Binary files /dev/null and b/iso/isolinux/memtest86plus differ diff --git a/iso/isolinux/options.msg b/iso/isolinux/options.msg new file mode 100644 index 0000000..e91fba2 --- /dev/null +++ b/iso/isolinux/options.msg @@ -0,0 +1,13 @@ +  +Boot options: + + acpi=off This option disables ACPI; it's required to use APM (older + non-acpi hardware) and also disables hyperthreading. Try + this if your hardware is older and has trouble booting the + default way. + + console= This option configures serial port access for the boot CD. + The format is "device,connection options", the default is + "ttyS0,38400". Connection options are comma-separated. For + example: console=9600,8,n,1 + diff --git a/iso/setup.dependencies b/iso/setup.dependencies new file mode 100644 index 0000000..1ce9c96 --- /dev/null +++ b/iso/setup.dependencies @@ -0,0 +1,355 @@ +autoconf: autoconf +automake: gawk db gdbm autoconf perl automake +bash: ncurses bash +bc: ncurses readline bc +bin86: bin86 +bindutils: openssl bindutils +binutils: binutils +bison: bison +bzip2: bzip2 +coreutils: coreutils +cpio: cpio +curl: openssl curl +db: db +dcron: dcron +dhcpcd: dhcpcd +diffutils: diffutils +e2fsprogs: e2fsprogs +ed: ed +exim: db openssl exim +expat: expat +file: zlib file +filesystem: filesystem +findutils: findutils +flex: flex +gawk: gawk +gcc: gcc +gdbm: gdbm +gettext: gettext +glibc: glibc +grep: grep +groff: groff +gzip: gzip +hdparm: hdparm +hotplug: pciutils libusb usbutils hotplug +httpup: openssl curl httpup +iana-etc: iana-etc +inetd: inetd +iproute2: iproute2 +iptables: iptables +iputils: iputils +jfsutils: e2fsprogs jfsutils +kbd: kbd +less: ncurses less +libstdc++-compat: libstdc++-compat +libtool: libtool +libusb: libusb +lilo: lilo +m4: m4 +make: make +man: man +man-pages: man man-pages +mktemp: mktemp +module-init-tools: module-init-tools +nasm: nasm +ncurses: ncurses +net-tools: net-tools +netkit-ftp: ncurses readline netkit-ftp +netkit-telnet: ncurses netkit-telnet +nfs-utils: nfs-utils +openssh: openssl zlib openssh +openssl: openssl +patch: patch +pciutils: pciutils +perl: db gdbm perl +pkg-config: pkg-config +pkgutils: pkgutils +portmap: portmap +ports: ports +ppp: zlib openssl ppp +procps: ncurses procps +prt-get: prt-get +psmisc: ncurses psmisc +rc: rc +rdate: rdate +readline: readline +reiserfsprogs: e2fsprogs reiserfsprogs +rpm2targz: rpm2targz +rsync: openssl zlib openssh rsync +sed: sed +shadow: shadow +slocate: slocate +strace: strace +sysfsutils: sysfsutils +sysklogd: sysklogd +sysvinit: sysvinit +tar: tar +tcp_wrappers: tcp_wrappers +tcsh: ncurses tcsh +time: time +traceroute: traceroute +udev: udev +unzip: unzip +usbutils: libusb usbutils +util-linux: e2fsprogs ncurses zlib util-linux +vim: ncurses vim +wget: openssl wget +which: which +xfsprogs: e2fsprogs xfsprogs +zip: zip +zlib: zlib +atk: glib atk +blackbox: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-renderproto expat xorg-libxdmcp xorg-libxau libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-libxext xorg-libxrender xorg-libxft blackbox +cairo: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-makedepend xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxxf86vm mesa3d glitz cairo +cdrtools: cdrtools +cvs: cvs +dialog: ncurses dialog +fetchmail: openssl fetchmail +firefox: glib hicolor-icon-theme libjpeg zlib libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-renderproto expat xorg-fixesproto xorg-xineramaproto xorg-randrproto libidl atk libtiff libxml2 freetype libpng xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libice libxslt fontconfig xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxinerama xorg-libxft xorg-libxrandr xorg-libxcursor mesa3d glitz cairo pango gtk firefox +fontconfig: zlib expat freetype fontconfig +freetype: zlib freetype +glib: glib +glitz: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-makedepend xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxxf86vm mesa3d glitz +grub: ncurses gettext grub +gtk: glib hicolor-icon-theme libjpeg zlib libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-renderproto expat xorg-fixesproto xorg-xineramaproto xorg-randrproto atk libtiff libxml2 freetype xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libice libxslt fontconfig xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxinerama xorg-libxft xorg-libxrandr xorg-libxcursor mesa3d glitz cairo pango gtk +hicolor-icon-theme: hicolor-icon-theme +libdrm: libdrm +libidl: glib libidl +libjpeg: libjpeg +libpng: zlib libpng +libtiff: libjpeg zlib libtiff +libxml2: zlib libxml2 +libxslt: zlib libxml2 libxslt +mdadm: mdadm +mutt: gdbm ncurses openssl mutt +nano: nano +p5-xml-parser: expat db gdbm perl p5-xml-parser +pango: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto glib xorg-renderproto expat xorg-makedepend xorg-libxdmcp xorg-libxau libxml2 freetype xorg-libice libxslt fontconfig xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxrender xorg-libxxf86vm xorg-libxft mesa3d glitz cairo pango +procmail: procmail +sudo: sudo +wireless-tools: wireless-tools +xterm: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-printproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxp xorg-libxmu xorg-libxpm xorg-libxaw xterm +libpthread-stubs: libpthread-stubs +mesa3d: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-makedepend xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxxf86vm mesa3d +polyglotman: polyglotman +xkeyboard-config: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat db gdbm xorg-libxdmcp xorg-libxau libxml2 perl libxslt p5-xml-parser xorg-libxcb xorg-libx11 xorg-libxkbfile xorg-xkbcomp xkeyboard-config +xorg: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-font-util xorg-font-alias db gdbm xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc xorg-rgb libxml2 freetype xorg-libice perl libxslt xorg-libxfont fontconfig xorg-libsm p5-xml-parser xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-font-misc-misc xorg-font-cursor-misc xorg-libxkbui xorg-xkbcomp xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xkeyboard-config xorg-server xorg-xf86-input-mouse xorg-xf86-input-keyboard xorg-xf86-video-vesa xorg-xinit xorg-xauth xorg +xorg-applewmproto: xorg-applewmproto +xorg-bdftopcf: zlib xorg-fontcacheproto xorg-xproto xorg-xtrans xorg-fontsproto freetype xorg-libfontenc xorg-libxfont xorg-bdftopcf +xorg-bigreqsproto: xorg-bigreqsproto +xorg-cf-files: xorg-cf-files +xorg-compositeproto: xorg-compositeproto +xorg-damageproto: xorg-damageproto +xorg-dmxproto: xorg-dmxproto +xorg-evieext: xorg-evieext +xorg-fixesproto: xorg-fixesproto +xorg-font-adobe-100dpi: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-adobe-100dpi +xorg-font-adobe-75dpi: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-adobe-75dpi +xorg-font-adobe-utopia-100dpi: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-adobe-utopia-100dpi +xorg-font-adobe-utopia-75dpi: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-adobe-utopia-75dpi +xorg-font-adobe-utopia-type1: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-adobe-utopia-type1 +xorg-font-alias: xorg-font-alias +xorg-font-arabic-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-arabic-misc +xorg-font-bh-100dpi: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-bh-100dpi +xorg-font-bh-75dpi: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-bh-75dpi +xorg-font-bh-lucidatypewriter-100dpi: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-bh-lucidatypewriter-100dpi +xorg-font-bh-lucidatypewriter-75dpi: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-bh-lucidatypewriter-75dpi +xorg-font-bh-ttf: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-bh-ttf +xorg-font-bh-type1: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-bh-type1 +xorg-font-bitstream-100dpi: zlib xorg-fontcacheproto xorg-xproto xorg-xtrans xorg-fontsproto xorg-mkfontdir xorg-xcb-proto libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto freetype libxml2 xorg-libfontenc xorg-libxdmcp xorg-libxau libxslt xorg-libxfont xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-mkfontscale xorg-font-bitstream-100dpi +xorg-font-bitstream-75dpi: zlib xorg-fontcacheproto xorg-xproto xorg-xtrans xorg-fontsproto xorg-mkfontdir xorg-xcb-proto libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto freetype libxml2 xorg-libfontenc xorg-libxdmcp xorg-libxau libxslt xorg-libxfont xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-mkfontscale xorg-font-bitstream-75dpi +xorg-font-bitstream-speedo: xorg-font-bitstream-speedo +xorg-font-bitstream-type1: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-bitstream-type1 +xorg-font-bitstream-vera: xorg-font-bitstream-vera +xorg-font-cronyx-cyrillic: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-cronyx-cyrillic +xorg-font-cursor-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-cursor-misc +xorg-font-daewoo-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-daewoo-misc +xorg-font-dec-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-dec-misc +xorg-font-ibm-type1: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-ibm-type1 +xorg-font-isas-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-isas-misc +xorg-font-jis-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-jis-misc +xorg-font-micro-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-micro-misc +xorg-font-misc-cyrillic: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-misc-cyrillic +xorg-font-misc-ethiopic: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-misc-ethiopic +xorg-font-misc-meltho: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-misc-meltho +xorg-font-misc-misc: xorg-font-util zlib xorg-fontcacheproto xorg-xproto xorg-xtrans xorg-fontsproto xorg-mkfontdir xorg-xcb-proto libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto freetype libxml2 xorg-libfontenc xorg-libxdmcp xorg-libxau libxslt xorg-libxfont xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-mkfontscale xorg-font-misc-misc +xorg-font-mutt-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-mutt-misc +xorg-font-schumacher-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-schumacher-misc +xorg-font-screen-cyrillic: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-screen-cyrillic +xorg-font-sony-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-sony-misc +xorg-font-sun-misc: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-sun-misc +xorg-font-util: xorg-font-util +xorg-font-winitzki-cyrillic: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-winitzki-cyrillic +xorg-font-xfree86-type1: xorg-mkfontdir xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto expat xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-mkfontscale xorg-font-xfree86-type1 +xorg-fontcacheproto: xorg-fontcacheproto +xorg-fontsproto: xorg-fontsproto +xorg-gccmakedep: xorg-gccmakedep +xorg-glproto: xorg-glproto +xorg-iceauth: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-iceauth +xorg-imake: xorg-xproto xorg-cf-files xorg-imake +xorg-inputproto: xorg-inputproto +xorg-kbproto: xorg-kbproto +xorg-libapplewm: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-applewmproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libapplewm +xorg-libdmx: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-dmxproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libdmx +xorg-libfontenc: xorg-xproto xorg-libfontenc +xorg-libfs: xorg-xproto xorg-fontsproto xorg-xtrans xorg-libfs +xorg-libice: xorg-xproto xorg-xtrans xorg-libice +xorg-liboldx: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-liboldx +xorg-libsm: xorg-xproto xorg-xtrans xorg-libice xorg-libsm +xorg-libwindowswm: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-windowswmproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libwindowswm +xorg-libx11: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 +xorg-libxau: xorg-xproto xorg-libxau +xorg-libxaw: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-printproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxp xorg-libxmu xorg-libxpm xorg-libxaw +xorg-libxcb: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb +xorg-libxcomposite: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-fixesproto xorg-compositeproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxfixes xorg-libxext xorg-libxcomposite +xorg-libxcursor: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-renderproto xorg-fixesproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxrender xorg-libxfixes xorg-libxcursor +xorg-libxdamage: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-fixesproto xorg-damageproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxfixes xorg-libxdamage +xorg-libxdmcp: xorg-xproto xorg-libxdmcp +xorg-libxevie: xorg-evieext xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxevie +xorg-libxext: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext +xorg-libxfixes: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-fixesproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxfixes +xorg-libxfont: zlib xorg-fontcacheproto xorg-xproto xorg-xtrans xorg-fontsproto freetype xorg-libfontenc xorg-libxfont +xorg-libxfontcache: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-fontcacheproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxfontcache +xorg-libxft: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-renderproto expat xorg-libxdmcp xorg-libxau libxml2 freetype libxslt fontconfig xorg-libxcb xorg-libx11 xorg-libxrender xorg-libxft +xorg-libxi: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxi +xorg-libxinerama: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xineramaproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxinerama +xorg-libxkbfile: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxkbfile +xorg-libxkbui: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxt xorg-libxkbfile xorg-libxkbui +xorg-libxmu: xorg-xproto xorg-xtrans xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libice libxml2 xorg-libsm libxslt xorg-libxcb xorg-libx11 xorg-libxt xorg-libxext xorg-libxmu +xorg-libxp: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-printproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxp +xorg-libxpm: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxt xorg-libxext xorg-libxpm +xorg-libxprintapputil: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-printproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxp xorg-libxprintutil xorg-libxprintapputil +xorg-libxprintutil: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-printproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxp xorg-libxprintutil +xorg-libxrandr: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-randrproto xorg-renderproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxrender xorg-libxrandr +xorg-libxrender: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-renderproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxrender +xorg-libxres: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-resourceproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxres +xorg-libxscrnsaver: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-scrnsaverproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxscrnsaver +xorg-libxt: xorg-xproto xorg-xtrans xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libice libxml2 xorg-libsm libxslt xorg-libxcb xorg-libx11 xorg-libxt +xorg-libxtrap: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-trapproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxt xorg-libxext xorg-libxtrap +xorg-libxtst: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-recordproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxtst +xorg-libxv: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-videoproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxv +xorg-libxvmc: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-videoproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxv xorg-libxvmc +xorg-libxxf86dga: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86dgaproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxxf86dga +xorg-libxxf86misc: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86miscproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxxf86misc +xorg-libxxf86vm: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxxf86vm +xorg-makedepend: xorg-xproto xorg-makedepend +xorg-mkfontdir: xorg-mkfontdir +xorg-mkfontscale: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype libxslt xorg-libxcb xorg-libx11 xorg-mkfontscale +xorg-printproto: xorg-printproto +xorg-randrproto: xorg-randrproto +xorg-recordproto: xorg-recordproto +xorg-rendercheck: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-renderproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxrender xorg-rendercheck +xorg-renderproto: xorg-renderproto +xorg-resourceproto: xorg-resourceproto +xorg-rgb: xorg-xproto xorg-rgb +xorg-scrnsaverproto: xorg-scrnsaverproto +xorg-server: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server +xorg-sessreg: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-sessreg +xorg-setxkbmap: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxkbfile xorg-setxkbmap +xorg-trapproto: xorg-trapproto +xorg-util-macros: xorg-util-macros +xorg-videoproto: xorg-videoproto +xorg-windowswmproto: xorg-windowswmproto +xorg-x11perf: xorg-xproto xorg-xtrans xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto xorg-renderproto expat xorg-libxdmcp xorg-libxau xorg-libice libxml2 freetype xorg-libsm libxslt fontconfig xorg-libxcb xorg-libx11 xorg-libxt xorg-libxext xorg-libxrender xorg-libxmu xorg-libxft xorg-x11perf +xorg-xauth: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-xauth +xorg-xbitmaps: xorg-xbitmaps +xorg-xcb-proto: xorg-xcb-proto +xorg-xcmiscproto: xorg-xcmiscproto +xorg-xdpyinfo: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-recordproto xorg-xf86vidmodeproto xorg-xf86dgaproto xorg-xf86miscproto xorg-renderproto xorg-xineramaproto xorg-dmxproto xorg-printproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxrender xorg-libxtst xorg-libxxf86vm xorg-libxxf86dga xorg-libxxf86misc xorg-libxi xorg-libxinerama xorg-libdmx xorg-libxp xorg-xdpyinfo +xorg-xdriinfo: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-glproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-xdriinfo +xorg-xev: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-xev +xorg-xextproto: xorg-xextproto +xorg-xf86-input-acecad: xorg-xf86-input-acecad +xorg-xf86-input-calcomp: xorg-xf86-input-calcomp +xorg-xf86-input-citron: xorg-xf86-input-citron +xorg-xf86-input-digitaledge: xorg-xf86-input-digitaledge +xorg-xf86-input-dmc: xorg-xf86-input-dmc +xorg-xf86-input-dynapro: xorg-xf86-input-dynapro +xorg-xf86-input-elo2300: xorg-xf86-input-elo2300 +xorg-xf86-input-elographics: xorg-xf86-input-elographics +xorg-xf86-input-evdev: xorg-xf86-input-evdev +xorg-xf86-input-fpit: xorg-xf86-input-fpit +xorg-xf86-input-hyperpen: xorg-xf86-input-hyperpen +xorg-xf86-input-jamstudio: xorg-xf86-input-jamstudio +xorg-xf86-input-joystick: xorg-xf86-input-joystick +xorg-xf86-input-keyboard: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-xf86-input-keyboard +xorg-xf86-input-magellan: xorg-xf86-input-magellan +xorg-xf86-input-magictouch: xorg-xf86-input-magictouch +xorg-xf86-input-microtouch: xorg-xf86-input-microtouch +xorg-xf86-input-mouse: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-xf86-input-mouse +xorg-xf86-input-mutouch: xorg-xf86-input-mutouch +xorg-xf86-input-palmax: xorg-xf86-input-palmax +xorg-xf86-input-penmount: xorg-xf86-input-penmount +xorg-xf86-input-spaceorb: xorg-xf86-input-spaceorb +xorg-xf86-input-summa: xorg-xf86-input-summa +xorg-xf86-input-tek4957: xorg-xf86-input-tek4957 +xorg-xf86-input-ur98: xorg-xf86-input-ur98 +xorg-xf86-input-vmmouse: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-xf86-input-vmmouse +xorg-xf86-input-void: xorg-xf86-input-void +xorg-xf86-video-apm: xorg-xf86-video-apm +xorg-xf86-video-ark: xorg-xf86-video-ark +xorg-xf86-video-ati: xorg-xf86-video-ati +xorg-xf86-video-chips: xorg-xf86-video-chips +xorg-xf86-video-cirrus: xorg-xf86-video-cirrus +xorg-xf86-video-cyrix: xorg-xf86-video-cyrix +xorg-xf86-video-dummy: xorg-xf86-video-dummy +xorg-xf86-video-fbdev: xorg-xf86-video-fbdev +xorg-xf86-video-glint: xorg-xf86-video-glint +xorg-xf86-video-i128: xorg-xf86-video-i128 +xorg-xf86-video-i740: xorg-xf86-video-i740 +xorg-xf86-video-i810: xorg-xf86-video-i810 +xorg-xf86-video-imstt: xorg-xf86-video-imstt +xorg-xf86-video-mga: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-xf86-video-mga +xorg-xf86-video-neomagic: xorg-xf86-video-neomagic +xorg-xf86-video-newport: xorg-xf86-video-newport +xorg-xf86-video-nsc: xorg-xf86-video-nsc +xorg-xf86-video-nv: xorg-xf86-video-nv +xorg-xf86-video-rendition: xorg-xf86-video-rendition +xorg-xf86-video-s3: xorg-xf86-video-s3 +xorg-xf86-video-s3virge: xorg-xf86-video-s3virge +xorg-xf86-video-savage: xorg-xf86-video-savage +xorg-xf86-video-siliconmotion: xorg-xf86-video-siliconmotion +xorg-xf86-video-sis: xorg-xf86-video-sis +xorg-xf86-video-sisusb: xorg-xf86-video-sisusb +xorg-xf86-video-sunbw2: xorg-xf86-video-sunbw2 +xorg-xf86-video-suncg14: xorg-xf86-video-suncg14 +xorg-xf86-video-suncg3: xorg-xf86-video-suncg3 +xorg-xf86-video-suncg6: xorg-xf86-video-suncg6 +xorg-xf86-video-sunffb: xorg-xf86-video-sunffb +xorg-xf86-video-sunleo: xorg-xf86-video-sunleo +xorg-xf86-video-suntcx: xorg-xf86-video-suntcx +xorg-xf86-video-tdfx: xorg-xf86-video-tdfx +xorg-xf86-video-tga: xorg-xf86-video-tga +xorg-xf86-video-trident: xorg-xf86-video-trident +xorg-xf86-video-tseng: xorg-xf86-video-tseng +xorg-xf86-video-v4l: xorg-xf86-video-v4l +xorg-xf86-video-vesa: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-xf86-video-vesa +xorg-xf86-video-vga: xorg-xf86-video-vga +xorg-xf86-video-via: xorg-xf86-video-via +xorg-xf86-video-vmware: xorg-xf86-video-vmware +xorg-xf86-video-voodoo: xorg-xf86-video-voodoo +xorg-xf86bigfontproto: xorg-xf86bigfontproto +xorg-xf86dgaproto: xorg-xf86dgaproto +xorg-xf86driproto: xorg-xf86driproto +xorg-xf86miscproto: xorg-xf86miscproto +xorg-xf86rushproto: xorg-xf86rushproto +xorg-xf86vidmodeproto: xorg-xf86vidmodeproto +xorg-xfontsel: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-printproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxp xorg-libxmu xorg-libxpm xorg-libxaw xorg-xfontsel +xorg-xhost: xorg-xhost +xorg-xineramaproto: xorg-xineramaproto +xorg-xinit: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-xinit +xorg-xkbcomp: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxkbfile xorg-xkbcomp +xorg-xkill: xorg-xkill +xorg-xlsfonts: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-xlsfonts +xorg-xmag: xorg-xproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-printproto xorg-libxdmcp xorg-libxau libxml2 xorg-libice libxslt xorg-libsm xorg-libxcb xorg-libx11 xorg-libxext xorg-libxt xorg-libxp xorg-libxmu xorg-libxpm xorg-libxaw xorg-xmag +xorg-xmodmap: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-xmodmap +xorg-xprop: xorg-xproto xorg-xtrans xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libice libxml2 xorg-libsm libxslt xorg-libxcb xorg-libx11 xorg-libxt xorg-libxext xorg-libxmu xorg-xprop +xorg-xproto: xorg-xproto +xorg-xproxymanagementprotocol: xorg-xproxymanagementprotocol +xorg-xrandr: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-randrproto xorg-renderproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxrender xorg-libxrandr xorg-xrandr +xorg-xrdb: xorg-xproto xorg-xtrans xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libice libxml2 xorg-libsm libxslt xorg-libxcb xorg-libx11 xorg-libxt xorg-libxext xorg-libxmu xorg-xrdb +xorg-xset: xorg-xproto xorg-xtrans xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto xorg-xf86miscproto xorg-fontcacheproto xorg-printproto xorg-libxdmcp xorg-libxau xorg-libice libxml2 xorg-libsm libxslt xorg-libxcb xorg-libx11 xorg-libxt xorg-libxext xorg-libxmu xorg-libxxf86misc xorg-libxfontcache xorg-libxp xorg-xset +xorg-xsetroot: libdrm xorg-xproto xorg-glproto xorg-xextproto xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-xf86vidmodeproto xorg-fontcacheproto xorg-fontsproto xorg-mkfontdir xorg-xf86driproto xorg-printproto xorg-randrproto xorg-renderproto xorg-fixesproto xorg-damageproto xorg-xcmiscproto xorg-xf86miscproto xorg-scrnsaverproto xorg-bigreqsproto xorg-resourceproto xorg-xf86dgaproto xorg-videoproto xorg-compositeproto xorg-trapproto xorg-recordproto xorg-xineramaproto xorg-evieext xorg-dmxproto expat xorg-xbitmaps xorg-makedepend xorg-libxdmcp xorg-libxau xorg-libfontenc libxml2 freetype xorg-libice libxslt xorg-libxfont fontconfig xorg-libsm xorg-libxcb xorg-bdftopcf xorg-libx11 xorg-libxext xorg-libxt xorg-mkfontscale xorg-libxkbfile xorg-libxrender xorg-libxfixes xorg-libxxf86vm xorg-libxevie xorg-libxtst xorg-libdmx xorg-libxxf86misc xorg-libxp xorg-libxv xorg-libxi xorg-libxres xorg-libxinerama xorg-libxxf86dga xorg-libxmu xorg-libxpm xorg-libxtrap xorg-libxkbui xorg-libxrandr xorg-libxft xorg-libxcomposite xorg-libxdamage xorg-libxcursor mesa3d xorg-libxvmc xorg-libxaw xorg-server xorg-xsetroot +xorg-xtrans: xorg-xtrans +xorg-xvinfo: xorg-xcb-proto xorg-xproto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-xtrans xorg-kbproto xorg-inputproto xorg-videoproto xorg-libxdmcp xorg-libxau libxml2 libxslt xorg-libxcb xorg-libx11 xorg-libxext xorg-libxv xorg-xvinfo +xorg-xwininfo: xorg-xproto xorg-xtrans xorg-xcb-proto zlib libpthread-stubs xorg-xf86bigfontproto xorg-xextproto xorg-kbproto xorg-inputproto xorg-libxdmcp xorg-libxau xorg-libice libxml2 xorg-libsm libxslt xorg-libxcb xorg-libx11 xorg-libxt xorg-libxext xorg-libxmu xorg-xwininfo diff --git a/kernel/linux-2.6.22.1.config b/kernel/linux-2.6.22.1.config new file mode 100644 index 0000000..f2282c6 --- /dev/null +++ b/kernel/linux-2.6.22.1.config @@ -0,0 +1,2142 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.22.1 +# Thu Aug 9 14:00:13 2007 +# +CONFIG_X86_32=y +CONFIG_GENERIC_TIME=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_SEMAPHORE_SLEEPERS=y +CONFIG_X86=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +CONFIG_QUICKLIST=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_DMI=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=15 +# CONFIG_CPUSETS is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_STOP_MACHINE=y + +# +# Block layer +# +CONFIG_BLOCK=y +CONFIG_LBD=y +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# Processor type and features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_SMP=y +CONFIG_X86_PC=y +# CONFIG_X86_ELAN is not set +# CONFIG_X86_VOYAGER is not set +# CONFIG_X86_NUMAQ is not set +# CONFIG_X86_SUMMIT is not set +# CONFIG_X86_BIGSMP is not set +# CONFIG_X86_VISWS is not set +# CONFIG_X86_GENERICARCH is not set +# CONFIG_X86_ES7000 is not set +# CONFIG_PARAVIRT is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +CONFIG_M686=y +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MCORE2 is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP2 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_X86_GENERIC is not set +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=5 +CONFIG_X86_XADD=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_X86_PPRO_FENCE=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_GOOD_APIC=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_MODEL=4 +# CONFIG_HPET_TIMER is not set +CONFIG_NR_CPUS=8 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_BKL=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +# CONFIG_X86_MCE is not set +CONFIG_VM86=y +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +# CONFIG_DELL_RBU is not set +CONFIG_DCDBAS=m +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_NR_QUICK=1 +# CONFIG_MATH_EMULATION is not set +CONFIG_MTRR=y +# CONFIG_EFI is not set +CONFIG_IRQBALANCE=y +CONFIG_SECCOMP=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +# CONFIG_KEXEC is not set +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +# CONFIG_HOTPLUG_CPU is not set +CONFIG_COMPAT_VDSO=y + +# +# Power management options (ACPI, APM) +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set + +# +# ACPI (Advanced Configuration and Power Interface) Support +# +CONFIG_ACPI=y +CONFIG_ACPI_PROCFS=y +CONFIG_ACPI_AC=m +CONFIG_ACPI_BATTERY=m +CONFIG_ACPI_BUTTON=m +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_FAN=m +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_PROCESSOR=m +CONFIG_ACPI_THERMAL=m +CONFIG_ACPI_ASUS=m +CONFIG_ACPI_TOSHIBA=m +CONFIG_ACPI_BLACKLIST_YEAR=0 +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_EC=y +CONFIG_ACPI_POWER=y +CONFIG_ACPI_SYSTEM=y +CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_CONTAINER=m +# CONFIG_ACPI_SBS is not set +CONFIG_APM=m +# CONFIG_APM_IGNORE_USER_SUSPEND is not set +CONFIG_APM_DO_ENABLE=y +# CONFIG_APM_CPU_IDLE is not set +# CONFIG_APM_DISPLAY_BLANK is not set +# CONFIG_APM_ALLOW_INTS is not set +CONFIG_APM_REAL_MODE_POWER_OFF=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=m +# CONFIG_CPU_FREQ_DEBUG is not set +CONFIG_CPU_FREQ_STAT=m +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=m +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set + +# +# CPUFreq processor drivers +# +CONFIG_X86_ACPI_CPUFREQ=m +CONFIG_X86_POWERNOW_K6=m +CONFIG_X86_POWERNOW_K7=m +CONFIG_X86_POWERNOW_K7_ACPI=y +CONFIG_X86_POWERNOW_K8=m +CONFIG_X86_POWERNOW_K8_ACPI=y +CONFIG_X86_GX_SUSPMOD=m +CONFIG_X86_SPEEDSTEP_CENTRINO=m +# CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI is not set +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y +CONFIG_X86_SPEEDSTEP_ICH=m +CONFIG_X86_SPEEDSTEP_SMI=m +CONFIG_X86_P4_CLOCKMOD=m +CONFIG_X86_CPUFREQ_NFORCE2=m +CONFIG_X86_LONGRUN=m +# CONFIG_X86_LONGHAUL is not set +# CONFIG_X86_E_POWERSAVER is not set + +# +# shared options +# +# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set +CONFIG_X86_SPEEDSTEP_LIB=m +# CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set + +# +# Bus options (PCI, PCMCIA, EISA, MCA, ISA) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIEAER=y +CONFIG_ARCH_SUPPORTS_MSI=y +# CONFIG_PCI_MSI is not set +# CONFIG_PCI_DEBUG is not set +CONFIG_HT_IRQ=y +CONFIG_ISA_DMA_API=y +CONFIG_ISA=y +CONFIG_EISA=y +CONFIG_EISA_VLB_PRIMING=y +CONFIG_EISA_PCI_EISA=y +CONFIG_EISA_VIRTUAL_ROOT=y +# CONFIG_EISA_NAMES is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y +CONFIG_CARDBUS=y + +# +# PC-card bridges +# +CONFIG_YENTA=m +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_PD6729=m +CONFIG_I82092=m +CONFIG_I82365=m +CONFIG_TCIC=m +CONFIG_PCMCIA_PROBE=y +CONFIG_PCCARD_NONSTATIC=m +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=m +CONFIG_IPV6_PRIVACY=y +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=y +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +# CONFIG_BT_CMTP is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set + +# +# Parallel port support +# +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_SERIAL=m +CONFIG_PARPORT_PC_FIFO=y +CONFIG_PARPORT_PC_SUPERIO=y +CONFIG_PARPORT_PC_PCMCIA=m +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_AX88796 is not set +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_NOT_PC=y + +# +# Plug and Play support +# +CONFIG_PNP=y +# CONFIG_PNP_DEBUG is not set + +# +# Protocols +# +CONFIG_ISAPNP=y +# CONFIG_PNPBIOS is not set +CONFIG_PNPACPI=y + +# +# Block devices +# +CONFIG_BLK_DEV_FD=m +CONFIG_BLK_DEV_XD=m +CONFIG_PARIDE=m + +# +# Parallel IDE high-level drivers +# +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m + +# +# Parallel IDE protocol modules +# +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_BPCK6=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_ATA_OVER_ETH=m + +# +# Misc devices +# +# CONFIG_IBM_ASM is not set +# CONFIG_PHANTOM is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_MSI_LAPTOP is not set +# CONFIG_SONY_LAPTOP is not set +# CONFIG_THINKPAD_ACPI is not set +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +# CONFIG_BLK_DEV_HD_IDE is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_DELKIN is not set +CONFIG_BLK_DEV_IDECD=y +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_BLK_DEV_IDEFLOPPY=m +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_IDEACPI is not set +CONFIG_IDE_TASK_IOCTL=y +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_CMD640=y +CONFIG_BLK_DEV_CMD640_ENHANCED=y +CONFIG_BLK_DEV_IDEPNP=y +CONFIG_BLK_DEV_IDEPCI=y +CONFIG_IDEPCI_SHARE_IRQ=y +CONFIG_IDEPCI_PCIBUS_ORDER=y +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_OPTI621=y +CONFIG_BLK_DEV_RZ1000=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +# CONFIG_IDEDMA_ONLYDISK is not set +CONFIG_BLK_DEV_AEC62XX=y +CONFIG_BLK_DEV_ALI15X3=y +# CONFIG_WDC_ALI15X3 is not set +CONFIG_BLK_DEV_AMD74XX=y +CONFIG_BLK_DEV_ATIIXP=y +CONFIG_BLK_DEV_CMD64X=y +CONFIG_BLK_DEV_TRIFLEX=y +CONFIG_BLK_DEV_CY82C693=y +CONFIG_BLK_DEV_CS5520=y +CONFIG_BLK_DEV_CS5530=y +# CONFIG_BLK_DEV_CS5535 is not set +CONFIG_BLK_DEV_HPT34X=y +# CONFIG_HPT34X_AUTODMA is not set +CONFIG_BLK_DEV_HPT366=y +# CONFIG_BLK_DEV_JMICRON is not set +CONFIG_BLK_DEV_SC1200=y +CONFIG_BLK_DEV_PIIX=y +# CONFIG_BLK_DEV_IT8213 is not set +# CONFIG_BLK_DEV_IT821X is not set +CONFIG_BLK_DEV_NS87415=y +CONFIG_BLK_DEV_PDC202XX_OLD=y +# CONFIG_PDC202XX_BURST is not set +CONFIG_BLK_DEV_PDC202XX_NEW=y +CONFIG_BLK_DEV_SVWKS=y +CONFIG_BLK_DEV_SIIMAGE=m +CONFIG_BLK_DEV_SIS5513=y +CONFIG_BLK_DEV_SLC90E66=y +CONFIG_BLK_DEV_TRM290=y +CONFIG_BLK_DEV_VIA82CXXX=y +# CONFIG_BLK_DEV_TC86C001 is not set +# CONFIG_IDE_ARM is not set +CONFIG_IDE_CHIPSETS=y + +# +# Note: most of these also require special kernel boot parameters +# +CONFIG_BLK_DEV_4DRIVES=y +CONFIG_BLK_DEV_ALI14XX=y +CONFIG_BLK_DEV_DTC2278=y +CONFIG_BLK_DEV_HT6560B=y +CONFIG_BLK_DEV_QD65XX=y +CONFIG_BLK_DEV_UMC8672=y +CONFIG_BLK_DEV_IDEDMA=y +CONFIG_IDEDMA_IVB=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +# CONFIG_SCSI_TGT is not set +CONFIG_SCSI_NETLINK=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_7000FASST=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_AHA152X=m +CONFIG_SCSI_AHA1542=m +CONFIG_SCSI_AHA1740=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=5000 +# CONFIG_AIC7XXX_DEBUG_ENABLE is not set +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +# CONFIG_SCSI_AIC7XXX_OLD is not set +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=5000 +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +# CONFIG_SCSI_AIC94XX is not set +CONFIG_SCSI_DPT_I2O=m +# CONFIG_SCSI_ADVANSYS is not set +CONFIG_SCSI_IN2000=m +# CONFIG_SCSI_ARCMSR is not set +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_HPTIOP is not set +CONFIG_SCSI_BUSLOGIC=m +# CONFIG_SCSI_OMIT_FLASHPOINT is not set +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DTC3280=m +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_GDTH=m +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_IMM=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +CONFIG_SCSI_NCR53C406A=m +# CONFIG_SCSI_STEX is not set +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +# CONFIG_SCSI_IPR is not set +CONFIG_SCSI_PAS16=m +CONFIG_SCSI_PSI240I=m +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_QLOGIC_1280=m +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_SEAGATE is not set +CONFIG_SCSI_SIM710=m +CONFIG_SCSI_SYM53C416=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_T128=m +CONFIG_SCSI_U14_34F=m +CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y +CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y +CONFIG_SCSI_U14_34F_MAX_TAGS=8 +CONFIG_SCSI_ULTRASTOR=m +CONFIG_SCSI_NSP32=m +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set + +# +# PCMCIA SCSI adapter support +# +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_NINJA_SCSI=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_ACPI=y +CONFIG_SATA_AHCI=m +CONFIG_SATA_SVW=m +CONFIG_ATA_PIIX=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SX4=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIL24=m +CONFIG_SATA_SIS=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +# CONFIG_SATA_INIC162X is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CS5535 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_ISAPNP is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PCMCIA is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_QDI is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_SIL680 is not set +CONFIG_PATA_SIS=m +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_WINBOND_VLB is not set + +# +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# Multi-device support (RAID and LVM) +# +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +# CONFIG_MD_RAID456 is not set +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_DELAY is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +CONFIG_IEEE1394=m + +# +# Subsystem Options +# +# CONFIG_IEEE1394_VERBOSEDEBUG is not set + +# +# Controllers +# + +# +# Texas Instruments PCILynx requires I2C +# +CONFIG_IEEE1394_OHCI1394=m + +# +# Protocols +# +CONFIG_IEEE1394_VIDEO1394=m +CONFIG_IEEE1394_SBP2=m +# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set +CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y +CONFIG_IEEE1394_ETH1394=m +CONFIG_IEEE1394_DV1394=m +CONFIG_IEEE1394_RAWIO=m + +# +# I2O device support +# +CONFIG_I2O=m +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_CONFIG=m +CONFIG_I2O_CONFIG_OLD_IOCTL=y +# CONFIG_I2O_BUS is not set +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m +# CONFIG_MACINTOSH_DRIVERS is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +# CONFIG_CASSINI is not set +CONFIG_NET_VENDOR_3COM=y +CONFIG_EL1=m +CONFIG_EL2=m +CONFIG_ELPLUS=m +CONFIG_EL16=m +CONFIG_EL3=m +CONFIG_3C515=m +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_LANCE=m +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_ULTRA32=m +CONFIG_SMC9194=m +CONFIG_NET_VENDOR_RACAL=y +CONFIG_NI52=m +CONFIG_NI65=m + +# +# Tulip family network device support +# +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +CONFIG_TULIP_MWI=y +CONFIG_TULIP_MMIO=y +CONFIG_TULIP_NAPI=y +CONFIG_TULIP_NAPI_HW_MITIGATION=y +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +# CONFIG_ULI526X is not set +CONFIG_PCMCIA_XIRCOM=m +CONFIG_AT1700=m +CONFIG_DEPCA=m +CONFIG_HP100=m +CONFIG_NET_ISA=y +CONFIG_E2100=m +CONFIG_EWRK3=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_HPLAN_PLUS=m +CONFIG_HPLAN=m +CONFIG_LP486E=m +CONFIG_ETH16I=m +CONFIG_NE2000=m +CONFIG_ZNET=m +CONFIG_SEEQ8005=m +CONFIG_NET_PCI=y +CONFIG_PCNET32=m +# CONFIG_PCNET32_NAPI is not set +CONFIG_AMD8111_ETH=m +# CONFIG_AMD8111E_NAPI is not set +CONFIG_ADAPTEC_STARFIRE=m +# CONFIG_ADAPTEC_STARFIRE_NAPI is not set +CONFIG_AC3200=m +CONFIG_APRICOT=m +CONFIG_B44=m +CONFIG_FORCEDETH=m +# CONFIG_FORCEDETH_NAPI is not set +CONFIG_CS89x0=m +CONFIG_DGRS=m +# CONFIG_EEPRO100 is not set +CONFIG_E100=m +CONFIG_LNE390=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_NE3210=m +CONFIG_ES3210=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +CONFIG_SUNDANCE_MMIO=y +CONFIG_TLAN=m +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +# CONFIG_VIA_RHINE_NAPI is not set +# CONFIG_SC92031 is not set +CONFIG_NET_POCKET=y +CONFIG_ATP=m +CONFIG_DE600=m +CONFIG_DE620=m +CONFIG_NETDEV_1000=y +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_DL2K=m +CONFIG_E1000=m +# CONFIG_E1000_NAPI is not set +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set +CONFIG_NS83820=m +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_R8169=m +# CONFIG_R8169_NAPI is not set +CONFIG_R8169_VLAN=y +# CONFIG_SIS190 is not set +CONFIG_SKGE=m +CONFIG_SKY2=m +CONFIG_SK98LIN=m +CONFIG_VIA_VELOCITY=m +CONFIG_TIGON3=m +# CONFIG_BNX2 is not set +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +CONFIG_NETDEV_10000=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 is not set +CONFIG_IXGB=m +# CONFIG_IXGB_NAPI is not set +CONFIG_S2IO=m +# CONFIG_S2IO_NAPI is not set +# CONFIG_MYRI10GE is not set +# CONFIG_NETXEN_NIC is not set +# CONFIG_MLX4_CORE is not set +CONFIG_TR=y +CONFIG_IBMTR=m +CONFIG_IBMOL=m +CONFIG_IBMLS=m +CONFIG_3C359=m +CONFIG_TMS380TR=m +CONFIG_TMSPCI=m +CONFIG_SKISA=m +CONFIG_PROTEON=m +CONFIG_ABYSS=m +CONFIG_SMCTR=m + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET_MII=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=m +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +CONFIG_PCMCIA_IBMTR=m +CONFIG_WAN=y +CONFIG_HOSTESS_SV11=m +CONFIG_COSA=m +CONFIG_LANMEDIA=m +CONFIG_SEALEVEL_4021=m +CONFIG_HDLC=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m + +# +# X.25/LAPB support is disabled +# +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +CONFIG_PC300=m +CONFIG_PC300_MLPPP=y + +# +# Cyclades-PC300 MLPPP support is disabled. +# + +# +# Refer to the file README.mlppp, provided by PC300 package. +# +# CONFIG_PC300TOO is not set +CONFIG_N2=m +CONFIG_C101=m +CONFIG_FARSYNC=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_SDLA=m +CONFIG_SBNI=m +CONFIG_SBNI_MULTILINE=y +CONFIG_FDDI=y +CONFIG_DEFXX=m +# CONFIG_DEFXX_MMIO is not set +CONFIG_SKFP=m +CONFIG_HIPPI=y +CONFIG_ROADRUNNER=m +# CONFIG_ROADRUNNER_LARGE_RINGS is not set +CONFIG_PLIP=m +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +CONFIG_PPPOE=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLHC=m +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_NET_FC=y +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +CONFIG_ISDN=y + +# +# Old ISDN4Linux +# +# CONFIG_ISDN_I4L is not set + +# +# CAPI subsystem +# +CONFIG_ISDN_CAPI=y +# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set +CONFIG_CAPI_TRACE=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y +CONFIG_ISDN_CAPI_CAPIFS=m + +# +# CAPI hardware drivers +# + +# +# Active AVM cards +# +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_T1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m + +# +# Active Eicon DIVA Server cards +# +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_KEYBOARD_NEWTON=m +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_SERIAL=m +# CONFIG_MOUSE_APPLETOUCH is not set +CONFIG_MOUSE_INPORT=m +CONFIG_MOUSE_ATIXL=y +CONFIG_MOUSE_LOGIBM=m +CONFIG_MOUSE_PC110PAD=m +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_CT82C710=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +# CONFIG_SERIAL_8250_FOURPORT is not set +# CONFIG_SERIAL_8250_ACCENT is not set +# CONFIG_SERIAL_8250_BOCA is not set +# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_PRINTER is not set +CONFIG_PPDEV=m +# CONFIG_TIPAR is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set +# CONFIG_WATCHDOG is not set +# CONFIG_HW_RANDOM is not set +CONFIG_NVRAM=m +CONFIG_RTC=m +# CONFIG_GEN_RTC is not set +CONFIG_DTLK=m +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +CONFIG_MWAVE=m +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set +# CONFIG_CS5535_GPIO is not set +CONFIG_RAW_DRIVER=m +CONFIG_MAX_RAW_DEVS=256 +# CONFIG_HPET is not set +# CONFIG_HANGCHECK_TIMER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_K8TEMP is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_CORETEMP is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_HDAPS is not set +# CONFIG_SENSORS_APPLESMC is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=m +# CONFIG_BACKLIGHT_PROGEAR is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ARC is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_VGA16 is not set +CONFIG_FB_VESA=y +# CONFIG_FB_HECUBA is not set +# CONFIG_FB_HGA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I810 is not set +# CONFIG_FB_LE80578 is not set +# CONFIG_FB_INTEL is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_CYBLA is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_GEODE is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VIDEO_SELECT=y +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +# CONFIG_SND is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set + +# +# HID Devices +# +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_SPLIT_ISO is not set +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m +# CONFIG_USB_SL811_CS is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_ISD200=y +CONFIG_USB_STORAGE_DPCM=y +# CONFIG_USB_STORAGE_USBAT is not set +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +CONFIG_USB_MON=y + +# +# USB port drivers +# +CONFIG_USB_USS720=m + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP2101 is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +CONFIG_USB_SERIAL_IPW=m +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=m + +# +# MMC/SD Host Controller Drivers +# +# CONFIG_MMC_SDHCI is not set +CONFIG_MMC_WBSD=m +# CONFIG_MMC_TIFM_SD is not set + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# InfiniBand support +# +CONFIG_INFINIBAND=m +# CONFIG_INFINIBAND_USER_MAD is not set +# CONFIG_INFINIBAND_USER_ACCESS is not set +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_MTHCA=m +CONFIG_INFINIBAND_MTHCA_DEBUG=y +# CONFIG_INFINIBAND_AMSO1100 is not set +# CONFIG_MLX4_INFINIBAND is not set +CONFIG_INFINIBAND_IPOIB=m +# CONFIG_INFINIBAND_IPOIB_CM is not set +CONFIG_INFINIBAND_IPOIB_DEBUG=y +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set +# CONFIG_INFINIBAND_SRP is not set +# CONFIG_INFINIBAND_ISER is not set + +# +# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) +# +# CONFIG_EDAC is not set + +# +# Real Time Clock +# +# CONFIG_RTC_CLASS is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# Auxiliary Display support +# +# CONFIG_KS0108 is not set + +# +# Virtualization +# +# CONFIG_KVM is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=y +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_JFS_FS=y +CONFIG_JFS_POSIX_ACL=y +# CONFIG_JFS_SECURITY is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=y +CONFIG_XFS_QUOTA=y +CONFIG_XFS_SECURITY=y +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_RT=y +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_QUOTACTL=y +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_SQUASHFS_VMALLOC is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +# CONFIG_9P_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Instrumentation Support +# +# CONFIG_PROFILING is not set +# CONFIG_KPROBES is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_UNUSED_SYMBOLS=y +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +CONFIG_DEBUG_MUTEXES=y +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_FRAME_POINTER is not set +CONFIG_FORCED_INLINING=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_EARLY_PRINTK=y +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_RODATA is not set +# CONFIG_4KSTACKS is not set +CONFIG_X86_FIND_SMP_CONFIG=y +CONFIG_X86_MPPARSE=y +CONFIG_DOUBLEFAULT=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +# CONFIG_CRYPTO_TWOFISH_586 is not set +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_AES_586=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_TEST is not set + +# +# Hardware crypto devices +# +# CONFIG_CRYPTO_DEV_PADLOCK is not set +CONFIG_CRYPTO_DEV_GEODE=m + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_X86_SMP=y +CONFIG_X86_HT=y +CONFIG_X86_BIOS_REBOOT=y +CONFIG_X86_TRAMPOLINE=y +CONFIG_KTIME_SCALAR=y diff --git a/kernel/squashfs3.2-patch b/kernel/squashfs3.2-patch new file mode 100644 index 0000000..783d432 --- /dev/null +++ b/kernel/squashfs3.2-patch @@ -0,0 +1,4388 @@ +--- + fs/Kconfig | 65 + + fs/Makefile | 1 + fs/squashfs/Makefile | 7 + fs/squashfs/inode.c | 2327 +++++++++++++++++++++++++++++++++++++++++ + fs/squashfs/squashfs.h | 87 + + fs/squashfs/squashfs2_0.c | 742 +++++++++++++ + include/linux/squashfs_fs.h | 934 ++++++++++++++++ + include/linux/squashfs_fs_i.h | 45 + include/linux/squashfs_fs_sb.h | 74 + + init/do_mounts_rd.c | 16 + 10 files changed, 4298 insertions(+) + +--- a/fs/Kconfig ++++ b/fs/Kconfig +@@ -1367,6 +1367,71 @@ config CRAMFS + + If unsure, say N. + ++config SQUASHFS ++ tristate "SquashFS 3.2 - Squashed file system support" ++ select ZLIB_INFLATE ++ help ++ Saying Y here includes support for SquashFS 3.2 (a Compressed Read-Only File ++ System). Squashfs is a highly compressed read-only filesystem for Linux. ++ It uses zlib compression to compress both files, inodes and directories. ++ Inodes in the system are very small and all blocks are packed to minimise ++ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K. ++ SquashFS 3.1 supports 64 bit filesystems and files (larger than 4GB), full ++ uid/gid information, hard links and timestamps. ++ ++ Squashfs is intended for general read-only filesystem use, for archival ++ use (i.e. in cases where a .tar.gz file may be used), and in embedded ++ systems where low overhead is needed. Further information and filesystem tools ++ are available from http://squashfs.sourceforge.net. ++ ++ If you want to compile this as a module ( = code which can be ++ inserted in and removed from the running kernel whenever you want), ++ say M here and read . The module ++ will be called squashfs. Note that the root file system (the one ++ containing the directory /) cannot be compiled as a module. ++ ++ If unsure, say N. ++ ++config SQUASHFS_EMBEDDED ++ ++ bool "Additional options for memory-constrained systems" ++ depends on SQUASHFS ++ default n ++ help ++ Saying Y here allows you to specify cache sizes and how Squashfs ++ allocates memory. This is only intended for memory constrained ++ systems. ++ ++ If unsure, say N. ++ ++config SQUASHFS_FRAGMENT_CACHE_SIZE ++ int "Number of fragments cached" if SQUASHFS_EMBEDDED ++ depends on SQUASHFS ++ default "3" ++ help ++ By default SquashFS caches the last 3 fragments read from ++ the filesystem. Increasing this amount may mean SquashFS ++ has to re-read fragments less often from disk, at the expense ++ of extra system memory. Decreasing this amount will mean ++ SquashFS uses less memory at the expense of extra reads from disk. ++ ++ Note there must be at least one cached fragment. Anything ++ much more than three will probably not make much difference. ++ ++config SQUASHFS_VMALLOC ++ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED ++ depends on SQUASHFS ++ default n ++ help ++ By default SquashFS uses kmalloc to obtain fragment cache memory. ++ Kmalloc memory is the standard kernel allocator, but it can fail ++ on memory constrained systems. Because of the way Vmalloc works, ++ Vmalloc can succeed when kmalloc fails. Specifying this option ++ will make SquashFS always use Vmalloc to allocate the ++ fragment cache memory. ++ ++ If unsure, say N. ++ + config VXFS_FS + tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)" + depends on BLOCK +--- a/fs/Makefile ++++ b/fs/Makefile +@@ -72,6 +72,7 @@ obj-$(CONFIG_JBD) += jbd/ + obj-$(CONFIG_JBD2) += jbd2/ + obj-$(CONFIG_EXT2_FS) += ext2/ + obj-$(CONFIG_CRAMFS) += cramfs/ ++obj-$(CONFIG_SQUASHFS) += squashfs/ + obj-$(CONFIG_RAMFS) += ramfs/ + obj-$(CONFIG_HUGETLBFS) += hugetlbfs/ + obj-$(CONFIG_CODA_FS) += coda/ +--- /dev/null ++++ b/fs/squashfs/Makefile +@@ -0,0 +1,7 @@ ++# ++# Makefile for the linux squashfs routines. ++# ++ ++obj-$(CONFIG_SQUASHFS) += squashfs.o ++squashfs-y += inode.o ++squashfs-y += squashfs2_0.o +--- /dev/null ++++ b/fs/squashfs/inode.c +@@ -0,0 +1,2328 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * 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, ++ * 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * inode.c ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "squashfs.h" ++ ++static void vfs_read_inode(struct inode *i); ++static struct dentry *squashfs_get_parent(struct dentry *child); ++static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode); ++static int squashfs_statfs(struct dentry *, struct kstatfs *); ++static int squashfs_symlink_readpage(struct file *file, struct page *page); ++static long long read_blocklist(struct inode *inode, int index, ++ int readahead_blks, char *block_list, ++ unsigned short **block_p, unsigned int *bsize); ++static int squashfs_readpage(struct file *file, struct page *page); ++static int squashfs_readpage4K(struct file *file, struct page *page); ++static int squashfs_readdir(struct file *, void *, filldir_t); ++static struct dentry *squashfs_lookup(struct inode *, struct dentry *, ++ struct nameidata *); ++static int squashfs_remount(struct super_block *s, int *flags, char *data); ++static void squashfs_put_super(struct super_block *); ++static int squashfs_get_sb(struct file_system_type *,int, const char *, void *, ++ struct vfsmount *); ++static struct inode *squashfs_alloc_inode(struct super_block *sb); ++static void squashfs_destroy_inode(struct inode *inode); ++static int init_inodecache(void); ++static void destroy_inodecache(void); ++ ++static struct file_system_type squashfs_fs_type = { ++ .owner = THIS_MODULE, ++ .name = "squashfs", ++ .get_sb = squashfs_get_sb, ++ .kill_sb = kill_block_super, ++ .fs_flags = FS_REQUIRES_DEV ++}; ++ ++static const unsigned char squashfs_filetype_table[] = { ++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK ++}; ++ ++static struct super_operations squashfs_super_ops = { ++ .alloc_inode = squashfs_alloc_inode, ++ .destroy_inode = squashfs_destroy_inode, ++ .statfs = squashfs_statfs, ++ .put_super = squashfs_put_super, ++ .remount_fs = squashfs_remount ++}; ++ ++static struct super_operations squashfs_export_super_ops = { ++ .alloc_inode = squashfs_alloc_inode, ++ .destroy_inode = squashfs_destroy_inode, ++ .statfs = squashfs_statfs, ++ .put_super = squashfs_put_super, ++ .read_inode = vfs_read_inode ++}; ++ ++static struct export_operations squashfs_export_ops = { ++ .get_parent = squashfs_get_parent ++}; ++ ++SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = { ++ .readpage = squashfs_symlink_readpage ++}; ++ ++SQSH_EXTERN const struct address_space_operations squashfs_aops = { ++ .readpage = squashfs_readpage ++}; ++ ++SQSH_EXTERN const struct address_space_operations squashfs_aops_4K = { ++ .readpage = squashfs_readpage4K ++}; ++ ++static const struct file_operations squashfs_dir_ops = { ++ .read = generic_read_dir, ++ .readdir = squashfs_readdir ++}; ++ ++SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = { ++ .lookup = squashfs_lookup ++}; ++ ++ ++static struct buffer_head *get_block_length(struct super_block *s, ++ int *cur_index, int *offset, int *c_byte) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ unsigned short temp; ++ struct buffer_head *bh; ++ ++ if (!(bh = sb_bread(s, *cur_index))) ++ goto out; ++ ++ if (msblk->devblksize - *offset == 1) { ++ if (msblk->swap) ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ else ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ brelse(bh); ++ if (!(bh = sb_bread(s, ++(*cur_index)))) ++ goto out; ++ if (msblk->swap) ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ bh->b_data); ++ else ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ bh->b_data); ++ *c_byte = temp; ++ *offset = 1; ++ } else { ++ if (msblk->swap) { ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset + 1)); ++ } else { ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset + 1)); ++ } ++ *c_byte = temp; ++ *offset += 2; ++ } ++ ++ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) { ++ if (*offset == msblk->devblksize) { ++ brelse(bh); ++ if (!(bh = sb_bread(s, ++(*cur_index)))) ++ goto out; ++ *offset = 0; ++ } ++ if (*((unsigned char *) (bh->b_data + *offset)) != ++ SQUASHFS_MARKER_BYTE) { ++ ERROR("Metadata block marker corrupt @ %x\n", ++ *cur_index); ++ brelse(bh); ++ goto out; ++ } ++ (*offset)++; ++ } ++ return bh; ++ ++out: ++ return NULL; ++} ++ ++ ++SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer, ++ long long index, unsigned int length, ++ long long *next_index, int srclength) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >> ++ msblk->devblksize_log2) + 2]; ++ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1); ++ unsigned int cur_index = index >> msblk->devblksize_log2; ++ int bytes, avail_bytes, b = 0, k = 0; ++ unsigned int compressed; ++ unsigned int c_byte = length; ++ ++ if (c_byte) { ++ bytes = msblk->devblksize - offset; ++ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte); ++ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte); ++ ++ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index, compressed ++ ? "" : "un", (unsigned int) c_byte, srclength); ++ ++ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used) ++ goto read_failure; ++ ++ if (!(bh[0] = sb_getblk(s, cur_index))) ++ goto block_release; ++ ++ for (b = 1; bytes < c_byte; b++) { ++ if (!(bh[b] = sb_getblk(s, ++cur_index))) ++ goto block_release; ++ bytes += msblk->devblksize; ++ } ++ ll_rw_block(READ, b, bh); ++ } else { ++ if (index < 0 || (index + 2) > sblk->bytes_used) ++ goto read_failure; ++ ++ if (!(bh[0] = get_block_length(s, &cur_index, &offset, ++ &c_byte))) ++ goto read_failure; ++ ++ bytes = msblk->devblksize - offset; ++ compressed = SQUASHFS_COMPRESSED(c_byte); ++ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte); ++ ++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed ++ ? "" : "un", (unsigned int) c_byte); ++ ++ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used) ++ goto read_failure; ++ ++ for (b = 1; bytes < c_byte; b++) { ++ if (!(bh[b] = sb_getblk(s, ++cur_index))) ++ goto block_release; ++ bytes += msblk->devblksize; ++ } ++ ll_rw_block(READ, b - 1, bh + 1); ++ } ++ ++ if (compressed) { ++ int zlib_err = 0; ++ ++ /* ++ * uncompress block ++ */ ++ ++ mutex_lock(&msblk->read_data_mutex); ++ ++ msblk->stream.next_out = buffer; ++ msblk->stream.avail_out = srclength; ++ ++ for (bytes = 0; k < b; k++) { ++ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ? ++ msblk->devblksize - offset : ++ c_byte - bytes; ++ wait_on_buffer(bh[k]); ++ if (!buffer_uptodate(bh[k])) ++ goto release_mutex; ++ ++ msblk->stream.next_in = bh[k]->b_data + offset; ++ msblk->stream.avail_in = avail_bytes; ++ ++ if (k == 0) { ++ zlib_err = zlib_inflateInit(&msblk->stream); ++ if (zlib_err != Z_OK) { ++ ERROR("zlib_inflateInit returned unexpected result 0x%x, srclength %d\n", ++ zlib_err, srclength); ++ goto release_mutex; ++ } ++ ++ if (avail_bytes == 0) { ++ offset = 0; ++ brelse(bh[k]); ++ continue; ++ } ++ } ++ ++ zlib_err = zlib_inflate(&msblk->stream, Z_NO_FLUSH); ++ if (zlib_err != Z_OK && zlib_err != Z_STREAM_END) { ++ ERROR("zlib_inflate returned unexpected result 0x%x, srclength %d, avail_in %d, avail_out %d\n", ++ zlib_err, srclength, msblk->stream.avail_in, msblk->stream.avail_out); ++ goto release_mutex; ++ } ++ ++ bytes += avail_bytes; ++ offset = 0; ++ brelse(bh[k]); ++ } ++ ++ if (zlib_err != Z_STREAM_END) ++ goto release_mutex; ++ ++ zlib_err = zlib_inflateEnd(&msblk->stream); ++ if (zlib_err != Z_OK) { ++ ERROR("zlib_inflateEnd returned unexpected result 0x%x, srclength %d\n", ++ zlib_err, srclength); ++ goto release_mutex; ++ } ++ bytes = msblk->stream.total_out; ++ mutex_unlock(&msblk->read_data_mutex); ++ } else { ++ int i; ++ ++ for(i = 0; i < b; i++) { ++ wait_on_buffer(bh[i]); ++ if(!buffer_uptodate(bh[i])) ++ goto block_release; ++ } ++ ++ for (bytes = 0; k < b; k++) { ++ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ? ++ msblk->devblksize - offset : ++ c_byte - bytes; ++ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes); ++ bytes += avail_bytes; ++ offset = 0; ++ brelse(bh[k]); ++ } ++ } ++ ++ if (next_index) ++ *next_index = index + c_byte + (length ? 0 : ++ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) ++ ? 3 : 2)); ++ return bytes; ++ ++release_mutex: ++ mutex_unlock(&msblk->read_data_mutex); ++ ++block_release: ++ for (; k < b; k++) ++ brelse(bh[k]); ++ ++read_failure: ++ ERROR("sb_bread failed reading block 0x%x\n", cur_index); ++ return 0; ++} ++ ++ ++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer, ++ long long block, unsigned int offset, ++ int length, long long *next_block, ++ unsigned int *next_offset) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ int n, i, bytes, return_length = length; ++ long long next_index; ++ ++ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset); ++ ++ while ( 1 ) { ++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) ++ if (msblk->block_cache[i].block == block) ++ break; ++ ++ mutex_lock(&msblk->block_cache_mutex); ++ ++ if (i == SQUASHFS_CACHED_BLKS) { ++ /* read inode header block */ ++ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS; ++ n ; n --, i = (i + 1) % ++ SQUASHFS_CACHED_BLKS) ++ if (msblk->block_cache[i].block != ++ SQUASHFS_USED_BLK) ++ break; ++ ++ if (n == 0) { ++ wait_queue_t wait; ++ ++ init_waitqueue_entry(&wait, current); ++ add_wait_queue(&msblk->waitq, &wait); ++ set_current_state(TASK_UNINTERRUPTIBLE); ++ mutex_unlock(&msblk->block_cache_mutex); ++ schedule(); ++ set_current_state(TASK_RUNNING); ++ remove_wait_queue(&msblk->waitq, &wait); ++ continue; ++ } ++ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS; ++ ++ if (msblk->block_cache[i].block == ++ SQUASHFS_INVALID_BLK) { ++ if (!(msblk->block_cache[i].data = ++ kmalloc(SQUASHFS_METADATA_SIZE, ++ GFP_KERNEL))) { ++ ERROR("Failed to allocate cache" ++ "block\n"); ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } ++ } ++ ++ msblk->block_cache[i].block = SQUASHFS_USED_BLK; ++ mutex_unlock(&msblk->block_cache_mutex); ++ ++ msblk->block_cache[i].length = squashfs_read_data(s, ++ msblk->block_cache[i].data, block, 0, &next_index, SQUASHFS_METADATA_SIZE); ++ if (msblk->block_cache[i].length == 0) { ++ ERROR("Unable to read cache block [%llx:%x]\n", ++ block, offset); ++ mutex_lock(&msblk->block_cache_mutex); ++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; ++ kfree(msblk->block_cache[i].data); ++ wake_up(&msblk->waitq); ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } ++ ++ mutex_lock(&msblk->block_cache_mutex); ++ wake_up(&msblk->waitq); ++ msblk->block_cache[i].block = block; ++ msblk->block_cache[i].next_index = next_index; ++ TRACE("Read cache block [%llx:%x]\n", block, offset); ++ } ++ ++ if (msblk->block_cache[i].block != block) { ++ mutex_unlock(&msblk->block_cache_mutex); ++ continue; ++ } ++ ++ bytes = msblk->block_cache[i].length - offset; ++ ++ if (bytes < 1) { ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } else if (bytes >= length) { ++ if (buffer) ++ memcpy(buffer, msblk->block_cache[i].data + ++ offset, length); ++ if (msblk->block_cache[i].length - offset == length) { ++ *next_block = msblk->block_cache[i].next_index; ++ *next_offset = 0; ++ } else { ++ *next_block = block; ++ *next_offset = offset + length; ++ } ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto finish; ++ } else { ++ if (buffer) { ++ memcpy(buffer, msblk->block_cache[i].data + ++ offset, bytes); ++ buffer += bytes; ++ } ++ block = msblk->block_cache[i].next_index; ++ mutex_unlock(&msblk->block_cache_mutex); ++ length -= bytes; ++ offset = 0; ++ } ++ } ++ ++finish: ++ return return_length; ++out: ++ return 0; ++} ++ ++ ++static int get_fragment_location(struct super_block *s, unsigned int fragment, ++ long long *fragment_start_block, ++ unsigned int *fragment_size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start_block = ++ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)]; ++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment); ++ struct squashfs_fragment_entry fragment_entry; ++ ++ if (msblk->swap) { ++ struct squashfs_fragment_entry sfragment_entry; ++ ++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, ++ start_block, offset, ++ sizeof(sfragment_entry), &start_block, ++ &offset)) ++ goto out; ++ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, ++ start_block, offset, ++ sizeof(fragment_entry), &start_block, ++ &offset)) ++ goto out; ++ ++ *fragment_start_block = fragment_entry.start_block; ++ *fragment_size = fragment_entry.size; ++ ++ return 1; ++ ++out: ++ return 0; ++} ++ ++ ++SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct ++ squashfs_fragment_cache *fragment) ++{ ++ mutex_lock(&msblk->fragment_mutex); ++ fragment->locked --; ++ wake_up(&msblk->fragment_wait_queue); ++ mutex_unlock(&msblk->fragment_mutex); ++} ++ ++ ++SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block ++ *s, long long start_block, ++ int length) ++{ ++ int i, n; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ while ( 1 ) { ++ mutex_lock(&msblk->fragment_mutex); ++ ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS && ++ msblk->fragment[i].block != start_block; i++); ++ ++ if (i == SQUASHFS_CACHED_FRAGMENTS) { ++ for (i = msblk->next_fragment, n = ++ SQUASHFS_CACHED_FRAGMENTS; n && ++ msblk->fragment[i].locked; n--, i = (i + 1) % ++ SQUASHFS_CACHED_FRAGMENTS); ++ ++ if (n == 0) { ++ wait_queue_t wait; ++ ++ init_waitqueue_entry(&wait, current); ++ add_wait_queue(&msblk->fragment_wait_queue, ++ &wait); ++ set_current_state(TASK_UNINTERRUPTIBLE); ++ mutex_unlock(&msblk->fragment_mutex); ++ schedule(); ++ set_current_state(TASK_RUNNING); ++ remove_wait_queue(&msblk->fragment_wait_queue, ++ &wait); ++ continue; ++ } ++ msblk->next_fragment = (msblk->next_fragment + 1) % ++ SQUASHFS_CACHED_FRAGMENTS; ++ ++ if (msblk->fragment[i].data == NULL) ++ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC ++ (SQUASHFS_FILE_MAX_SIZE))) { ++ ERROR("Failed to allocate fragment " ++ "cache block\n"); ++ mutex_unlock(&msblk->fragment_mutex); ++ goto out; ++ } ++ ++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; ++ msblk->fragment[i].locked = 1; ++ mutex_unlock(&msblk->fragment_mutex); ++ ++ if (!(msblk->fragment[i].length = squashfs_read_data(s, ++ msblk->fragment[i].data, ++ start_block, length, NULL, sblk->block_size))) { ++ ERROR("Unable to read fragment cache block " ++ "[%llx]\n", start_block); ++ msblk->fragment[i].locked = 0; ++ smp_mb(); ++ goto out; ++ } ++ ++ mutex_lock(&msblk->fragment_mutex); ++ msblk->fragment[i].block = start_block; ++ TRACE("New fragment %d, start block %lld, locked %d\n", ++ i, msblk->fragment[i].block, ++ msblk->fragment[i].locked); ++ mutex_unlock(&msblk->fragment_mutex); ++ break; ++ } ++ ++ msblk->fragment[i].locked++; ++ mutex_unlock(&msblk->fragment_mutex); ++ TRACE("Got fragment %d, start block %lld, locked %d\n", i, ++ msblk->fragment[i].block, ++ msblk->fragment[i].locked); ++ break; ++ } ++ ++ return &msblk->fragment[i]; ++ ++out: ++ return NULL; ++} ++ ++ ++static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, ++ struct squashfs_base_inode_header *inodeb) ++{ ++ i->i_ino = inodeb->inode_number; ++ i->i_mtime.tv_sec = inodeb->mtime; ++ i->i_atime.tv_sec = inodeb->mtime; ++ i->i_ctime.tv_sec = inodeb->mtime; ++ i->i_uid = msblk->uid[inodeb->uid]; ++ i->i_mode = inodeb->mode; ++ i->i_size = 0; ++ if (inodeb->guid == SQUASHFS_GUIDS) ++ i->i_gid = i->i_uid; ++ else ++ i->i_gid = msblk->guid[inodeb->guid]; ++} ++ ++ ++static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)]; ++ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1); ++ squashfs_inode_t inode; ++ ++ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino); ++ ++ if (msblk->swap) { ++ squashfs_inode_t sinode; ++ ++ if (!squashfs_get_cached_block(s, (char *) &sinode, start, offset, ++ sizeof(sinode), &start, &offset)) ++ goto out; ++ SQUASHFS_SWAP_INODE_T((&inode), &sinode); ++ } else if (!squashfs_get_cached_block(s, (char *) &inode, start, offset, ++ sizeof(inode), &start, &offset)) ++ goto out; ++ ++ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode); ++ ++ return inode; ++ ++out: ++ return SQUASHFS_INVALID_BLK; ++} ++ ++ ++static void vfs_read_inode(struct inode *i) ++{ ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino); ++ ++ TRACE("Entered vfs_read_inode\n"); ++ ++ if(inode != SQUASHFS_INVALID_BLK) ++ (msblk->read_inode)(i, inode); ++} ++ ++ ++static struct dentry *squashfs_get_parent(struct dentry *child) ++{ ++ struct inode *i = child->d_inode; ++ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode); ++ struct dentry *rv; ++ ++ TRACE("Entered squashfs_get_parent\n"); ++ ++ if(parent == NULL) { ++ rv = ERR_PTR(-EACCES); ++ goto out; ++ } ++ ++ rv = d_alloc_anon(parent); ++ if(rv == NULL) ++ rv = ERR_PTR(-ENOMEM); ++ ++out: ++ return rv; ++} ++ ++ ++SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct inode *i = iget_locked(s, inode_number); ++ ++ TRACE("Entered squashfs_iget\n"); ++ ++ if(i && (i->i_state & I_NEW)) { ++ (msblk->read_inode)(i, inode); ++ unlock_new_inode(i); ++ } ++ ++ return i; ++} ++ ++ ++static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode) ++{ ++ struct super_block *s = i->i_sb; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long block = SQUASHFS_INODE_BLK(inode) + ++ sblk->inode_table_start; ++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); ++ long long next_block; ++ unsigned int next_offset; ++ union squashfs_inode_header id, sid; ++ struct squashfs_base_inode_header *inodeb = &id.base, ++ *sinodeb = &sid.base; ++ ++ TRACE("Entered squashfs_read_inode\n"); ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, ++ offset, sizeof(*sinodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb, ++ sizeof(*sinodeb)); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) inodeb, block, ++ offset, sizeof(*inodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ squashfs_new_inode(msblk, i, inodeb); ++ ++ switch(inodeb->inode_type) { ++ case SQUASHFS_FILE_TYPE: { ++ unsigned int frag_size; ++ long long frag_blk; ++ struct squashfs_reg_inode_header *inodep = &id.reg; ++ struct squashfs_reg_inode_header *sinodep = &sid.reg; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG && ++ !get_fragment_location(s, ++ inodep->fragment, &frag_blk, &frag_size)) ++ goto failed_read; ++ ++ i->i_nlink = 1; ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ if (sblk->block_size > 4096) ++ i->i_data.a_ops = &squashfs_aops; ++ else ++ i->i_data.a_ops = &squashfs_aops_4K; ++ ++ TRACE("File inode %x:%x, start_block %llx, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_LREG_TYPE: { ++ unsigned int frag_size; ++ long long frag_blk; ++ struct squashfs_lreg_inode_header *inodep = &id.lreg; ++ struct squashfs_lreg_inode_header *sinodep = &sid.lreg; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG && ++ !get_fragment_location(s, ++ inodep->fragment, &frag_blk, &frag_size)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ if (sblk->block_size > 4096) ++ i->i_data.a_ops = &squashfs_aops; ++ else ++ i->i_data.a_ops = &squashfs_aops_4K; ++ ++ TRACE("File inode %x:%x, start_block %llx, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_DIR_TYPE: { ++ struct squashfs_dir_inode_header *inodep = &id.dir; ++ struct squashfs_dir_inode_header *sinodep = &sid.dir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops; ++ i->i_fop = &squashfs_dir_ops; ++ i->i_mode |= S_IFDIR; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = 0; ++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; ++ ++ TRACE("Directory inode %x:%x, start_block %x, offset " ++ "%x\n", SQUASHFS_INODE_BLK(inode), ++ offset, inodep->start_block, ++ inodep->offset); ++ break; ++ } ++ case SQUASHFS_LDIR_TYPE: { ++ struct squashfs_ldir_inode_header *inodep = &id.ldir; ++ struct squashfs_ldir_inode_header *sinodep = &sid.ldir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops; ++ i->i_fop = &squashfs_dir_ops; ++ i->i_mode |= S_IFDIR; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; ++ SQUASHFS_I(i)->u.s2.directory_index_offset = ++ next_offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = ++ inodep->i_count; ++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; ++ ++ TRACE("Long directory inode %x:%x, start_block %x, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, inodep->offset); ++ break; ++ } ++ case SQUASHFS_SYMLINK_TYPE: { ++ struct squashfs_symlink_inode_header *inodep = ++ &id.symlink; ++ struct squashfs_symlink_inode_header *sinodep = ++ &sid.symlink; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->symlink_size; ++ i->i_op = &page_symlink_inode_operations; ++ i->i_data.a_ops = &squashfs_symlink_aops; ++ i->i_mode |= S_IFLNK; ++ SQUASHFS_I(i)->start_block = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ ++ TRACE("Symbolic link inode %x:%x, start_block %llx, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ next_block, next_offset); ++ break; ++ } ++ case SQUASHFS_BLKDEV_TYPE: ++ case SQUASHFS_CHRDEV_TYPE: { ++ struct squashfs_dev_inode_header *inodep = &id.dev; ++ struct squashfs_dev_inode_header *sinodep = &sid.dev; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_mode |= (inodeb->inode_type == ++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : ++ S_IFBLK; ++ init_special_inode(i, i->i_mode, ++ old_decode_dev(inodep->rdev)); ++ ++ TRACE("Device inode %x:%x, rdev %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->rdev); ++ break; ++ } ++ case SQUASHFS_FIFO_TYPE: ++ case SQUASHFS_SOCKET_TYPE: { ++ struct squashfs_ipc_inode_header *inodep = &id.ipc; ++ struct squashfs_ipc_inode_header *sinodep = &sid.ipc; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) ++ ? S_IFIFO : S_IFSOCK; ++ init_special_inode(i, i->i_mode, 0); ++ break; ++ } ++ default: ++ ERROR("Unknown inode type %d in squashfs_iget!\n", ++ inodeb->inode_type); ++ goto failed_read1; ++ } ++ ++ return 1; ++ ++failed_read: ++ ERROR("Unable to read inode [%llx:%x]\n", block, offset); ++ ++failed_read1: ++ make_bad_inode(i); ++ return 0; ++} ++ ++ ++static int read_inode_lookup_table(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes); ++ ++ TRACE("In read_inode_lookup_table, length %d\n", length); ++ ++ /* Allocate inode lookup table */ ++ if (!(msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL))) { ++ ERROR("Failed to allocate inode lookup table\n"); ++ return 0; ++ } ++ ++ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table, ++ sblk->lookup_table_start, length | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { ++ ERROR("unable to read inode lookup table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ long long block; ++ ++ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) { ++ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block), ++ &msblk->inode_lookup_table[i], 1); ++ msblk->inode_lookup_table[i] = block; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int read_fragment_index_table(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments); ++ ++ if(length == 0) ++ return 1; ++ ++ /* Allocate fragment index table */ ++ if (!(msblk->fragment_index = kmalloc(length, GFP_KERNEL))) { ++ ERROR("Failed to allocate fragment index table\n"); ++ return 0; ++ } ++ ++ if (!squashfs_read_data(s, (char *) msblk->fragment_index, ++ sblk->fragment_table_start, length | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { ++ ERROR("unable to read fragment index table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ long long fragment; ++ ++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments); i++) { ++ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment), ++ &msblk->fragment_index[i], 1); ++ msblk->fragment_index[i] = fragment; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ msblk->read_inode = squashfs_read_inode; ++ msblk->read_blocklist = read_blocklist; ++ msblk->read_fragment_index_table = read_fragment_index_table; ++ ++ if (sblk->s_major == 1) { ++ if (!squashfs_1_0_supported(msblk)) { ++ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems " ++ "are unsupported\n"); ++ SERROR("Please recompile with " ++ "Squashfs 1.0 support enabled\n"); ++ return 0; ++ } ++ } else if (sblk->s_major == 2) { ++ if (!squashfs_2_0_supported(msblk)) { ++ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems " ++ "are unsupported\n"); ++ SERROR("Please recompile with " ++ "Squashfs 2.0 support enabled\n"); ++ return 0; ++ } ++ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor > ++ SQUASHFS_MINOR) { ++ SERROR("Major/Minor mismatch, trying to mount newer %d.%d " ++ "filesystem\n", sblk->s_major, sblk->s_minor); ++ SERROR("Please update your kernel\n"); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++ ++static int squashfs_fill_super(struct super_block *s, void *data, int silent) ++{ ++ struct squashfs_sb_info *msblk; ++ struct squashfs_super_block *sblk; ++ int i; ++ char b[BDEVNAME_SIZE]; ++ struct inode *root; ++ ++ TRACE("Entered squashfs_read_superblock\n"); ++ ++ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info), ++ GFP_KERNEL))) { ++ ERROR("Failed to allocate superblock\n"); ++ goto failure; ++ } ++ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info)); ++ msblk = s->s_fs_info; ++ if (!(msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize()))) { ++ ERROR("Failed to allocate zlib workspace\n"); ++ goto failure; ++ } ++ sblk = &msblk->sblk; ++ ++ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE); ++ msblk->devblksize_log2 = ffz(~msblk->devblksize); ++ ++ mutex_init(&msblk->read_data_mutex); ++ mutex_init(&msblk->read_page_mutex); ++ mutex_init(&msblk->block_cache_mutex); ++ mutex_init(&msblk->fragment_mutex); ++ mutex_init(&msblk->meta_index_mutex); ++ ++ init_waitqueue_head(&msblk->waitq); ++ init_waitqueue_head(&msblk->fragment_wait_queue); ++ ++ sblk->bytes_used = sizeof(struct squashfs_super_block); ++ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START, ++ sizeof(struct squashfs_super_block) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) { ++ SERROR("unable to read superblock\n"); ++ goto failed_mount; ++ } ++ ++ /* Check it is a SQUASHFS superblock */ ++ msblk->swap = 0; ++ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) { ++ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) { ++ struct squashfs_super_block ssblk; ++ ++ WARNING("Mounting a different endian SQUASHFS " ++ "filesystem on %s\n", bdevname(s->s_bdev, b)); ++ ++ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk); ++ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block)); ++ msblk->swap = 1; ++ } else { ++ SERROR("Can't find a SQUASHFS superblock on %s\n", ++ bdevname(s->s_bdev, b)); ++ goto failed_mount; ++ } ++ } ++ ++ /* Check the MAJOR & MINOR versions */ ++ if(!supported_squashfs_filesystem(msblk, silent)) ++ goto failed_mount; ++ ++ /* Check the filesystem does not extend beyond the end of the ++ block device */ ++ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode)) ++ goto failed_mount; ++ ++ /* Check the root inode for sanity */ ++ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE) ++ goto failed_mount; ++ ++ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b)); ++ TRACE("Inodes are %scompressed\n", ++ SQUASHFS_UNCOMPRESSED_INODES ++ (sblk->flags) ? "un" : ""); ++ TRACE("Data is %scompressed\n", ++ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags) ++ ? "un" : ""); ++ TRACE("Check data is %s present in the filesystem\n", ++ SQUASHFS_CHECK_DATA(sblk->flags) ? ++ "" : "not"); ++ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used); ++ TRACE("Block size %d\n", sblk->block_size); ++ TRACE("Number of inodes %d\n", sblk->inodes); ++ if (sblk->s_major > 1) ++ TRACE("Number of fragments %d\n", sblk->fragments); ++ TRACE("Number of uids %d\n", sblk->no_uids); ++ TRACE("Number of gids %d\n", sblk->no_guids); ++ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start); ++ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start); ++ if (sblk->s_major > 1) ++ TRACE("sblk->fragment_table_start %llx\n", ++ sblk->fragment_table_start); ++ TRACE("sblk->uid_start %llx\n", sblk->uid_start); ++ ++ s->s_flags |= MS_RDONLY; ++ s->s_op = &squashfs_super_ops; ++ ++ /* Init inode_table block pointer array */ ++ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) * ++ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) { ++ ERROR("Failed to allocate block cache\n"); ++ goto failed_mount; ++ } ++ ++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) ++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; ++ ++ msblk->next_cache = 0; ++ ++ /* Allocate read_page block */ ++ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) { ++ ERROR("Failed to allocate read_page block\n"); ++ goto failed_mount; ++ } ++ ++ /* Allocate uid and gid tables */ ++ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int), GFP_KERNEL))) { ++ ERROR("Failed to allocate uid/gid table\n"); ++ goto failed_mount; ++ } ++ msblk->guid = msblk->uid + sblk->no_uids; ++ ++ if (msblk->swap) { ++ unsigned int suid[sblk->no_uids + sblk->no_guids]; ++ ++ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start, ++ ((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int)) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { ++ ERROR("unable to read uid/gid table\n"); ++ goto failed_mount; ++ } ++ ++ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids + ++ sblk->no_guids), (sizeof(unsigned int) * 8)); ++ } else ++ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start, ++ ((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int)) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { ++ ERROR("unable to read uid/gid table\n"); ++ goto failed_mount; ++ } ++ ++ ++ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk)) ++ goto allocate_root; ++ ++ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) * ++ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) { ++ ERROR("Failed to allocate fragment block cache\n"); ++ goto failed_mount; ++ } ++ ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) { ++ msblk->fragment[i].locked = 0; ++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; ++ msblk->fragment[i].data = NULL; ++ } ++ ++ msblk->next_fragment = 0; ++ ++ /* Allocate and read fragment index table */ ++ if (msblk->read_fragment_index_table(s) == 0) ++ goto failed_mount; ++ ++ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK) ++ goto allocate_root; ++ ++ /* Allocate and read inode lookup table */ ++ if (read_inode_lookup_table(s) == 0) ++ goto failed_mount; ++ ++ s->s_op = &squashfs_export_super_ops; ++ s->s_export_op = &squashfs_export_ops; ++ ++allocate_root: ++ root = new_inode(s); ++ if ((msblk->read_inode)(root, sblk->root_inode) == 0) ++ goto failed_mount; ++ insert_inode_hash(root); ++ ++ if ((s->s_root = d_alloc_root(root)) == NULL) { ++ ERROR("Root inode create failed\n"); ++ iput(root); ++ goto failed_mount; ++ } ++ ++ TRACE("Leaving squashfs_read_super\n"); ++ return 0; ++ ++failed_mount: ++ kfree(msblk->inode_lookup_table); ++ kfree(msblk->fragment_index); ++ kfree(msblk->fragment); ++ kfree(msblk->uid); ++ kfree(msblk->read_page); ++ kfree(msblk->block_cache); ++ kfree(msblk->fragment_index_2); ++ vfree(msblk->stream.workspace); ++ kfree(s->s_fs_info); ++ s->s_fs_info = NULL; ++ return -EINVAL; ++ ++failure: ++ return -ENOMEM; ++} ++ ++ ++static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf) ++{ ++ struct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ TRACE("Entered squashfs_statfs\n"); ++ ++ buf->f_type = SQUASHFS_MAGIC; ++ buf->f_bsize = sblk->block_size; ++ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1; ++ buf->f_bfree = buf->f_bavail = 0; ++ buf->f_files = sblk->inodes; ++ buf->f_ffree = 0; ++ buf->f_namelen = SQUASHFS_NAME_LEN; ++ ++ return 0; ++} ++ ++ ++static int squashfs_symlink_readpage(struct file *file, struct page *page) ++{ ++ struct inode *inode = page->mapping->host; ++ int index = page->index << PAGE_CACHE_SHIFT, length, bytes; ++ long long block = SQUASHFS_I(inode)->start_block; ++ int offset = SQUASHFS_I(inode)->offset; ++ void *pageaddr = kmap(page); ++ ++ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block " ++ "%llx, offset %x\n", page->index, ++ SQUASHFS_I(inode)->start_block, ++ SQUASHFS_I(inode)->offset); ++ ++ for (length = 0; length < index; length += bytes) { ++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL, ++ block, offset, PAGE_CACHE_SIZE, &block, ++ &offset))) { ++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, ++ offset); ++ goto skip_read; ++ } ++ } ++ ++ if (length != index) { ++ ERROR("(squashfs_symlink_readpage) length != index\n"); ++ bytes = 0; ++ goto skip_read; ++ } ++ ++ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE : ++ i_size_read(inode) - length; ++ ++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, ++ offset, bytes, &block, &offset))) ++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset); ++ ++skip_read: ++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); ++ kunmap(page); ++ flush_dcache_page(page); ++ SetPageUptodate(page); ++ unlock_page(page); ++ ++ return 0; ++} ++ ++ ++struct meta_index *locate_meta_index(struct inode *inode, int index, int offset) ++{ ++ struct meta_index *meta = NULL; ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ int i; ++ ++ mutex_lock(&msblk->meta_index_mutex); ++ ++ TRACE("locate_meta_index: index %d, offset %d\n", index, offset); ++ ++ if(msblk->meta_index == NULL) ++ goto not_allocated; ++ ++ for (i = 0; i < SQUASHFS_META_NUMBER; i ++) ++ if (msblk->meta_index[i].inode_number == inode->i_ino && ++ msblk->meta_index[i].offset >= offset && ++ msblk->meta_index[i].offset <= index && ++ msblk->meta_index[i].locked == 0) { ++ TRACE("locate_meta_index: entry %d, offset %d\n", i, ++ msblk->meta_index[i].offset); ++ meta = &msblk->meta_index[i]; ++ offset = meta->offset; ++ } ++ ++ if (meta) ++ meta->locked = 1; ++ ++not_allocated: ++ mutex_unlock(&msblk->meta_index_mutex); ++ ++ return meta; ++} ++ ++ ++struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip) ++{ ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct meta_index *meta = NULL; ++ int i; ++ ++ mutex_lock(&msblk->meta_index_mutex); ++ ++ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip); ++ ++ if(msblk->meta_index == NULL) { ++ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) * ++ SQUASHFS_META_NUMBER, GFP_KERNEL))) { ++ ERROR("Failed to allocate meta_index\n"); ++ goto failed; ++ } ++ for(i = 0; i < SQUASHFS_META_NUMBER; i++) { ++ msblk->meta_index[i].inode_number = 0; ++ msblk->meta_index[i].locked = 0; ++ } ++ msblk->next_meta_index = 0; ++ } ++ ++ for(i = SQUASHFS_META_NUMBER; i && ++ msblk->meta_index[msblk->next_meta_index].locked; i --) ++ msblk->next_meta_index = (msblk->next_meta_index + 1) % ++ SQUASHFS_META_NUMBER; ++ ++ if(i == 0) { ++ TRACE("empty_meta_index: failed!\n"); ++ goto failed; ++ } ++ ++ TRACE("empty_meta_index: returned meta entry %d, %p\n", ++ msblk->next_meta_index, ++ &msblk->meta_index[msblk->next_meta_index]); ++ ++ meta = &msblk->meta_index[msblk->next_meta_index]; ++ msblk->next_meta_index = (msblk->next_meta_index + 1) % ++ SQUASHFS_META_NUMBER; ++ ++ meta->inode_number = inode->i_ino; ++ meta->offset = offset; ++ meta->skip = skip; ++ meta->entries = 0; ++ meta->locked = 1; ++ ++failed: ++ mutex_unlock(&msblk->meta_index_mutex); ++ return meta; ++} ++ ++ ++void release_meta_index(struct inode *inode, struct meta_index *meta) ++{ ++ meta->locked = 0; ++ smp_mb(); ++} ++ ++ ++static int read_block_index(struct super_block *s, int blocks, char *block_list, ++ long long *start_block, int *offset) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ unsigned int *block_listp; ++ int block = 0; ++ ++ if (msblk->swap) { ++ char sblock_list[blocks << 2]; ++ ++ if (!squashfs_get_cached_block(s, sblock_list, *start_block, ++ *offset, blocks << 2, start_block, offset)) { ++ ERROR("Unable to read block list [%llx:%x]\n", ++ *start_block, *offset); ++ goto failure; ++ } ++ SQUASHFS_SWAP_INTS(((unsigned int *)block_list), ++ ((unsigned int *)sblock_list), blocks); ++ } else ++ if (!squashfs_get_cached_block(s, block_list, *start_block, ++ *offset, blocks << 2, start_block, offset)) { ++ ERROR("Unable to read block list [%llx:%x]\n", ++ *start_block, *offset); ++ goto failure; ++ } ++ ++ for (block_listp = (unsigned int *) block_list; blocks; ++ block_listp++, blocks --) ++ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp); ++ ++ return block; ++ ++failure: ++ return -1; ++} ++ ++ ++#define SIZE 256 ++ ++static inline int calculate_skip(int blocks) { ++ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES); ++ return skip >= 7 ? 7 : skip + 1; ++} ++ ++ ++static int get_meta_index(struct inode *inode, int index, ++ long long *index_block, int *index_offset, ++ long long *data_block, char *block_list) ++{ ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log); ++ int offset = 0; ++ struct meta_index *meta; ++ struct meta_entry *meta_entry; ++ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start; ++ int cur_offset = SQUASHFS_I(inode)->offset; ++ long long cur_data_block = SQUASHFS_I(inode)->start_block; ++ int i; ++ ++ index /= SQUASHFS_META_INDEXES * skip; ++ ++ while ( offset < index ) { ++ meta = locate_meta_index(inode, index, offset + 1); ++ ++ if (meta == NULL) { ++ if ((meta = empty_meta_index(inode, offset + 1, ++ skip)) == NULL) ++ goto all_done; ++ } else { ++ if(meta->entries == 0) ++ goto failed; ++ offset = index < meta->offset + meta->entries ? index : ++ meta->offset + meta->entries - 1; ++ meta_entry = &meta->meta_entry[offset - meta->offset]; ++ cur_index_block = meta_entry->index_block + sblk->inode_table_start; ++ cur_offset = meta_entry->offset; ++ cur_data_block = meta_entry->data_block; ++ TRACE("get_meta_index: offset %d, meta->offset %d, " ++ "meta->entries %d\n", offset, meta->offset, ++ meta->entries); ++ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x" ++ " data_block 0x%llx\n", cur_index_block, ++ cur_offset, cur_data_block); ++ } ++ ++ for (i = meta->offset + meta->entries; i <= index && ++ i < meta->offset + SQUASHFS_META_ENTRIES; i++) { ++ int blocks = skip * SQUASHFS_META_INDEXES; ++ ++ while (blocks) { ++ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) : ++ blocks; ++ int res = read_block_index(inode->i_sb, block, ++ block_list, &cur_index_block, ++ &cur_offset); ++ ++ if (res == -1) ++ goto failed; ++ ++ cur_data_block += res; ++ blocks -= block; ++ } ++ ++ meta_entry = &meta->meta_entry[i - meta->offset]; ++ meta_entry->index_block = cur_index_block - sblk->inode_table_start; ++ meta_entry->offset = cur_offset; ++ meta_entry->data_block = cur_data_block; ++ meta->entries ++; ++ offset ++; ++ } ++ ++ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n", ++ meta->offset, meta->entries); ++ ++ release_meta_index(inode, meta); ++ } ++ ++all_done: ++ *index_block = cur_index_block; ++ *index_offset = cur_offset; ++ *data_block = cur_data_block; ++ ++ return offset * SQUASHFS_META_INDEXES * skip; ++ ++failed: ++ release_meta_index(inode, meta); ++ return -1; ++} ++ ++ ++static long long read_blocklist(struct inode *inode, int index, ++ int readahead_blks, char *block_list, ++ unsigned short **block_p, unsigned int *bsize) ++{ ++ long long block_ptr; ++ int offset; ++ long long block; ++ int res = get_meta_index(inode, index, &block_ptr, &offset, &block, ++ block_list); ++ ++ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset" ++ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset, ++ block); ++ ++ if(res == -1) ++ goto failure; ++ ++ index -= res; ++ ++ while ( index ) { ++ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index; ++ int res = read_block_index(inode->i_sb, blocks, block_list, ++ &block_ptr, &offset); ++ if (res == -1) ++ goto failure; ++ block += res; ++ index -= blocks; ++ } ++ ++ if (read_block_index(inode->i_sb, 1, block_list, ++ &block_ptr, &offset) == -1) ++ goto failure; ++ *bsize = *((unsigned int *) block_list); ++ ++ return block; ++ ++failure: ++ return 0; ++} ++ ++ ++static int squashfs_readpage(struct file *file, struct page *page) ++{ ++ struct inode *inode = page->mapping->host; ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned char *block_list; ++ long long block; ++ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0; ++ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT); ++ void *pageaddr; ++ struct squashfs_fragment_cache *fragment = NULL; ++ char *data_ptr = msblk->read_page; ++ ++ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1; ++ int start_index = page->index & ~mask; ++ int end_index = start_index | mask; ++ ++ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n", ++ page->index, ++ SQUASHFS_I(inode)->start_block); ++ ++ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) { ++ ERROR("Failed to allocate block_list\n"); ++ goto skip_read; ++ } ++ ++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> ++ PAGE_CACHE_SHIFT)) ++ goto skip_read; ++ ++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK ++ || index < (i_size_read(inode) >> ++ sblk->block_log)) { ++ if ((block = (msblk->read_blocklist)(inode, index, 1, ++ block_list, NULL, &bsize)) == 0) ++ goto skip_read; ++ ++ mutex_lock(&msblk->read_page_mutex); ++ ++ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page, ++ block, bsize, NULL, sblk->block_size))) { ++ ERROR("Unable to read page, block %llx, size %x\n", block, ++ bsize); ++ mutex_unlock(&msblk->read_page_mutex); ++ goto skip_read; ++ } ++ } else { ++ if ((fragment = get_cached_fragment(inode->i_sb, ++ SQUASHFS_I(inode)-> ++ u.s1.fragment_start_block, ++ SQUASHFS_I(inode)->u.s1.fragment_size)) ++ == NULL) { ++ ERROR("Unable to read page, block %llx, size %x\n", ++ SQUASHFS_I(inode)-> ++ u.s1.fragment_start_block, ++ (int) SQUASHFS_I(inode)-> ++ u.s1.fragment_size); ++ goto skip_read; ++ } ++ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset + ++ (i_size_read(inode) & (sblk->block_size ++ - 1)); ++ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset; ++ data_ptr = fragment->data; ++ } ++ ++ for (i = start_index; i <= end_index && byte_offset < bytes; ++ i++, byte_offset += PAGE_CACHE_SIZE) { ++ struct page *push_page; ++ int avail = (bytes - byte_offset) > PAGE_CACHE_SIZE ? ++ PAGE_CACHE_SIZE : bytes - byte_offset; ++ ++ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n", ++ bytes, i, byte_offset, avail); ++ ++ push_page = (i == page->index) ? page : ++ grab_cache_page_nowait(page->mapping, i); ++ ++ if (!push_page) ++ continue; ++ ++ if (PageUptodate(push_page)) ++ goto skip_page; ++ ++ pageaddr = kmap_atomic(push_page, KM_USER0); ++ memcpy(pageaddr, data_ptr + byte_offset, avail); ++ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail); ++ kunmap_atomic(pageaddr, KM_USER0); ++ flush_dcache_page(push_page); ++ SetPageUptodate(push_page); ++skip_page: ++ unlock_page(push_page); ++ if(i != page->index) ++ page_cache_release(push_page); ++ } ++ ++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK ++ || index < (i_size_read(inode) >> ++ sblk->block_log)) ++ mutex_unlock(&msblk->read_page_mutex); ++ else ++ release_cached_fragment(msblk, fragment); ++ ++ kfree(block_list); ++ return 0; ++ ++skip_read: ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); ++ kunmap_atomic(pageaddr, KM_USER0); ++ flush_dcache_page(page); ++ SetPageUptodate(page); ++ unlock_page(page); ++ ++ kfree(block_list); ++ return 0; ++} ++ ++ ++static int squashfs_readpage4K(struct file *file, struct page *page) ++{ ++ struct inode *inode = page->mapping->host; ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned char *block_list; ++ long long block; ++ unsigned int bsize, bytes = 0; ++ void *pageaddr; ++ ++ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n", ++ page->index, ++ SQUASHFS_I(inode)->start_block); ++ ++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> ++ PAGE_CACHE_SHIFT)) { ++ block_list = NULL; ++ goto skip_read; ++ } ++ ++ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) { ++ ERROR("Failed to allocate block_list\n"); ++ goto skip_read; ++ } ++ ++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK ++ || page->index < (i_size_read(inode) >> ++ sblk->block_log)) { ++ block = (msblk->read_blocklist)(inode, page->index, 1, ++ block_list, NULL, &bsize); ++ if(block == 0) ++ goto skip_read; ++ ++ mutex_lock(&msblk->read_page_mutex); ++ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block, ++ bsize, NULL, sblk->block_size); ++ if (bytes) { ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memcpy(pageaddr, msblk->read_page, bytes); ++ kunmap_atomic(pageaddr, KM_USER0); ++ } else ++ ERROR("Unable to read page, block %llx, size %x\n", ++ block, bsize); ++ mutex_unlock(&msblk->read_page_mutex); ++ } else { ++ struct squashfs_fragment_cache *fragment = ++ get_cached_fragment(inode->i_sb, ++ SQUASHFS_I(inode)-> ++ u.s1.fragment_start_block, ++ SQUASHFS_I(inode)-> u.s1.fragment_size); ++ if (fragment) { ++ bytes = i_size_read(inode) & (sblk->block_size - 1); ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)-> ++ u.s1.fragment_offset, bytes); ++ kunmap_atomic(pageaddr, KM_USER0); ++ release_cached_fragment(msblk, fragment); ++ } else ++ ERROR("Unable to read page, block %llx, size %x\n", ++ SQUASHFS_I(inode)-> ++ u.s1.fragment_start_block, (int) ++ SQUASHFS_I(inode)-> u.s1.fragment_size); ++ } ++ ++skip_read: ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); ++ kunmap_atomic(pageaddr, KM_USER0); ++ flush_dcache_page(page); ++ SetPageUptodate(page); ++ unlock_page(page); ++ ++ kfree(block_list); ++ return 0; ++} ++ ++ ++static int get_dir_index_using_offset(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ long long f_pos) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index index; ++ ++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", ++ i_count, (unsigned int) f_pos); ++ ++ f_pos =- 3; ++ if (f_pos == 0) ++ goto finish; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) &index, ++ index_start, index_offset, ++ sizeof(index), &index_start, ++ &index_offset); ++ ++ if (index.index > f_pos) ++ break; ++ ++ squashfs_get_cached_block(s, NULL, index_start, index_offset, ++ index.size + 1, &index_start, ++ &index_offset); ++ ++ length = index.index; ++ *next_block = index.start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ ++finish: ++ return length + 3; ++} ++ ++ ++static int get_dir_index_using_name(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ const char *name, int size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index *index; ++ char *str; ++ ++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); ++ ++ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + ++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_index\n"); ++ goto failure; ++ } ++ ++ index = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1); ++ strncpy(str, name, size); ++ str[size] = '\0'; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX(index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) index, ++ index_start, index_offset, ++ sizeof(struct squashfs_dir_index), ++ &index_start, &index_offset); ++ ++ squashfs_get_cached_block(s, index->name, index_start, ++ index_offset, index->size + 1, ++ &index_start, &index_offset); ++ ++ index->name[index->size + 1] = '\0'; ++ ++ if (strcmp(index->name, str) > 0) ++ break; ++ ++ length = index->index; ++ *next_block = index->start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ kfree(str); ++failure: ++ return length + 3; ++} ++ ++ ++static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir) ++{ ++ struct inode *i = file->f_dentry->d_inode; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header dirh; ++ struct squashfs_dir_entry *dire; ++ ++ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto finish; ++ } ++ ++ while(file->f_pos < 3) { ++ char *name; ++ int size, i_ino; ++ ++ if(file->f_pos == 0) { ++ name = "."; ++ size = 1; ++ i_ino = i->i_ino; ++ } else { ++ name = ".."; ++ size = 2; ++ i_ino = SQUASHFS_I(i)->u.s2.parent_inode; ++ } ++ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n", ++ (unsigned int) dirent, name, size, (int) ++ file->f_pos, i_ino, ++ squashfs_filetype_table[1]); ++ ++ if (filldir(dirent, name, size, ++ file->f_pos, i_ino, ++ squashfs_filetype_table[1]) < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos += size; ++ } ++ ++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, ++ file->f_pos); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header sdirh; ++ ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block, next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block, next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, ++ dire->size + 1, &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (file->f_pos >= length) ++ continue; ++ ++ dire->name[dire->size + 1] = '\0'; ++ ++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n", ++ (unsigned int) dirent, dire->name, ++ dire->size + 1, (int) file->f_pos, ++ dirh.start_block, dire->offset, ++ dirh.inode_number + dire->inode_number, ++ squashfs_filetype_table[dire->type]); ++ ++ if (filldir(dirent, dire->name, dire->size + 1, ++ file->f_pos, ++ dirh.inode_number + dire->inode_number, ++ squashfs_filetype_table[dire->type]) ++ < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos = length; ++ } ++ } ++ ++finish: ++ kfree(dire); ++ return 0; ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ kfree(dire); ++ return 0; ++} ++ ++ ++static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry, ++ struct nameidata *nd) ++{ ++ const unsigned char *name = dentry->d_name.name; ++ int len = dentry->d_name.len; ++ struct inode *inode = NULL; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header dirh; ++ struct squashfs_dir_entry *dire; ++ ++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto exit_lookup; ++ } ++ ++ if (len > SQUASHFS_NAME_LEN) ++ goto exit_lookup; ++ ++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, name, ++ len); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header sdirh; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block,next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block,next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, dire->size + 1, ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (name[0] < dire->name[0]) ++ goto exit_lookup; ++ ++ if ((len == dire->size + 1) && !strncmp(name, dire->name, len)) { ++ squashfs_inode_t ino = SQUASHFS_MKINODE(dirh.start_block, ++ dire->offset); ++ ++ TRACE("calling squashfs_iget for directory " ++ "entry %s, inode %x:%x, %d\n", name, ++ dirh.start_block, dire->offset, ++ dirh.inode_number + dire->inode_number); ++ ++ inode = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number); ++ ++ goto exit_lookup; ++ } ++ } ++ } ++ ++exit_lookup: ++ kfree(dire); ++ if (inode) ++ return d_splice_alias(inode, dentry); ++ d_add(dentry, inode); ++ return ERR_PTR(0); ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ goto exit_lookup; ++} ++ ++ ++static int squashfs_remount(struct super_block *s, int *flags, char *data) ++{ ++ *flags |= MS_RDONLY; ++ return 0; ++} ++ ++ ++static void squashfs_put_super(struct super_block *s) ++{ ++ int i; ++ ++ if (s->s_fs_info) { ++ struct squashfs_sb_info *sbi = s->s_fs_info; ++ if (sbi->block_cache) ++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) ++ if (sbi->block_cache[i].block != ++ SQUASHFS_INVALID_BLK) ++ kfree(sbi->block_cache[i].data); ++ if (sbi->fragment) ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) ++ SQUASHFS_FREE(sbi->fragment[i].data); ++ kfree(sbi->fragment); ++ kfree(sbi->block_cache); ++ kfree(sbi->read_page); ++ kfree(sbi->uid); ++ kfree(sbi->fragment_index); ++ kfree(sbi->fragment_index_2); ++ kfree(sbi->meta_index); ++ vfree(sbi->stream.workspace); ++ kfree(s->s_fs_info); ++ s->s_fs_info = NULL; ++ } ++} ++ ++ ++static int squashfs_get_sb(struct file_system_type *fs_type, int flags, ++ const char *dev_name, void *data, ++ struct vfsmount *mnt) ++{ ++ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, ++ mnt); ++} ++ ++ ++static int __init init_squashfs_fs(void) ++{ ++ int err = init_inodecache(); ++ if (err) ++ goto out; ++ ++ printk(KERN_INFO "squashfs: version 3.2-r2 (2007/01/15) " ++ "Phillip Lougher\n"); ++ ++ if ((err = register_filesystem(&squashfs_fs_type))) ++ destroy_inodecache(); ++ ++out: ++ return err; ++} ++ ++ ++static void __exit exit_squashfs_fs(void) ++{ ++ unregister_filesystem(&squashfs_fs_type); ++ destroy_inodecache(); ++} ++ ++ ++static struct kmem_cache * squashfs_inode_cachep; ++ ++ ++static struct inode *squashfs_alloc_inode(struct super_block *sb) ++{ ++ struct squashfs_inode_info *ei; ++ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL); ++ if (!ei) ++ return NULL; ++ return &ei->vfs_inode; ++} ++ ++ ++static void squashfs_destroy_inode(struct inode *inode) ++{ ++ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode)); ++} ++ ++ ++static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) ++{ ++ struct squashfs_inode_info *ei = foo; ++ ++ inode_init_once(&ei->vfs_inode); ++} ++ ++ ++static int __init init_inodecache(void) ++{ ++ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache", ++ sizeof(struct squashfs_inode_info), ++ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, ++ init_once, NULL); ++ if (squashfs_inode_cachep == NULL) ++ return -ENOMEM; ++ return 0; ++} ++ ++ ++static void destroy_inodecache(void) ++{ ++ kmem_cache_destroy(squashfs_inode_cachep); ++} ++ ++ ++module_init(init_squashfs_fs); ++module_exit(exit_squashfs_fs); ++MODULE_DESCRIPTION("squashfs 3.2-r2, a compressed read-only filesystem"); ++MODULE_AUTHOR("Phillip Lougher "); ++MODULE_LICENSE("GPL"); +--- /dev/null ++++ b/fs/squashfs/squashfs.h +@@ -0,0 +1,87 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * 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, ++ * 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs.h ++ */ ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++#endif ++ ++#ifdef SQUASHFS_TRACE ++#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args) ++#else ++#define TRACE(s, args...) {} ++#endif ++ ++#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args) ++ ++#define SERROR(s, args...) do { \ ++ if (!silent) \ ++ printk(KERN_ERR "SQUASHFS error: "s, ## args);\ ++ } while(0) ++ ++#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args) ++ ++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode) ++{ ++ return list_entry(inode, struct squashfs_inode_info, vfs_inode); ++} ++ ++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY) ++#define SQSH_EXTERN ++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer, ++ long long index, unsigned int length, ++ long long *next_index, int srclength); ++extern int squashfs_get_cached_block(struct super_block *s, char *buffer, ++ long long block, unsigned int offset, ++ int length, long long *next_block, ++ unsigned int *next_offset); ++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct ++ squashfs_fragment_cache *fragment); ++extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block ++ *s, long long start_block, ++ int length); ++extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number); ++extern const struct address_space_operations squashfs_symlink_aops; ++extern const struct address_space_operations squashfs_aops; ++extern const struct address_space_operations squashfs_aops_4K; ++extern struct inode_operations squashfs_dir_inode_ops; ++#else ++#define SQSH_EXTERN static ++#endif ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk); ++#else ++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk) ++{ ++ return 0; ++} ++#endif ++ ++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk); ++#else ++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk) ++{ ++ return 0; ++} ++#endif +--- /dev/null ++++ b/fs/squashfs/squashfs2_0.c +@@ -0,0 +1,742 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * 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, ++ * 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs2_0.c ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "squashfs.h" ++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir); ++static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *, ++ struct nameidata *); ++ ++static struct file_operations squashfs_dir_ops_2 = { ++ .read = generic_read_dir, ++ .readdir = squashfs_readdir_2 ++}; ++ ++static struct inode_operations squashfs_dir_inode_ops_2 = { ++ .lookup = squashfs_lookup_2 ++}; ++ ++static unsigned char squashfs_filetype_table[] = { ++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK ++}; ++ ++static int read_fragment_index_table_2(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2 ++ (sblk->fragments), GFP_KERNEL))) { ++ ERROR("Failed to allocate uid/gid table\n"); ++ return 0; ++ } ++ ++ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) && ++ !squashfs_read_data(s, (char *) ++ msblk->fragment_index_2, ++ sblk->fragment_table_start, ++ SQUASHFS_FRAGMENT_INDEX_BYTES_2 ++ (sblk->fragments) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) { ++ ERROR("unable to read fragment index table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ unsigned int fragment; ++ ++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments); ++ i++) { ++ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment), ++ &msblk->fragment_index_2[i], 1); ++ msblk->fragment_index_2[i] = fragment; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int get_fragment_location_2(struct super_block *s, unsigned int fragment, ++ long long *fragment_start_block, ++ unsigned int *fragment_size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start_block = ++ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)]; ++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment); ++ struct squashfs_fragment_entry_2 fragment_entry; ++ ++ if (msblk->swap) { ++ struct squashfs_fragment_entry_2 sfragment_entry; ++ ++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, ++ start_block, offset, ++ sizeof(sfragment_entry), &start_block, ++ &offset)) ++ goto out; ++ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, ++ start_block, offset, ++ sizeof(fragment_entry), &start_block, ++ &offset)) ++ goto out; ++ ++ *fragment_start_block = fragment_entry.start_block; ++ *fragment_size = fragment_entry.size; ++ ++ return 1; ++ ++out: ++ return 0; ++} ++ ++ ++static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, ++ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ i->i_ino = ino; ++ i->i_mtime.tv_sec = sblk->mkfs_time; ++ i->i_atime.tv_sec = sblk->mkfs_time; ++ i->i_ctime.tv_sec = sblk->mkfs_time; ++ i->i_uid = msblk->uid[inodeb->uid]; ++ i->i_mode = inodeb->mode; ++ i->i_nlink = 1; ++ i->i_size = 0; ++ if (inodeb->guid == SQUASHFS_GUIDS) ++ i->i_gid = i->i_uid; ++ else ++ i->i_gid = msblk->guid[inodeb->guid]; ++} ++ ++ ++static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode) ++{ ++ struct super_block *s = i->i_sb; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int block = SQUASHFS_INODE_BLK(inode) + ++ sblk->inode_table_start; ++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); ++ unsigned int ino = i->i_ino; ++ long long next_block; ++ unsigned int next_offset; ++ union squashfs_inode_header_2 id, sid; ++ struct squashfs_base_inode_header_2 *inodeb = &id.base, ++ *sinodeb = &sid.base; ++ ++ TRACE("Entered squashfs_iget\n"); ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, ++ offset, sizeof(*sinodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb, ++ sizeof(*sinodeb)); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) inodeb, block, ++ offset, sizeof(*inodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ squashfs_new_inode(msblk, i, inodeb, ino); ++ ++ switch(inodeb->inode_type) { ++ case SQUASHFS_FILE_TYPE: { ++ struct squashfs_reg_inode_header_2 *inodep = &id.reg; ++ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg; ++ long long frag_blk; ++ unsigned int frag_size = 0; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG && ++ !get_fragment_location_2(s, ++ inodep->fragment, &frag_blk, &frag_size)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ if (sblk->block_size > 4096) ++ i->i_data.a_ops = &squashfs_aops; ++ else ++ i->i_data.a_ops = &squashfs_aops_4K; ++ ++ TRACE("File inode %x:%x, start_block %x, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_DIR_TYPE: { ++ struct squashfs_dir_inode_header_2 *inodep = &id.dir; ++ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops_2; ++ i->i_fop = &squashfs_dir_ops_2; ++ i->i_mode |= S_IFDIR; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = 0; ++ SQUASHFS_I(i)->u.s2.parent_inode = 0; ++ ++ TRACE("Directory inode %x:%x, start_block %x, offset " ++ "%x\n", SQUASHFS_INODE_BLK(inode), ++ offset, inodep->start_block, ++ inodep->offset); ++ break; ++ } ++ case SQUASHFS_LDIR_TYPE: { ++ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir; ++ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops_2; ++ i->i_fop = &squashfs_dir_ops_2; ++ i->i_mode |= S_IFDIR; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; ++ SQUASHFS_I(i)->u.s2.directory_index_offset = ++ next_offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = ++ inodep->i_count; ++ SQUASHFS_I(i)->u.s2.parent_inode = 0; ++ ++ TRACE("Long directory inode %x:%x, start_block %x, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, inodep->offset); ++ break; ++ } ++ case SQUASHFS_SYMLINK_TYPE: { ++ struct squashfs_symlink_inode_header_2 *inodep = ++ &id.symlink; ++ struct squashfs_symlink_inode_header_2 *sinodep = ++ &sid.symlink; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->symlink_size; ++ i->i_op = &page_symlink_inode_operations; ++ i->i_data.a_ops = &squashfs_symlink_aops; ++ i->i_mode |= S_IFLNK; ++ SQUASHFS_I(i)->start_block = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ ++ TRACE("Symbolic link inode %x:%x, start_block %llx, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ next_block, next_offset); ++ break; ++ } ++ case SQUASHFS_BLKDEV_TYPE: ++ case SQUASHFS_CHRDEV_TYPE: { ++ struct squashfs_dev_inode_header_2 *inodep = &id.dev; ++ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_mode |= (inodeb->inode_type == ++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : ++ S_IFBLK; ++ init_special_inode(i, i->i_mode, ++ old_decode_dev(inodep->rdev)); ++ ++ TRACE("Device inode %x:%x, rdev %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->rdev); ++ break; ++ } ++ case SQUASHFS_FIFO_TYPE: ++ case SQUASHFS_SOCKET_TYPE: { ++ ++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) ++ ? S_IFIFO : S_IFSOCK; ++ init_special_inode(i, i->i_mode, 0); ++ break; ++ } ++ default: ++ ERROR("Unknown inode type %d in squashfs_iget!\n", ++ inodeb->inode_type); ++ goto failed_read1; ++ } ++ ++ return 1; ++ ++failed_read: ++ ERROR("Unable to read inode [%x:%x]\n", block, offset); ++ ++failed_read1: ++ return 0; ++} ++ ++ ++static int get_dir_index_using_offset(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ long long f_pos) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index_2 index; ++ ++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", ++ i_count, (unsigned int) f_pos); ++ ++ if (f_pos == 0) ++ goto finish; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index_2 sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) &index, ++ index_start, index_offset, ++ sizeof(index), &index_start, ++ &index_offset); ++ ++ if (index.index > f_pos) ++ break; ++ ++ squashfs_get_cached_block(s, NULL, index_start, index_offset, ++ index.size + 1, &index_start, ++ &index_offset); ++ ++ length = index.index; ++ *next_block = index.start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ ++finish: ++ return length; ++} ++ ++ ++static int get_dir_index_using_name(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ const char *name, int size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index_2 *index; ++ char *str; ++ ++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); ++ ++ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + ++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_index\n"); ++ goto failure; ++ } ++ ++ index = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1); ++ strncpy(str, name, size); ++ str[size] = '\0'; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index_2 sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) index, ++ index_start, index_offset, ++ sizeof(struct squashfs_dir_index_2), ++ &index_start, &index_offset); ++ ++ squashfs_get_cached_block(s, index->name, index_start, ++ index_offset, index->size + 1, ++ &index_start, &index_offset); ++ ++ index->name[index->size + 1] = '\0'; ++ ++ if (strcmp(index->name, str) > 0) ++ break; ++ ++ length = index->index; ++ *next_block = index->start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ kfree(str); ++failure: ++ return length; ++} ++ ++ ++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir) ++{ ++ struct inode *i = file->f_dentry->d_inode; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header_2 dirh; ++ struct squashfs_dir_entry_2 *dire; ++ ++ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto finish; ++ } ++ ++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, ++ file->f_pos); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header_2 sdirh; ++ ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry_2 sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block, next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block, next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, ++ dire->size + 1, &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (file->f_pos >= length) ++ continue; ++ ++ dire->name[dire->size + 1] = '\0'; ++ ++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n", ++ (unsigned int) dirent, dire->name, ++ dire->size + 1, (int) file->f_pos, ++ dirh.start_block, dire->offset, ++ squashfs_filetype_table[dire->type]); ++ ++ if (filldir(dirent, dire->name, dire->size + 1, ++ file->f_pos, SQUASHFS_MK_VFS_INODE( ++ dirh.start_block, dire->offset), ++ squashfs_filetype_table[dire->type]) ++ < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos = length; ++ } ++ } ++ ++finish: ++ kfree(dire); ++ return 0; ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ kfree(dire); ++ return 0; ++} ++ ++ ++static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry, ++ struct nameidata *nd) ++{ ++ const unsigned char *name = dentry->d_name.name; ++ int len = dentry->d_name.len; ++ struct inode *inode = NULL; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header_2 dirh; ++ struct squashfs_dir_entry_2 *dire; ++ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1; ++ ++ TRACE("Entered squashfs_lookup_2 [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto exit_loop; ++ } ++ ++ if (len > SQUASHFS_NAME_LEN) ++ goto exit_loop; ++ ++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, name, ++ len); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header_2 sdirh; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry_2 sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block,next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block,next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, dire->size + 1, ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (sorted && name[0] < dire->name[0]) ++ goto exit_loop; ++ ++ if ((len == dire->size + 1) && !strncmp(name, ++ dire->name, len)) { ++ squashfs_inode_t ino = ++ SQUASHFS_MKINODE(dirh.start_block, ++ dire->offset); ++ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(dirh.start_block, ++ dire->offset); ++ ++ TRACE("calling squashfs_iget for directory " ++ "entry %s, inode %x:%x, %lld\n", name, ++ dirh.start_block, dire->offset, ino); ++ ++ inode = squashfs_iget(i->i_sb, ino, inode_number); ++ ++ goto exit_loop; ++ } ++ } ++ } ++ ++exit_loop: ++ kfree(dire); ++ d_add(dentry, inode); ++ return ERR_PTR(0); ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ goto exit_loop; ++} ++ ++ ++int squashfs_2_0_supported(struct squashfs_sb_info *msblk) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ msblk->read_inode = squashfs_read_inode_2; ++ msblk->read_fragment_index_table = read_fragment_index_table_2; ++ ++ sblk->bytes_used = sblk->bytes_used_2; ++ sblk->uid_start = sblk->uid_start_2; ++ sblk->guid_start = sblk->guid_start_2; ++ sblk->inode_table_start = sblk->inode_table_start_2; ++ sblk->directory_table_start = sblk->directory_table_start_2; ++ sblk->fragment_table_start = sblk->fragment_table_start_2; ++ ++ return 1; ++} +--- /dev/null ++++ b/include/linux/squashfs_fs.h +@@ -0,0 +1,934 @@ ++#ifndef SQUASHFS_FS ++#define SQUASHFS_FS ++ ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * 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, ++ * 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs.h ++ */ ++ ++#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++#define CONFIG_SQUASHFS_2_0_COMPATIBILITY ++#endif ++ ++#ifdef CONFIG_SQUASHFS_VMALLOC ++#define SQUASHFS_ALLOC(a) vmalloc(a) ++#define SQUASHFS_FREE(a) vfree(a) ++#else ++#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL) ++#define SQUASHFS_FREE(a) kfree(a) ++#endif ++#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE ++#define SQUASHFS_MAJOR 3 ++#define SQUASHFS_MINOR 0 ++#define SQUASHFS_MAGIC 0x73717368 ++#define SQUASHFS_MAGIC_SWAP 0x68737173 ++#define SQUASHFS_START 0 ++ ++/* size of metadata (inode and directory) blocks */ ++#define SQUASHFS_METADATA_SIZE 8192 ++#define SQUASHFS_METADATA_LOG 13 ++ ++/* default size of data blocks */ ++#define SQUASHFS_FILE_SIZE 65536 ++#define SQUASHFS_FILE_LOG 16 ++ ++#define SQUASHFS_FILE_MAX_SIZE 65536 ++ ++/* Max number of uids and gids */ ++#define SQUASHFS_UIDS 256 ++#define SQUASHFS_GUIDS 255 ++ ++/* Max length of filename (not 255) */ ++#define SQUASHFS_NAME_LEN 256 ++ ++#define SQUASHFS_INVALID ((long long) 0xffffffffffff) ++#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff) ++#define SQUASHFS_INVALID_BLK ((long long) -1) ++#define SQUASHFS_USED_BLK ((long long) -2) ++ ++/* Filesystem flags */ ++#define SQUASHFS_NOI 0 ++#define SQUASHFS_NOD 1 ++#define SQUASHFS_CHECK 2 ++#define SQUASHFS_NOF 3 ++#define SQUASHFS_NO_FRAG 4 ++#define SQUASHFS_ALWAYS_FRAG 5 ++#define SQUASHFS_DUPLICATE 6 ++#define SQUASHFS_EXPORT 7 ++ ++#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) ++ ++#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOI) ++ ++#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOD) ++ ++#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOF) ++ ++#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NO_FRAG) ++ ++#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_ALWAYS_FRAG) ++ ++#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_DUPLICATE) ++ ++#define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_EXPORT) ++ ++#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_CHECK) ++ ++#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \ ++ duplicate_checking, exortable) (noi | (nod << 1) | (check_data << 2) \ ++ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \ ++ (duplicate_checking << 6) | (exportable << 7)) ++ ++/* Max number of types and file types */ ++#define SQUASHFS_DIR_TYPE 1 ++#define SQUASHFS_FILE_TYPE 2 ++#define SQUASHFS_SYMLINK_TYPE 3 ++#define SQUASHFS_BLKDEV_TYPE 4 ++#define SQUASHFS_CHRDEV_TYPE 5 ++#define SQUASHFS_FIFO_TYPE 6 ++#define SQUASHFS_SOCKET_TYPE 7 ++#define SQUASHFS_LDIR_TYPE 8 ++#define SQUASHFS_LREG_TYPE 9 ++ ++/* 1.0 filesystem type definitions */ ++#define SQUASHFS_TYPES 5 ++#define SQUASHFS_IPC_TYPE 0 ++ ++/* Flag whether block is compressed or uncompressed, bit is set if block is ++ * uncompressed */ ++#define SQUASHFS_COMPRESSED_BIT (1 << 15) ++ ++#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ ++ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) ++ ++#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) ++ ++#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) ++ ++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \ ++ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \ ++ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK) ++ ++#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) ++ ++/* ++ * Inode number ops. Inodes consist of a compressed block number, and an ++ * uncompressed offset within that block ++ */ ++#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16)) ++ ++#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff)) ++ ++#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\ ++ << 16) + (B))) ++ ++/* Compute 32 bit VFS inode number from squashfs inode number */ ++#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \ ++ ((b) >> 2) + 1)) ++/* XXX */ ++ ++/* Translate between VFS mode and squashfs mode */ ++#define SQUASHFS_MODE(a) ((a) & 0xfff) ++ ++/* fragment and fragment table defines */ ++#define SQUASHFS_FRAGMENT_BYTES(A) ((A) * sizeof(struct squashfs_fragment_entry)) ++ ++#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ ++ sizeof(long long)) ++ ++/* inode lookup table defines */ ++#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t)) ++ ++#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ ++ sizeof(long long)) ++ ++/* cached data constants for filesystem */ ++#define SQUASHFS_CACHED_BLKS 8 ++ ++#define SQUASHFS_MAX_FILE_SIZE_LOG 64 ++ ++#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \ ++ (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) ++ ++#define SQUASHFS_MARKER_BYTE 0xff ++ ++/* meta index cache */ ++#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) ++#define SQUASHFS_META_ENTRIES 31 ++#define SQUASHFS_META_NUMBER 8 ++#define SQUASHFS_SLOTS 4 ++ ++struct meta_entry { ++ long long data_block; ++ unsigned int index_block; ++ unsigned short offset; ++ unsigned short pad; ++}; ++ ++struct meta_index { ++ unsigned int inode_number; ++ unsigned int offset; ++ unsigned short entries; ++ unsigned short skip; ++ unsigned short locked; ++ unsigned short pad; ++ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; ++}; ++ ++ ++/* ++ * definitions for structures on disk ++ */ ++ ++typedef long long squashfs_block_t; ++typedef long long squashfs_inode_t; ++ ++struct squashfs_super_block { ++ unsigned int s_magic; ++ unsigned int inodes; ++ unsigned int bytes_used_2; ++ unsigned int uid_start_2; ++ unsigned int guid_start_2; ++ unsigned int inode_table_start_2; ++ unsigned int directory_table_start_2; ++ unsigned int s_major:16; ++ unsigned int s_minor:16; ++ unsigned int block_size_1:16; ++ unsigned int block_log:16; ++ unsigned int flags:8; ++ unsigned int no_uids:8; ++ unsigned int no_guids:8; ++ unsigned int mkfs_time /* time of filesystem creation */; ++ squashfs_inode_t root_inode; ++ unsigned int block_size; ++ unsigned int fragments; ++ unsigned int fragment_table_start_2; ++ long long bytes_used; ++ long long uid_start; ++ long long guid_start; ++ long long inode_table_start; ++ long long directory_table_start; ++ long long fragment_table_start; ++ long long lookup_table_start; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_index { ++ unsigned int index; ++ unsigned int start_block; ++ unsigned char size; ++ unsigned char name[0]; ++} __attribute__ ((packed)); ++ ++#define SQUASHFS_BASE_INODE_HEADER \ ++ unsigned int inode_type:4; \ ++ unsigned int mode:12; \ ++ unsigned int uid:8; \ ++ unsigned int guid:8; \ ++ unsigned int mtime; \ ++ unsigned int inode_number; ++ ++struct squashfs_base_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ squashfs_block_t start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ unsigned int file_size; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_lreg_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ squashfs_block_t start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ long long file_size; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int start_block; ++ unsigned int parent_inode; ++} __attribute__ ((packed)); ++ ++struct squashfs_ldir_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned int file_size:27; ++ unsigned int offset:13; ++ unsigned int start_block; ++ unsigned int i_count:16; ++ unsigned int parent_inode; ++ struct squashfs_dir_index index[0]; ++} __attribute__ ((packed)); ++ ++union squashfs_inode_header { ++ struct squashfs_base_inode_header base; ++ struct squashfs_dev_inode_header dev; ++ struct squashfs_symlink_inode_header symlink; ++ struct squashfs_reg_inode_header reg; ++ struct squashfs_lreg_inode_header lreg; ++ struct squashfs_dir_inode_header dir; ++ struct squashfs_ldir_inode_header ldir; ++ struct squashfs_ipc_inode_header ipc; ++}; ++ ++struct squashfs_dir_entry { ++ unsigned int offset:13; ++ unsigned int type:3; ++ unsigned int size:8; ++ int inode_number:16; ++ char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_header { ++ unsigned int count:8; ++ unsigned int start_block; ++ unsigned int inode_number; ++} __attribute__ ((packed)); ++ ++struct squashfs_fragment_entry { ++ long long start_block; ++ unsigned int size; ++ unsigned int pending; ++} __attribute__ ((packed)); ++ ++extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen); ++extern int squashfs_uncompress_init(void); ++extern int squashfs_uncompress_exit(void); ++ ++/* ++ * macros to convert each packed bitfield structure from little endian to big ++ * endian and vice versa. These are needed when creating or using a filesystem ++ * on a machine with different byte ordering to the target architecture. ++ * ++ */ ++ ++#define SQUASHFS_SWAP_START \ ++ int bits;\ ++ int b_pos;\ ++ unsigned long long val;\ ++ unsigned char *s;\ ++ unsigned char *d; ++ ++#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\ ++ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\ ++ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\ ++ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\ ++ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\ ++ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\ ++ SQUASHFS_SWAP((s)->flags, d, 288, 8);\ ++ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\ ++ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\ ++ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\ ++ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\ ++ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\ ++ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\ ++ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\ ++ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\ ++ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\ ++ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\ ++ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\ ++ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\ ++ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\ ++ SQUASHFS_SWAP((s)->lookup_table_start, d, 888, 64);\ ++} ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ ++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 64, 32); ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_ipc_inode_header))\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_dev_inode_header)); \ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_reg_inode_header));\ ++ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\ ++ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_lreg_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\ ++ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 224, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_dir_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 147, 13);\ ++ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_ldir_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\ ++ SQUASHFS_SWAP((s)->offset, d, 155, 13);\ ++ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\ ++ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\ ++ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\ ++ SQUASHFS_SWAP((s)->index, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->size, d, 64, 8);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\ ++ SQUASHFS_SWAP((s)->count, d, 0, 8);\ ++ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\ ++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ ++ SQUASHFS_SWAP((s)->type, d, 13, 3);\ ++ SQUASHFS_SWAP((s)->size, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\ ++ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\ ++ SQUASHFS_SWAP((s)->size, d, 64, 32);\ ++} ++ ++#define SQUASHFS_SWAP_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1) ++ ++#define SQUASHFS_SWAP_SHORTS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 2);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 16)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\ ++} ++ ++#define SQUASHFS_SWAP_INTS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 4);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 32)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 8);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 64)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\ ++} ++ ++#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * bits / 8);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ bits)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) ++#define SQUASHFS_SWAP_LOOKUP_BLOCKS(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++ ++struct squashfs_base_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int type:4; ++ unsigned int offset:4; ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int mtime; ++ unsigned int start_block; ++ unsigned int file_size:32; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 4);\ ++ SQUASHFS_SWAP((s)->guid, d, 20, 4); ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_ipc_inode_header_1));\ ++ SQUASHFS_SWAP((s)->type, d, 24, 4);\ ++ SQUASHFS_SWAP((s)->offset, d, 28, 4);\ ++} ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_dev_inode_header_1));\ ++ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header_1));\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_reg_inode_header_1));\ ++ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_dir_inode_header_1));\ ++ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 43, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\ ++} ++ ++#endif ++ ++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++ ++struct squashfs_dir_index_2 { ++ unsigned int index:27; ++ unsigned int start_block:29; ++ unsigned char size; ++ unsigned char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_base_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int mtime; ++ unsigned int start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ unsigned int file_size:32; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++struct squashfs_ldir_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int file_size:27; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++ unsigned int i_count:16; ++ struct squashfs_dir_index_2 index[0]; ++} __attribute__ ((packed)); ++ ++union squashfs_inode_header_2 { ++ struct squashfs_base_inode_header_2 base; ++ struct squashfs_dev_inode_header_2 dev; ++ struct squashfs_symlink_inode_header_2 symlink; ++ struct squashfs_reg_inode_header_2 reg; ++ struct squashfs_dir_inode_header_2 dir; ++ struct squashfs_ldir_inode_header_2 ldir; ++ struct squashfs_ipc_inode_header_2 ipc; ++}; ++ ++struct squashfs_dir_header_2 { ++ unsigned int count:8; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_entry_2 { ++ unsigned int offset:13; ++ unsigned int type:3; ++ unsigned int size:8; ++ char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_fragment_entry_2 { ++ unsigned int start_block; ++ unsigned int size; ++} __attribute__ ((packed)); ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \ ++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2)) ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_dev_inode_header_2)); \ ++ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header_2));\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_reg_inode_header_2));\ ++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 128, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_dir_inode_header_2));\ ++ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 51, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\ ++} ++ ++#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_ldir_inode_header_2));\ ++ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\ ++ SQUASHFS_SWAP((s)->offset, d, 59, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\ ++ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\ ++ SQUASHFS_SWAP((s)->index, d, 0, 27);\ ++ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\ ++ SQUASHFS_SWAP((s)->size, d, 56, 8);\ ++} ++#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\ ++ SQUASHFS_SWAP((s)->count, d, 0, 8);\ ++ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\ ++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ ++ SQUASHFS_SWAP((s)->type, d, 13, 3);\ ++ SQUASHFS_SWAP((s)->size, d, 16, 8);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\ ++ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->size, d, 32, 32);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n) ++ ++/* fragment and fragment table defines */ ++#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2)) ++ ++#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\ ++ sizeof(int)) ++ ++#endif ++ ++#ifdef __KERNEL__ ++ ++/* ++ * macros used to swap each structure entry, taking into account ++ * bitfields and different bitfield placing conventions on differing ++ * architectures ++ */ ++ ++#include ++ ++#ifdef __BIG_ENDIAN ++ /* convert from little endian to big endian */ ++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ ++ tbits, b_pos) ++#else ++ /* convert from big endian to little endian */ ++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ ++ tbits, 64 - tbits - b_pos) ++#endif ++ ++#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\ ++ b_pos = pos % 8;\ ++ val = 0;\ ++ s = (unsigned char *)p + (pos / 8);\ ++ d = ((unsigned char *) &val) + 7;\ ++ for(bits = 0; bits < (tbits + b_pos); bits += 8) \ ++ *d-- = *s++;\ ++ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\ ++} ++ ++#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n); ++ ++#endif ++#endif +--- /dev/null ++++ b/include/linux/squashfs_fs_i.h +@@ -0,0 +1,45 @@ ++#ifndef SQUASHFS_FS_I ++#define SQUASHFS_FS_I ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * 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, ++ * 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs_i.h ++ */ ++ ++struct squashfs_inode_info { ++ long long start_block; ++ unsigned int offset; ++ union { ++ struct { ++ long long fragment_start_block; ++ unsigned int fragment_size; ++ unsigned int fragment_offset; ++ long long block_list_start; ++ } s1; ++ struct { ++ long long directory_index_start; ++ unsigned int directory_index_offset; ++ unsigned int directory_index_count; ++ unsigned int parent_inode; ++ } s2; ++ } u; ++ struct inode vfs_inode; ++}; ++#endif +--- /dev/null ++++ b/include/linux/squashfs_fs_sb.h +@@ -0,0 +1,74 @@ ++#ifndef SQUASHFS_FS_SB ++#define SQUASHFS_FS_SB ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * 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, ++ * 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs_sb.h ++ */ ++ ++#include ++ ++struct squashfs_cache { ++ long long block; ++ int length; ++ long long next_index; ++ char *data; ++}; ++ ++struct squashfs_fragment_cache { ++ long long block; ++ int length; ++ unsigned int locked; ++ char *data; ++}; ++ ++struct squashfs_sb_info { ++ struct squashfs_super_block sblk; ++ int devblksize; ++ int devblksize_log2; ++ int swap; ++ struct squashfs_cache *block_cache; ++ struct squashfs_fragment_cache *fragment; ++ int next_cache; ++ int next_fragment; ++ int next_meta_index; ++ unsigned int *uid; ++ unsigned int *guid; ++ long long *fragment_index; ++ unsigned int *fragment_index_2; ++ char *read_page; ++ struct mutex read_data_mutex; ++ struct mutex read_page_mutex; ++ struct mutex block_cache_mutex; ++ struct mutex fragment_mutex; ++ struct mutex meta_index_mutex; ++ wait_queue_head_t waitq; ++ wait_queue_head_t fragment_wait_queue; ++ struct meta_index *meta_index; ++ z_stream stream; ++ long long *inode_lookup_table; ++ int (*read_inode)(struct inode *i, squashfs_inode_t \ ++ inode); ++ long long (*read_blocklist)(struct inode *inode, int \ ++ index, int readahead_blks, char *block_list, \ ++ unsigned short **block_p, unsigned int *bsize); ++ int (*read_fragment_index_table)(struct super_block *s); ++}; ++#endif +--- a/init/do_mounts_rd.c ++++ b/init/do_mounts_rd.c +@@ -5,6 +5,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in + * numbers could not be found. + * + * We currently check for the following magic numbers: ++ * squashfs + * minix + * ext2 + * romfs +@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start + struct ext2_super_block *ext2sb; + struct romfs_super_block *romfsb; + struct cramfs_super *cramfsb; ++ struct squashfs_super_block *squashfsb; + int nblocks = -1; + unsigned char *buf; + +@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start + ext2sb = (struct ext2_super_block *) buf; + romfsb = (struct romfs_super_block *) buf; + cramfsb = (struct cramfs_super *) buf; ++ squashfsb = (struct squashfs_super_block *) buf; + memset(buf, 0xe5, size); + + /* +@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start + goto done; + } + ++ /* squashfs is at block zero too */ ++ if (squashfsb->s_magic == SQUASHFS_MAGIC) { ++ printk(KERN_NOTICE ++ "RAMDISK: squashfs filesystem found at block %d\n", ++ start_block); ++ if (squashfsb->s_major < 3) ++ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; ++ else ++ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; ++ goto done; ++ } ++ + /* + * Read block 1 to test for minix and ext2 superblock + */ diff --git a/ports/checkdups b/ports/checkdups new file mode 100755 index 0000000..28ea4e7 --- /dev/null +++ b/ports/checkdups @@ -0,0 +1,11 @@ +#!/bin/sh + +echo "Checking for duplicate packages..." + +DUPS="`find . -name \"*.pkg.tar.gz\" | cut -d/ -f2- | cut -d# -f1 | uniq -d | cut -d/ -f-2`" + +if [ ! -z "$DUPS" ] +then + echo "Duplicate(s) found:" + echo $DUPS +fi diff --git a/ports/gen-mirror b/ports/gen-mirror new file mode 100755 index 0000000..b769909 --- /dev/null +++ b/ports/gen-mirror @@ -0,0 +1,28 @@ +#!/bin/sh +# +# gen-mirror - generate a directory tree for upload to a netinst mirror +# + +usage () { + echo "usage: create a new mirror in like so:" + echo "" + echo "$0 " +} + +if [ -z "$1" ] +then + usage + exit +else + echo -n "Generating package list... " + ./gen-pkglist + echo "done." + + mkdir -p "$1"/crux/{core,opt,xorg} + cp -v core/*/*.pkg.tar.gz "$1"/crux/core/ + cp -v opt/*/*.pkg.tar.gz "$1"/crux/opt/ + cp -v xorg/*/*.pkg.tar.gz "$1"/crux/xorg/ + cp -v packages.lst MD5SUMS "$1"/crux/ + + echo "$1 is ready to upload to your netinst mirror." +fi diff --git a/ports/gen-pkglist b/ports/gen-pkglist new file mode 100755 index 0000000..2b20c21 --- /dev/null +++ b/ports/gen-pkglist @@ -0,0 +1,18 @@ +#!/bin/sh + +COLLECTIONS="core opt xorg" + +:>packages.lst + +for COLL in $COLLECTIONS +do + find $COLL -name "*.pkg.tar.gz" | sed -e 's|/| |g' >> packages.lst.$$ +done +sort < packages.lst.$$ > packages.lst +rm -f packages.lst.$$ + +:>MD5SUMS +for COLL in $COLLECTIONS +do + md5sum ./$COLL/*/*.pkg.tar.gz >> MD5SUMS +done