Browse Source

Merge branch 'master' of git+ssh://openadk.org/git/openadk

Waldemar Brodkorb 14 years ago
parent
commit
46b2bb3001
100 changed files with 736 additions and 5038 deletions
  1. 1 1
      .gitignore
  2. 25 1
      Config.in
  3. 9 18
      Makefile
  4. 5 2
      README
  5. 15 3
      TODO
  6. 14 34
      mk/build.mk
  7. 4 1
      mk/buildhlp.mk
  8. 38 4
      mk/image.mk
  9. 4 4
      mk/kernel-build.mk
  10. 9 1
      mk/kernel-vars.mk
  11. 2 2
      mk/kernel-ver.mk
  12. 2 0
      mk/kernel.mk
  13. 7 3
      mk/modules.mk
  14. 14 2
      mk/package.mk
  15. 3 1
      mk/pkg-bottom.mk
  16. 2 2
      mk/python.mk
  17. 23 10
      mk/vars.mk
  18. 3 1
      package/.template/Makefile
  19. 4 7
      package/DirectFB/Makefile
  20. 11 0
      package/DirectFB/patches/patch-configure
  21. 11 0
      package/DirectFB/patches/patch-ltmain_sh
  22. 4 8
      package/ImageMagick/Makefile
  23. 39 0
      package/ImageMagick/patches/patch-config_ltmain_sh
  24. 0 3
      package/Makefile
  25. 1 5
      package/alsa-lib/Makefile
  26. 11 0
      package/alsa-lib/patches/patch-ltmain_sh
  27. 4 4
      package/alsa-utils/Makefile
  28. 1 2
      package/apr/Makefile
  29. 11 0
      package/apr/patches/patch-build_ltmain_sh
  30. 1 1
      package/arpd/Makefile
  31. 1 14
      package/asterisk/Makefile
  32. 22 4
      package/aufs2-util/Makefile
  33. 41 27
      package/aufs2-util/patches/patch-Makefile
  34. 0 340
      package/aufs2-util/src/COPYING
  35. 0 93
      package/aufs2-util/src/Makefile
  36. 0 46
      package/aufs2-util/src/README
  37. 0 67
      package/aufs2-util/src/au_util.h
  38. 0 304
      package/aufs2-util/src/aubrsync
  39. 0 130
      package/aufs2-util/src/auchk
  40. 0 1684
      package/aufs2-util/src/aufs.in.5
  41. 0 83
      package/aufs2-util/src/aufs.shlib
  42. 0 64
      package/aufs2-util/src/auplink.c
  43. 0 172
      package/aufs2-util/src/br.c
  44. 0 42
      package/aufs2-util/src/c2sh.c
  45. 0 44
      package/aufs2-util/src/c2tmac.c
  46. 0 34
      package/aufs2-util/src/compat.h
  47. 0 255
      package/aufs2-util/src/mount.aufs.c
  48. 0 216
      package/aufs2-util/src/mtab.c
  49. 0 356
      package/aufs2-util/src/plink.c
  50. 0 85
      package/aufs2-util/src/proc_mnt.c
  51. 0 749
      package/aufs2-util/src/rdu.c
  52. 0 31
      package/aufs2-util/src/umount.aufs
  53. 10 1
      package/autossh/patches/patch-Makefile_in
  54. 11 0
      package/avahi/patches/patch-ltmain_sh
  55. 2 2
      package/axtls/Makefile
  56. 4 0
      package/axtls/files/config
  57. 3 0
      package/base-files/Makefile
  58. 1 0
      package/base-files/src/etc/network/if-pre-up.d/03-bridge
  59. 2 0
      package/base-files/src/etc/network/if-pre-up.d/04-wireless
  60. 2 0
      package/bash/Makefile
  61. 2 2
      package/bind/Makefile
  62. 11 0
      package/bind/patches/patch-ltmain_sh
  63. 20 0
      package/binutils/patches/patch-ld_Makefile_in
  64. 11 0
      package/binutils/patches/patch-ltmain_sh
  65. 1 3
      package/bitlbee/Makefile
  66. 5 5
      package/bluez/patches/patch-Makefile_in
  67. 11 0
      package/bluez/patches/patch-ltmain_sh
  68. 5 3
      package/bogofilter/Makefile
  69. 2 6
      package/busybox/Makefile
  70. 11 0
      package/busybox/config/miscutils/Config.in
  71. 10 0
      package/busybox/patches/007-missing-headers.patch
  72. 8 6
      package/bzr/Makefile
  73. 1 1
      package/ca-certificates/Makefile
  74. 11 0
      package/cairo/patches/patch-build_ltmain_sh
  75. 15 0
      package/cairo/patches/patch-src_cairo-features_h
  76. 11 0
      package/ccid/patches/patch-ltmain_sh
  77. 10 1
      package/cgilib/patches/patch-ltmain_sh
  78. 9 9
      package/collectd/Makefile
  79. 11 0
      package/collectd/patches/patch-ltmain_sh
  80. 2 0
      package/coreutils/Makefile
  81. 2 1
      package/cryptsetup/Makefile
  82. 11 0
      package/cryptsetup/patches/patch-ltmain_sh
  83. 2 2
      package/cups/Makefile
  84. 5 10
      package/curl/Makefile
  85. 3 3
      package/curl/patches/patch-configure
  86. 11 0
      package/curl/patches/patch-ltmain_sh
  87. 8 1
      package/dansguardian/Makefile
  88. 3 3
      package/dbus/patches/patch-configure
  89. 39 0
      package/dbus/patches/patch-ltmain_sh
  90. 30 3
      package/digitemp/patches/patch-Makefile
  91. 1 1
      package/dillo/Makefile
  92. 11 0
      package/dillo/patches/patch-Makefile_in
  93. 14 0
      package/dillo/patches/patch-configure
  94. 11 0
      package/dillo/patches/patch-src_IO_Makefile_in
  95. 3 6
      package/dnsmasq/Makefile
  96. 20 0
      package/dnsmasq/patches/patch-Makefile
  97. 4 4
      package/dnsmasq/patches/patch-src_config_h
  98. 2 4
      package/dosfstools/Makefile
  99. 11 0
      package/dosfstools/patches/patch-Makefile
  100. 1 1
      package/dovecot/Makefile

+ 1 - 1
.gitignore

@@ -33,7 +33,7 @@
 /config/*.o
 /config/lxdialog/*.o
 /make.log
-/dl/
+/dl
 /package/Config.in.auto*
 /package/pkgconfigs.d/
 /package/*/Config.in

+ 25 - 1
Config.in

@@ -46,13 +46,37 @@ endmenu
 
 menu "Package selection"
 depends on !ADK_CHOOSE_TARGET_ARCH && !ADK_CHOOSE_TARGET_SYSTEM
+
+config ADK_INSTALL_PACKAGE_INIT_SCRIPTS
+	boolean "ship custom init-scripts along with packages"
+	default y
+	help
+	  Turning this option to false will prevent the ADK from
+	  installing init-scripts (i.e. files in /etc/init.d) for
+	  certain daemons and daemon-like applications.
+
+	  Note that without further customisation, turning this option
+	  off will almost certainly render the resulting system unusable.
+
+config ADK_INSTALL_PACKAGE_NETWORK_SCRIPTS
+	boolean "ship custom network-scripts along with packages"
+	default y
+	help
+	  Turning this option to false will prevent the ADK from
+	  installing network-scripts (i.e. files in /etc/network/) for
+	  packages providing any.
+
+	  Note that without further customisation, turning this option
+	  off will almost certainly render the resulting system unusable.
+
 source "package/Config.in.auto.global"
 source "package/Config.in.auto"
 endmenu
 
 menu "Kernel configuration"
-depends on !ADK_TOOLCHAIN_ONLY && !ADK_CHOOSE_TARGET_ARCH && !ADK_CHOOSE_TARGET_SYSTEM
+depends on !ADK_TOOLCHAIN_ONLY && !ADK_CHOOSE_TARGET_ARCH && !ADK_CHOOSE_TARGET_SYSTEM && ADK_TARGET_KERNEL_CUSTOMISING
 source "target/linux/Config.in"
 endmenu
 
 source "target/config/Config.in.adk"
+source "toolchain/Config.in"

+ 9 - 18
Makefile

@@ -4,7 +4,7 @@
 _UNLIMIT=	__limit=$$(ulimit -dH 2>/dev/null); \
 		test -n "$$__limit" && ulimit -dS $$__limit;
 
-all: .prereq_done
+all: checkreloc .prereq_done
 	@${_UNLIMIT} ${GMAKE_INV} all
 
 v: .prereq_done
@@ -191,20 +191,9 @@ NO_ERROR=0
 		echo "GMAKE:=$$(which gmake)" >>prereq.mk ;\
 	fi
 	@echo "GNU_HOST_NAME:=$$(${CC} -dumpmachine)" >>prereq.mk
-	@echo "HOST_ARCH:=$$(${CC} -dumpmachine | sed -e s'/-.*//' \
-	    -e 's/sparc.*/sparc/' \
-	    -e 's/arm.*/arm/g' \
-	    -e 's/m68k.*/m68k/' \
-	    -e 's/ppc/powerpc/g' \
-	    -e 's/v850.*/v850/g' \
-	    -e 's/sh[234]/sh/' \
-	    -e 's/mips-.*/mips/' \
-	    -e 's/mipsel-.*/mipsel/' \
-	    -e 's/cris.*/cris/' \
-	    -e 's/i[3-9]86/i386/' \
-	    )" >>prereq.mk
 	@echo "HOSTARCH:=$$(${CC} -dumpmachine | sed -e s'/-.*//' \
 	    -e 's/sparc.*/sparc/' \
+	    -e 's/armeb.*/armeb/g' \
 	    -e 's/arm.*/arm/g' \
 	    -e 's/m68k.*/m68k/' \
 	    -e 's/v850.*/v850/g' \
@@ -215,11 +204,7 @@ NO_ERROR=0
 	    -e 's/i[3-9]86/x86/' \
 	    )" >>prereq.mk
 	@echo 'HOSTCC:=${CC}' >>prereq.mk
-	@echo 'HOSTCFLAGS:=-O2' >>prereq.mk
 	@echo 'HOSTCXX:=${CXX}' >>prereq.mk
-	@echo 'HOSTCXXFLAGS:=-O2' >>prereq.mk
-	@echo "HOST_LIBIDL_CONFIG:=$$(which libIDL-config-2 2>/dev/null)" >>prereq.mk
-	@echo "PKG_HOSTLIB_DIR:=$$(pkg-config --variable pc_path pkg-config 2>/dev/null)" >>prereq.mk
 	@echo 'LANGUAGE:=C' >>prereq.mk
 	@echo 'LC_ALL:=C' >>prereq.mk
 	@echo 'MAKE:=$${GMAKE}' >>prereq.mk
@@ -228,6 +213,9 @@ NO_ERROR=0
 	@echo "_PATH:=$$PATH" >>prereq.mk
 	@echo "PATH:=\$${TOPDIR}/scripts:/usr/sbin:$$PATH" >>prereq.mk
 	@echo "SHELL:=$$(which bash)" >>prereq.mk
+	@echo "HOST_LIBIDL_CONFIG:=$$(which libIDL-config-2 2>/dev/null)" >>prereq.mk
+	@echo "PKG_HOSTLIB_DIR=$$(eval pkg-config --variable pc_path pkg-config 2>/dev/null)" >/dev/null
+	@echo "PKG_HOSTLIB_DIR:=$${PKG_HOSTLIB_DIR:-/usr/lib/pkgconfig}" >>prereq.mk
 	@env NO_ERROR=${NO_ERROR} BASH="$$(which bash)" \
 		CC='${CC}' CPPFLAGS='${CPPFLAGS}' \
 	    	bash scripts/scan-tools.sh
@@ -237,4 +225,7 @@ NO_ERROR=0
 	@touch .adkinit
 	@touch $@
 
-.PHONY: prereq prereq-noerror
+checkreloc:
+	@bash scripts/reloc.sh
+
+.PHONY: prereq prereq-noerror checkreloc

+ 5 - 2
README

@@ -26,11 +26,14 @@ Before you can start you need to install some tools:
 There is a check for the required versions of these tools in advance, though.
 (to re-issue the checks, use "make prereq").
 
-Please use "make menuconfig" to choose your embedded system and configure 
-like you want to.
+Please use "make menuconfig" to choose your target architecture and
+embedded system and configure like you want to.
 
 Simply running 'make' will build the firmware for your embedded system.  The
 buildsystem will download all sources, build the toolchain, the kernel and all
 applications.
 
+To switch to another target configuration, simply run "make switch". This will
+backup your existing configuration and will start with an empty one.
+
 Sunshine!

+ 15 - 3
TODO

@@ -1,13 +1,25 @@
+- man pages in ipkg/tgz packages (automatic)
+- automate /etc handling via conffiles
+- ccache support for speedup
+- distcc evaluation
+- GCC SSP evaluation
+- LTO GCC evaluation
+- finish qemu package
+- fix autoreconf usage in opensc
 - openssl ocf support check
+- locales support
 - new package minidlna
 - wget/curl/ftp download support
 - fix heimdal package
-- check all patches for CFLAGS compliance
+- fix or remove bazaar package
+- check all patches for CFLAGS compliance, fhonour patch from FreeWRT
+- rpath cleanup
 - busybox update and SuSv3 removal
 - check rtc support on foxg20
-- relocatable gcc (adk)
 - adkinstall with NTP and hwclock support
 - PKG_CONFLICTS for python/python2, is this possible with Kconfig?
 - mirror only option, for no internet access
-- add support for brcm 2.6 (lzma/flash/wireless support)
+- add and test brcm 2.6 wireless support
 - help text for config/ needs adoption
+- diet libc / klibc / newlib support
+- pcc support? clang+llvm

+ 14 - 34
mk/build.mk

@@ -14,17 +14,11 @@ DEFCONFIG=		ADK_DEBUG=n \
 			ADK_STATIC=n \
 			ADK_MAKE_PARALLEL=y \
 			ADK_MAKE_JOBS=4 \
-			ADK_PACKAGE_BZR=n \
 			ADK_PACKAGE_GRUB=n \
-			ADK_PACKAGE_AUFS2_UTIL=n \
 			ADK_PACKAGE_BASE_FILES=y \
-			ADK_PACKAGE_MGETTY=n \
-			ADK_COMPILE_HEIMDAL=n \
-			ADK_PACKAGE_HEIMDAL_PKINIT=n \
-			ADK_PACKAGE_HEIMDAL_SERVER=n \
-			ADK_PACKAGE_LIBHEIMDAL=n \
-			ADK_PACKAGE_LIBHEIMDAL_CLIENT=n \
 			ADK_PACKAGE_PYTHON=n \
+			ADK_TOOLCHAIN_GCC_USE_SSP=n \
+			ADK_TOOLCHAIN_GCC_USE_LTO=n \
 			BUSYBOX_BBCONFIG=n \
 			BUSYBOX_SELINUX=n \
 			BUSYBOX_INSTALL_NO_USR=n \
@@ -113,7 +107,9 @@ ${TOPDIR}/package/Depends.mk: ${TOPDIR}/.config $(wildcard ${TOPDIR}/package/*/M
 .NOTPARALLEL:
 .PHONY: all world clean cleantarget cleandir distclean image_clean
 
-world: $(DISTDIR) $(BUILD_DIR) $(TARGET_DIR) $(PACKAGE_DIR)
+world:
+	mkdir -p $(DISTDIR) $(BUILD_DIR) $(TARGET_DIR) $(PACKAGE_DIR)/.stamps \
+		$(TOOLS_DIR) $(TOOLS_BUILD_DIR) $(TOOLCHAIN_BUILD_DIR)
 	${BASH} ${TOPDIR}/scripts/scan-pkgs.sh
 	${BASH} ${TOPDIR}/scripts/update-sys
 	${BASH} ${TOPDIR}/scripts/update-pkg
@@ -133,21 +129,9 @@ ifeq ($(ADK_TARGET_PACKAGE_IPKG),y)
 	    ${BASH} ${TOPDIR}/scripts/ipkg-make-index.sh . >Packages
 endif
 
-$(DISTDIR):
-	mkdir -p $(DISTDIR)
-
-$(BUILD_DIR):
-	mkdir -p $(BUILD_DIR)
-
-$(TARGET_DIR):
-	mkdir -p $(TARGET_DIR)
-
-$(PACKAGE_DIR):
-	mkdir -p ${PACKAGE_DIR}/.stamps
-
 ${STAGING_TARGET_DIR} ${STAGING_TARGET_DIR}/etc ${STAGING_HOST_DIR}:
-	mkdir -p ${STAGING_TARGET_DIR}/{bin,etc,lib,usr/include} \
-		${STAGING_HOST_DIR}/{bin,lib}
+	mkdir -p ${STAGING_TARGET_DIR}/{bin,etc,lib,usr/include,usr/lib} \
+		${STAGING_HOST_DIR}/{bin,lib,usr/bin,usr/lib}
 
 ${STAGING_TARGET_DIR}/etc/ipkg.conf: ${STAGING_TARGET_DIR}/etc
 ifeq ($(ADK_TARGET_PACKAGE_IPKG),y)
@@ -191,9 +175,9 @@ switch:
 	fi
 
 kernelconfig:
-	cp $(TOPDIR)/target/$(ARCH)/kernel.config $(BUILD_DIR)/linux/.config
-	$(MAKE) -C $(BUILD_DIR)/linux/ ARCH=$(ARCH) menuconfig
-	cp $(BUILD_DIR)/linux/.config $(TOPDIR)/target/$(ARCH)/kernel.config
+	cp $(TOPDIR)/target/$(ADK_TARGET_ARCH)/kernel.config $(BUILD_DIR)/linux/.config
+	${KERNEL_MAKE_ENV} ${MAKE} ${KERNEL_MAKE_OPTS} -C $(BUILD_DIR)/linux menuconfig
+	cp $(BUILD_DIR)/linux/.config $(TOPDIR)/target/$(ADK_TARGET_ARCH)/kernel.config
 
 # create a new package from package/.template
 newpackage:
@@ -211,7 +195,7 @@ root_clean:
 	mkdir -p $(TARGET_DIR)
 
 # Do a per-package clean here, too. This way stale headers and
-# libraries from cross_*/target/ get wiped away, which keeps
+# libraries from target_*/ get wiped away, which keeps
 # future package build's configure scripts from returning false
 # dependencies information.
 
@@ -221,7 +205,7 @@ clean:
 	for d in ${STAGING_PKG_DIR}; do \
 		for f in $$(ls $$d/[a-z]* 2>/dev/null); do  \
 			while read file ; do \
-				rm $$d/target/$$file 2>/dev/null; \
+				rm ${STAGING_TARGET_DIR}/$$file 2>/dev/null;\
 			done < $$f ; \
 			rm $$f ; \
 		done \
@@ -563,12 +547,11 @@ bulkallmod:
 	  done <${TOPDIR}/target/arch.lst ;\
 	done
 
-${TOPDIR}/bin/tools/pkgmaker:
+${TOPDIR}/bin/tools/pkgmaker: tools/adk/pkgmaker.c tools/adk/sortfile.c tools/adk/strmap.c
 	@mkdir -p $(TOPDIR)/bin/tools
 	@$(HOSTCC) -Wall -g -o $@ tools/adk/pkgmaker.c tools/adk/sortfile.c tools/adk/strmap.c
 
 ${TOPDIR}/bin/tools/pkgrebuild:
-	@mkdir -p $(TOPDIR)/bin/tools
 	@$(HOSTCC) -Wall -g -o $@ tools/adk/pkgrebuild.c tools/adk/strmap.c
 
 package/Config.in.auto menu .menu: $(wildcard ${TOPDIR}/package/*/Makefile) ${TOPDIR}/bin/tools/pkgmaker ${TOPDIR}/bin/tools/pkgrebuild
@@ -576,10 +559,7 @@ package/Config.in.auto menu .menu: $(wildcard ${TOPDIR}/package/*/Makefile) ${TO
 	@$(TOPDIR)/bin/tools/pkgmaker
 	@:>.menu
 
-$(TOPDIR)/bin/tools:
-	@mkdir -p $(TOPDIR)/bin/tools
-
-${TOPDIR}/bin/tools/depmaker: $(TOPDIR)/bin/tools
+${TOPDIR}/bin/tools/depmaker:
 	$(HOSTCC) -g -o $(TOPDIR)/bin/tools/depmaker $(TOPDIR)/tools/adk/depmaker.c
 
 dep: $(TOPDIR)/bin/tools/depmaker

+ 4 - 1
mk/buildhlp.mk

@@ -24,7 +24,10 @@ else
 _CHECKSUM_COOKIE=
 endif
 
-post-extract:
+${PACKAGE_DIR}/.stamps:
+	@mkdir -p ${PACKAGE_DIR}/.stamps
+
+post-extract: ${PACKAGE_DIR}/.stamps
 
 ifeq ($(strip ${NO_DISTFILES}),1)
 ${WRKDIST}/.extract_done:

+ 38 - 4
mk/image.mk

@@ -1,6 +1,34 @@
 # This file is part of the OpenADK project. OpenADK is copyrighted
 # material, please see the LICENCE file in the top-level directory.
 
+# relative paths, like 'mksh' or '../usr/bin/foosh'
+ifeq (${ADK_BINSH_ASH},y)
+BINSH:=ash
+else ifeq (${ADK_BINSH_BASH},y)
+BINSH:=bash
+else ifeq (${ADK_BINSH_MKSH},y)
+BINSH:=mksh
+else ifeq (${ADK_BINSH_ZSH},y)
+BINSH:=zsh
+else
+$(error No /bin/sh configured!)
+endif
+
+# absolute paths
+ifeq (${ADK_ROOTSH_ASH},y)
+ROOTSH:=/bin/ash
+else ifeq (${ADK_ROOTSH_BASH},y)
+ROOTSH:=/bin/bash
+else ifeq (${ADK_ROOTSH_MKSH},y)
+ROOTSH:=/bin/mksh
+else ifeq (${ADK_ROOTSH_TCSH},y)
+ROOTSH:=/usr/bin/tcsh
+else ifeq (${ADK_ROOTSH_ZSH},y)
+ROOTSH:=/bin/zsh
+else
+$(error No login shell configured!)
+endif
+
 imageprepare: image-prepare-post extra-install
 
 # if an extra directory exist in TOPDIR, copy all content over the 
@@ -14,12 +42,14 @@ image-prepare-post:
 	    dd if=$$rng bs=512 count=1 >>${TARGET_DIR}/etc/.rnd 2>/dev/null; \
 	    chmod 600 ${TARGET_DIR}/etc/.rnd
 	chmod 4511 ${TARGET_DIR}/bin/busybox
-	chmod 1777 ${TARGET_DIR}/tmp
 	@if [ -d ${TARGET_DIR}/usr/share/fonts/X11 ];then \
 		for i in $$(ls ${TARGET_DIR}/usr/share/fonts/X11/);do \
 			mkfontdir ${TARGET_DIR}/usr/share/fonts/X11/$${i}; \
 		done; \
 	fi
+	sed -i '/^root:/s!:/bin/sh$$!:${ROOTSH}!' ${TARGET_DIR}/etc/passwd
+	-rm -f ${TARGET_DIR}/bin/sh
+	ln -sf ${BINSH} ${TARGET_DIR}/bin/sh
 
 KERNEL_PKGDIR:=$(LINUX_BUILD_DIR)/kernel-pkg
 KERNEL_PKG:=$(PACKAGE_DIR)/kernel_$(KERNEL_VERSION)_$(CPU_ARCH).$(PKG_SUFFIX)
@@ -65,12 +95,16 @@ ${BUILD_DIR}/${INITRAMFS_PIGGYBACK}: ${TARGET_DIR}
 		sed "s#\(.*\)#:0:0::::::\1#" | sort | \
 	    ${TOOLS_DIR}/cpio -o -C512 -Hnewc -P >$@ 2>/dev/null
 
-${BIN_DIR}/${ROOTFSSQUASHFS}: ${TARGET_DIR}
+${BUILD_DIR}/root.squashfs: ${TARGET_DIR}
 	${STAGING_HOST_DIR}/bin/mksquashfs ${TARGET_DIR} \
 		${BUILD_DIR}/root.squashfs \
 		-nopad -noappend -root-owned $(MAKE_TRACE)
-	cat ${BUILD_DIR}/${TARGET_KERNEL} ${BUILD_DIR}/root.squashfs > \
-		${BUILD_DIR}/${ROOTFSSQUASHFS}
+
+ifeq (,${CUSTOM_ROOTFSSQUASHFS_BUILD})
+${BUILD_DIR}/${ROOTFSSQUASHFS}: ${BUILD_DIR}/root.squashfs
+	cat ${BUILD_DIR}/${TARGET_KERNEL} ${BUILD_DIR}/root.squashfs \
+	    >${BUILD_DIR}/${ROOTFSSQUASHFS}
+endif
 
 createinitramfs:
 	@-rm $(LINUX_DIR)/usr/initramfs_data.cpio* $(MAKE_TRACE)

+ 4 - 4
mk/kernel-build.mk

@@ -21,16 +21,16 @@ $(LINUX_DIR)/.config: $(LINUX_DIR)/.prepared $(BUILD_DIR)/.kernelconfig $(TOPDIR
 	$(TRACE) target/$(ADK_TARGET_ARCH)-kernel-configure
 	for f in $(TARGETS);do if [ -f $$f ];then rm $$f;fi;done $(MAKE_TRACE)
 	$(CP) $(BUILD_DIR)/.kernelconfig $(LINUX_DIR)/.config
-	echo N | $(MAKE) ${KERNEL_MAKE_OPTS} oldconfig $(MAKE_TRACE)
-	$(MAKE) ${KERNEL_MAKE_OPTS} prepare scripts $(MAKE_TRACE)
+	echo N | ${KERNEL_MAKE_ENV} $(MAKE) ${KERNEL_MAKE_OPTS} oldconfig $(MAKE_TRACE)
+	${KERNEL_MAKE_ENV} $(MAKE) ${KERNEL_MAKE_OPTS} prepare scripts $(MAKE_TRACE)
 	touch -c $(LINUX_DIR)/.config
 
 $(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.config
 	$(TRACE) target/$(ADK_TARGET_ARCH)-kernel-compile
-	$(MAKE) ${KERNEL_MAKE_OPTS} -j${ADK_MAKE_JOBS} LOCALVERSION="" $(MAKE_TRACE)
+	${KERNEL_MAKE_ENV} $(MAKE) ${KERNEL_MAKE_OPTS} -j${ADK_MAKE_JOBS} LOCALVERSION="" $(MAKE_TRACE)
 	$(TRACE) target/$(ADK_TARGET_ARCH)-kernel-modules-install
 	rm -rf $(LINUX_BUILD_DIR)/modules
-	$(MAKE) ${KERNEL_MAKE_OPTS} DEPMOD=true \
+	${KERNEL_MAKE_ENV} $(MAKE) ${KERNEL_MAKE_OPTS} DEPMOD=true \
 		INSTALL_MOD_PATH=$(LINUX_BUILD_DIR)/modules \
 		LOCALVERSION="" \
 		modules_install $(MAKE_TRACE)

+ 9 - 1
mk/kernel-vars.mk

@@ -3,5 +3,13 @@
 
 KERNEL_MAKE_OPTS:=	-C "${LINUX_DIR}" V=1
 ifneq ($(ADK_NATIVE),y)
-KERNEL_MAKE_OPTS+=	CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) CC="$(TARGET_CC)" HOSTCC="${HOSTCC}"
+KERNEL_MAKE_OPTS+=	CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \
+			CC="$(TARGET_CC)" HOSTCC="${HOSTCC}" \
+			HOSTCFLAGS='${HOSTCFLAGS}'
 endif
+
+ifeq (${ADK_TARGET_SYSTEM_LINKSYS_WRT54G},y)
+ADK_KCPPFLAGS+=		-DBCM47XX_OVERRIDE_FLASHSIZE=0x400000
+endif
+
+KERNEL_MAKE_ENV+=	KCPPFLAGS='${ADK_KCPPFLAGS}'

+ 2 - 2
mk/kernel-ver.mk

@@ -1,3 +1,3 @@
-KERNEL_VERSION:=	2.6.36
+KERNEL_VERSION:=	2.6.37
 KERNEL_RELEASE:=	1
-KERNEL_MD5SUM:=		61f3739a73afb6914cb007f37fb09b62
+KERNEL_MD5SUM:=		c8ee37b4fdccdb651e0603d35350b434

+ 2 - 0
mk/kernel.mk

@@ -33,6 +33,7 @@ IDEPENDK_$(1):=kernel ($(KERNEL_VERSION)) $(foreach pkg,$(5),", $(pkg)")
 PKG_$(1) := $(PACKAGE_DIR)/kmod-$(2)_$(KERNEL_VERSION)-$(KERNEL_RELEASE)_$(CPU_ARCH).$(PKG_SUFFIX)
 I_$(1) := $(KMOD_BUILD_DIR)/ipkg/$(2)
 
+ifeq ($${ADK_TARGET_KERNEL_CUSTOMISING},y)
 ifeq ($$(ADK_KPACKAGE_KMOD_$(1)),m)
 TARGETS+=$$(PKG_$(1))
 endif
@@ -40,6 +41,7 @@ ifeq ($$(ADK_KPACKAGE_KMOD_$(1)),y)
 TARGETS+=$$(PKG_$(1))
 INSTALL_TARGETS+=$$(PKG_$(1))
 endif
+endif
 
 $$(PKG_$(1)):
 	rm -rf $$(I_$(1))

+ 7 - 3
mk/modules.mk

@@ -926,11 +926,13 @@ $(eval $(call KMOD_template,CRYPTO_FCRYPT,crypto-fcrypt,\
 ,11))
 
 ZLIB:=lib/zlib_deflate/zlib_deflate
-ifeq ($(ADK_LINUX_CRIS_FOXBOARD),)
-ifeq ($(ADK_LINUX_MIPS_AG241),)
+ifeq ($(ADK_TARGET_SYSTEM_FOXBOARD_LX832),y)
+ifeq ($(ADK_TARGET_SYSTEM_FOXBOARD_LX416),y)
+ifeq ($(ADK_TARGET_SYSTEM_LINKSYS_AG241),y)
 ZLIB+=lib/zlib_inflate/zlib_inflate
 endif
 endif
+endif
 
 $(eval $(call KMOD_template,CRYPTO_DEFLATE,crypto-deflate,\
     $(foreach mod, $(ZLIB),$(MODULES_DIR)/kernel/$(mod)) \
@@ -1177,11 +1179,13 @@ $(eval $(call KMOD_template,INPUT_EVDEV,input-evdev,\
 # USB
 #
 
-ifeq ($(ADK_LINUX_CRIS_FOXBOARD),)
+ifeq ($(ADK_TARGET_SYSTEM_FOXBOARD_LX832),)
+ifeq ($(ADK_TARGET_SYSTEM_FOXBOARD_LX416),)
 $(eval $(call KMOD_template,USB,usb,\
 	$(MODULES_DIR)/kernel/drivers/usb/core/usbcore \
 ,50))
 endif
+endif
 
 $(eval $(call KMOD_template,USB_EHCI_HCD,usb-ehci-hcd,\
 	$(MODULES_DIR)/kernel/drivers/usb/host/ehci-hcd \

+ 14 - 2
mk/package.mk

@@ -3,6 +3,10 @@
 
 all: build-all-pkgs
 
+ifeq ($(ADK_HOST_CYGWIN),y)
+EXEEXT:=		.exe
+endif
+
 TCFLAGS:=		${TARGET_CFLAGS}
 TCXXFLAGS:=		${TARGET_CFLAGS}
 TCPPFLAGS:=		${TARGET_CPPFLAGS}
@@ -36,7 +40,8 @@ CONFIGURE_ARGS+=	--enable-debug
 endif
 endif
 
-CONFIGURE_ENV+=		CONFIG_SHELL='$(strip ${SHELL})' \
+CONFIGURE_ENV+=		GCC_HONOUR_COPTS=s \
+			CONFIG_SHELL='$(strip ${SHELL})' \
 			CFLAGS='$(strip ${TCFLAGS})' \
 			CXXFLAGS='$(strip ${TCXXFLAGS})' \
 			CPPFLAGS='$(strip ${TCPPFLAGS})' \
@@ -74,9 +79,12 @@ MAKE_ENV+=		PATH='${TARGET_PATH}' \
 			${HOST_CONFIGURE_OPTS} \
 			CC='${TARGET_CC}' \
 			CXX='${TARGET_CXX}' \
+			LD='${TARGET_LD}' \
 			AR='${TARGET_CROSS}ar' \
 			RANLIB='${TARGET_CROSS}ranlib' \
 			NM='${TARGET_CROSS}nm' \
+			OBJCOPY='${TARGET_CROSS}objcopy' \
+			RANLIB='${TARGET_CROSS}ranlib' \
 			STRIP='${TARGET_CROSS}strip' \
 			CROSS="$(TARGET_CROSS)"
 endif
@@ -142,6 +150,8 @@ IDIR_$(1)=	$(WRKDIR)/fake-${CPU_ARCH}/pkg-$(2)
 ifneq (${ADK_PACKAGE_$(1)}${DEVELOPER},)
 ALL_IPKGS+=	$$(IPKG_$(1))
 ALL_IDIRS+=	$${IDIR_$(1)}
+ALL_POSTINST+=	$(2)-install
+$(2)-install:
 endif
 INFO_$(1)=	$(PKG_STATE_DIR)/info/$(2).list
 
@@ -181,6 +191,7 @@ $$(IPKG_$(1)): $$(IDIR_$(1))/CONTROL/control $${_FAKE_COOKIE}
 ifeq ($(ADK_DEBUG),)
 	$${RSTRIP} $${IDIR_$(1)} $(MAKE_TRACE)
 endif
+ifeq (${ADK_INSTALL_PACKAGE_INIT_SCRIPTS},y)
 	@for file in $$$$(ls ./files/*.init 2>/dev/null); do \
 		fname=$$$$(echo $$$$file| sed -e "s#.*/##" -e "s#.init##"); \
 		check=$$$$(grep PKG $$$$file|cut -d ' '  -f 2); \
@@ -192,6 +203,7 @@ endif
 		[[ -e $$$$script ]] || continue; \
 		chmod 0755 "$$$$script"; \
 	done
+endif
 	@mkdir -p $${PACKAGE_DIR} '$${STAGING_PKG_DIR}' \
 	    '$${STAGING_TARGET_DIR}/scripts'
 ifeq (,$(filter noremove,$(7)))
@@ -216,7 +228,7 @@ endif
 	    find usr ! -type d 2>/dev/null | \
 	    grep -v -e '^usr/share' -e '^usr/man' -e '^usr/info' -e '^usr/lib/libc.so' | \
 	    tee '$${STAGING_PKG_DIR}/$(1)' | \
-	    $(TOPDIR)/bin/tools/cpio -padlmu '$${STAGING_TARGET_DIR}'
+	    $(TOOLS_DIR)/cpio -padlmu '$${STAGING_TARGET_DIR}'
 	@cd '$${STAGING_TARGET_DIR}'; grep 'usr/lib/.*\.la$$$$' \
 	    '$${STAGING_PKG_DIR}/$(1)' | while read fn; do \
 		chmod u+w $$$$fn; \

+ 3 - 1
mk/pkg-bottom.mk

@@ -127,6 +127,7 @@ endif
 pre-install:
 do-install:
 post-install:
+spkg-install: ${ALL_POSTINST}
 ${_FAKE_COOKIE}: ${_BUILD_COOKIE}
 	-rm -f ${_ALL_CONTROLS}
 	@mkdir -p '${STAGING_PKG_DIR}' ${WRKINST} '${STAGING_TARGET_DIR}/scripts'
@@ -145,6 +146,7 @@ else
 	@echo "Invalid INSTALL_STYLE '${INSTALL_STYLE}'" >&2
 	@exit 1
 endif
+	env ${MAKE_ENV} ${MAKE} spkg-install $(MAKE_TRACE)
 ifeq ($(ADK_NATIVE),)
 	@for a in ${WRKINST}/usr/{bin/*-config,lib/pkgconfig/*.pc}; do \
 		[[ -e $$a ]] || continue; \
@@ -168,7 +170,7 @@ endif
 	    find usr ! -type d 2>/dev/null | \
 	    grep -v -e '^usr/share' -e '^usr/man' -e '^usr/info' -e '^usr/lib/libc.so' | \
 	    tee '${STAGING_PKG_DIR}/${PKG_NAME}' | \
-	    $(TOPDIR)/bin/tools/cpio -padlmu '${STAGING_TARGET_DIR}'
+	    $(TOOLS_DIR)/cpio -padlmu '${STAGING_TARGET_DIR}'
 	@cd '${STAGING_TARGET_DIR}'; grep 'usr/lib/.*\.la$$' \
 	    '${STAGING_PKG_DIR}/${PKG_NAME}' | while read fn; do \
 		chmod u+w $$fn; \

+ 2 - 2
mk/python.mk

@@ -1,3 +1,3 @@
 PYTHON_VERSION=2.7
-PYTHON_LIBDIR:=$(STAGING_HOST_DIR)/lib
-PYTHON:=${STAGING_HOST_DIR}/bin/hostpython
+PYTHON_LIBDIR:=$(STAGING_HOST_DIR)/usr/lib
+PYTHON:=${STAGING_HOST_DIR}/usr/bin/hostpython

+ 23 - 10
mk/vars.mk

@@ -9,12 +9,25 @@ INSTALL_SCRIPT=		install -m0755
 MAKEFLAGS=		$(EXTRA_MAKEFLAGS)
 BUILD_USER=		$(shell id -un)
 BUILD_GROUP=		$(shell id -gn)
+
+# target compiler settings
+TARGET_CPPFLAGS+=	-I${STAGING_TARGET_DIR}/usr/include
+TARGET_LDFLAGS+=	-Wl,-O2
 ifneq ($(ADK_DEBUG),)
 TARGET_DEBUGGING:=	-g3 -fno-omit-frame-pointer
 else
-TARGET_DEBUGGING:=	-fomit-frame-pointer $(TARGET_OPTIMIZATION) 
+TARGET_DEBUGGING:=	$(TARGET_OPTIMIZATION) -fomit-frame-pointer
 endif
 TARGET_CFLAGS:=		$(TARGET_CFLAGS_ARCH) $(TARGET_DEBUGGING) -fwrapv
+ifneq ($(ADK_TOOLCHAIN_GCC_USE_SSP),)
+TARGET_CFLAGS+=		-fstack-protector
+TARGET_CXXFLAGS+=	-fstack-protector
+TARGET_LDFLAGS+=	-fstack-protector
+endif
+ifneq ($(ADK_TOOLCHAIN_GCC_USE_LTO),)
+TARGET_CFLAGS+=		-flto
+TARGET_LDFLAGS+=	-flto
+endif
 
 BASE_DIR:=		$(TOPDIR)
 DISTDIR?=		${BASE_DIR}/dl
@@ -26,6 +39,9 @@ STAGING_HOST_DIR:=	${BASE_DIR}/host_${CPU_ARCH}_${ADK_TARGET_LIBC}
 STAGING_HOST_DIR_PFX:=	${BASE_DIR}/host_*
 STAGING_TARGET_DIR:=	${BASE_DIR}/target_${CPU_ARCH}_${ADK_TARGET_LIBC}
 STAGING_TARGET_DIR_PFX:=${BASE_DIR}/target_*
+# relation from STAGING_HOST_DIR to STAGING_TARGET_DIR (for gcc to find
+# its sysroot while staying relocatable)
+STAGING_HOST2TARGET:=	../target_${CPU_ARCH}_${ADK_TARGET_LIBC}
 TOOLCHAIN_BUILD_DIR=	$(BASE_DIR)/toolchain_build_${CPU_ARCH}_${ADK_TARGET_LIBC}
 TOOLCHAIN_BUILD_DIR_PFX=$(BASE_DIR)/toolchain_build_*
 TOOLS_BUILD_DIR=	$(BASE_DIR)/tools_build
@@ -36,10 +52,9 @@ BIN_DIR_PFX:=		$(BASE_DIR)/bin
 PACKAGE_DIR:=		$(BIN_DIR)/packages
 TARGET_DIR:=		$(BASE_DIR)/root_${ADK_TARGET_SYSTEM}_${CPU_ARCH}_${ADK_TARGET_LIBC}
 TARGET_DIR_PFX:=	$(BASE_DIR)/root_*
-TARGET_PATH=		${SCRIPT_DIR}:${TOOLS_DIR}:${STAGING_HOST_DIR}/bin:${STAGING_TARGET_DIR}/scripts:${_PATH}
+TARGET_PATH=		${SCRIPT_DIR}:${TOOLS_DIR}:${STAGING_HOST_DIR}/bin:${STAGING_HOST_DIR}/usr/bin:${STAGING_TARGET_DIR}/scripts:${_PATH}
 REAL_GNU_TARGET_NAME=	$(CPU_ARCH)-$(ADK_VENDOR)-linux-$(ADK_TARGET_SUFFIX)
 GNU_TARGET_NAME=	$(CPU_ARCH)-$(ADK_VENDOR)-linux
-TOOLCHAIN_SYSROOT:=	$(TOOLCHAIN_BUILD_DIR)/libc_dev
 ifeq ($(ADK_NATIVE),y) 
 TARGET_CROSS:=		
 TARGET_COMPILER_PREFIX?=
@@ -50,8 +65,6 @@ endif
 TARGET_CC:=		${TARGET_COMPILER_PREFIX}gcc
 TARGET_CXX:=		${TARGET_COMPILER_PREFIX}g++
 TARGET_LD:=		${TARGET_COMPILER_PREFIX}ld
-TARGET_CPPFLAGS+=	-I${STAGING_TARGET_DIR}/usr/include
-TARGET_LDFLAGS+=	-Wl,-O2
 PATCH=			${BASH} $(SCRIPT_DIR)/patch.sh
 SED:=			sed -i -e
 LINUX_DIR:=		$(BUILD_DIR)/linux
@@ -102,19 +115,19 @@ EXTRACT_CMD=		mkdir -p ${WRKDIR}; \
 			cd ${WRKDIR} && \
 			for file in ${FULLDISTFILES}; do case $$file in \
 			*.cpio) \
-				cat $$file | $(TOPDIR)/bin/tools/cpio -i -d ;; \
+				cat $$file | $(TOOLS_DIR)/cpio -i -d ;; \
 			*.tar) \
 				tar -xf $$file ;; \
 			*.cpio.Z | *.cpio.gz | *.cgz | *.mcz) \
-				gzip -dc $$file | $(TOPDIR)/bin/tools/cpio -i -d ;; \
+				gzip -dc $$file | $(TOOLS_DIR)/cpio -i -d ;; \
 			*.tar.Z | *.tar.gz | *.taz | *.tgz) \
 				gzip -dc $$file | tar -xf - ;; \
 			*.cpio.bz2 | *.cbz) \
-				bzip2 -dc $$file | $(TOPDIR)/bin/tools/cpio -i -d ;; \
+				bzip2 -dc $$file | $(TOOLS_DIR)/cpio -i -d ;; \
 			*.tar.bz2 | *.tbz | *.tbz2) \
 				bzip2 -dc $$file | tar -xf - ;; \
 			*.zip) \
-				cat $$file | $(TOPDIR)/bin/tools/cpio -ivd -H zip ;; \
+				cat $$file | $(TOOLS_DIR)/cpio -ivd -H zip ;; \
 			*.arm) \
 				cp $$file ${WRKDIR} ;; \
 			*) \
@@ -127,6 +140,6 @@ QUIET:=
 else
 QUIET:=			--quiet
 endif
-FETCH_CMD?=		wget --tries=1 --timeout=30 $(QUIET)
+FETCH_CMD?=		wget --timeout=30 $(QUIET)
 
 include $(TOPDIR)/mk/mirrors.mk

+ 3 - 1
package/.template/Makefile

@@ -14,6 +14,8 @@ PKG_DEPENDS:=		add dependendant package names
 PKG_BUILDDEP:=		add packages which need to be compiled
 PKG_URL:=		add project url
 PKG_SITES:=		add download url without package name
+# alternatively use a pre-defined set of mirrors, see mk/mirrors.mk:
+#PKG_SITES:=		${MASTER_SITE_SOURCEFORGE:=sub/path/}
 
 # if more than one binary package is created, add symbol names of all here
 # leave variable empty, when no binary package is created. You can set it
@@ -30,7 +32,7 @@ PKG_SITES:=		add download url without package name
 #PKGSD_SUBPKG1:=
 
 # define your flavours for your package here, WITH_SSL f.e.
-#PKG_FLAVOURS:=		WITH_SSL
+#PKG_FLAVOURS_PKGNAME:=		WITH_SSL
 # flavour description
 #PKGFD_WITH_SSL:=	enable SSL support
 # flavour runtime dependency, package name

+ 4 - 7
package/DirectFB/Makefile

@@ -5,13 +5,13 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=		DirectFB
 PKG_VERSION:=		1.4.11
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_EXTRAVER:=		1.4-5
 PKG_MD5SUM:=		94735ccec21120794adcce93a61445d2
 PKG_DESCR:=		Thin graphic library for the Linux framebuffer devices
 PKG_SECTION:=		libs
 PKG_DEPENDS:=		libpng libjpeg
-PKG_BUILDDEP:=		libpng jpeg
+PKG_BUILDDEP:=		libpng jpeg freetype
 PKG_URL:=		http://www.directfb.org/
 PKG_SITES:=		http://directfb.org/downloads/Core/DirectFB-1.4/
 
@@ -26,6 +26,7 @@ $(eval $(call PKG_template,DIRECTFB_DEV,directfb-dev,$(PKG_VERSION)-${PKG_RELEAS
 
 CONFIGURE_ARGS+=	--with-inputdrivers=linuxinput,keyboard,ps2mouse \
 			--with-gfxdrivers=none \
+			--without-tools \
 			--enable-fbdev \
 			--disable-sdl \
 			--disable-osx \
@@ -43,11 +44,7 @@ ifeq (${ADK_TARGET_SYSTEM_LEMOTE_YEELONG},y)
 XAKE_FLAGS+=		LDEMULATION=elf64ltsmip
 endif
 
-SUB_INSTALLS-y:=
-SUB_INSTALLS-m:=
-SUB_INSTALLS-${ADK_PACKAGE_DIRECTFB_DEV}+=	directfb-dev-install
-
-post-install: ${SUB_INSTALLS-m} ${SUB_INSTALLS-y}
+post-install:
 	${INSTALL_DIR} ${IDIR_DIRECTFB}/etc
 	${INSTALL_DATA} ./files/directfbrc ${IDIR_DIRECTFB}/etc/
 	$(INSTALL_DIR) $(IDIR_DIRECTFB)/usr/lib/directfb-${PKG_EXTRAVER}/{inputdrivers,systems,wm}

+ 11 - 0
package/DirectFB/patches/patch-configure

@@ -0,0 +1,11 @@
+--- DirectFB-1.4.11.orig/configure	2010-11-15 22:35:38.000000000 +0100
++++ DirectFB-1.4.11/configure	2011-01-08 11:46:41.000000000 +0100
+@@ -16257,7 +16257,7 @@ if test x"$CFLAGS" = x"-g -O2"; then
+   CFLAGS=
+ fi
+ 
+-CFLAGS="-O3 -ffast-math -pipe $CFLAGS"
++CFLAGS="-ffast-math -pipe $CFLAGS"
+ 
+ DFB_INTERNAL_CFLAGS="-D_GNU_SOURCE $DFB_INTERNAL_CFLAGS"
+ 

+ 11 - 0
package/DirectFB/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- DirectFB-1.4.11.orig/ltmain.sh	2010-11-03 11:14:45.000000000 +0100
++++ DirectFB-1.4.11/ltmain.sh	2011-01-14 00:24:52.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 4 - 8
package/ImageMagick/Makefile

@@ -10,7 +10,7 @@ PKG_RELEASE:=		1
 PKG_MD5SUM:=		a07a97cfb28b588cbcf83ffa9ec92e3f
 PKG_DESCR:=		image processing and converting utility
 PKG_SECTION:=		multimedia
-PKG_BUILDDEP:=		jpeg libtiff
+PKG_BUILDDEP:=		jpeg libtiff fontconfig libiconv
 PKG_DEPENDS:=		libjpeg libtiff
 PKG_URL:=		http://www.imagemagick.org/
 PKG_SITES:=		http://image_magick.veidrodis.com/image_magick/
@@ -35,14 +35,10 @@ $(eval $(call PKG_template,LIBIMAGEMAGICK,libimagemagick,$(PKG_VERSION)-${PKG_RE
 $(eval $(call PKG_template,CONVERT,convert,$(PKG_VERSION)-${PKG_RELEASE},${PKGSS_CONVERT},${PKGSD_CONVERT},${PKGSC_CONVERT}))
 $(eval $(call PKG_template,DISPLAY,display,$(PKG_VERSION)-${PKG_RELEASE},${PKGSS_DISPLAY},${PKGSD_DISPLAY},${PKGSC_DISPLAY}))
 
-SUB_INSTALLS-y:=
-SUB_INSTALLS-m:=
-SUB_INSTALLS-${ADK_PACKAGE_CONVERT}+=	convert-install
-SUB_INSTALLS-${ADK_PACKAGE_DISPLAY}+=	display-install
+CONFIGURE_ARGS+=	--with-magick-plus-plus=no \
+			--enable-fast-install
 
-CONFIGURE_ARGS+=	--with-magick-plus-plus=no
-
-post-install: ${SUB_INSTALLS-m} ${SUB_INSTALLS-y}
+post-install:
 	$(INSTALL_DIR) $(IDIR_LIBIMAGEMAGICK)/usr/lib
 	$(INSTALL_DIR) $(IDIR_LIBIMAGEMAGICK)/usr/lib/${PKG_NAME}-${PKG_VERSION}/config
 	$(INSTALL_DATA) $(WRKINST)/usr/lib/${PKG_NAME}-${PKG_VERSION}/config/* \

+ 39 - 0
package/ImageMagick/patches/patch-config_ltmain_sh

@@ -0,0 +1,39 @@
+--- ImageMagick-6.6.5-10.orig/config/ltmain.sh	2010-11-21 22:35:22.000000000 +0100
++++ ImageMagick-6.6.5-10/config/ltmain.sh	2011-01-14 00:59:45.000000000 +0100
+@@ -5091,7 +5091,7 @@ func_mode_link ()
+       # @file                GCC response files
+       # -tp=*                Portland pgcc target processor selection
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"
+@@ -5843,27 +5843,6 @@ func_mode_link ()
+ 	      esac
+ 	    fi
+ 
+-	    # Hardcode the library path.
+-	    # Skip directories that are in the system default run-time
+-	    # search path.
+-	    case " $sys_lib_dlsearch_path " in
+-	    *" $absdir "*) ;;
+-	    *)
+-	      case "$compile_rpath " in
+-	      *" $absdir "*) ;;
+-	      *) compile_rpath="$compile_rpath $absdir"
+-	      esac
+-	      ;;
+-	    esac
+-	    case " $sys_lib_dlsearch_path " in
+-	    *" $libdir "*) ;;
+-	    *)
+-	      case "$finalize_rpath " in
+-	      *" $libdir "*) ;;
+-	      *) finalize_rpath="$finalize_rpath $libdir"
+-	      esac
+-	      ;;
+-	    esac
+ 	  fi # $linkmode,$pass = prog,link...
+ 
+ 	  if test "$alldeplibs" = yes &&

+ 0 - 3
package/Makefile

@@ -48,9 +48,6 @@ compile: $(REBUILD_PACKAGES) base-files-compile $(COMPILE_PACKAGES)
 install: base-files-install $(INSTALL_PACKAGES)
 endif
 
-$(TARGET_DIR):
-	mkdir -p $(TARGET_DIR)
-
 %-download:
 	$(START_TRACE) "package/$(patsubst %-download,%,$@)-download: "
 	$(MAKE) -C $(patsubst %-download,%,$@) fetch

+ 1 - 5
package/alsa-lib/Makefile

@@ -25,11 +25,7 @@ $(eval $(call PKG_template,ALSA_LIB_DEV,alsa-lib-dev,${PKG_VERSION}-${PKG_RELEAS
 
 CONFIGURE_ARGS+=	--disable-python
 
-SUB_INSTALLS-y:=
-SUB_INSTALLS-m:=
-SUB_INSTALLS-${ADK_PACKAGE_ALSA_LIB_DEV}+=	alsa-lib-dev-install
-
-post-install: ${SUB_INSTALLS-m} ${SUB_INSTALLS-y}
+post-install:
 	${INSTALL_DIR} ${IDIR_ALSA_LIB}/usr/lib ${IDIR_ALSA_LIB}/usr/share/alsa
 	${CP} ${WRKINST}/usr/lib/libasound.so* ${IDIR_ALSA_LIB}/usr/lib/
 	${CP} ${WRKINST}/usr/share/alsa/* ${IDIR_ALSA_LIB}/usr/share/alsa/

+ 11 - 0
package/alsa-lib/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- alsa-lib-1.0.22.orig/ltmain.sh	2006-11-25 12:04:27.000000000 +0100
++++ alsa-lib-1.0.22/ltmain.sh	2011-01-14 11:34:46.000000000 +0100
+@@ -1623,7 +1623,7 @@ EOF
+       # -pg pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
+-      -t[45]*|-txscale*|@*)
++      -t[45]*|-txscale*|@*|-fstack-protector*|-flto)
+ 
+ 	# Unknown arguments in both finalize_command and compile_command need
+ 	# to be aesthetically quoted because they are evaled later.

+ 4 - 4
package/alsa-utils/Makefile

@@ -14,10 +14,10 @@ PKG_BUILDDEP:=		alsa-lib
 PKG_URL:=		http://www.alsa-project.org/
 PKG_SITES:=		ftp://ftp.alsa-project.org/pub/utils/
 
-PKG_FLAVOURS:=		WITH_ALSAMIXER
-PKGFS_WITH_ALSAMIXER:=	libncurses
-PKGFD_WITH_ALSAMIXER:=	include alsamixer ncurses applet
-PKGFB_WITH_ALSAMIXER:=	ncurses
+PKG_FLAVOURS_ALSA_UTILS:=	WITH_ALSAMIXER
+PKGFS_WITH_ALSAMIXER:=		libncurses
+PKGFD_WITH_ALSAMIXER:=		include alsamixer ncurses applet
+PKGFB_WITH_ALSAMIXER:=		ncurses
 
 DISTFILES:=             ${PKG_NAME}-${PKG_VERSION}.tar.bz2
 

+ 1 - 2
package/apr/Makefile

@@ -13,7 +13,7 @@ PKG_DEPENDS:=		libpthread
 PKG_URL:=		http://apr.apache.org/
 PKG_SITES:=		http://gd.tuwien.ac.at/infosys/servers/http/apache/dist/${PKG_NAME}/
 
-PKG_FLAVOURS:=		WITH_IPV6
+PKG_FLAVOURS_APR:=	WITH_IPV6
 PKGFD_WITH_IPV6:=	enable IPv6 support
 
 include ${TOPDIR}/mk/package.mk
@@ -28,7 +28,6 @@ CONFIGURE_ENV+=		ac_cv_file__dev_zero=yes
 CONFIGURE_ENV+=		apr_cv_process_shared_works=no
 CONFIGURE_ENV+=		ac_cv_lib_nsl_gethostbyname=no
 CONFIGURE_ENV+=		apr_cv_tcp_nodelay_with_cork=no
-
 CONFIGURE_ARGS+=	--with-devrandom=/dev/urandom \
 			--enable-threads
 

+ 11 - 0
package/apr/patches/patch-build_ltmain_sh

@@ -0,0 +1,11 @@
+--- apr-1.4.2.orig/build/ltmain.sh	2010-01-21 08:59:41.000000000 +0100
++++ apr-1.4.2/build/ltmain.sh	2011-01-14 11:41:48.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 1 - 1
package/arpd/Makefile

@@ -23,7 +23,7 @@ $(eval $(call PKG_template,ARPD,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_
 CONFIGURE_ARGS+=	--with-libdnet=${STAGING_TARGET_DIR}/usr \
 			--with-libevent=${STAGING_TARGET_DIR}/usr \
 			--with-libpcap=${STAGING_TARGET_DIR}/usr
-MAKE_FLAGS+=		CCOPT="${TARGET_CFLAGS}" \
+MAKE_FLAGS+=		CFLAGS="${TCFLAGS}" \
 			INCLS="-I. -I${STAGING_TARGET_DIR}/usr/include" \
 			LIBS="-L${STAGING_TARGET_DIR}/usr/lib -lpcap -ldnet -levent"
 

+ 1 - 14
package/asterisk/Makefile

@@ -44,19 +44,6 @@ $(eval $(call PKG_template,ASTERISK_CODEC_GSM,asterisk-codec-gsm,$(PKG_VERSION)-
 $(eval $(call PKG_template,ASTERISK_PBX_DUNDI,asterisk-pbx-dundi,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 $(eval $(call PKG_template,ASTERISK_RES_AGI,asterisk-res-agi,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
-SUB_INSTALLS-y:=
-SUB_INSTALLS-m:=
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_PGSQL}+=		asterisk-pgsql-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_VOICEMAIL}+=	asterisk-voicemail-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_SOUNDS}+=		asterisk-sounds-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_CHAN_MGCP}+=	asterisk-chan-mgcp-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_CHAN_SKINNY}+=	asterisk-chan-skinny-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_CHAN_IAX2}+=	asterisk-chan-iax2-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_CODEC_SPEEX}+=	asterisk-codec-speex-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_CODEC_GSM}+=	asterisk-codec-gsm-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_PBX_DUNDI}+=	asterisk-pbx-dundi-install
-SUB_INSTALLS-${ADK_PACKAGE_ASTERISK_RES_AGI}+=		asterisk-res-agi-install
-
 CONFIGURE_ARGS=		--with-z=${STAGING_TARGET_DIR}/usr \
 			--with-ncurses=${STAGING_TARGET_DIR}/usr \
 			--with-ssl=${STAGING_TARGET_DIR}/usr \
@@ -132,7 +119,7 @@ post-build:
 	tar xzf asterisk-core-sounds-en-gsm-1.4.19.tar.gz ; \
 	rm asterisk-core-sounds-en-gsm-1.4.19.tar.gz
 
-do-install: ${SUB_INSTALLS-m} ${SUB_INSTALLS-y}
+do-install:
 	$(CP) $(WRKINST)/* $(IDIR_ASTERISK)
 	rm -rf $(IDIR_ASTERISK)/usr/sbin/astgenkey
 	rm -rf $(IDIR_ASTERISK)/usr/bin

+ 22 - 4
package/aufs2-util/Makefile

@@ -4,26 +4,44 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=		aufs2-util
-PKG_VERSION:=		130809
+PKG_VERSION:=		2-100111
 PKG_RELEASE:=		1
+PKG_MD5SUM:=		1854f5ab560dd375b22f6e2b747cb412
 PKG_DESCR:=		aufs2 utilities
 PKG_SECTION:=		fs
 PKG_URL:=		http://aufs.sf.net/
 
+# created from git via:
+# $ git archive --format tar aufs2.1 | \
+#          gzip -9 -c >../aufs2-util-2-$(date +%d%m%g).tar.gz
+
+PKG_SITES:=		http://nwl.cc/~n0-1/
+WRKDIST=		${WRKDIR}
+
 PKG_HOST_DEPENDS:=	!cygwin !freebsd !openbsd !netbsd
 
-NO_DISTFILES:=		1
+PKG_SUBPKGS:=		AUFS2_UTIL LIBAU
+PKGSD_LIBAU:=		aufs2 userspace library
 
 include $(TOPDIR)/mk/package.mk
 
 $(eval $(call PKG_template,AUFS2_UTIL,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+$(eval $(call PKG_template,LIBAU,libau,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKGSD_LIBAU},${PKG_SECTION}))
 
 CONFIG_STYLE:=		manual
-MAKE_FLAGS+=		KDIR=${LINUX_DIR}
+XAKE_FLAGS+=		Install=install HOSTCPPFLAGS="-I${LINUX_HEADER_DIR}/include"
 
 post-install:
 	$(INSTALL_DIR) $(IDIR_AUFS2_UTIL)/sbin
-	$(INSTALL_BIN) ${WRKINST}/sbin/{u,}mount.aufs \
+	$(INSTALL_BIN) ${WRKINST}/sbin/{{u,}mount.aufs,auplink} \
 		$(IDIR_AUFS2_UTIL)/sbin
+	$(INSTALL_DIR) $(IDIR_AUFS2_UTIL)/usr/bin
+	$(INSTALL_BIN) ${WRKINST}/usr/bin/au{brsync,chk} \
+		$(IDIR_AUFS2_UTIL)/usr/bin
+	$(INSTALL_DIR) $(IDIR_AUFS2_UTIL)/etc/default
+	$(INSTALL_DATA) ${WRKINST}/etc/default/aufs \
+		$(IDIR_AUFS2_UTIL)/etc/default
+	$(INSTALL_DIR) $(IDIR_LIBAU)/usr/lib
+	${CP} ${WRKINST}/usr/lib/libau* ${IDIR_LIBAU}/usr/lib
 
 include ${TOPDIR}/mk/pkg-bottom.mk

+ 41 - 27
package/aufs2-util/patches/patch-Makefile

@@ -1,33 +1,47 @@
-	- explicitly use the host cc to compile c2sh and c2tmac
-	  (using per-target local variable assignments is an elegant
-	  way for not having to define explicit rules for the targets)
-	- dont try setting owner and group of installed files
---- aufs2-util-130809.orig/Makefile	2009-08-13 14:59:49.000000000 +0200
-+++ aufs2-util-130809/Makefile	2009-08-23 18:05:03.909726416 +0200
-@@ -54,6 +54,11 @@ ${Dummy}: ${LibSoObj}
- ${LibSo}: ${Dummy}
- 	ln -f $< $@
+--- w-aufs2-util-2-100111-1.orig/Makefile	2011-01-07 05:00:54.000000000 +0100
++++ w-aufs2-util-2-100111-1/Makefile	2011-01-10 23:43:23.000000000 +0100
+@@ -15,6 +15,11 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301	 USA
  
 +c2sh c2tmac: CC = ${HOSTCC}
-+c2sh c2tmac: CFLAGS="-I${KDIR}/include"
-+c2sh c2tmac: LDFLAGS=
-+c2sh c2tmac: CPPFLAGS=
++c2sh c2tmac: CFLAGS= ${HOSTCFLAGS}
++c2sh c2tmac: LDFLAGS= ${HOSTLDFLAGS}
++c2sh c2tmac: CPPFLAGS= ${HOSTCPPFLAGS} -I./libau -I${LINUX_HEADER_DIR}/include
 +
- etc_default_aufs: c2sh aufs.shlib
- 	${RM} $@
- 	echo '# aufs variables for shell scripts' > $@
-@@ -86,12 +91,12 @@ install_ulib: File = ${LibSo}
- install_ulib: Tgt = ${DESTDIR}/ulib
- install_sbin install_ubin install_man install_ulib: ${File}
- 	install -d ${Tgt}
--	install -m 755 -o root -g root -p ${Opt} ${File} ${Tgt}
-+	install -m 755 -p ${Opt} ${File} ${Tgt}
- install_etc: File = etc_default_aufs
+ CFLAGS += -I./libau
+ CFLAGS += -O -Wall
+ 
+@@ -28,13 +33,10 @@ LibUtilObj = proc_mnt.o br.o plink.o mta
+ LibUtilHdr = au_util.h
+ export
+ 
+-all: ver_test ${Man} ${Bin} ${Etc}
++all: ${Man} ${Bin} ${Etc}
+ 	${MAKE} -C libau $@
+ 	ln -sf ./libau/libau*.so .
+ 
+-ver_test: ver
+-	./ver
+-
+ ${Bin}: LDFLAGS += -static -s
+ ${Bin}: LDLIBS = -L. -lautil
+ ${BinObj}: %.o: %.c ${LibUtilHdr} ${LibUtil}
+@@ -63,7 +65,7 @@ aufs.5: aufs.in.5 c2tmac
+ 	}' aufs.in.5 >> $@
+ 	chmod a-w $@
+ 
+-.INTERMEDIATE: c2sh c2tmac ver
++.INTERMEDIATE: c2sh c2tmac
+ 
+ Install = install -o root -g root -p
+ install_sbin: File = mount.aufs umount.aufs auplink
+@@ -77,7 +79,7 @@ install_etc: File = etc_default_aufs
  install_etc: Tgt = ${DESTDIR}/etc/default/aufs
  install_etc: ${File}
  	install -d $(dir ${Tgt})
--	install -m 644 -o root -g root -p -T ${File} ${Tgt}
-+	install -m 644 -p -T ${File} ${Tgt}
- 
- # do not inlcude install_ulib here
- install: install_man install_sbin install_ubin install_etc
+-	${Install} -m 644 -T ${File} ${Tgt}
++	${Install} -m 644 ${File} ${Tgt}
+ install_man: File = aufs.5
+ install_man: Tgt = ${DESTDIR}/usr/share/man/man5
+ install_man: ${File}

+ 0 - 340
package/aufs2-util/src/COPYING

@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.

+ 0 - 93
package/aufs2-util/src/Makefile

@@ -1,93 +0,0 @@
-
-# Copyright (C) 2005-2010 Junjiro R. Okajima
-#
-# This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301	 USA
-
-CFLAGS += -I./libau
-CFLAGS += -O -Wall
-
-Cmd = umount.aufs auchk aubrsync
-Man = aufs.5
-Etc = etc_default_aufs
-Bin = auplink mount.aufs #auctl
-BinObj = $(addsuffix .o, ${Bin})
-LibUtil = libautil.a
-LibUtilObj = proc_mnt.o br.o plink.o mtab.o
-LibUtilHdr = au_util.h
-export
-
-all: ${Man} ${Bin} ${Etc}
-	${MAKE} -C libau $@
-	ln -sf ./libau/libau*.so .
-
-${Bin}: LDFLAGS += -static -s
-${Bin}: LDLIBS = -L. -lautil
-${BinObj}: %.o: %.c ${LibUtilHdr} ${LibUtil}
-
-${LibUtilObj}: %.o: %.c ${LibUtilHdr}
-#${LibUtil}: ${LibUtil}(${LibUtilObj})
-${LibUtil}: $(foreach o, ${LibUtilObj}, ${LibUtil}(${o}))
-.NOTPARALLEL: ${LibUtil}
-
-etc_default_aufs: c2sh aufs.shlib
-	${RM} $@
-	echo '# aufs variables for shell scripts' > $@
-	./c2sh >> $@
-	echo >> $@
-	sed -e '0,/^$$/d' aufs.shlib >> $@
-
-aufs.5: aufs.in.5 c2tmac
-	${RM} $@
-	./c2tmac > $@
-	awk '{ \
-		gsub(/\140[^\047]*\047/, "\\[oq]&\\[cq]"); \
-		gsub(/\\\[oq\]\140/, "\\[oq]"); \
-		gsub(/\047\\\[cq\]/, "\\[cq]"); \
-		gsub(/\047/, "\\[aq]"); \
-		print; \
-	}' aufs.in.5 >> $@
-	chmod a-w $@
-
-.INTERMEDIATE: c2sh c2tmac
-
-Install = install -o root -g root -p
-install_sbin: File = mount.aufs umount.aufs auplink
-install_sbin: Tgt = ${DESTDIR}/sbin
-install_ubin: File = auchk aubrsync #auctl
-install_ubin: Tgt = ${DESTDIR}/usr/bin
-install_sbin install_ubin: ${File}
-	install -d ${Tgt}
-	${Install} -m 755 ${File} ${Tgt}
-install_etc: File = etc_default_aufs
-install_etc: Tgt = ${DESTDIR}/etc/default/aufs
-install_etc: ${File}
-	install -d $(dir ${Tgt})
-	${Install} -m 644 -T ${File} ${Tgt}
-install_man: File = aufs.5
-install_man: Tgt = ${DESTDIR}/usr/share/man/man5
-install_man: ${File}
-	install -d ${Tgt}
-	${Install} -m 644 ${File} ${Tgt}
-install_ulib:
-	${MAKE} -C libau $@
-
-install: install_man install_sbin install_ubin install_etc install_ulib
-
-clean:
-	${RM} ${Man} ${Bin} ${Etc} ${LibUtil} libau.so* *~
-	${RM} ${BinObj} ${LibUtilObj}
-	${MAKE} -C libau $@
-
--include priv.mk

+ 0 - 46
package/aufs2-util/src/README

@@ -1,46 +0,0 @@
-
-Utilities for aufs2
-http://aufs.sf.net
-J. R. Okajima
-
-These utilities are always necessary for aufs2.
-If you forget to install them, your aufs may not work correctly.
-And these are not for aufs1 essentially, except aubrsync. See below in
-detail.
-
-Makefile in this tree has some customizable make-variables.
-- KDIR
-  specify your kernel source path if necessary
-- DESTDIR
-  specify your install path if necessary.
-  some commands have to be installed under /sbin.
-
-o /sbin/mount.aufs, /sbin/umount.aufs
-  Helpers for util-linux-ng package. You should NOT invoke them
-  manually. Just install them by "make install".
-
-o /sbin/auplink
-  Handles aufs pseudo-link at remount/unmount time. You can invoke it
-  manually at anytime.
-
-o /usr/bin/auchk
-  Similar to generic fsck. Checks whether a branch is healthy or not
-  from aufs's point of view.
-
-o /usr/bin/aubrsync
-  Move files from the upper writable branch to the lower branch.
-  If you use this script with aufs1, then you need to install aufs.shlib
-  to /usr/lib/aufs.shlib. Currently only the 20080211 version is tested
-  for aufs1.
-  The development of this script is sponcered by ASUSTek Computer Inc.
-  (http://www.asus.com/).
-  Kindly they agreed that I keep my aufs work as free software as it has
-  been.
-
-o /etc/default/aufs
-  A library for shell scripts.
-
-
-# Local variables: ;
-# mode: text;
-# End: ;

+ 0 - 67
package/aufs2-util/src/au_util.h

@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __AUFS_UTIL_H__
-#define __AUFS_UTIL_H__
-
-#include <errno.h>
-#include <error.h>
-
-/*
- * error_at_line() is decleared with (__printf__, 5, 6) attribute,
- * and our compiler produces a warning unless args is not given.
- * __VA_ARGS__ does not help the attribute.
- */
-#define AuFin(fmt, args...) \
-	error_at_line(errno, errno, __FILE__, __LINE__, fmt, ##args)
-
-#ifdef DEBUG
-#define MTab "/tmp/mtab"
-#else
-#define MTab "/etc/mtab"
-#endif
-
-/* proc_mounts.c */
-struct mntent;
-int au_proc_getmntent(char *mntpnt, struct mntent *rent);
-
-/* br.c */
-int au_br(char ***br, int *nbr, struct mntent *ent);
-
-/* plink.c */
-enum {
-	AuPlink_FLUSH,
-	AuPlink_CPUP,
-	AuPlink_LIST
-};
-int au_plink(char cwd[], int cmd, int begin_maint, int end_maint);
-void au_plink_maint(char *path);
-
-/* mtab.c */
-void au_print_ent(struct mntent *ent);
-int au_update_mtab(char *mntpnt, int do_remount, int do_verbose);
-
-#define _Dpri(fmt, ...)		printf("%s:%d:" fmt, \
-				       __func__, __LINE__, ##__VA_ARGS__)
-#ifdef DEBUG
-#define Dpri(fmt, ...)		_Dpri(fmt, ##__VA_ARGS__)
-#else
-#define Dpri(fmt, ...)		do { } while(0)
-#endif
-
-#endif /* __AUFS_UTIL_H__ */

+ 0 - 304
package/aufs2-util/src/aubrsync

@@ -1,304 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2005-2009 Junjiro Okajima
-#
-# This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-#
-# The development of this script is sponcered by ASUSTek Computer Inc.
-# Kindly they agreed that I keep my aufs work as free software as it has
-# been.
-#
-
-set -eu
-#set -x
-
-me=$(basename $0)
-EEcho() # str
-{
-	echo ${me}: $@ 1>&2
-}
-
-f=/sbin/mount.aufs
-test ! -x $f && EEcho $f is not installed && exit 1
-
-# special handling for backward compatibility.
-#
-# aufs in the donated eeepc is aufs1 20080211 without CONFIG_AUFS_COMPAT.
-# /etc/default/aufs was introduced in aufs1 20080922.
-# shwh/noshwh was introduced in aufs1 20080310 with CONFIG_AUFS_SHWH.
-# noshwh became always available regardless CONFIG_AUFS_SHWH in aufs1 20081117.
-
-noshwh=1
-AUFS_VERSION=20080211
-f=/etc/default/aufs
-if [ -s $f ]
-then
-	. $f
-else
-	echo ${me}: warning, broken $f, assuming aufs is $AUFS_VERSION
-	f=/usr/lib/aufs.shlib
-	test ! -s $f && EEcho $f is not installed && exit 1
-	. $f
-
-	case $AUFS_VERSION in
-	200*) # aufs1
-		test $AUFS_VERSION -lt 20081117 && noshwh=0
-		;;
-	esac
-	AUFS_SUPER_MAGIC=1635083891
-	AUFS_SUPER_MAGIC_HEX=0x61756673
-	AUFS_WH_PFX=.wh.
-	AUFS_WH_PFX2=.wh..wh.
-	AUFS_WH_DIROPQ=.wh..wh..opq
-fi
-
-########################################
-
-_Rsync="rsync --exclude=lost+found"
-Rsync="$_Rsync -aHSx --devices --specials --delete-before"
-Copy="$Rsync"
-Move="$Copy"
-RsyncWh="$_Rsync -ptgoHx"
-
-FindForRm() # rw
-{
-	echo "find \"$1\" -xdev -depth \(
-		\( ! -type d
-			\( -name $AUFS_WH_DIROPQ
-			-o ! -name ${AUFS_WH_PFX2}\* \) \)
-		-o \( -type d
-			! -name ${AUFS_WH_PFX2}\*
-			! -wholename \"$1\"
-			! -wholename \"$1/lost+found\" \)
-		\) -print0"
-}
-
-MoveWh() # rw ro+wh
-{
-	cd "$1"
-	find . -xdev -name ${AUFS_WH_PFX}\* ! -name ${AUFS_WH_PFX2}\* \
-		-printf '%P\n' |
-	while read wh
-	do
-		f=$(echo "$wh" | sed -e '
-			s/^'${AUFS_WH_PFX}'//
-			t
-			s:/'${AUFS_WH_PFX}':/:
-			')
-		test -e "$dst/$f" || echo "$wh"
-	done |
-	# -v
-	$RsyncWh --files-from=- ./ "$2"
-	cd "$OLDPWD"
-}
-
-copy()
-{
-	$Copy $@ "$mntpnt"/ "$dst"
-}
-
-_move()
-{
-	set +x
-	test $hinotify -ne 1 && echo ${me}: warning, -i is not specified
-	src_is_nfs=0
-	test $(stat -f -c %T "$src") = nfs && src_is_nfs=1
-	set $quiet
-
-	$Move $@ &&
-	eval $(FindForRm "$src") |
-	{
-		if [ $src_is_nfs -eq 1 ]
-		then
-			mount -o remount "$mntpnt"
-			mount -o remount "$src"
-		fi
-		xargs -r0 rm -fr #-v
-	}
-}
-
-move()
-{
-	_move $@ "$mntpnt"/ "$dst"
-}
-
-move_with_wh()
-{
-	{
-	set +x
-	MoveWh "$src" "$dst"
-	set $quiet
-	} &&
-	move --exclude=${AUFS_WH_PFX}\*
-}
-
-# backward compatibility
-move_w()
-{
-	move_with_wh $@
-}
-
-Usage()
-{
-	t=$(FindForRm src_branch | sed -e '
-		s/"//g
-		$b
-		s/$/ \\/')
-
-	cat <<- EOF
-	$me Options move | move_with_wh | copy \\
-	        mntpnt src_branch dst_branch [ options for rsync ]
-
-	generic form:
-	$me [ -w | --wh ] [ -i | --inotify ] Options \\
-	        mntpnt cmd [ parameters for cmd ]
-
-	Options:
-	        [ -n | --dry_run ]
-	        [ -q | --quiet ]
-
-	The dst_branch must be mounted as writable.
-	During the operation, the mntpnt is set readonly.
-	If you are opening a file for writing on the writable branch,
-	you need to close the file before invoking this script.
-	The -w or --wh option requires CONFIG_AUFS_SHWH enabled.
-	The -i or --inotify option requires CONFIG_AUFS_HINOTIFY enabled.
-
-	'copy' is a shortcut for
-	        $me mntpnt \\
-	        $Copy mntpnt/ dst_branch
-	'move' is a shortcut for
-	        $me mntpnt \\
-	        "$Move \\
-	        mntpnt/ dst_branch && \\
-	        $t |\\
-	        xargs -r0 rm -fr"
-	        Note: in most cases, you will need '-i' option, and
-	              find(1) is invoked by $me only when rsync(1)
-	              succeded.
-	'move_with_wh' is a simple variation of 'move' which moves
-	whiteouts separately before the actual 'move'.
-
-	If you execute this script under linux-2.6.24 or earlier, the
-	kernel may produce a harmless warning "inotify.c:NNN
-	set_dentry_child_flags()". The message was already removed in
-	linux-2.6.25.
-
-	examples:
-	- Copy and reflect all the modification (modifed files, newly
-	  created and removed ones) in the upper branch to the lower
-	  branch. This operation is for aufs which has only 2 branches,
-	  and mainly for a system shutdown script.
-	  All files on the upper branch remain.
-
-	  $ sudo $me copy /your/aufs /your/upper_branch /your/lower_branch
-
-	- Like above (2 branches), move and reflect all modifications
-	  from upper to lower. Almost all files on the upper branch will
-	  be removed. You can still use this aufs after the
-	  operation. But the inode number may be changed. If your
-	  application which depends upon the inode number was running at
-	  that time, it may not work correctly.
-
-	  $ sudo $me move /your/aufs /your/upper_branch /your/lower_branch
-	EOF
-
-# 	- Like above (2 branches), generate a new middle layer like a
-# 	  snapshot including whiteouts and make the upper_branch almost
-# 	  empty, but untouch the lower_branch.
-# 
-# 	  $ img=/hda1/a.ext2
-# 	  $ dd if=/dev/zero of=\$img bs=4k count=1k
-# 	  $ mkfs -t ext2 -F \$img
-# 	  $ sudo mount -o rw,loop \$img /your/new_branch
-# 	  $ sudo mount -o remount,ins:1:/your/new_branch=ro+wh /your/aufs
-# 	  $ sudo $me _move /your/aufs /your/upper_branch /your/lower_branch \\
-# 	        "--remove-source-files \\
-# 	        --exclude=$AUFS_WH_BASE \\
-# 	        --exclude=$AUFS_WH_PLINKDIR \\
-# 	        --exclude=$AUFS_WH_TMPDIR \\
-# 	        /your/upper_branch/ /your/new_branch; \\
-# 	        mount -o remount,ro /your/new_branch"
-# 	EOF
-}
-
-########################################
-
-wh=0
-hinotify=0
-quiet=-x
-dry_run=
-cmd=
-cmd_opts=
-for i
-do
-	case $i in
-	-w|--wh)	wh=1;;
-	-i|--inotify)	hinotify=1;;
-	-n|--dry_run)	dry_run=echo;;
-	-q|--quiet)	quiet=+x;;
-	-h|--help)	Usage; exit 0;;
-	--)		shift; break;;
-	*)		break;;
-	esac
-	shift
-done
-
-test $# -lt 2 && Usage 1>&2 && exit 1
-case "$1" in
-_move|move|copy|move_w|move_with_wh)
-	test $# -lt 4 && Usage 1>&2 && exit 1
-	cmd=$1
-	SetDir mntpnt "$2"
-	SetDir src "$3"
-	SetDir dst "$4"
-	shift 4
-	wh=0
-	;;
-*)
-	SetDir mntpnt "$1"
-	cmd="$2"
-	shift 2
-	;;
-esac
-cmd_opts="$@"
-
-case $(stat -f -c %T "$mntpnt") in
-aufs|UNKNOWN*${AUFS_SUPER_MAGIC_HEX}*)	;;
-*)
-	EEcho "$mntpnt" is not aufs
-	exit 1
-	;;
-esac
-
-cur_opts=$(MntOpts "$mntpnt")
-test ! "$cur_opts" &&
-EEcho bad /proc/mounts or "$mntpnt" is not mounted &&
-exit 1
-cur_opts="udba=reval,noshwh,$cur_opts"
-test $noshwh -eq 0 && cur_opts=$(echo $cur_opts | sed -e 's/,noshwh//')
-
-# force flushing the pusedo-links
-tmp_opts="remount,ro,udba=reval,noshwh"
-test $noshwh -eq 0 && tmp_opts=$(echo $tmp_opts | sed -e 's/,noshwh//')
-test $wh -eq 1 && tmp_opts="$tmp_opts,shwh"
-test $hinotify -eq 1 && tmp_opts="$tmp_opts,udba=inotify"
-
-# here we go
-trap "$dry_run mount -o remount,$cur_opts \"$mntpnt\"" EXIT
-set $quiet
-$dry_run mount -o $tmp_opts "$mntpnt"
-eval "$dry_run $cmd $cmd_opts"

+ 0 - 130
package/aufs2-util/src/auchk

@@ -1,130 +0,0 @@
-#!/bin/sh -
-
-# Copyright (C) 2005-2009 Junjiro Okajima
-#
-# This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-set -eu
-#set -x
-
-EEcho() # str
-{
-	echo $0: $@ 1>&2
-}
-
-f=/etc/default/aufs
-. $f
-
-Usage()
-{
-	echo $0 writable_branch '[...]'
-}
-
-Pass() # title
-{
-	pass=$(($pass + 1))
-	EEcho \[Pass $pass\] $@
-}
-
-Remove() # file
-{
-	if [ -d "$1" ]
-	then
-		rm -ir "$1" || :
-	else
-		rm -v "$1" || :
-	fi
-}
-
-for i
-do
-	EEcho Checking "$i" for aufs
-
-	cd "$i"
-	case $(stat -f -c %T .) in
-	aufs|UNKNOWN*${AUFS_SUPER_MAGIC_HEX}*)
-		EEcho $i must not be aufs
-		cd $OLDPWD
-		continue
-		;;
-	esac
-
-	########################################
-	pass=0
-	Pass Illegal whiteout
-	find . -name '.wh.*' ! -name '.wh..wh.*' -printf '%h\0%f\0' |
-	xargs -r0n2 |
-	while read dir wh
-	do
-		#echo \""$dir"\" \""$wh"\"
-		base=$(echo "$wh" | cut -c5-)
-		test ! -e "$dir/$base" && continue
-
-		ls -ld "$dir/$wh" "$dir/$base"
-		read -p 'Which to remove [whiteout/real/skip]? ' ans \
-			< /dev/tty > /dev/tty 2>&1
-		case "$ans" in
-		[wW]*)	Remove "$dir/$wh" || :;;
-		[rR]*)	Remove "$dir/$base" || :;;
-		*)	echo skipped;;
-		esac
-	done
-
-	########################################
-	Pass Remained pseudo-links
-	did=0
-	for plink in ${AUFS_WH_PLINKDIR}/*
-	do
-		test ! -e "$plink" && break
-		if [ -d "$plink" ]
-		then
-			EEcho illegal "$plink"
-			continue
-		fi
-
-		did=1
-		#ls -l "$plink" || :
-		find . -inum $(basename "$plink" | cut -f2 -d .) -ls || :
-	done
-	if [ $did -ne 0 ]
-	then
-		cat <<- EOF
-		They will be maintained at remount or umount time,
-		if you installed aufs helper scripts (See README
-		in detail).
-		If "$i" is not a writeble branch of CURRENTLY mounted
-		aufs, you need to maintain them by yourself.
-		EOF
-	fi
-
-	########################################
-	Pass Remained temp files
-	for tmp in ${AUFS_WH_TMPDIR}/*
-	do
-		test ! -e "$tmp" && break
-		if [ -d "$tmp" ]
-		then
-			EEcho illegal "$tmp"
-			continue
-		fi
-
-		ls -l "$tmp" || :
-		rm -i "$tmp" || :
-	done
-
-	# nothing to do for xinodir
-
-	cd $OLDPWD
-done

+ 0 - 1684
package/aufs2-util/src/aufs.in.5

@@ -1,1684 +0,0 @@
-.\".so aufs.tmac
-.
-.eo
-.de TQ
-.br
-.ns
-.TP \$1
-..
-.de Bu
-.IP \(bu 4
-..
-.ec
-.\" end of macro definitions
-.
-.\" ----------------------------------------------------------------------
-.TH aufs 5 \*[AUFS_VERSION] Linux "Linux Aufs User's Manual"
-.SH NAME
-aufs \- advanced multi layered unification filesystem. version \*[AUFS_VERSION]
-
-.\" ----------------------------------------------------------------------
-.SH DESCRIPTION
-Aufs is a stackable unification filesystem such as Unionfs, which unifies
-several directories and provides a merged single directory.
-In the early days, aufs was entirely re-designed and re-implemented
-Unionfs Version 1.x series. After
-many original ideas, approaches and improvements, it
-becomes totally different from Unionfs while keeping the basic features.
-See Unionfs Version 1.x series for the basic features.
-Recently, Unionfs Version 2.x series begin taking some of same
-approaches to aufs's.
-
-.\" ----------------------------------------------------------------------
-.SH MOUNT OPTIONS
-At mount-time, the order of interpreting options is,
-.RS
-.Bu
-simple flags, except xino/noxino and udba=inotify
-.Bu
-branches
-.Bu
-xino/noxino
-.Bu
-udba=inotify
-.RE
-
-At remount-time,
-the options are interpreted in the given order,
-e.g. left to right.
-.RS
-.Bu
-create or remove
-whiteout-base(\*[AUFS_WH_BASE]) and
-whplink-dir(\*[AUFS_WH_PLINKDIR]) if necessary
-.RE
-.
-.TP
-.B br:BRANCH[:BRANCH ...] (dirs=BRANCH[:BRANCH ...])
-Adds new branches.
-(cf. Branch Syntax).
-
-Aufs rejects the branch which is an ancestor or a descendant of another
-branch. It is called overlapped. When the branch is loopback-mounted
-directory, aufs also checks the source fs-image file of loopback
-device. If the source file is a descendant of another branch, it will
-be rejected too.
-
-After mounting aufs or adding a branch, if you move a branch under
-another branch and make it descendant of another branch, aufs will not
-work correctly.
-.
-.TP
-.B [ add | ins ]:index:BRANCH
-Adds a new branch.
-The index begins with 0.
-Aufs creates
-whiteout-base(\*[AUFS_WH_BASE]) and
-whplink-dir(\*[AUFS_WH_PLINKDIR]) if necessary.
-
-If there is the same named file on the lower branch (larger index),
-aufs will hide the lower file.
-You can only see the highest file.
-You will be confused if the added branch has whiteouts (including
-diropq), they may or may not hide the lower entries.
-.\" It is recommended to make sure that the added branch has no whiteout.
-
-Even if a process have once mapped a file by mmap(2) with MAP_SHARED
-and the same named file exists on the lower branch,
-the process still refers the file on the lower(hidden)
-branch after adding the branch.
-If you want to update the contents of a process address space after
-adding, you need to restart your process or open/mmap the file again.
-.\" Usually, such files are executables or shared libraries.
-(cf. Branch Syntax).
-.
-.TP
-.B del:dir
-Removes a branch.
-Aufs does not remove
-whiteout-base(\*[AUFS_WH_BASE]) and
-whplink-dir(\*[AUFS_WH_PLINKDIR]) automatically.
-For example, when you add a RO branch which was unified as RW, you
-will see whiteout-base or whplink-dir on the added RO branch.
-
-If a process is referencing the file/directory on the deleting branch
-(by open, mmap, current working directory, etc.), aufs will return an
-error EBUSY.
-.
-.TP
-.B mod:BRANCH
-Modifies the permission flags of the branch.
-Aufs creates or removes
-whiteout-base(\*[AUFS_WH_BASE]) and/or
-whplink-dir(\*[AUFS_WH_PLINKDIR]) if necessary.
-
-If the branch permission is been changing `rw' to `ro', and a process
-is mapping a file by mmap(2)
-.\" with MAP_SHARED
-on the branch, the process may or may not
-be able to modify its mapped memory region after modifying branch
-permission flags.
-Additioanlly when you enable CONFIG_IMA (in linux-2.6.30 and later), IMA
-may produce some wrong messages. But this is equivalent when the
-filesystem is changed `ro' in emergency.
-(cf. Branch Syntax).
-.
-.TP
-.B append:BRANCH
-equivalent to `add:(last index + 1):BRANCH'.
-(cf. Branch Syntax).
-.
-.TP
-.B prepend:BRANCH
-equivalent to `add:0:BRANCH.'
-(cf. Branch Syntax).
-.
-.TP
-.B xino=filename
-Use external inode number bitmap and translation table.
-When CONFIG_AUFS_EXPORT is enabled, external inode generation table too.
-It is set to
-<FirstWritableBranch>/\*[AUFS_XINO_FNAME] by default, or
-\*[AUFS_XINO_DEFPATH].
-Comma character in filename is not allowed.
-
-The files are created per an aufs and per a branch filesystem, and
-unlinked. So you
-cannot find this file, but it exists and is read/written frequently by
-aufs.
-(cf. External Inode Number Bitmap, Translation Table and Generation Table).
-
-If you enable CONFIG_SYSFS, the path of xino files are not shown in
-/proc/mounts (and /etc/mtab), instead it is shown in
-<sysfs>/fs/aufs/si_<id>/xi_path.
-Otherwise, it is shown in /proc/mounts unless it is not the default
-path.
-.
-.TP
-.B noxino
-Stop using external inode number bitmap and translation table.
-
-If you use this option,
-Some applications will not work correctly.
-.\" And pseudo link feature will not work after the inode cache is
-.\" shrunk.
-(cf. External Inode Number Bitmap, Translation Table and Generation Table).
-.
-.TP
-.B trunc_xib
-Truncate the external inode number bitmap file. The truncation is done
-automatically when you delete a branch unless you do not specify
-`notrunc_xib' option.
-(cf. External Inode Number Bitmap, Translation Table and Generation Table).
-.
-.TP
-.B notrunc_xib
-Stop truncating the external inode number bitmap file when you delete
-a branch.
-(cf. External Inode Number Bitmap, Translation Table and Generation Table).
-.
-.TP
-.B create_policy | create=CREATE_POLICY
-.TQ
-.B copyup_policy | copyup | cpup=COPYUP_POLICY
-Policies to select one among multiple writable branches. The default
-values are `create=tdp' and `cpup=tdp'.
-link(2) and rename(2) systemcalls have an exception. In aufs, they
-try keeping their operations in the branch where the source exists.
-(cf. Policies to Select One among Multiple Writable Branches).
-.
-.TP
-.B verbose | v
-Print some information.
-Currently, it is only busy file (or inode) at deleting a branch.
-.
-.TP
-.B noverbose | quiet | q | silent
-Disable `verbose' option.
-This is default value.
-.
-.TP
-.B sum
-df(1)/statfs(2) returns the total number of blocks and inodes of
-all branches.
-Note that there are cases that systemcalls may return ENOSPC, even if
-df(1)/statfs(2) shows that aufs has some free space/inode.
-.
-.TP
-.B nosum
-Disable `sum' option.
-This is default value.
-.
-.TP
-.B dirwh=N
-Watermark to remove a dir actually at rmdir(2) and rename(2).
-
-If the target dir which is being removed or renamed (destination dir)
-has a huge number of whiteouts, i.e. the dir is empty logically but
-physically, the cost to remove/rename the single
-dir may be very high.
-It is
-required to unlink all of whiteouts internally before issuing
-rmdir/rename to the branch.
-To reduce the cost of single systemcall,
-aufs renames the target dir to a whiteout-ed temporary name and
-invokes a pre-created
-kernel thread to remove whiteout-ed children and the target dir.
-The rmdir/rename systemcall returns just after kicking the thread.
-
-When the number of whiteout-ed children is less than the value of
-dirwh, aufs remove them in a single systemcall instead of passing
-another thread.
-This value is ignored when the branch is NFS.
-The default value is \*[AUFS_DIRWH_DEF].
-.\" .
-.\" .TP
-.\" .B rdcache=N
-.
-.TP
-.B rdblk=N
-Specifies a size of internal VDIR block which is allocated at a time in
-byte.
-The VDIR block will be allocated several times when necessary. If your
-directory has millions of files, you may want to expand this size.
-The default value is defined as \*[AUFS_RDBLK_DEF].
-The size has to be lager than NAME_MAX (usually 255) and kmalloc\-able
-(the maximum limit depends on your system. at least 128KB is available
-for every system).
-Whenever you can reset the value to default by specifying rdblk=def.
-(cf. Virtual or Vertical Directory Block).
-.
-.TP
-.B rdhash=N
-Specifies a size of internal VDIR hash table which is used to compare
-the file names under the same named directory on multiple branches.
-The VDIR hash table will be allocated in readdir(3)/getdents(2),
-rmdir(2) and rename(2) for the existing target directory. If your
-directory has millions of files, you may want to expand this size.
-The default value is defined as \*[AUFS_RDHASH_DEF].
-The size has to be lager than zero, and it will be multiplied by 4 or 8
-(for 32\-bit and 64\-bit respectively, currently). The result must be
-kmalloc\-able
-(the maximum limit depends on your system. at least 128KB is available
-for every system).
-Whenever you can reset the value to default by specifying rdhash=def.
-(cf. Virtual or Vertical Directory Block).
-.
-.TP
-.B plink
-.TQ
-.B noplink
-Specifies to use `pseudo link' feature or not.
-The default is `plink' which means use this feature.
-(cf. Pseudo Link)
-.
-.TP
-.B clean_plink
-Removes all pseudo-links in memory.
-In order to make pseudo-link permanent, use
-`auplink' utility just before one of these operations,
-unmounting aufs,
-using `ro' or `noplink' mount option,
-deleting a branch from aufs,
-adding a branch into aufs,
-or changing your writable branch as readonly.
-If you installed both of /sbin/mount.aufs and /sbin/umount.aufs, and your
-mount(8) and umount(8) support them,
-`auplink' utility will be executed automatically and flush pseudo-links.
-(cf. Pseudo Link)
-.
-.TP
-.B udba=none | reval | inotify
-Specifies the level of UDBA (User's Direct Branch Access) test.
-(cf. User's Direct Branch Access and Inotify Limitation).
-.
-.TP
-.B diropq=whiteouted | w | always | a
-Specifies whether mkdir(2) and rename(2) dir case make the created directory
-`opaque' or not.
-In other words, to create `\*[AUFS_WH_DIROPQ]' under the created or renamed
-directory, or not to create.
-When you specify diropq=w or diropq=whiteouted, aufs will not create
-it if the
-directory was not whiteouted or opaqued. If the directory was whiteouted
-or opaqued, the created or renamed directory will be opaque.
-When you specify diropq=a or diropq==always, aufs will always create
-it regardless
-the directory was whiteouted/opaqued or not.
-The default value is diropq=w, it means not to create when it is unnecessary.
-If you define CONFIG_AUFS_COMPAT at aufs compiling time, the default will be
-diropq=a.
-You need to consider this option if you are planning to add a branch later
-since `diropq' affects the same named directory on the added branch.
-.
-.TP
-.B warn_perm
-.TQ
-.B nowarn_perm
-Adding a branch, aufs will issue a warning about uid/gid/permission of
-the adding branch directory,
-when they differ from the existing branch's. This difference may or
-may not impose a security risk.
-If you are sure that there is no problem and want to stop the warning,
-use `nowarn_perm' option.
-The default is `warn_perm' (cf. DIAGNOSTICS).
-.
-.TP
-.B shwh
-.TQ
-.B noshwh
-By default (noshwh), aufs doesn't show the whiteouts and
-they just hide the same named entries in the lower branches. The
-whiteout itself also never be appeared.
-If you enable CONFIG_AUFS_SHWH and specify `shwh' option, aufs
-will show you the name of whiteouts
-with keeping its feature to hide the lowers.
-Honestly speaking, I am rather confused with this `visible whiteouts.'
-But a user who originally requested this feature wrote a nice how-to
-document about this feature. See Tips file in the aufs CVS tree.
-
-.\" ----------------------------------------------------------------------
-.SH Module Parameters
-.TP
-.B nwkq=N
-The number of kernel thread named \*[AUFS_WKQ_NAME].
-
-Those threads stay in the system while the aufs module is loaded,
-and handle the special I/O requests from aufs.
-The default value is \*[AUFS_NWKQ_DEF].
-
-The special I/O requests from aufs include a part of copy-up, lookup,
-directory handling, pseudo-link, xino file operations and the
-delegated access to branches.
-For example, Unix filesystems allow you to rmdir(2) which has no write
-permission bit, if its parent directory has write permission bit. In aufs, the
-removing directory may or may not have whiteout or `dir opaque' mark as its
-child. And aufs needs to unlink(2) them before rmdir(2).
-Therefore aufs delegates the actual unlink(2) and rmdir(2) to another kernel
-thread which has been created already and has a superuser privilege.
-
-If you enable CONFIG_SYSFS, you can check this value through
-<sysfs>/module/aufs/parameters/nwkq.
-
-.
-.TP
-.B brs=1 | 0
-Specifies to use the branch path data file under sysfs or not.
-
-If the number of your branches is large or their path is long
-and you meet the limitation of mount(8) ro /etc/mtab, you need to
-enable CONFIG_SYSFS and set aufs module parameter brs=1.
-
-When this parameter is set as 1, aufs does not show `br:' (or dirs=)
-mount option through /proc/mounts (and /etc/mtab). So you can
-keep yourself from the page limitation of
-mount(8) or /etc/mtab.
-Aufs shows branch paths through <sysfs>/fs/aufs/si_XXX/brNNN.
-Actually the file under sysfs has also a size limitation, but I don't
-think it is harmful.
-
-There is one more side effect in setting 1 to this parameter.
-If you rename your branch, the branch path written in /etc/mtab will be
-obsoleted and the future remount will meet some error due to the
-unmatched parameters (Remember that mount(8) may take the options from
-/etc/mtab and pass them to the systemcall).
-If you set 1, /etc/mtab will not hold the branch path and you will not
-meet such trouble. On the other hand, the entries for the
-branch path under sysfs are generated dynamically. So it must not be obsoleted.
-But I don't think users want to rename branches so often.
-
-If CONFIG_SYSFS is disable, this parameter is always set to 0.
-.
-.TP
-.B sysrq=key
-Specifies MagicSysRq key for debugging aufs.
-You need to enable both of CONFIG_MAGIC_SYSRQ and CONFIG_AUFS_DEBUG.
-Currently this is for developers only.
-The default is `a'.
-.
-.TP
-.B debug= 0 | 1
-Specifies disable(0) or enable(1) debug print in aufs.
-This parameter can be changed dynamically.
-You need to enable CONFIG_AUFS_DEBUG.
-Currently this is for developers only.
-The default is `0' (disable).
-
-.\" ----------------------------------------------------------------------
-.SH Entries under Sysfs and Debugfs
-See linux/Documentation/ABI/*/{sys,debug}fs-aufs.
-
-.\" ----------------------------------------------------------------------
-.SH Branch Syntax
-.TP
-.B dir_path[ =permission [ + attribute ] ]
-.TQ
-.B permission := rw | ro | rr
-.TQ
-.B attribute := wh | nolwh
-dir_path is a directory path.
-The keyword after `dir_path=' is a
-permission flags for that branch.
-Comma, colon and the permission flags string (including `=')in the path
-are not allowed.
-
-Any filesystem can be a branch, But some are not accepted such like
-sysfs, procfs and unionfs.
-If you specify such filesystems as an aufs branch, aufs will return an error
-saying it is unsupported.
-
-Cramfs in linux stable release has strange inodes and it makes aufs
-confused. For example,
-.nf
-$ mkdir -p w/d1 w/d2
-$ > w/z1
-$ > w/z2
-$ mkcramfs w cramfs
-$ sudo mount -t cramfs -o ro,loop cramfs /mnt
-$ find /mnt -ls
-    76    1 drwxr-xr-x   1 jro      232            64 Jan  1  1970 /mnt
-     1    1 drwxr-xr-x   1 jro      232             0 Jan  1  1970 /mnt/d1
-     1    1 drwxr-xr-x   1 jro      232             0 Jan  1  1970 /mnt/d2
-     1    1 -rw-r--r--   1 jro      232             0 Jan  1  1970 /mnt/z1
-     1    1 -rw-r--r--   1 jro      232             0 Jan  1  1970 /mnt/z2
-.fi
-
-All these two directories and two files have the same inode with one
-as their link count. Aufs cannot handle such inode correctly.
-Currently, aufs involves a tiny workaround for such inodes. But some
-applications may not work correctly since aufs inode number for such
-inode will change silently.
-If you do not have any empty files, empty directories or special files,
-inodes on cramfs will be all fine.
-
-A branch should not be shared as the writable branch between multiple
-aufs. A readonly branch can be shared.
-
-The maximum number of branches is configurable at compile time (127 by
-default).
-
-When an unknown permission or attribute is given, aufs sets ro to that
-branch silently.
-
-.SS Permission
-.
-.TP
-.B rw
-Readable and writable branch. Set as default for the first branch.
-If the branch filesystem is mounted as readonly, you cannot set it `rw.'
-.\" A filesystem which does not support link(2) and i_op\->setattr(), for
-.\" example FAT, will not be used as the writable branch.
-.
-.TP
-.B ro
-Readonly branch and it has no whiteouts on it.
-Set as default for all branches except the first one. Aufs never issue
-both of write operation and lookup operation for whiteout to this branch.
-.
-.TP
-.B rr
-Real readonly branch, special case of `ro', for natively readonly
-branch. Assuming the branch is natively readonly, aufs can optimize
-some internal operation. For example, if you specify `udba=inotify'
-option, aufs does not set inotify for the things on rr branch.
-Set by default for a branch whose fs-type is either `iso9660',
-`cramfs' or `romfs' (and `squashfs' for linux\-2.6.29 and later).
-
-When your branch exists on slower device and you have some
-capacity on your hdd, you may want to try ulobdev tool in ULOOP sample.
-It can cache the contents of the real devices on another faster device,
-so you will be able to get the better access performance.
-The ulobdev tool is for a generic block device, and the ulohttp is for a
-filesystem image on http server.
-If you want to spin down your hdd to save the
-battery life or something, then you may want to use ulobdev to save the
-access to the hdd, too.
-See $AufsCVS/sample/uloop in detail.
-
-.SS Attribute
-.
-.TP
-.B wh
-Readonly branch and it has/might have whiteouts on it.
-Aufs never issue write operation to this branch, but lookup for whiteout.
-Use this as `<branch_dir>=ro+wh'.
-.
-.TP
-.B nolwh
-Usually, aufs creates a whiteout as a hardlink on a writable
-branch. This attributes prohibits aufs to create the hardlinked
-whiteout, including the source file of all hardlinked whiteout
-(\*[AUFS_WH_BASE].)
-If you do not like a hardlink, or your writable branch does not support
-link(2), then use this attribute.
-But I am afraid a filesystem which does not support link(2) natively
-will fail in other place such as copy-up.
-Use this as `<branch_dir>=rw+nolwh'.
-Also you may want to try `noplink' mount option, while it is not recommended.
-
-.\" .SS FUSE as a branch
-.\" A FUSE branch needs special attention.
-.\" The struct fuse_operations has a statfs operation. It is OK, but the
-.\" parameter is struct statvfs* instead of struct statfs*. So almost
-.\" all user\-space implementation will call statvfs(3)/fstatvfs(3) instead of
-.\" statfs(2)/fstatfs(2).
-.\" In glibc, [f]statvfs(3) issues [f]statfs(2), open(2)/read(2) for
-.\" /proc/mounts,
-.\" and stat(2) for the mountpoint. With this situation, a FUSE branch will
-.\" cause a deadlock in creating something in aufs. Here is a sample
-.\" scenario,
-.\" .\" .RS
-.\" .\" .IN -10
-.\" .Bu
-.\" create/modify a file just under the aufs root dir.
-.\" .Bu
-.\" aufs acquires a write\-lock for the parent directory, ie. the root dir.
-.\" .Bu
-.\" A library function or fuse internal may call statfs for a fuse branch.
-.\" The create=mfs mode in aufs will surely call statfs for each writable
-.\" branches.
-.\" .Bu
-.\" FUSE in kernel\-space converts and redirects the statfs request to the
-.\" user\-space.
-.\" .Bu
-.\" the user\-space statfs handler will call [f]statvfs(3).
-.\" .Bu
-.\" the [f]statvfs(3) in glibc will access /proc/mounts and issue
-.\" stat(2) for the mountpoint. But those require a read\-lock for the aufs
-.\" root directory.
-.\" .Bu
-.\" Then a deadlock occurs.
-.\" .\" .RE 1
-.\" .\" .IN
-.\" 
-.\" In order to avoid this deadlock, I would suggest not to call
-.\" [f]statvfs(3) from fuse. Here is a sample code to do this.
-.\" .nf
-.\" struct statvfs stvfs;
-.\" 
-.\" main()
-.\" {
-.\" 	statvfs(..., &stvfs)
-.\" 	or
-.\" 	fstatvfs(..., &stvfs)
-.\" 	stvfs.f_fsid = 0
-.\" }
-.\" 
-.\" statfs_handler(const char *path, struct statvfs *arg)
-.\" {
-.\" 	struct statfs stfs
-.\" 
-.\" 	memcpy(arg, &stvfs, sizeof(stvfs))
-.\" 
-.\" 	statfs(..., &stfs)
-.\" 	or
-.\" 	fstatfs(..., &stfs)
-.\" 
-.\" 	arg->f_bfree = stfs.f_bfree
-.\" 	arg->f_bavail = stfs.f_bavail
-.\" 	arg->f_ffree = stfs.f_ffree
-.\" 	arg->f_favail = /* any value */
-.\" }
-.\" .fi
-
-.\" ----------------------------------------------------------------------
-.SH External Inode Number Bitmap, Translation Table and Generation Table (xino)
-Aufs uses one external bitmap file and one external inode number
-translation table files per an aufs and per a branch
-filesystem by default.
-Additionally when CONFIG_AUFS_EXPORT is enabled, one external inode
-generation table is added.
-The bitmap (and the generation table) is for recycling aufs inode number
-and the others
-are a table for converting an inode number on a branch to
-an aufs inode number. The default path
-is `first writable branch'/\*[AUFS_XINO_FNAME].
-If there is no writable branch, the
-default path
-will be \*[AUFS_XINO_DEFPATH].
-.\" A user who executes mount(8) needs the privilege to create xino
-.\" file.
-
-If you enable CONFIG_SYSFS, the path of xino files are not shown in
-/proc/mounts (and /etc/mtab), instead it is shown in
-<sysfs>/fs/aufs/si_<id>/xi_path.
-Otherwise, it is shown in /proc/mounts unless it is not the default
-path.
-
-Those files are always opened and read/write by aufs frequently.
-If your writable branch is on flash memory device, it is recommended
-to put xino files on other than flash memory by specifying `xino='
-mount option.
-
-The
-maximum file size of the bitmap is, basically, the amount of the
-number of all the files on all branches divided by 8 (the number of
-bits in a byte).
-For example, on a 4KB page size system, if you have 32,768 (or
-2,599,968) files in aufs world,
-then the maximum file size of the bitmap is 4KB (or 320KB).
-
-The
-maximum file size of the table will
-be `max inode number on the branch x size of an inode number'.
-For example in 32bit environment,
-
-.nf
-$ df -i /branch_fs
-/dev/hda14           2599968  203127 2396841    8% /branch_fs
-.fi
-
-and /branch_fs is an branch of the aufs. When the inode number is
-assigned contiguously (without `hole'), the maximum xino file size for
-/branch_fs will be 2,599,968 x 4 bytes = about 10 MB. But it might not be
-allocated all of disk blocks.
-When the inode number is assigned discontinuously, the maximum size of
-xino file will be the largest inode number on a branch x 4 bytes.
-Additionally, the file size is limited to LLONG_MAX or the s_maxbytes
-in filesystem's superblock (s_maxbytes may be smaller than
-LLONG_MAX). So the
-support-able largest inode number on a branch is less than
-2305843009213693950 (LLONG_MAX/4\-1).
-This is the current limitation of aufs.
-On 64bit environment, this limitation becomes more strict and the
-supported largest inode number is less than LLONG_MAX/8\-1.
-
-The xino files are always hidden, i.e. removed. So you cannot
-do `ls \-l xino_file'.
-If you enable CONFIG_DEBUG_FS, you can check these information through
-<debugfs>/aufs/<si_id>/{xib,xi[0-9]*,xigen}. xib is for the bitmap file,
-xi0 ix for the first branch, and xi1 is for the next. xigen is for the
-generation table.
-xib and xigen are in the format of,
-
-.nf
-<blocks>x<block size> <file size>
-.fi
-
-Note that a filesystem usually has a
-feature called pre-allocation, which means a number of
-blocks are allocated automatically, and then deallocated
-silently when the filesystem thinks they are unnecessary.
-You do not have to be surprised the sudden changes of the number of
-blocks, when your filesystem which xino files are placed supports the
-pre-allocation feature.
-
-The rests are hidden xino file information in the format of,
-
-.nf
-<file count>, <blocks>x<block size> <file size>
-.fi
-
-If the file count is larger than 1, it means some of your branches are
-on the same filesystem and the xino file is shared by them.
-Note that the file size may not be equal to the actual consuming blocks
-since xino file is a sparse file, i.e. a hole in a file which does not
-consume any disk blocks.
-
-Once you unmount aufs, the xino files for that aufs are totally gone.
-It means that the inode number is not permanent across umount or
-shutdown.
-
-The xino files should be created on the filesystem except NFS.
-If your first writable branch is NFS, you will need to specify xino
-file path other than NFS.
-Also if you are going to remove the branch where xino files exist or
-change the branch permission to readonly, you need to use xino option
-before del/mod the branch.
-
-The bitmap file can be truncated.
-For example, if you delete a branch which has huge number of files,
-many inode numbers will be recycled and the bitmap will be truncated
-to smaller size. Aufs does this automatically when a branch is
-deleted.
-You can truncate it anytime you like if you specify `trunc_xib' mount
-option. But when the accessed inode number was not deleted, nothing
-will be truncated.
-If you do not want to truncate it (it may be slow) when you delete a
-branch, specify `notrunc_xib' after `del' mount option.
-
-If you do not want to use xino, use noxino mount option. Use this
-option with care, since the inode number may be changed silently and
-unexpectedly anytime.
-For example,
-rmdir failure, recursive chmod/chown/etc to a large and deep directory
-or anything else.
-And some applications will not work correctly.
-.\" When the inode number has been changed, your system
-.\" can be crazy.
-If you want to change the xino default path, use xino mount option.
-
-After you add branches, the persistence of inode number may not be
-guaranteed.
-At remount time, cached but unused inodes are discarded.
-And the newly appeared inode may have different inode number at the
-next access time. The inodes in use have the persistent inode number.
-
-When aufs assigned an inode number to a file, and if you create the
-same named file on the upper branch directly, then the next time you
-access the file, aufs may assign another inode number to the file even
-if you use xino option.
-Some applications may treat the file whose inode number has been
-changed as totally different file.
-
-.\" ----------------------------------------------------------------------
-.SH Pseudo Link (hardlink over branches)
-Aufs supports `pseudo link' which is a logical hard-link over
-branches (cf. ln(1) and link(2)).
-In other words, a copied-up file by link(2) and a copied-up file which was
-hard-linked on a readonly branch filesystem.
-
-When you have files named fileA and fileB which are
-hardlinked on a readonly branch, if you write something into fileA,
-aufs copies-up fileA to a writable branch, and write(2) the originally
-requested thing to the copied-up fileA. On the writable branch,
-fileA is not hardlinked.
-But aufs remembers it was hardlinked, and handles fileB as if it existed
-on the writable branch, by referencing  fileA's inode on the writable
-branch as fileB's inode.
-
-Once you unmount aufs, the plink info for that aufs kept in memory are totally
-gone.
-It means that the pseudo-link is not permanent.
-If you want to make plink permanent, try `auplink' utility just before
-one of these operations,
-unmounting your aufs,
-using `ro' or `noplink' mount option,
-deleting a branch from aufs,
-adding a branch into aufs,
-or changing your writable branch to readonly.
-
-This utility will reproduces all real hardlinks on a writable branch by linking
-them, and removes pseudo-link info in memory and temporary link on the
-writable branch.
-Since this utility access your branches directly, you cannot hide them by
-`mount \-\-bind /tmp /branch' or something.
-
-If you are willing to rebuild your aufs with the same branches later, you
-should use auplink utility before you umount your aufs.
-If you installed both of /sbin/mount.aufs and /sbin/umount.aufs, and your
-mount(8) and umount(8) support them,
-`auplink' utility will be executed automatically and flush pseudo-links.
-
-.nf
-# auplink /your/aufs/root flush
-# umount /your/aufs/root
-or
-# auplink /your/aufs/root flush
-# mount -o remount,mod:/your/writable/branch=ro /your/aufs/root
-or
-# auplink /your/aufs/root flush
-# mount -o remount,noplink /your/aufs/root
-or
-# auplink /your/aufs/root flush
-# mount -o remount,del:/your/aufs/branch /your/aufs/root
-or
-# auplink /your/aufs/root flush
-# mount -o remount,append:/your/aufs/branch /your/aufs/root
-.fi
-
-The plinks are kept both in memory and on disk. When they consumes too much
-resources on your system, you can use the `auplink' utility at anytime and
-throw away the unnecessary pseudo-links in safe.
-
-Additionally, the `auplink' utility is very useful for some security reasons.
-For example, when you have a directory whose permission flags
-are 0700, and a file who is 0644 under the 0700 directory. Usually,
-all files under the 0700 directory are private and no one else can see
-the file. But when the directory is 0711 and someone else knows the 0644
-filename, he can read the file.
-
-Basically, aufs pseudo-link feature creates a temporary link under the
-directory whose owner is root and the permission flags are 0700.
-But when the writable branch is NFS, aufs sets 0711 to the directory.
-When the 0644 file is pseudo-linked, the temporary link, of course the
-contents of the file is totally equivalent, will be created under the
-0711 directory. The filename will be generated by its inode number.
-While it is hard to know the generated filename, someone else may try peeping
-the temporary pseudo-linked file by his software tool which may try the name
-from one to MAX_INT or something.
-In this case, the 0644 file will be read unexpectedly.
-I am afraid that leaving the temporary pseudo-links can be a security hole.
-It makes sense to execute `auplink /your/aufs/root flush'
-periodically, when your writable branch is NFS.
-
-When your writable branch is not NFS, or all users are careful enough to set 0600
-to their private files, you do not have to worry about this issue.
-
-If you do not want this feature, use `noplink' mount option.
-
-.SS The behaviours of plink and noplink
-This sample shows that the `f_src_linked2' with `noplink' option cannot follow
-the link.
-
-.nf
-none on /dev/shm/u type aufs (rw,xino=/dev/shm/rw/.aufs.xino,br:/dev/shm/rw=rw:/dev/shm/ro=ro)
-$ ls -li ../r?/f_src_linked* ./f_src_linked* ./copied
-ls: ./copied: No such file or directory
-15 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked
-15 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked2
-22 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ./f_src_linked
-22 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ./f_src_linked2
-$ echo abc >> f_src_linked
-$ cp f_src_linked copied
-$ ls -li ../r?/f_src_linked* ./f_src_linked* ./copied
-15 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked
-15 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked2
-36 -rw-r--r--  2 jro jro 6 Dec 22 11:03 ../rw/f_src_linked
-53 -rw-r--r--  1 jro jro 6 Dec 22 11:03 ./copied
-22 -rw-r--r--  2 jro jro 6 Dec 22 11:03 ./f_src_linked
-22 -rw-r--r--  2 jro jro 6 Dec 22 11:03 ./f_src_linked2
-$ cmp copied f_src_linked2
-$
-
-none on /dev/shm/u type aufs (rw,xino=/dev/shm/rw/.aufs.xino,noplink,br:/dev/shm/rw=rw:/dev/shm/ro=ro)
-$ ls -li ../r?/f_src_linked* ./f_src_linked* ./copied
-ls: ./copied: No such file or directory
-17 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked
-17 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked2
-23 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ./f_src_linked
-23 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ./f_src_linked2
-$ echo abc >> f_src_linked
-$ cp f_src_linked copied
-$ ls -li ../r?/f_src_linked* ./f_src_linked* ./copied
-17 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked
-17 -rw-r--r--  2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked2
-36 -rw-r--r--  1 jro jro 6 Dec 22 11:03 ../rw/f_src_linked
-53 -rw-r--r--  1 jro jro 6 Dec 22 11:03 ./copied
-23 -rw-r--r--  2 jro jro 6 Dec 22 11:03 ./f_src_linked
-23 -rw-r--r--  2 jro jro 6 Dec 22 11:03 ./f_src_linked2
-$ cmp copied f_src_linked2
-cmp: EOF on f_src_linked2
-$
-.fi
-
-.\"
-.\" If you add/del a branch, or link/unlink the pseudo-linked
-.\" file on a branch
-.\" directly, aufs cannot keep the correct link count, but the status of
-.\" `pseudo-linked.'
-.\" Those files may or may not keep the file data after you unlink the
-.\" file on the branch directly, especially the case of your branch is
-.\" NFS.
-
-If you add a branch which has fileA or fileB, aufs does not follow the
-pseudo link. The file on the added branch has no relation to the same
-named file(s) on the lower branch(es).
-If you use noxino mount option, pseudo link will not work after the
-kernel shrinks the inode cache.
-
-This feature will not work for squashfs before version 3.2 since its
-inode is tricky.
-When the inode is hardlinked, squashfs inodes has the same inode
-number and correct link count, but the inode memory object is
-different. Squashfs inodes (before v3.2) are generated for each, even
-they are hardlinked.
-
-.\" ----------------------------------------------------------------------
-.SH User's Direct Branch Access (UDBA)
-UDBA means a modification to a branch filesystem manually or directly,
-e.g. bypassing aufs.
-While aufs is designed and implemented to be safe after UDBA,
-it can make yourself and your aufs confused. And some information like
-aufs inode will be incorrect.
-For example, if you rename a file on a branch directly, the file on
-aufs may
-or may not be accessible through both of old and new name.
-Because aufs caches various information about the files on
-branches. And the cache still remains after UDBA.
-
-Aufs has a mount option named `udba' which specifies the test level at
-access time whether UDBA was happened or not.
-.
-.TP
-.B udba=none
-Aufs trusts the dentry and the inode cache on the system, and never
-test about UDBA. With this option, aufs runs fastest, but it may show
-you incorrect data.
-Additionally, if you often modify a branch
-directly, aufs will not be able to trace the changes of inodes on the
-branch. It can be a cause of wrong behaviour, deadlock or anything else.
-
-It is recommended to use this option only when you are sure that
-nobody access a file on a branch.
-It might be difficult for you to achieve real `no UDBA' world when you
-cannot stop your users doing `find / \-ls' or something.
-If you really want to forbid all of your users to UDBA, here is a trick
-for it.
-With this trick, users cannot see the
-branches directly and aufs runs with no problem, except `auplink' utility.
-But if you are not familiar with aufs, this trick may make
-yourself confused.
-
-.nf
-# d=/tmp/.aufs.hide
-# mkdir $d
-# for i in $branches_you_want_to_hide
-> do
->	mount -n --bind $d $i
-> done
-.fi
-
-When you unmount the aufs, delete/modify the branch by remount, or you
-want to show the hidden branches again, unmount the bound
-/tmp/.aufs.hide.
-
-.nf
-# umount -n $branches_you_want_to_unbound
-.fi
-
-If you use FUSE filesystem as an aufs branch which supports hardlink,
-you should not set this option, since FUSE makes inode objects for
-each hardlinks (at least in linux\-2.6.23). When your FUSE filesystem
-maintains them at link/unlinking, it is equivalent
-to `direct branch access' for aufs.
-
-.
-.TP
-.B udba=reval
-Aufs tests only the existence of the file which existed. If
-the existed file was removed on the branch directly, aufs
-discard the cache about the file and
-re-lookup it. So the data will be updated.
-This test is at minimum level to keep the performance and ensure the
-existence of a file.
-This is default and aufs runs still fast.
-
-This rule leads to some unexpected situation, but I hope it is
-harmless. Those are totally depends upon cache. Here are just a few
-examples.
-.
-.RS
-.Bu
-If the file is cached as negative or
-not-existed, aufs does not test it. And the file is still handled as
-negative after a user created the file on a branch directly. If the
-file is not cached, aufs will lookup normally and find the file.
-.
-.Bu
-When the file is cached as positive or existed, and a user created the
-same named file directly on the upper branch. Aufs detects the cached
-inode of the file is still existing and will show you the old (cached)
-file which is on the lower branch.
-.
-.Bu
-When the file is cached as positive or existed, and a user renamed the
-file by rename(2) directly. Aufs detects the inode of the file is
-still existing. You may or may not see both of the old and new files.
-Todo: If aufs also tests the name, we can detect this case.
-.RE
-
-If your outer modification (UDBA) is rare and you can ignore the
-temporary and minor differences between virtual aufs world and real
-branch filesystem, then try this mount option.
-.
-.TP
-.B udba=inotify
-Aufs sets `inotify' to all the accessed directories on its branches
-and receives the event about the dir and its children. It consumes
-resources, cpu and memory. And I am afraid that the performance will be
-hurt, but it is most strict test level.
-There are some limitations of linux inotify, see also Inotify
-Limitation.
-So it is recommended to leave udba default option usually, and set it
-to inotify by remount when you need it.
-
-When a user accesses the file which was notified UDBA before, the cached data
-about the file will be discarded and aufs re-lookup it. So the data will
-be updated.
-When an error condition occurs between UDBA and aufs operation, aufs
-will return an error, including EIO.
-To use this option, you need to enable CONFIG_INOTIFY and
-CONFIG_AUFS_UDBA_INOTIFY.
-
-To rename/rmdir a directory on a branch directory may reveal the same named
-directory on the lower branch. Aufs tries re-lookuping the renamed
-directory and the revealed directory and assigning different inode
-number to them. But the inode number including their children can be a
-problem. The inode numbers will be changed silently, and
-aufs may produce a warning. If you rename a directory repeatedly and
-reveal/hide the lower directory, then aufs may confuse their inode
-numbers too. It depends upon the system cache.
-
-When you make a directory in aufs and mount other filesystem on it,
-the directory in aufs cannot be removed expectedly because it is a
-mount point. But the same named directory on the writable branch can
-be removed, if someone wants. It is just an empty directory, instead
-of a mount point.
-Aufs cannot stop such direct rmdir, but produces a warning about it.
-
-If the pseudo-linked file is hardlinked or unlinked on the branch
-directly, its inode link count in aufs may be incorrect. It is
-recommended to flush the pseudo-links by auplink script.
-
-.\" ----------------------------------------------------------------------
-.SH Linux Inotify Limitation
-Unfortunately, current inotify (linux\-2.6.18) has some limitations,
-and aufs must derive it.
-
-.SS IN_ATTRIB, updating atime
-When a file/dir on a branch is accessed directly, the inode atime (access
-time, cf. stat(2)) may or may not be updated. In some cases, inotify
-does not fire this event. So the aufs inode atime may remain old.
-
-.SS IN_ATTRIB, updating nlink
-When the link count of a file on a branch is incremented by link(2)
-directly,
-inotify fires IN_CREATE to the parent
-directory, but IN_ATTRIB to the file. So the aufs inode nlink may
-remain old.
-
-.SS IN_DELETE, removing file on NFS
-When a file on a NFS branch is deleted directly, inotify may or may
-not fire
-IN_DELETE event. It depends upon the status of dentry
-(DCACHE_NFSFS_RENAMED flag).
-In this case, the file on aufs seems still exists. Aufs and any user can see
-the file.
-
-.SS IN_IGNORED, deleted rename target
-When a file/dir on a branch is unlinked by rename(2) directly, inotify
-fires IN_IGNORED which means the inode is deleted. Actually, in some
-cases, the inode survives. For example, the rename target is linked or
-opened. In this case, inotify watch set by aufs is removed by VFS and
-inotify.
-And aufs cannot receive the events anymore. So aufs may show you
-incorrect data about the file/dir.
-
-.\" ----------------------------------------------------------------------
-.SH Virtual or Vertical Directory Block (VDIR)
-In order to provide the merged view of file listing, aufs builds
-internal directory block on memory. For readdir, aufs performs readdir()
-internally for each dir on branches, merges their entries with
-eliminating the whiteout\-ed ones, and sets it to the opened file (dir)
-object. So the file object has its entry list until it is closed. The
-entry list will be updated when the file position is zero (by
-rewinddir(3)) and becomes obsoleted.
-
-Some people may call it can be a security hole or invite DoS attack
-since the opened and once readdir\-ed dir (file object) holds its entry
-list and becomes a pressure for system memory. But I would say it is similar
-to files under /proc or /sys. The virtual files in them also holds a
-memory page (generally) while they are opened. When an idea to reduce
-memory for them is introduced, it will be applied to aufs too.
-
-The dynamically allocated memory block for the name of entries has a
-unit of \*[AUFS_RDBLK_DEF] bytes by default.
-During building dir blocks, aufs creates hash list (hashed and divided by
-\*[AUFS_RDHASH_DEF] by default) and judging whether
-the entry is whiteouted by its upper branch or already listed.
-
-These values are suitable for normal environments. But you may have
-millions of files or very long filenames under a single directory. For
-such cases, you may need to customize these values by specifying rdblk=
-and rdhash= aufs mount options.
-
-For instance, there are 97 files under my /bin, and the total name
-length is 597 bytes.
-
-.nf
-$ \\ls -1 /bin | wc
-     97      97     597
-.fi
-
-Strictly speaking, 97 end\-of\-line codes are
-included. But it is OK since aufs VDIR also stores the name length in 1
-byte. In this case, you do not need to customize the default values. 597 bytes
-filenames will be stored in 2 VDIR memory blocks (597 <
-\*[AUFS_RDBLK_DEF] x 2).
-And 97 filenames are distributed among \*[AUFS_RDHASH_DEF] lists, so one
-list will point 4 names in average. To judge the names is whiteouted or
-not, the number of comparison will be 4. 2 memory allocations
-and 4 comparison costs low (even if the directory is opened for a long
-time). So you do not need to customize.
-
-If your directory has millions of files, the you will need to specify
-rdblk= and rdhash=.
-
-.nf
-$ ls -U /mnt/rotating-rust | wc -l
-1382438
-.fi
-
-In this case, assuming the average length of filenames is 6, in order to
-get better time performance I would
-recommend to set $((128*1024)) or $((64*1024)) for rdblk, and
-$((8*1024)) or $((4*1024)) for rdhash.
-You can change these values of the active aufs mount by "mount -o
-remount".
-
-This customization is not for
-reducing the memory space, but for reducing time for the number of memory
-allocation and the name comparison. The larger value is faster, in
-general. Of course, you will need system memory. This is a generic
-"time\-vs\-space" problem.
-
-.\" ----------------------------------------------------------------------
-.SH Copy On Write, or aufs internal copyup and copydown
-Every stackable filesystem which implements copy\-on\-write supports the
-copyup feature. The feature is to copy a file/dir from the lower branch
-to the upper internally. When you have one readonly branch and one
-upper writable branch, and you append a string to a file which exists on
-the readonly branch, then aufs will copy the file from the readonly
-branch to the writable branch with its directory hierarchy. It means one
-write(2) involves several logical/internal mkdir(2), creat(2), read(2),
-write(2) and close(2) systemcalls
-before the actual expected write(2) is performed. Sometimes it may take
-a long time, particularly when the file is very large.
-If CONFIG_AUFS_DEBUG is enabled, aufs produces a message saying `copying
-a large file.'
-
-You may see the message when you change the xino file path or
-truncate the xino/xib files. Sometimes those files can be large and may
-take a long time to handle them.
-
-.\" ----------------------------------------------------------------------
-.SH Policies to Select One among Multiple Writable Branches
-Aufs has some policies to select one among multiple writable branches
-when you are going to write/modify something. There are two kinds of
-policies, one is for newly create something and the other is for
-internal copy-up.
-You can select them by specifying mount option `create=CREATE_POLICY'
-or `cpup=COPYUP_POLICY.'
-These policies have no meaning when you have only one writable
-branch. If there is some meaning, it must hurt the performance.
-
-.SS Exceptions for Policies
-In every cases below, even if the policy says that the branch where a
-new file should be created is /rw2, the file will be created on /rw1.
-.
-.Bu
-If there is a readonly branch with `wh' attribute above the
-policy-selected branch and the parent dir is marked as opaque,
-or the target (creating) file is whiteouted on the ro+wh branch, then
-the policy will be ignored and the target file will be created on the
-nearest upper writable branch than the ro+wh branch.
-.RS
-.nf
-/aufs = /rw1 + /ro+wh/diropq + /rw2
-/aufs = /rw1 + /ro+wh/wh.tgt + /rw2
-.fi
-.RE
-.
-.Bu
-If there is a writable branch above the policy-selected branch and the
-parent dir is marked as opaque or the target file is whiteouted on the
-branch, then the policy will be ignored and the target file will be
-created on the highest one among the upper writable branches who has
-diropq or whiteout. In case of whiteout, aufs removes it as usual.
-.RS
-.nf
-/aufs = /rw1/diropq + /rw2
-/aufs = /rw1/wh.tgt + /rw2
-.fi
-.RE
-.
-.Bu
-link(2) and rename(2) systemcalls are exceptions in every policy.
-They try selecting the branch where the source exists as possible since
-copyup a large file will take long time. If it can't be, ie. the
-branch where the source exists is readonly, then they will follow the
-copyup policy.
-.
-.Bu
-There is an exception for rename(2) when the target exists.
-If the rename target exists, aufs compares the index of the branches
-where the source and the target are existing and selects the higher
-one. If the selected branch is readonly, then aufs follows the copyup
-policy.
-
-.SS Policies for Creating
-.
-.TP
-.B create=tdp | top\-down\-parent
-Selects the highest writable branch where the parent dir exists. If
-the parent dir does not exist on a writable branch, then the internal
-copyup will happen. The policy for this copyup is always `bottom-up.'
-This is the default policy.
-.
-.TP
-.B create=rr | round\-robin
-Selects a writable branch in round robin. When you have two writable
-branches and creates 10 new files, 5 files will be created for each
-branch.
-mkdir(2) systemcall is an exception. When you create 10 new directories,
-all are created on the same branch.
-.
-.TP
-.B create=mfs[:second] | most\-free\-space[:second]
-Selects a writable branch which has most free space. In order to keep
-the performance, you can specify the duration (`second') which makes
-aufs hold the index of last selected writable branch until the
-specified seconds expires. The first time you create something in aufs
-after the specified seconds expired, aufs checks the amount of free
-space of all writable branches by internal statfs call
-and the held branch index will be updated.
-The default value is \*[AUFS_MFS_SECOND_DEF] seconds.
-.
-.TP
-.B create=mfsrr:low[:second]
-Selects a writable branch in most-free-space mode first, and then
-round-robin mode. If the selected branch has less free space than the
-specified value `low' in bytes, then aufs re-tries in round-robin mode.
-.\" `G', `M' and `K' (case insensitive) can be followed after `low.' Or
-Try an arithmetic expansion of shell which is defined by POSIX.
-For example, $((10 * 1024 * 1024)) for 10M.
-You can also specify the duration (`second') which is equivalent to
-the `mfs' mode.
-.
-.TP
-.B create=pmfs[:second]
-Selects a writable branch where the parent dir exists, such as tdp
-mode. When the parent dir exists on multiple writable branches, aufs
-selects the one which has most free space, such as mfs mode.
-
-.SS Policies for Copy-Up
-.
-.TP
-.B cpup=tdp | top\-down\-parent
-Equivalent to the same named policy for create.
-This is the default policy.
-.
-.TP
-.B cpup=bup | bottom\-up\-parent
-Selects the writable branch where the parent dir exists and the branch
-is nearest upper one from the copyup-source.
-.
-.TP
-.B cpup=bu | bottom\-up
-Selects the nearest upper writable branch from the copyup-source,
-regardless the existence of the parent dir.
-
-.\" ----------------------------------------------------------------------
-.SH Exporting Aufs via NFS
-Aufs is supporting NFS-exporting.
-Since aufs has no actual block device, you need to add NFS `fsid' option at
-exporting. Refer to the manual of NFS about the detail of this option.
-
-There are some limitations or requirements.
-.RS
-.Bu
-The branch filesystem must support NFS-exporting.
-.Bu
-NFSv2 is not supported. When you mount the exported aufs from your NFS
-client, you will need to some NFS options like v3 or nfsvers=3,
-especially if it is nfsroot.
-.Bu
-If the size of the NFS file handle on your branch filesystem is large,
-aufs will
-not be able to handle it. The maximum size of NFSv3 file
-handle for a filesystem is 64 bytes. Aufs uses 24 bytes for 32bit
-system, plus 12 bytes for 64bit system. The rest is a room for a file
-handle of a branch filesystem.
-.Bu
-The External Inode Number Bitmap, Translation Table and Generation Table
-(xino) is
-required since NFS file
-handle is based upon inode number. The mount option `xino' is enabled
-by default.
-The external inode generation table and its debugfs entry
-(<debugfs>/aufs/si_*/xigen) is created when CONFIG_AUFS_EXPORT is
-enabled even if you don't export aufs actually.
-The size of the external inode generation table grows only, never be
-truncated. You might need to pay attention to the free space of the
-filesystem where xino files are placed. By default, it is the first
-writable branch.
-.Bu
-The branch filesystems must be accessible, which means `not hidden.'
-It means you need to `mount \-\-move' when you use initramfs and
-switch_root(8), or chroot(8).
-.RE
-
-.\" ----------------------------------------------------------------------
-.SH Dentry and Inode Caches
-If you want to clear caches on your system, there are several tricks
-for that. If your system ram is low,
-try `find /large/dir \-ls > /dev/null'.
-It will read many inodes and dentries and cache them. Then old caches will be
-discarded.
-But when you have large ram or you do not have such large
-directory, it is not effective.
-
-If you want to discard cache within a certain filesystem,
-try `mount \-o remount /your/mntpnt'. Some filesystem may return an error of
-EINVAL or something, but VFS discards the unused dentry/inode caches on the
-specified filesystem.
-
-.\" ----------------------------------------------------------------------
-.SH Compatible/Incompatible with Unionfs Version 1.x Series
-If you compile aufs with \-DCONFIG_AUFS_COMPAT, dirs= option and =nfsro
-branch permission flag are available. They are interpreted as
-br: option and =ro flags respectively.
- `debug', `delete', `imap' options are ignored silently. When you
-compile aufs without \-DCONFIG_AUFS_COMPAT, these three options are
-also ignored, but a warning message is issued.
-
-Ignoring `delete' option, and to keep filesystem consistency, aufs tries
-writing something to only one branch in a single systemcall. It means
-aufs may copyup even if the copyup-src branch is specified as writable.
-For example, you have two writable branches and a large regular file
-on the lower writable branch. When you issue rename(2) to the file on aufs,
-aufs may copyup it to the upper writable branch.
-If this behaviour is not what you want, then you should rename(2) it
-on the lower branch directly.
-
-And there is a simple shell
-script `unionctl' under sample subdirectory, which is compatible with
-unionctl(8) in
-Unionfs Version 1.x series, except \-\-query action.
-This script executes mount(8) with `remount' option and uses
-add/del/mod aufs mount options.
-If you are familiar with Unionfs Version 1.x series and want to use unionctl(8), you can
-try this script instead of using mount \-o remount,... directly.
-Aufs does not support ioctl(2) interface.
-This script is highly depending upon mount(8) in
-util\-linux\-2.12p package, and you need to mount /proc to use this script.
-If your mount(8) version differs, you can try modifying this
-script. It is very easy.
-The unionctl script is just for a sample usage of aufs remount
-interface.
-
-Aufs uses the external inode number bitmap and translation table by
-default.
-
-The default branch permission for the first branch is `rw', and the
-rest is `ro.'
-
-The whiteout is for hiding files on lower branches. Also it is applied
-to stop readdir going lower branches.
-The latter case is called `opaque directory.' Any
-whiteout is an empty file, it means whiteout is just an mark.
-In the case of hiding lower files, the name of whiteout is
-`\*[AUFS_WH_PFX]<filename>.'
-And in the case of stopping readdir, the name is
-`\*[AUFS_WH_PFX]\*[AUFS_WH_PFX].opq' or
-`\*[AUFS_WH_PFX]__dir_opaque.' The name depends upon your compile
-configuration
-CONFIG_AUFS_COMPAT.
-.\" All of newly created or renamed directory will be opaque.
-All whiteouts are hardlinked,
-including `<writable branch top dir>/\*[AUFS_WH_BASE].'
-
-The hardlink on an ordinary (disk based) filesystem does not
-consume inode resource newly. But in linux tmpfs, the number of free
-inodes will be decremented by link(2). It is recommended to specify
-nr_inodes option to your tmpfs if you meet ENOSPC. Use this option
-after checking by `df \-i.'
-
-When you rmdir or rename-to the dir who has a number of whiteouts,
-aufs rename the dir to the temporary whiteouted-name like
-`\*[AUFS_WH_PFX]<dir>.<random hex>.' Then remove it after actual operation.
-cf. mount option `dirwh.'
-
-.\" ----------------------------------------------------------------------
-.SH Incompatible with an Ordinary Filesystem
-stat(2) returns the inode info from the first existence inode among
-the branches, except the directory link count.
-Aufs computes the directory link count larger than the exact value usually, in
-order to keep UNIX filesystem semantics, or in order to shut find(1) mouth up.
-The size of a directory may be wrong too, but it has to do no harm.
-The timestamp of a directory will not be updated when a file is
-created or removed under it, and it was done on a lower branch.
-
-The test for permission bits has two cases. One is for a directory,
-and the other is for a non-directory. In the case of a directory, aufs
-checks the permission bits of all existing directories. It means you
-need the correct privilege for the directories including the lower
-branches.
-The test for a non-directory is more simple. It checks only the
-topmost inode.
-
-statfs(2) returns the information of the first branch info except
-namelen when `nosum' is specified (the default). The namelen is
-decreased by the whiteout prefix length. And the block size may differ
-from st_blksize which is obtained by stat(2).
-
-Remember, seekdir(3) and telldir(3) are not defined in POSIX. They may
-not work as you expect. Try rewinddir(3) or re-open the dir.
-
-The whiteout prefix (\*[AUFS_WH_PFX]) is reserved on all branches. Users should
-not handle the filename begins with this prefix.
-In order to future whiteout, the maximum filename length is limited by
-the longest value \- \*[AUFS_WH_PFX_LEN]. It may be a violation of POSIX.
-
-If you dislike the difference between the aufs entries in /etc/mtab
-and /proc/mounts, and if you are using mount(8) in util\-linux package,
-then try ./mount.aufs utility. Copy the script to /sbin/mount.aufs.
-This simple utility tries updating
-/etc/mtab. If you do not care about /etc/mtab, you can ignore this
-utility.
-Remember this utility is highly depending upon mount(8) in
-util\-linux\-2.12p package, and you need to mount /proc.
-
-Since aufs uses its own inode and dentry, your system may cache huge
-number of inodes and dentries. It can be as twice as all of the files
-in your union.
-It means that unmounting or remounting readonly at shutdown time may
-take a long time, since mount(2) in VFS tries freeing all of the cache
-on the target filesystem.
-
-When you open a directory, aufs will open several directories
-internally.
-It means you may reach the limit of the number of file descriptor.
-And when the lower directory cannot be opened, aufs will close all the
-opened upper directories and return an error.
-
-The sub-mount under the branch
-of local filesystem
-is ignored.
-For example, if you have mount another filesystem on
-/branch/another/mntpnt, the files under `mntpnt' will be ignored by aufs.
-It is recommended to mount the sub-mount under the mounted aufs.
-For example,
-
-.nf
-# sudo mount /dev/sdaXX /ro_branch
-# d=another/mntpnt
-# sudo mount /dev/sdbXX /ro_branch/$d
-# mkdir -p /rw_branch/$d
-# sudo mount -t aufs -o br:/rw_branch:/ro_branch none /aufs
-# sudo mount -t aufs -o br:/rw_branch/${d}:/ro_branch/${d} none /aufs/another/$d
-.fi
-
-There are several characters which are not allowed to use in a branch
-directory path and xino filename. See detail in Branch Syntax and Mount
-Option.
-
-The file-lock which means fcntl(2) with F_SETLK, F_SETLKW or F_GETLK, flock(2)
-and lockf(3), is applied to virtual aufs file only, not to the file on a
-branch. It means you can break the lock by accessing a branch directly.
-TODO: check `security' to hook locks, as inotify does.
-
-The I/O to the named pipe or local socket are not handled by aufs, even
-if it exists in aufs. After the reader and the writer established their
-connection if the pipe/socket are copied-up, they keep using the old one
-instead of the copied-up one.
-
-The fsync(2) and fdatasync(2) systemcalls return 0 which means success, even
-if the given file descriptor is not opened for writing.
-I am afraid this behaviour may violate some standards. Checking the
-behaviour of fsync(2) on ext2, aufs decided to return success.
-
-If you want to use disk-quota, you should set it up to your writable
-branch since aufs does not have its own block device.
-
-When your aufs is the root directory of your system, and your system
-tells you some of the filesystem were not unmounted cleanly, try these
-procedure when you shutdown your system.
-.nf
-# mount -no remount,ro /
-# for i in $writable_branches
-# do mount -no remount,ro $i
-# done
-.fi
-If your xino file is on a hard drive, you also need to specify
-`noxino' option or `xino=/your/tmpfs/xino' at remounting root
-directory.
-
-To rename(2) directory may return EXDEV even if both of src and tgt
-are on the same aufs. When the rename-src dir exists on multiple
-branches and the lower dir has child(ren), aufs has to copyup all his
-children. It can be recursive copyup. Current aufs does not support
-such huge copyup operation at one time in kernel space, instead
-produces a warning and returns EXDEV.
-Generally, mv(1) detects this error and tries mkdir(2) and
-rename(2) or copy/unlink recursively. So the result is harmless.
-If your application which issues rename(2) for a directory does not
-support EXDEV, it will not work on aufs.
-Also this specification is applied to the case when the src directory
-exists on the lower readonly branch and it has child(ren).
-
-If a sudden accident such like a power failure happens during aufs is
-performing, and regular fsck for branch filesystems is completed after
-the disaster, you need to extra fsck for aufs writable branches. It is
-necessary to check whether the whiteout remains incorrectly or not,
-eg. the real filename and the whiteout for it under the same parent
-directory. If such whiteout remains, aufs cannot handle the file
-correctly.
-To check the consistency from the aufs' point of view, you can use a
-simple shell script called /sbin/auchk. Its purpose is a fsck tool for
-aufs, and it checks the illegal whiteout, the remained
-pseudo-links and the remained aufs-temp files. If they are found, the
-utility reports you and asks whether to delete or not.
-It is recommended to execute /sbin/auchk for every writable branch
-filesystem before mounting aufs if the system experienced crash.
-
-
-.\" ----------------------------------------------------------------------
-.SH EXAMPLES
-The mount options are interpreted from left to right at remount-time.
-These examples
-shows how the options are handled. (assuming /sbin/mount.aufs was
-installed)
-
-.nf
-# mount -v -t aufs br:/day0:/base none /u
-none on /u type aufs (rw,xino=/day0/.aufs.xino,br:/day0=rw:/base=ro)
-# mount -v -o remount,\\
-	prepend:/day1,\\
-	xino=/day1/xino,\\
-	mod:/day0=ro,\\
-	del:/day0 \\
-	/u
-none on /u type aufs (rw,xino=/day1/xino,br:/day1=rw:/base=ro)
-.fi
-
-.nf
-# mount -t aufs br:/rw none /u
-# mount -o remount,append:/ro /u
-different uid/gid/permission, /ro
-# mount -o remount,del:/ro /u
-# mount -o remount,nowarn_perm,append:/ro /u
-#
-(there is no warning)
-.fi
-
-.\" If you want to expand your filesystem size, aufs may help you by
-.\" adding an writable branch. Since aufs supports multiple writable
-.\" branches, the old writable branch can be being writable, if you want.
-.\" In this example, any modifications to the files under /ro branch will
-.\" be copied-up to /new, but modifications to the files under /rw branch
-.\" will not.
-.\" And the next example shows the modifications to the files under /rw branch
-.\" will be copied-up to /new/a.
-.\"
-.\" Todo: test multiple writable branches policy. cpup=nearest, cpup=exist_parent.
-.\"
-.\" .nf
-.\" # mount -v -t aufs br:/rw:/ro none /u
-.\" none on /u type aufs (rw,xino=/rw/.aufs.xino,br:/rw=rw:/ro=ro)
-.\" # mkfs /new
-.\" # mount -v -o remount,add:1:/new=rw /u
-.\" none on /u type aufs (rw,xino=/rw/.aufs.xino,br:/rw=rw:/new=rw:/ro=ro)
-.\" .fi
-.\"
-.\" .nf
-.\" # mount -v -t aufs br:/rw:/ro none /u
-.\" none on /u type aufs (rw,xino=/rw/.aufs.xino,br:/rw=rw:/ro=ro)
-.\" # mkfs /new
-.\" # mkdir /new/a new/b
-.\" # mount -v -o remount,add:1:/new/b=rw,prepend:/new/a,mod:/rw=ro /u
-.\" none on /u type aufs (rw,xino=/rw/.aufs.xino,br:/new/a=rw:/rw=ro:/new/b=rw:/ro=ro)
-.\" .fi
-
-When you use aufs as root filesystem, it is recommended to consider to
-exclude some directories. For example, /tmp and /var/log are not need
-to stack in many cases. They do not usually need to copyup or to whiteout.
-Also the swapfile on aufs (a regular file, not a block device) is not
-supported.
-In order to exclude the specific dir from aufs, try bind mounting.
-
-And there is a good sample which is for network booted diskless machines. See
-sample/ in detail.
-
-.\" ----------------------------------------------------------------------
-.SH DIAGNOSTICS
-When you add a branch to your union, aufs may warn you about the
-privilege or security of the branch, which is the permission bits,
-owner and group of the top directory of the branch.
-For example, when your upper writable branch has a world writable top
-directory,
-a malicious user can create any files on the writable branch directly,
-like copyup and modify manually. I am afraid it can be a security
-issue.
-
-When you mount or remount your union without \-o ro common mount option
-and without writable branch, aufs will warn you that the first branch
-should be writable.
-
-.\" It is discouraged to set both of `udba' and `noxino' mount options. In
-.\" this case the inode number under aufs will always be changed and may
-.\" reach the end of inode number which is a maximum of unsigned long. If
-.\" the inode number reaches the end, aufs will return EIO repeatedly.
-
-When you set udba other than inotify and change something on your
-branch filesystem directly, later aufs may detect some mismatches to
-its cache. If it is a critical mismatch, aufs returns EIO.
-
-When an error occurs in aufs, aufs prints the kernel message with
-`errno.' The priority of the message (log level) is ERR or WARNING which
-depends upon the message itself.
-You can convert the `errno' into the error message by perror(3),
-strerror(3) or something.
-For example, the `errno' in the message `I/O Error, write failed (\-28)'
-is 28 which means ENOSPC or `No space left on device.'
-
-When CONFIG_AUFS_BR_RAMFS is enabled, you can specify ramfs as an aufs
-branch. Since ramfs is simple, it does not set the maximum link count
-originally. In aufs, it is very dangerous, particularly for
-whiteouts. Finally aufs sets the maximum link count for ramfs. The
-value is 32000 which is borrowed from ext2.
-
-
-.\" .SH Current Limitation
-.
-.\" ----------------------------------------------------------------------
-.\" SYNOPSIS
-.\" briefly describes the command or function's interface.  For  commands,  this
-.\" shows the syntax of the command and its arguments (including options); bold-
-.\" face is used for as-is text and italics are  used  to  indicate  replaceable
-.\" arguments. Brackets ([]) surround optional arguments, vertical bars (|) sep-
-.\" arate choices, and ellipses (...) can be repeated.  For functions, it  shows
-.\" any required data declarations or #include directives, followed by the func-
-.\" tion declaration.
-.
-.\" DESCRIPTION
-.\" gives an explanation of what the command, function, or format does.  Discuss
-.\" how  it  interacts  with  files  and standard input, and what it produces on
-.\" standard output  or  standard  error.   Omit  internals  and  implementation
-.\" details  unless  they're critical for understanding the interface.  Describe
-.\" the usual case; for information on options  use  the  OPTIONS  section.   If
-.\" there  is some kind of input grammar or complex set of subcommands, consider
-.\" describing them in a separate USAGE section (and just place an  overview  in
-.\" the DESCRIPTION section).
-.
-.\" RETURN VALUE
-.\" gives a list of the values the library routine will return to the caller and
-.\" the conditions that cause these values to be returned.
-.
-.\" EXIT STATUS
-.\" lists the possible exit status values or a program and the  conditions  that
-.\" cause these values to be returned.
-.
-.\" USAGE
-.\" describes the grammar of any sublanguage this implements.
-.
-.\" FILES
-.\" lists  the  files the program or function uses, such as configuration files,
-.\" startup files, and files the program directly operates on.   Give  the  full
-.\" pathname  of  these  files,  and  use the installation process to modify the
-.\" directory part to match user preferences.  For many  programs,  the  default
-.\" installation  location is in /usr/local, so your base manual page should use
-.\" /usr/local as the base.
-.
-.\" ENVIRONMENT
-.\" lists all environment variables that affect your program or function and how
-.\" they affect it.
-.
-.\" SECURITY
-.\" discusses security issues and implications.  Warn  about  configurations  or
-.\" environments  that should be avoided, commands that may have security impli-
-.\" cations, and so on, especially if they aren't obvious.  Discussing  security
-.\" in  a  separate section isn't necessary; if it's easier to understand, place
-.\" security information in the other sections (such as the DESCRIPTION or USAGE
-.\" section).  However, please include security information somewhere!
-.
-.\" CONFORMING TO
-.\" describes any standards or conventions this implements.
-.
-.\" NOTES
-.\" provides miscellaneous notes.
-.
-.\" BUGS
-.\" lists  limitations,  known defects or inconveniences, and other questionable
-.\" activities.
-
-.SH COPYRIGHT
-Copyright \(co 2005\-2009 Junjiro R. Okajima
-
-.SH AUTHOR
-Junjiro R. Okajima
-
-.\" SEE ALSO
-.\" lists  related  man  pages in alphabetical order, possibly followed by other
-.\" related pages or documents.  Conventionally this is the last section.

+ 0 - 83
package/aufs2-util/src/aufs.shlib

@@ -1,83 +0,0 @@
-#
-# Copyright (C) 2005-2009 Junjiro Okajima
-#
-# This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-# library functions for aufs shell scripts
-
-# path in canonical representation
-SetDir() # var dir
-{
-	cd "$2"
-	eval "$1=\"$PWD\""
-	cd "$OLDPWD"
-}
-
-# escape the unprintable characters, mainly for grep-ping /proc/mounts
-Esc() # [-e]
-{
-	sed -r -e '
-	s/\\/\\134/g
-	s/$/\\012/
-	' |
-	tr -d '\n' |
-	sed -r -e '
-	s/ /\\040/g
-	s/\t/\\011/g
-	s/\r/\\015/g
-	s/\\012$//
-	' |
-	{ test $# -eq 1 &&
-	test "$1" = "-e" &&
-	sed -r -e 's/\\/\\\\/g' ||
-	cat; }
-	echo
-}
-
-# find a mount-entry by its mount-point
-FindMntEnt() # mntpnt
-{
-	proc_mounts=/proc/self/mounts
-	test ! -e $proc_mounts && proc_mounts=/proc/$$/mounts
-	test ! -e $proc_mounts && proc_mounts=/proc/mounts
-	fgrep \ $(echo "$1" | Esc)\ aufs\  $proc_mounts |
-	tail -n 1
-}
-
-# current mount options
-MntOpts() # mntpnt
-{
-	FindMntEnt "$1" |
-	cut -f4 -d' '
-}
-
-########################################
-
-AuDebug() # 1 | 0 [sec]
-{
-	test $1 -eq 0 && set +x
-	aufs_debug=/sys/module/aufs/parameters/debug
-	if [ -f $aufs_debug ]
-	then
-		echo $1 | sudo dd of=$aufs_debug 2> /dev/null
-		test $# -eq 2 && sleep $2
-	fi
-	test $1 -eq 1 && set -x
-	true
-}
-
-# Local variables: ;
-# mode: text;
-# End: ;

+ 0 - 64
package/aufs2-util/src/auplink.c

@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "au_util.h"
-
-static void usage(char *me)
-{
-	fprintf(stderr,
-		"usage: %s aufs_mount_point list|cpup|flush\n"
-		"'list' shows the pseudo-linked inode numbers and filenames.\n"
-		"'cpup' copies-up all pseudo-link to the writeble branch.\n"
-		"'flush' calls 'cpup', and then 'mount -o remount,clean_plink=inum'\n"
-		"and remove the whiteouted plink.\n", me);
-	exit(EINVAL);
-}
-
-int main(int argc, char *argv[])
-{
-	int err, cmd;
-	char *cwd;
-
-	if (argc != 3)
-		usage(argv[0]);
-
-	if (!strcmp(argv[2], "flush"))
-		cmd = AuPlink_FLUSH;
-	else if (!strcmp(argv[2], "list"))
-		cmd = AuPlink_LIST;
-	else if (!strcmp(argv[2], "cpup"))
-		cmd = AuPlink_CPUP;
-	else {
-		errno = EINVAL;
-		AuFin("%s", argv[2]);
-		cmd = 0; /* never reach here */
-	}
-
-	err = chdir(argv[1]);
-	if (err)
-		AuFin("chdir");
-	cwd = getcwd(NULL, 0); /* glibc */
-	if (!cwd)
-		AuFin("getcwd");
-	return au_plink(cwd, cmd, 1, 0);
-}

+ 0 - 172
package/aufs2-util/src/br.c

@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#define _GNU_SOURCE /* strndup */
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <mntent.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <linux/aufs_type.h>
-#include "au_util.h"
-
-static int by_opts(char ***br, int *nbr, char *bropt)
-{
-	char *p, **a;
-	int l;
-
-	/* bropts is placed at the end of mnt_opts */
-	errno = EINVAL;
-	//puts(bropt);
-	if (strchr(bropt, ','))
-		AuFin("%s", bropt);
-
-	l = strlen(bropt);
-	p = malloc(l + 2);
-	if (!p)
-		AuFin("malloc");
-	memcpy(p, bropt, l + 1);
-	bropt = p;
-	bropt[l + 1] = 0; /* end marker */
-
-	*nbr = 1;
-	while (1) {
-		p = strchr(p + 1, ':');
-		if (!p)
-			break;
-		*p = 0;
-		(*nbr)++;
-	}
-
-	a = malloc(sizeof(a) * (*nbr + 1));
-	if (!a)
-		AuFin("malloc");
-
-	*br = a;
-	*a++ = bropt;
-	p = bropt;
-	while (*p) {
-		p += strlen(p) + 1;
-		*a++ = p;
-	}
-	*--a = NULL;
-	/* don't free bropt */
-
-	return 0;
-}
-
-#ifdef DEBUG
-#define SiPathPrefix	"/tmp/aufs/si_"
-#define BufSiz		4
-#else
-#define SiPathPrefix	"/sys/fs/aufs/si_"
-#define BufSiz		BUFSIZ
-#endif
-
-static int by_sysfs(char ***br, int *nbr, char *siopt)
-{
-	int err, i, l, sz;
-	char buf[BufSiz], path[] = SiPathPrefix "1234567890123456/br32767";
-	char *p, *end, **a, *q;
-	FILE *fp;
-
-	errno = EINVAL;
-	end = strchr(siopt, ',');
-	if (end)
-		i = end - siopt;
-	else
-		i = strlen(siopt);
-
-	strncpy(path + sizeof(SiPathPrefix) - 1, siopt, i);
-	p = path + sizeof(SiPathPrefix) - 1 + i;
-	strcpy(p, "/br");
-	p += 3; /* "/br" */
-	*nbr = 0;
-	err = 0;
-	while (!err) {
-		sprintf(p, "%d", (*nbr)++);
-		err = access(path, F_OK);
-	}
-
-	a = malloc(sizeof(*br) * *nbr);
-	if (!a)
-		AuFin("malloc");
-
-	(*nbr)--;
-	*br = a;
-	for (i = 0; i < *nbr; i++) {
-		sprintf(p, "%d", i);
-		fp = fopen(path, "r");
-		if (!fp)
-			AuFin("%s", path);
-		if (fgets(buf, sizeof(buf), fp) != buf)
-			AuFin("%s", path);
-		l = strlen(buf);
-		if (l < 1)
-			AuFin("internal error, %d", l);
-
-		q = strndup(buf, l - 1);
-		if (buf[l - 1] != '\n') {
-			/* a branch path with crazy length */
-			/* stat(2) for sysfs is meaningless */
-			sz = sizeof(buf);
-			do {
-				free(q);
-				sz <<= 1;
-				q = malloc(sz);
-				if (!q)
-					AuFin("malloc");
-				rewind(fp);
-				if (fgets(q, sz, fp) != q)
-					AuFin("%s", path);
-				l = strlen(q);
-			} while (q[l - 1] != '\n');
-			q[l - 1] = 0;
-		}
-
-		*a++ = q;
-		/* don't free q */
-		fclose(fp); /* ignore */
-	}
-	*a = NULL;
-
-	return 0;
-}
-
-#define BrOpt	",br:"
-#define SiOpt	"si"
-int au_br(char ***br, int *nbr, struct mntent *ent)
-{
-	char *p;
-
-	*nbr = 0;
-	p = strstr(ent->mnt_opts, BrOpt);
-	if (p)
-		return by_opts(br, nbr, p + sizeof(BrOpt) - 1);
-	p = hasmntopt(ent, SiOpt);
-	if (p)
-		return by_sysfs(br, nbr, p + sizeof(SiOpt));
-
-	/* broken opts */
-	AuFin("internal error, %s", ent->mnt_opts);
-	return -1; /* never reach here */
-}

+ 0 - 42
package/aufs2-util/src/c2sh.c

@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include <stdio.h>
-#include <linux/aufs_type.h>
-
-#define AUFS_WH_PFX2	AUFS_WH_PFX AUFS_WH_PFX
-
-int
-main(int argc, char *argv[])
-{
-#define p(m, v, fmt)	printf("%s=" fmt "\n", m, v)
-#define pstr(m)		p(#m, m, "%s")
-#define pint(m)		p(#m, m, "%d")
-	pstr(AUFS_VERSION);
-	pint(AUFS_SUPER_MAGIC);
-	printf("AUFS_SUPER_MAGIC_HEX=0x%x\n", AUFS_SUPER_MAGIC);
-	pstr(AUFS_WH_PFX);
-	pstr(AUFS_WH_PFX2);
-	pstr(AUFS_WKQ_NAME);
-	pstr(AUFS_WH_DIROPQ);
-	pstr(AUFS_WH_BASE);
-	pstr(AUFS_WH_PLINKDIR);
-	pstr(AUFS_WH_ORPHDIR);
-	//pint(AUFS_BRANCH_MAX);
-	return 0;
-}

+ 0 - 44
package/aufs2-util/src/c2tmac.c

@@ -1,44 +0,0 @@
-
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include <stdio.h>
-#include <linux/aufs_type.h>
-
-int
-main(int argc, char *argv[])
-{
-#define p(m, v, fmt)	printf(".ds %s " fmt "\n", m, v)
-#define pstr(m)		p(#m, m, "%s")
-#define pint(m)		p(#m, m, "%d")
-	pstr(AUFS_VERSION);
-	pstr(AUFS_XINO_FNAME);
-	pstr(AUFS_XINO_DEFPATH);
-	pint(AUFS_DIRWH_DEF);
-	pstr(AUFS_WH_PFX);
-	pint(AUFS_WH_PFX_LEN);
-	pstr(AUFS_WKQ_NAME);
-	pint(AUFS_NWKQ_DEF);
-	pstr(AUFS_WH_DIROPQ);
-	pstr(AUFS_WH_BASE);
-	pstr(AUFS_WH_PLINKDIR);
-	pint(AUFS_MFS_SECOND_DEF);
-	pint(AUFS_RDBLK_DEF);
-	pint(AUFS_RDHASH_DEF);
-	return 0;
-}

+ 0 - 34
package/aufs2-util/src/compat.h

@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __compat_h__
-#define __compat_h__
-
-#ifndef AT_SYMLINK_NOFOLLOW
-#define AT_SYMLINK_NOFOLLOW	0x100   /* Do not follow symbolic links.  */
-
-#define __KERNEL__
-#include <unistd.h>
-#include <asm/unistd.h>
-#define fstatat fstatat64
-int fstatat(int dirfd, const char *path, struct stat *buf, int flags);
-_syscall4(int, fstatat64, int, _dirfd, const char *, path, struct stat *, buf, int, flags);
-#undef __KERNEL__
-#endif
-
-#endif /* __compat_h__ */

+ 0 - 255
package/aufs2-util/src/mount.aufs.c

@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-/*
- * The main purpose of this script is updating /etc/mtab and calling auplilnk.
- * This behaviour is highly depending on mount(8) in util-linux package.
- */
-
-#define _XOPEN_SOURCE	500	/* getsubopt */
-#define _BSD_SOURCE		/* dirfd */
-
-#include <sys/types.h>
-#include <dirent.h>
-#include <mntent.h>
-#include <regex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <wait.h>
-
-#include <linux/aufs_type.h>
-#include "au_util.h"
-
-enum { Remount, Bind, Fake, Update, Verbose, AuFlush, LastOpt };
-static void test_opts(char opts[], unsigned char flags[])
-{
-	int c;
-	char *p, *o, *val, *pat[] = {
-		[Remount]	= "remount",
-		[Bind]		= "bind",
-		NULL
-	};
-
-	o = strdup(opts);
-	if (!o)
-		AuFin("stdup");
-
-	p = o;
-	while (*p) {
-		c = getsubopt(&p, pat, &val);
-		switch (c) {
-		case Remount:
-			flags[Remount] = 1;
-			break;
-		case Bind:
-			flags[Bind] = 1;
-			break;
-		}
-	}
-	free(o);
-}
-
-static int test_flush(char opts[])
-{
-	int err, i;
-	regex_t preg;
-	char *p, *o;
-	const char *pat = "^((add|ins|append|prepend|del)[:=]"
-		"|(mod|imod)[:=][^,]*=ro"
-		"|(noplink|ro)$)";
-
-
-	o = strdup(opts);
-	if (!o)
-		AuFin("stdup");
-
-	p = o;
-	i = 1;
-	while ((p = strchr(p, ','))) {
-		i++;
-		*p++ = 0;
-	}
-
-	/* todo: try getsubopt(3)? */
-	err = regcomp(&preg, pat, REG_EXTENDED | REG_NOSUB);
-	if (err)
-		AuFin("regcomp");
-
-	p = o;
-	while (i--) {
-		if (!regexec(&preg, p, 0, NULL, 0)) {
-			err = 1;
-			break;
-		} else
-			p += strlen(p) + 1;
-	}
-	regfree(&preg);
-	free(o);
-
-	return err;
-}
-
-static void do_mount(char *dev, char *mntpnt, int argc, char *argv[],
-		     unsigned char flags[])
-{
-	int i;
-	const int ac = argc + 6;
-	char *av[ac], **a;
-
-	/* todo: eliminate the duplicated options */
-	a = av;
-	*a++ = "mount";
-	*a++ = "-i";
-	if (flags[Fake])
-		*a++ = "-f";
-	if (!flags[Bind] || !flags[Update])
-		*a++ = "-n";
-	if (flags[Bind] && flags[Verbose])
-		*a++ = "-v";
-	*a++ = "-t";
-	*a++ = AUFS_NAME;
-
-	for (i = 3; i < argc; i++)
-		if (strcmp(argv[i], "-v") && strcmp(argv[i], "-n"))
-			*a++ = argv[i];
-	*a++ = dev;
-	*a++ = mntpnt;
-	*a++ = NULL;
-
-#ifdef DEBUG
-	for (i = 0; av[i] && i < ac; i++)
-		puts(av[i]);
-	exit(0);
-#endif
-	execvp("mount", av);
-	AuFin("mount");
-}
-
-/* ---------------------------------------------------------------------- */
-
-int main(int argc, char *argv[])
-{
-	int err, c, status;
-	pid_t pid;
-	unsigned char flags[LastOpt];
-	struct mntent ent;
-	char *dev, *mntpnt, *opts, *cwd;
-	DIR *cur;
-
-	if (argc < 3) {
-		errno = EINVAL;
-		AuFin(NULL);
-	}
-
-	memset(flags, 0, sizeof(flags));
-	flags[Update] = 1;
-	opts = NULL;
-
-	/* mount(8) always passes the arguments in this order */
-	dev = argv[1];
-	mntpnt = argv[2];
-	while ((c = getopt(argc - 2, argv + 2, "fnvo:")) != -1) {
-		switch (c) {
-		case 'f':
-			flags[Fake] = 1;
-			break;
-		case 'n':
-			flags[Update] = 0;
-			break;
-		case 'v':
-			flags[Verbose] = 1;
-			break;
-		case 'o':
-			opts = optarg;
-			break;
-		case '?':
-		case ':':
-			errno = EINVAL;
-			AuFin("internal error");
-		}
-	}
-
-	cur = opendir(".");
-	if (!cur)
-		AuFin(".");
-	err = chdir(mntpnt);
-	if (err)
-		AuFin("%s", mntpnt);
-	cwd = getcwd(NULL, 0); /* glibc */
-	if (!cwd)
-		AuFin("getcwd");
-	err = fchdir(dirfd(cur));
-	if (err)
-		AuFin("fchdir");
-	closedir(cur); /* ignore */
-
-	if (opts)
-		test_opts(opts, flags);
-
-	if (!flags[Bind] && flags[Update]) {
-		err = access(MTab, R_OK | W_OK);
-		if (err)
-			AuFin(MTab);
-	}
-
-	if (flags[Remount]) {
-		errno = EINVAL;
-		if (flags[Bind])
-			AuFin("both of remount and bind are specified");
-		flags[AuFlush] = test_flush(opts);
-		if (flags[AuFlush] /* && !flags[Fake] */) {
-			err = au_plink(cwd, AuPlink_FLUSH, 1, 1);
-			if (err)
-				AuFin(NULL);
-		}
-	}
-
-	pid = fork();
-	if (!pid) {
-		/* actual mount operation */
-		do_mount(dev, mntpnt, argc, argv, flags);
-		return 0;
-	} else if (pid < 0)
-		AuFin("fork");
-
-	err = waitpid(pid, &status, 0);
-	if (err < 0)
-		AuFin("child process");
-
-	err = !WIFEXITED(status);
-	if (!err)
-		err = WEXITSTATUS(status);
-
-	if (!err && !flags[Bind]) {
-		if (flags[Update])
-			err = au_update_mtab(cwd, flags[Remount],
-					     flags[Verbose]);
-		else if (flags[Verbose]) {
-			/* withoug blocking plink */
-			err = au_proc_getmntent(cwd, &ent);
-			if (!err)
-				au_print_ent(&ent);
-			else
-				AuFin("internal error");
-		}
-	}
-
-	return err;
-}

+ 0 - 216
package/aufs2-util/src/mtab.c

@@ -1,216 +0,0 @@
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-/* cf. fstab.c or the locking for /etc/mtab in util-linux */
-/*
- * we need to extract a part of util-linux and create a simple and generic
- * library for locking /etc/mtab.
- */
-
-/* #include <linux/proc_fs.h> */
-#define PROC_SUPER_MAGIC 0x9fa0
-#include <sys/stat.h>
-#include <sys/statfs.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <fcntl.h>
-#include <mntent.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "au_util.h"
-
-void au_print_ent(struct mntent *ent)
-{
-	printf("%s on %s type %s (%s)\n",
-	       ent->mnt_fsname, ent->mnt_dir, ent->mnt_type, ent->mnt_opts);
-}
-
-/* ---------------------------------------------------------------------- */
-
-static void lock_mtab(char *pid_file)
-{
-	int err, i;
-
-	for (i = 0; i < 5; i++) {
-		err = link(pid_file, MTab "~");
-		if (!err)
-			break;
-		sleep(1);
-	}
-	if (err)
-		AuFin(MTab "~");
-}
-
-static void unlock_mtab(void)
-{
-	int err;
-
-	err = rename(MTab "~", MTab);
-	if (err)
-		AuFin(MTab);
-}
-
-static void append_mtab(FILE *fp, FILE *ofp, struct mntent *ent)
-{
-	int err;
-	struct mntent *p;
-
-	while ((p = getmntent(ofp))) {
-		err = addmntent(fp, p);
-		if (err)
-			AuFin("addmntent");
-	}
-
-	err = addmntent(fp, ent);
-	if (err)
-		AuFin("addmntent");
-}
-
-/* todo: there are some cases which options are not changed */
-static void update_mtab(FILE *fp, char *mntpnt, int do_remount, int do_verbose)
-{
-	int err;
-	long pos;
-	FILE *ofp;
-	struct mntent ent, *p;
-
-	/* prohibit updating mount options for this mntpnt */
-	au_plink_maint(mntpnt);
-	err = au_proc_getmntent(mntpnt, &ent);
-	if (err)
-		AuFin("no such mount point");
-
-	ofp = setmntent(MTab, "r");
-	if (!ofp)
-		AuFin(MTab);
-
-	if (do_remount) {
-		/* find the last one */
-		pos = -1;
-		while ((p = getmntent(ofp))) {
-			if (!strcmp(p->mnt_dir, mntpnt))
-				pos = ftell(ofp);
-		}
-		rewind(ofp);
-
-		if (pos > 0) {
-			while ((p = getmntent(ofp))) {
-				if (ftell(ofp) == pos) {
-					/* replace the line */
-					p = &ent;
-					pos = -1;
-				}
-				err = addmntent(fp, p);
-				if (err)
-					AuFin("addmntent");
-			}
-			if (pos > 0)
-				AuFin("internal error");
-		} else
-			append_mtab(fp, ofp, &ent);
-	} else
-		append_mtab(fp, ofp, &ent);
-
-	endmntent(ofp); /* ignore */
-	au_plink_maint(NULL);
-	if (do_verbose)
-		au_print_ent(&ent);
-}
-
-/* ---------------------------------------------------------------------- */
-
-int au_update_mtab(char *mntpnt, int do_remount, int do_verbose)
-{
-	int err, fd, status, e2;
-	pid_t pid;
-	ino_t ino;
-	struct stat st;
-	struct statfs stfs;
-	struct flock flock = {
-		.l_type		= F_WRLCK,
-		.l_whence	= SEEK_SET,
-		.l_start	= 0,
-		.l_len		= 0
-	};
-	char pid_file[sizeof(MTab "~.") + 20];
-	FILE *fp;
-
-	err = statfs(MTab, &stfs);
-	if (stfs.f_type == PROC_SUPER_MAGIC)
-		return 0;
-
-	snprintf(pid_file, sizeof(pid_file), MTab "~.%d", getpid());
-	fd = open(pid_file, O_RDWR | O_CREAT | O_EXCL,
-		  S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
-	if (fd < 0)
-		AuFin("%s", pid_file);
-	err = fcntl(fd, F_SETLK, &flock);
-	if (err)
-		AuFin("%s", pid_file);
-	fp = fdopen(fd, "r+");
-	if (!fp)
-		AuFin("%s", pid_file);
-
-	pid = fork();
-	if (!pid) {
-		lock_mtab(pid_file);
-		update_mtab(fp, mntpnt, do_remount, do_verbose);
-		unlock_mtab();
-		return 0;
-	} else if (pid < 0)
-		AuFin("fork");
-
-	err = fstat(fd, &st);
-	if (err)
-		perror(pid_file);
-	ino = st.st_ino;
-
-	err = waitpid(pid, &status, 0);
-	if (err < 0) {
-		perror(pid_file);
-		goto out;
-	}
-	err = !WIFEXITED(status);
-	if (!err)
-		err = WEXITSTATUS(status);
-
-	e2 = unlink(pid_file);
-	if (e2 && errno != ENOENT)
-		perror(pid_file);
-	e2 = stat(MTab "~", &st);
-	if (!e2) {
-		if (st.st_ino == ino) {
-			/*
-			 * The inode number is same,
-			 * it means it is we who made the file.
-			 * If someone else removed our file between stat(2) and
-			 * unlink(2), it is a breakage of the rule.
-			 */
-			e2 = unlink(MTab "~");
-			if (e2)
-				perror(MTab);
-		}
-	} else if (errno != ENOENT)
-		perror(MTab "~");
-	fclose(fp);
-
- out:
-	return err;
-}

+ 0 - 356
package/aufs2-util/src/plink.c

@@ -1,356 +0,0 @@
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#define _FILE_OFFSET_BITS	64	/* ftw.h */
-#define _XOPEN_SOURCE		500	/* ftw.h */
-#define _GNU_SOURCE			/* ftw.h */
-
-#include <sys/ioctl.h>
-#include <sys/resource.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <ftw.h>
-#include <mntent.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <linux/aufs_type.h>
-#include "au_util.h"
-
-/* todo: try argz? */
-static struct name_array {
-	char *o;
-	int bytes;
-
-	char *cur;
-	int nname;
-} na;
-
-static struct ino_array {
-	char *o;
-	int bytes;
-
-	union {
-		char *p;
-		ino_t *cur;
-	};
-	int nino;
-} ia;
-
-static int na_append(char *plink_dir, char *name)
-{
-	int l, sz;
-	char *p;
-	const int cur = na.cur - na.o;
-
-	l = strlen(plink_dir) + strlen(name) + 2;
-	sz = na.bytes + l;
-	p = realloc(na.o, sz);
-	if (!p)
-		AuFin("realloc");
-
-	na.o = p;
-	na.bytes = sz;
-	na.cur = p + cur;
-	na.cur += sprintf(na.cur, "%s/%s", plink_dir, name) + 1;
-	na.nname++;
-
-	return 0;
-}
-
-static int ia_append(ino_t ino)
-{
-	int sz;
-	char *p;
-	const int cur = ia.p - ia.o;
-
-	sz = na.bytes + sizeof(ino_t);
-	p = realloc(ia.o, sz);
-	if (!p)
-		AuFin("realloc");
-
-	ia.o = p;
-	ia.bytes = sz;
-	ia.p = p + cur;
-	*ia.cur++ = ino;
-	ia.nino++;
-
-	return 0;
-}
-
-static int build_array(char *plink_dir)
-{
-	int err;
-	DIR *dp;
-	struct dirent *de;
-	char *p;
-	ino_t ino;
-
-	err = access(plink_dir, F_OK);
-	if (err)
-		return 0;
-
-	err = 0;
-	dp = opendir(plink_dir);
-	if (!dp)
-		AuFin("%s", plink_dir);
-	while ((de = readdir(dp))) {
-		if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, ".."))
-			continue;
-#if 0
-		if (de->d_type == DT_DIR) {
-			errno = EISDIR;
-			AuFin(de->d_name);
-		}
-#endif
-
-		err = na_append(plink_dir, de->d_name);
-		if (err)
-			break;
-
-		p = strchr(de->d_name, '.');
-		if (!p) {
-			errno = EINVAL;
-			AuFin("internal error, %s", de->d_name);
-		}
-		*p = 0;
-		errno = 0;
-		ino = strtoull(de->d_name, NULL, 0);
-		if (ino == /*ULLONG_MAX*/-1 && errno == ERANGE)
-			AuFin("internal error, %s", de->d_name);
-		err = ia_append(ino);
-		if (err)
-			break;
-	}
-	closedir(dp);
-
-	return err;
-}
-
-static int ia_test(ino_t ino)
-{
-	int i;
-	ino_t *p;
-
-	/* todo: hash table */
-	ia.p = ia.o;
-	p = ia.cur;
-	for (i = 0; i < ia.nino; i++)
-		if (*p++ == ino)
-			return 1;
-	return 0;
-}
-
-/* ---------------------------------------------------------------------- */
-
-static int ftw_list(const char *fname, const struct stat *st, int flags,
-		   struct FTW *ftw)
-{
-	if (!strcmp(fname + ftw->base, AUFS_WH_PLINKDIR))
-		return FTW_SKIP_SUBTREE;
-	if (flags == FTW_D || flags == FTW_DNR)
-		return FTW_CONTINUE;
-
-	if (ia_test(st->st_ino))
-		puts(fname);
-
-	return FTW_CONTINUE;
-}
-
-static int ftw_cpup(const char *fname, const struct stat *st, int flags,
-		   struct FTW *ftw)
-{
-	int err;
-
-	if (!strcmp(fname + ftw->base, AUFS_WH_PLINKDIR))
-		return FTW_SKIP_SUBTREE;
-	if (flags == FTW_D || flags == FTW_DNR)
-		return FTW_CONTINUE;
-
-	/*
-	 * do nothing but update something harmless in order to make it copyup
-	 */
-	if (ia_test(st->st_ino)) {
-		Dpri("%s\n", fname);
-		if (!S_ISLNK(st->st_mode))
-			err = chown(fname, -1, -1);
-		else
-			err = lchown(fname, -1, -1);
-		if (err)
-			AuFin("%s", fname);
-	}
-
-	return FTW_CONTINUE;
-}
-
-/* ---------------------------------------------------------------------- */
-
-static DIR *dp;
-void au_plink_maint(char *path)
-{
-	int err;
-
-	if (path) {
-		if (dp) {
-			errno = EINVAL;
-			AuFin("dp is not NULL");
-		}
-		dp = opendir(path);
-		if (!dp)
-			AuFin("%s", path);
-
-		err = ioctl(dirfd(dp), AUFS_CTL_PLINK_MAINT);
-#ifndef DEBUG
-		if (err)
-			AuFin("AUFS_CTL_PLINK_MAINT");
-#endif
-	} else {
-		err = closedir(dp);
-		if (err)
-			AuFin("closedir");
-		dp = NULL;
-	}
-}
-
-void au_clean_plink(void)
-{
-	int err;
-
-	err = ioctl(dirfd(dp), AUFS_CTL_PLINK_CLEAN);
-#ifndef DEBUG
-	if (err)
-		AuFin("AUFS_CTL_PLINK_CLEAN");
-#endif
-}
-
-static int do_plink(char *cwd, int cmd, int nbr, char *br[])
-{
-	int err, i, l;
-	struct rlimit rlim;
-	__nftw_func_t func;
-	char *p;
-
-	err = 0;
-	switch (cmd) {
-	case AuPlink_FLUSH:
-		/*FALLTHROUGH*/
-	case AuPlink_CPUP:
-		func = ftw_cpup;
-		break;
-	case AuPlink_LIST:
-		func = ftw_list;
-		break;
-	default:
-		errno = EINVAL;
-		AuFin(NULL);
-		func = NULL; /* never reach here */
-	}
-
-	for (i = 0; i < nbr; i++) {
-		//puts(br[i]);
-		p = strchr(br[i], '=');
-		if (strcmp(p + 1, AUFS_BRPERM_RW)
-		    && strcmp(p + 1, AUFS_BRPERM_RWNLWH))
-			continue;
-
-		*p = 0;
-		l = strlen(br[i]);
-		p = malloc(l + sizeof(AUFS_WH_PLINKDIR) + 2);
-		if (!p)
-			AuFin("malloc");
-		sprintf(p, "%s/%s", br[i], AUFS_WH_PLINKDIR);
-		//puts(p);
-		err = build_array(p);
-		if (err)
-			AuFin("build_array");
-		free(p);
-	}
-	if (!ia.nino)
-		goto out;
-
-	if (cmd == AuPlink_LIST) {
-		ia.p = ia.o;
-		for (i = 0; i < ia.nino; i++)
-			printf("%llu ", (unsigned long long)*ia.cur++);
-		putchar('\n');
-	}
-
-	err = getrlimit(RLIMIT_NOFILE, &rlim);
-	if (err)
-		AuFin("getrlimit");
-	nftw(cwd, func, rlim.rlim_cur - 10,
-	     FTW_PHYS | FTW_MOUNT | FTW_ACTIONRETVAL);
-	/* ignore */
-
-	if (cmd == AuPlink_FLUSH) {
-		au_clean_plink();
-
-		na.cur = na.o;
-		for (i = 0; i < na.nname; i++) {
-			Dpri("%s\n", na.cur);
-			err = unlink(na.cur);
-			if (err)
-				AuFin("%s", na.cur);
-			na.cur += strlen(na.cur) + 1;
-		}
-	}
-
- out:
-	free(ia.o);
-	free(na.o);
-	return err;
-}
-
-int au_plink(char cwd[], int cmd, int begin_maint, int end_maint)
-{
-	int err, nbr;
-	struct mntent ent;
-	char **br;
-
-	if (begin_maint)
-		au_plink_maint(cwd);
-
-	err = au_proc_getmntent(cwd, &ent);
-	if (err)
-		AuFin("no such mount point");
-
-	if (hasmntopt(&ent, "noplink"))
-		goto out; /* success */
-
-#ifdef DEBUG
-	//char a[] = "a,b,br:/tmp/br0=rw:/br1=ro";
-	char a[] = "a,b,si=1,c";
-	ent.mnt_opts = a;
-#endif
-	err = au_br(&br, &nbr, &ent);
-	//printf("nbr %d\n", nbr);
-	if (err)
-		AuFin(NULL);
-
-	err = do_plink(cwd, cmd, nbr, br);
-	if (err)
-		AuFin(NULL);
-
- out:
-	if (end_maint)
-		au_plink_maint(NULL);
-	return err;
-}

+ 0 - 85
package/aufs2-util/src/proc_mnt.c

@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2005-2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <mntent.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "au_util.h"
-
-#define ProcMounts "/proc/self/mounts"
-
-static void copy_ent(struct mntent *dst, struct mntent *src)
-{
-	free(dst->mnt_opts);
-	free(dst->mnt_type);
-	free(dst->mnt_dir);
-	free(dst->mnt_fsname);
-
-	dst->mnt_dir = NULL;
-	dst->mnt_type = NULL;
-	dst->mnt_opts = NULL;
-
-	dst->mnt_fsname = strdup(src->mnt_fsname);
-	if (dst->mnt_fsname)
-		dst->mnt_dir = strdup(src->mnt_dir);
-	if (dst->mnt_dir)
-		dst->mnt_type = strdup(src->mnt_type);
-	if (dst->mnt_type)
-		dst->mnt_opts = strdup(src->mnt_opts);
-	if (dst->mnt_opts) {
-		dst->mnt_freq = src->mnt_freq;
-		dst->mnt_passno = src->mnt_passno;
-	} else
-		AuFin("strdup");
-
-}
-
-int au_proc_getmntent(char *mntpnt, struct mntent *rent)
-{
-	int found;
-	struct mntent *p;
-	FILE *fp;
-
-	fp = setmntent(ProcMounts, "r");
-	if (!fp)
-		AuFin(ProcMounts);
-
-	/* find the last one */
-	memset(rent, 0, sizeof(*rent));
-	found = 0;
-	while ((p = getmntent(fp)))
-		if (!strcmp(p->mnt_dir, mntpnt)) {
-			Dpri("%s, %s, %s, %s, %d, %d\n",
-			     p->mnt_fsname, p->mnt_dir, p->mnt_type,
-			     p->mnt_opts, p->mnt_freq, p->mnt_passno);
-			copy_ent(rent, p);
-			found = 1;
-		}
-	endmntent(fp);
-
-	if (!found) {
-		errno = EINVAL;
-		AuFin("%s", mntpnt);
-	}
-
-	return 0;
-}

+ 0 - 749
package/aufs2-util/src/rdu.c

@@ -1,749 +0,0 @@
-/*
- * Copyright (C) 2009 Junjiro Okajima
- *
- * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#define _ATFILE_SOURCE
-#define _GNU_SOURCE
-#define _REENTRANT
-
-#include <linux/aufs_type.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/vfs.h>    /* or <sys/statfs.h> */
-#include <assert.h>
-#include <dirent.h>
-#include <dlfcn.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <search.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "compat.h"
-
-/* ---------------------------------------------------------------------- */
-
-struct rdu {
-#ifdef AuRDU_REENTRANT
-	pthread_rwlock_t lock;
-#else
-	struct dirent de;
-#endif
-
-	int fd;
-
-	unsigned long npos, idx;
-	struct au_rdu_ent **pos;
-
-	unsigned long nent, sz;
-	struct au_rdu_ent *ent;
-
-	int shwh;
-	struct au_rdu_ent *real, *wh;
-};
-
-static struct rdu **rdu;
-#define RDU_STEP 8
-static int rdu_cur, rdu_lim = RDU_STEP;
-
-/* ---------------------------------------------------------------------- */
-
-/* #define RduLocalTest */
-#ifdef RduLocalTest
-static int rdu_test_data(struct rdu *p, int err)
-{
-	struct au_rdu_ent *e = p->ent;
-	static int i;
-
-	if (!i++) {
-		err = 3;
-		e->ino = e->type = e->nlen = 1;
-		strcpy(e->name, ".");
-		e += au_rdu_len(e->nlen);
-		e->ino = e->type = e->nlen = 2;
-		strcpy(e->name, "..");
-		e += au_rdu_len(e->nlen);
-		e->ino = e->type = e->nlen = 3;
-		strcpy(e->name, "foo");
-	} else
-		err = 0;
-
-	return err;
-}
-#else
-static int rdu_test_data(struct rdu *p, int err)
-{
-	return err;
-}
-#endif
-
-/* #define RduDebug */
-#ifdef RduDebug
-#define DPri(fmt, args...)	fprintf(stderr, "%s:%d: " fmt, \
-					__func__, __LINE__, ##args)
-#else
-#define DPri(fmt, args...)	do {} while (0)
-#endif
-
-/* ---------------------------------------------------------------------- */
-
-#ifdef AuRDU_REENTRANT
-static void rdu_rwlock_init(struct rdu *p)
-{
-	pthread_rwlock_init(&p->lock);
-}
-
-static void rdu_read_lock(struct rdu *p)
-{
-	pthread_rwlock_rdlock(&p->lock);
-}
-
-static void rdu_write_lock(struct rdu *p)
-{
-	pthread_rwlock_wrlock(&p->lock);
-}
-
-static void rdu_unlock(struct rdu *p)
-{
-	pthread_rwlock_unlock(&p->lock);
-}
-
-static pthread_mutex_t rdu_lib_mtx = PTHREAD_MUTEX_INITIALIZER;
-#define rdu_lib_lock()		pthread_mutex_lock(&rdu_lib_mtx)
-#define rdu_lib_unlock()	pthread_mutex_unlock(&rdu_lib_mtx)
-#define rdu_lib_must_lock()	assert(pthread_mutex_trylock(&rdu_lib_mtx))
-#else
-static void rdu_rwlock_init(struct rdu *p)
-{
-	/* empty */
-}
-
-static void rdu_read_lock(struct rdu *p)
-{
-	/* empty */
-}
-
-static void rdu_write_lock(struct rdu *p)
-{
-	/* empty */
-}
-
-static void rdu_unlock(struct rdu *p)
-{
-	/* empty */
-}
-
-#define rdu_lib_lock()		do {} while(0)
-#define rdu_lib_unlock()	do {} while(0)
-#define rdu_lib_must_lock()	do {} while(0)
-#endif
-
-/*
- * initialize this library, particularly global variables.
- */
-static int rdu_lib_init(void)
-{
-	int err;
-
-	err = 0;
-	if (rdu)
-		goto out;
-
-	rdu_lib_lock();
-	if (!rdu) {
-		rdu = calloc(rdu_lim, sizeof(*rdu));
-		err = !rdu;
-	}
-	rdu_lib_unlock();
-
- out:
-	return err;
-}
-
-static int rdu_append(struct rdu *p)
-{
-	int err, i;
-	void *t;
-
-	rdu_lib_must_lock();
-
-	err = 0;
-	if (rdu_cur < rdu_lim - 1)
-		rdu[rdu_cur++] = p;
-	else {
-		t = realloc(rdu, rdu_lim + RDU_STEP * sizeof(*rdu));
-		if (t) {
-			rdu = t;
-			rdu_lim += RDU_STEP;
-			rdu[rdu_cur++] = p;
-			for (i = 0; i < RDU_STEP - 1; i++)
-				rdu[rdu_cur + i] = NULL;
-		} else
-			err = -1;
-	}
-
-	return err;
-}
-
-/* ---------------------------------------------------------------------- */
-
-static struct rdu *rdu_new(int fd)
-{
-	struct rdu *p;
-	int err;
-
-	p = malloc(sizeof(*p));
-	if (p) {
-		rdu_rwlock_init(p);
-		p->fd = fd;
-		p->sz = BUFSIZ;
-		p->ent = malloc(BUFSIZ);
-		if (p->ent) {
-			err = rdu_append(p);
-			if (!err)
-				goto out; /* success */
-		}
-	}
-	free(p);
-	p = NULL;
-
- out:
-	return p;
-}
-
-static struct rdu *rdu_buf_lock(int fd)
-{
-	struct rdu *p;
-	int i;
-
-	assert(rdu);
-	assert(fd >= 0);
-
-	p = NULL;
-	rdu_lib_lock();
-	for (i = 0; i < rdu_cur; i++)
-		if (rdu[i] && rdu[i]->fd == fd) {
-			p = rdu[i];
-			goto out;
-		}
-
-	for (i = 0; i < rdu_cur; i++)
-		if (rdu[i] && rdu[i]->fd == -1) {
-			p = rdu[i];
-			p->fd = fd;
-			goto out;
-		}
-	if (!p)
-		p = rdu_new(fd);
-
- out:
-	if (p)
-		rdu_write_lock(p);
-	rdu_lib_unlock();
-
-	return p;
-}
-
-static void rdu_free(int fd)
-{
-	struct rdu *p;
-
-	p = rdu_buf_lock(fd);
-	if (p) {
-		free(p->ent);
-		free(p->pos);
-		p->fd = -1;
-		p->ent = NULL;
-		p->pos = NULL;
-		rdu_unlock(p);
-	}
-}
-
-/* ---------------------------------------------------------------------- */
-
-static int rdu_do_store(int dirfd, struct au_rdu_ent *ent,
-			struct au_rdu_ent **pos, struct rdu *p)
-{
-	int err;
-	unsigned char c;
-	struct stat st;
-
-	c = ent->name[ent->nlen];
-	ent->name[ent->nlen] = 0;
-	DPri("%s\n", ent->name);
-	err = fstatat(dirfd, ent->name, &st, AT_SYMLINK_NOFOLLOW);
-	ent->name[ent->nlen] = c;
-	if (!err) {
-		ent->ino = st.st_ino;
-		pos[p->idx++] = ent;
-	} else {
-		DPri("err %d\n", err);
-		if (errno == ENOENT)
-			err = 0;
-	}
-
-	return err;
-}
-
-struct rdu_thread_arg {
-	int pipefd;
-	struct rdu *p;
-};
-
-static void *rdu_thread(void *_arg)
-{
-	int err, pipefd, dirfd;
-	ssize_t ssz;
-	struct rdu_thread_arg *arg = _arg;
-	struct au_rdu_ent *ent, **pos;
-	struct rdu *p;
-
-	pipefd = arg->pipefd;
-	p = arg->p;
-	dirfd = p->fd;
-	pos = p->pos;
-	while (1) {
-		DPri("read\n");
-		ssz = read(pipefd, &ent, sizeof(ent));
-		DPri("ssz %zd\n", ssz);
-		if (ssz != sizeof(ent) || !ent) {
-			//perror("read");
-			break;
-		}
-
-		//DPri("%p\n", ent);
-		err = rdu_do_store(dirfd, ent, pos, p);
-	}
-
-	DPri("here\n");
-	return NULL;
-}
-
-static int rdu_store(struct rdu *p, struct au_rdu_ent *ent, int pipefd)
-{
-#ifdef RduLocalTest
-	if (ent)
-		return rdu_do_store(p->fd, ent, p->pos, p);
-	return 0;
-#else
-	ssize_t ssz;
-
-	//DPri("%p\n", ent);
-	ssz = write(pipefd, &ent, sizeof(ent));
-	DPri("ssz %zd\n", ssz);
-	//sleep(1);
-	return ssz != sizeof(ent);
-#endif
-}
-
-/* ---------------------------------------------------------------------- */
-/* the heart of this library */
-
-static void rdu_tfree(void *node)
-{
-	/* empty */
-}
-
-static int rdu_ent_compar(const void *_a, const void *_b)
-{
-	int ret;
-	const struct au_rdu_ent *a = _a, *b = _b;
-
-	ret = (int)a->nlen - b->nlen;
-	if (!ret)
-		ret = memcmp(a->name, b->name, a->nlen);
-	return ret;
-}
-
-static int rdu_ent_compar_wh(const void *_a, const void *_b)
-{
-	int ret;
-	const struct au_rdu_ent *real = _a, *wh = _b;
-
-	if (real->nlen >= AUFS_WH_PFX_LEN
-	    && !memcmp(real->name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) {
-		wh = _a;
-		real = _b;
-	}
-
-	ret = (int)wh->nlen - AUFS_WH_PFX_LEN - real->nlen;
-	if (!ret)
-		ret = memcmp(wh->name + AUFS_WH_PFX_LEN, real->name,
-			     real->nlen);
-	return ret;
-}
-
-/* tsearch(3) may not be thread-safe */
-static int rdu_ent_append(struct rdu *p, struct au_rdu_ent *ent, int pipefd)
-{
-	int err;
-	struct au_rdu_ent *e;
-
-	err = 0;
-	e = tfind(ent, (void *)&p->wh, rdu_ent_compar_wh);
-	if (e)
-		goto out;
-
-	e = tsearch(ent, (void *)&p->real, rdu_ent_compar);
-	if (e)
-		err = rdu_store(p, ent, pipefd);
-	else
-		err = -1;
-
- out:
-	return err;
-}
-
-static int rdu_ent_append_wh(struct rdu *p, struct au_rdu_ent *ent, int pipefd)
-{
-	int err;
-	struct au_rdu_ent *e;
-
-	err = 0;
-	e = tfind(ent, (void *)&p->wh, rdu_ent_compar);
-	if (e)
-		goto out;
-
-	e = tsearch(ent, (void *)&p->wh, rdu_ent_compar);
-	if (e) {
-		if (p->shwh)
-			err = rdu_store(p, ent, pipefd);
-	} else
-		err = -1;
-
- out:
-	return err;
-}
-
-static int rdu_merge(struct rdu *p)
-{
-	int err;
-	unsigned long ul;
-	pthread_t th;
-	int fds[2];
-	struct rdu_thread_arg arg;
-	struct au_rdu_ent *ent;
-	void *t;
-
-	err = -1;
-	p->pos = malloc(sizeof(*p->pos) * p->npos);
-	if (!p->pos)
-		goto out;
-
-	/* pipe(2) may not be scheduled well in linux-2.6.23 and earlier */
-	err = pipe(fds);
-	if (err)
-		goto out_free;
-
-	arg.pipefd = fds[0];
-	arg.p = p;
-#ifndef RduLocalTest
-	err = pthread_create(&th, NULL, rdu_thread, &arg);
-#endif
-	if (err)
-		goto out_close;
-
-	p->real = NULL;
-	p->wh = NULL;
-	ent = p->ent;
-	for (ul = 0; !err && ul < p->npos; ul++) {
-		if (ent->nlen <= AUFS_WH_PFX_LEN
-		    || strncmp(ent->name, AUFS_WH_PFX, AUFS_WH_PFX_LEN))
-			err = rdu_ent_append(p, ent, fds[1]);
-		else
-			err = rdu_ent_append_wh(p, ent, fds[1]);
-		ent += au_rdu_len(ent->nlen);
-	}
-	rdu_store(p, /*ent*/NULL, fds[1]); /* terminate the thread */
-	tdestroy(p->real, rdu_tfree);
-	tdestroy(p->wh, rdu_tfree);
-
-#ifndef RduLocalTest
-	pthread_join(th, NULL);
-#endif
-	p->npos = p->idx;
-	t = realloc(p->pos, sizeof(*p->pos) * p->npos);
-	if (t)
-		p->pos = t;
-	/* t == NULL is not an error */
-
- out_close:
-	close(fds[1]);
-	close(fds[0]);
-	if (!err)
-		goto out; /* success */
- out_free:
-	free(p->pos);
-	p->pos = NULL;
- out:
-	return err;
-}
-
-static int rdu_init(struct rdu *p)
-{
-	int err;
-	struct aufs_rdu param;
-	char *t;
-
-	memset(&param, 0, sizeof(param));
-	param.ent = p->ent;
-	param.sz = p->sz;
-	t = getenv("AUFS_RDU_BLK");
-	if (t)
-		param.blk = strtoul(t + sizeof("AUFS_RDU_BLK"), NULL, 0);
-
-	do {
-		err = ioctl(p->fd, AUFS_CTL_RDU, &param);
-		err = rdu_test_data(p, err);
-		if (err > 0) {
-			p->npos += err;
-			if (!param.full)
-				continue;
-
-			assert(param.blk);
-			t = realloc(p->ent, p->sz + param.blk);
-			if (t) {
-				param.sz = param.blk;
-				param.ent = (void *)(t + p->sz);
-				p->ent = (void *)t;
-				p->sz += param.blk;
-			} else
-				err = -1;
-		}
-	} while (err > 0);
-	p->shwh = param.shwh;
-	if (!err)
-		err = rdu_merge(p);
-
-	if (err) {
-		free(p->ent);
-		p->ent = NULL;
-	}
-
-	return err;
-}
-
-static int rdu_pos(struct dirent *de, struct rdu *p, long pos)
-{
-	int err;
-	struct au_rdu_ent *ent;
-
-	err = -1;
-	if (pos <= p->npos) {
-		ent = p->pos[pos];
-		de->d_ino = ent->ino;
-		de->d_off = pos;
-		de->d_reclen = sizeof(*ent) + ent->nlen;
-		de->d_type = ent->type;
-		memcpy(de->d_name, ent->name, ent->nlen);
-		de->d_name[ent->nlen] = 0;
-		err = 0;
-	}
-	return err;
-}
-
-/* ---------------------------------------------------------------------- */
-
-static struct dirent *(*real_readdir)(DIR *dir);
-static int (*real_readdir_r)(DIR *dir, struct dirent *de, struct dirent **rde);
-static int (*real_closedir)(DIR *dir);
-
-static int rdu_dl(void **real, char *sym)
-{
-	char *p;
-
-	if (*real)
-		return 0;
-
-	dlerror(); /* clear */
-	*real = dlsym(RTLD_NEXT, sym);
-	p = dlerror();
-	if (p)
-		fprintf(stderr, "%s\n", p);
-	return !!p;
-}
-
-#define RduDlFunc(sym) \
-static int rdu_dl_##sym(void) \
-{ \
-	return rdu_dl((void *)&real_##sym, #sym); \
-}
-
-RduDlFunc(readdir);
-RduDlFunc(closedir);
-
-#ifdef AuRDU_REENTRANT
-RduDlFunc(readdir_r);
-#else
-#define rdu_dl_readdir_r()	1
-#endif
-
-/* ---------------------------------------------------------------------- */
-
-static int rdu_readdir(DIR *dir, struct dirent *de, struct dirent **rde)
-{
-	int err, fd;
-	struct rdu *p;
-	long pos;
-	struct statfs stfs;
-
-	if (rde)
-		*rde = NULL;
-
-	errno = EBADF;
-	fd = dirfd(dir);
-	err = fd;
-	if (fd < 0)
-		goto out;
-
-	err = fstatfs(fd, &stfs);
-	if (err)
-		goto out;
-
-	if (
-#ifdef RduLocalTest
-		1 ||
-#endif
-		stfs.f_type == AUFS_SUPER_MAGIC) {
-		err = rdu_lib_init();
-		if (err)
-			goto out;
-
-		p = rdu_buf_lock(fd);
-		if (!p)
-			goto out;
-
-		pos = telldir(dir);
-		if (!pos || !p->npos) {
-			err = rdu_init(p);
-			rdu_unlock(p);
-		}
-		if (err)
-			goto out;
-
-		rdu_read_lock(p);
-		if (!de)
-			de = &p->de;
-		err = rdu_pos(de, p, pos);
-		rdu_unlock(p);
-		if (!err) {
-			*rde = de;
-			seekdir(dir, pos + 1);
-		}
-	} else if (!de) {
-		if (!rdu_dl_readdir()) {
-			err = 0;
-			*rde = real_readdir(dir);
-			if (!*rde)
-				err = -1;
-		}
-	} else {
-		if (!rdu_dl_readdir_r())
-			err = real_readdir_r(dir, de, rde);
-	}
- out:
-	return err;
-}
-
-struct dirent *readdir(DIR *dir)
-{
-	struct dirent *de;
-	int err;
-
-	err = rdu_readdir(dir, NULL, &de);
-	DPri("err %d\n", err);
-	return de;
-}
-
-#ifdef AuRDU_REENTRANT
-int readdir_r(DIR *dirp, struct dirent *de, struct dirent **rde)
-{
-	return rdu_readdir(dir, de, rde);
-}
-#endif
-
-int closedir(DIR *dir)
-{
-	int err, fd;
-	struct statfs stfs;
-
-	errno = EBADF;
-	fd = dirfd(dir);
-	if (fd < 0)
-		goto out;
-	err = fstatfs(fd, &stfs);
-	if (err)
-		goto out;
-
-	if (stfs.f_type == AUFS_SUPER_MAGIC)
-		rdu_free(fd);
-	if (!rdu_dl_closedir())
-		err = real_closedir(dir);
-
- out:
-	return err;
-}
-
-#if 0
-extern DIR *opendir (__const char *__name) __nonnull ((1));
-extern int closedir (DIR *__dirp) __nonnull ((1));
-extern struct dirent *__REDIRECT (readdir, (DIR *__dirp), readdir64)
-     __nonnull ((1));
-extern struct dirent64 *readdir64 (DIR *__dirp) __nonnull ((1));
-extern int readdir_r (DIR *__restrict __dirp,
-		      struct dirent *__restrict __entry,
-		      struct dirent **__restrict __result)
-     __nonnull ((1, 2, 3));
-extern int readdir64_r (DIR *__restrict __dirp,
-			struct dirent64 *__restrict __entry,
-			struct dirent64 **__restrict __result)
-     __nonnull ((1, 2, 3));
-extern void rewinddir (DIR *__dirp) __THROW __nonnull ((1));
-extern void seekdir (DIR *__dirp, long int __pos) __THROW __nonnull ((1));
-extern long int telldir (DIR *__dirp) __THROW __nonnull ((1));
-extern int dirfd (DIR *__dirp) __THROW __nonnull ((1));
-extern int scandir (__const char *__restrict __dir,
-		    struct dirent ***__restrict __namelist,
-		    int (*__selector) (__const struct dirent *),
-		    int (*__cmp) (__const void *, __const void *))
-     __nonnull ((1, 2));
-extern int scandir64 (__const char *__restrict __dir,
-		      struct dirent64 ***__restrict __namelist,
-		      int (*__selector) (__const struct dirent64 *),
-		      int (*__cmp) (__const void *, __const void *))
-     __nonnull ((1, 2));
-extern int alphasort (__const void *__e1, __const void *__e2)
-     __THROW __attribute_pure__ __nonnull ((1, 2));
-extern int alphasort64 (__const void *__e1, __const void *__e2)
-     __THROW __attribute_pure__ __nonnull ((1, 2));
-extern int versionsort (__const void *__e1, __const void *__e2)
-     __THROW __attribute_pure__ __nonnull ((1, 2));
-extern int versionsort64 (__const void *__e1, __const void *__e2)
-     __THROW __attribute_pure__ __nonnull ((1, 2));
-extern __ssize_t getdirentries (int __fd, char *__restrict __buf,
-				size_t __nbytes,
-				__off_t *__restrict __basep)
-     __THROW __nonnull ((2, 4));
-extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf,
-				  size_t __nbytes,
-				  __off64_t *__restrict __basep)
-     __THROW __nonnull ((2, 4));
-#endif

+ 0 - 31
package/aufs2-util/src/umount.aufs

@@ -1,31 +0,0 @@
-#!/bin/sh -
-
-# Copyright (C) 2005-2009 Junjiro Okajima
-#
-# This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-#
-# The main purpose of this script is calling auplink.
-#
-
-PATH=/usr/bin:/usr/sbin:/bin:/sbin
-export PATH
-
-set -e
-#set -x; echo $0 $@
-dev="$1"
-shift
-auplink "$dev" flush
-exec umount -i $@ "$dev"

+ 10 - 1
package/autossh/patches/patch-Makefile_in

@@ -1,5 +1,14 @@
 --- autossh-1.4b.orig/Makefile.in	2008-04-11 22:47:46.000000000 +0200
-+++ autossh-1.4b/Makefile.in	2010-02-05 17:49:30.511836749 +0100
++++ autossh-1.4b/Makefile.in	2011-01-14 18:20:25.000000000 +0100
+@@ -31,7 +31,7 @@ all:		$(TARGET)
+ 
+ 
+ $(TARGET):	$(OFILES)
+-		$(CC) $(CPPFLAGS) -o $(TARGET) $(OFILES) $(LIBS)
++		$(CC) $(LDFLAGS) -o $(TARGET) $(OFILES) $(LIBS)
+ 
+ clean:
+ 		- /bin/rm -f *.o *.a *.core *~
 @@ -45,18 +45,18 @@ distclean:	allclean
  		- /bin/rm -f Makefile
  

+ 11 - 0
package/avahi/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- avahi-0.6.25.orig/ltmain.sh	2009-04-14 03:48:18.000000000 +0200
++++ avahi-0.6.25/ltmain.sh	2011-01-14 18:46:07.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 2 - 2
package/axtls/Makefile

@@ -4,9 +4,9 @@
 include ${TOPDIR}/rules.mk
 
 PKG_NAME:=		axtls
-PKG_VERSION:=		1.2.2
+PKG_VERSION:=		1.3.0
 PKG_RELEASE:=		1
-PKG_MD5SUM:=		03471b5a5874e2ce86025f24b3fa0958
+PKG_MD5SUM:=		4a06dd5b34489f11fbf2b4249a9dd303
 PKG_DESCR:=		small embedded webserver
 PKG_SECTION:=		net/security
 PKG_DEPENDS:=		libaxtls

+ 4 - 0
package/axtls/files/config

@@ -50,6 +50,7 @@ CONFIG_USE_DEV_URANDOM=y
 # CONFIG_OPENSSL_COMPATIBLE is not set
 # CONFIG_PERFORMANCE_TESTING is not set
 # CONFIG_SSL_TEST is not set
+# CONFIG_AXTLSWRAP is not set
 CONFIG_AXHTTPD=y
 
 #
@@ -118,3 +119,6 @@ SQU_KARATSUBA_THRESH=0
 # CONFIG_BIGINT_SLIDING_WINDOW is not set
 # CONFIG_BIGINT_SQUARE is not set
 # CONFIG_BIGINT_CHECK_ON is not set
+CONFIG_INTEGER_32BIT=y
+# CONFIG_INTEGER_16BIT is not set
+# CONFIG_INTEGER_8BIT is not set

+ 3 - 0
package/base-files/Makefile

@@ -45,11 +45,14 @@ endif
 	mkdir -p $(IDIR_BASE_FILES)/usr/lib/ipkg/lists
 	mkdir -p $(IDIR_BASE_FILES)/etc/crontabs
 	mkdir -p $(IDIR_BASE_FILES)/{dev,boot,root,sys,proc,tmp,mnt}
+ifeq (${ADK_INSTALL_PACKAGE_NETWORK_SCRIPTS},y)
 	mkdir -p $(IDIR_BASE_FILES)/etc/network/{if-pre-up.d,if-up.d,if-down.d,if-post-down.d}
+endif
 	mkdir -p $(IDIR_BASE_FILES)/usr/{lib,bin}
 	chmod 755 $(IDIR_BASE_FILES)/lib/mdev/init
 	chmod 600 $(IDIR_BASE_FILES)/etc/shadow
 	chmod 600 $(IDIR_BASE_FILES)/etc/network/interfaces
+	chmod 1777 ${IDIR_BASE_FILES}/tmp
 	ln -sf ../proc/mounts $(IDIR_BASE_FILES)/etc/mtab
 	rm -rf $(IDIR_BASE_FILES)/var
 	ln -sf tmp $(IDIR_BASE_FILES)/var

+ 1 - 0
package/base-files/src/etc/network/if-pre-up.d/03-bridge

@@ -15,6 +15,7 @@ case "$IF_BRIDGE_PORTS" in
 esac
 
 brctl addbr $IFACE || exit 1
+[[ -n $IF_BRIDGE_FD ]] && brctl setfd $IFACE $IF_BRIDGE_FD
 
 for IF in $INTERFACES; do
   if ! grep -q $IF /proc/net/dev; then

+ 2 - 0
package/base-files/src/etc/network/if-pre-up.d/04-wireless

@@ -8,6 +8,8 @@ set -e
 [ "$IF_WIRELESS_HWMODE" ] || IF_WIRELESS_HWMODE=g
 [ "$IF_WIRELESS_EXTENSION" ] || IF_WIRELESS_EXTENSION=0
 
+rfkill unblock wlan 2>/dev/null
+
 wpa=0
 wpa1=0
 wpa2=0

+ 2 - 0
package/bash/Makefile

@@ -17,6 +17,8 @@ include $(TOPDIR)/mk/package.mk
 $(eval $(call PKG_template,BASH,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
 CONFIGURE_ENV+=		bash_cv_getenv_redef=no
+CONFIGURE_ARGS+=	--disable-rpath \
+			--cache-file=/dev/null
 XAKE_FLAGS+=		LIBS_FOR_BUILD=''
 
 post-install:

+ 2 - 2
package/bind/Makefile

@@ -24,8 +24,8 @@ PKGSD_BIND_DNSSEC:=	dnssec utilities
 PKGSD_BIND_HOST:=	host utility
 PKGSD_BIND_DIG:=	dig utility
 
-PKG_FLAVOURS:=		WITH_IPV6
-PKGFD_WITH_IPV6:=	enable IPv6 support
+PKG_FLAVOURS_BIND_SERVER:=	WITH_IPV6
+PKGFD_WITH_IPV6:=		enable IPv6 support
 
 include ${TOPDIR}/mk/package.mk
 

+ 11 - 0
package/bind/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- bind-9.7.0.orig/ltmain.sh	2009-01-19 02:38:41.000000000 +0100
++++ bind-9.7.0/ltmain.sh	2011-01-14 18:53:09.000000000 +0100
+@@ -1706,7 +1706,7 @@ EOF
+       # -F/path gives path to uninstalled frameworks, gcc on darwin
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+ 
+ 	# Unknown arguments in both finalize_command and compile_command need
+ 	# to be aesthetically quoted because they are evaled later.

+ 20 - 0
package/binutils/patches/patch-ld_Makefile_in

@@ -0,0 +1,20 @@
+--- binutils-2.21.orig/ld/Makefile.in	2010-11-05 11:34:22.000000000 +0100
++++ binutils-2.21/ld/Makefile.in	2011-01-10 21:57:49.000000000 +0100
+@@ -422,7 +422,7 @@ TEXI2DVI = texi2dvi -I $(srcdir) -I $(BF
+ 		    -I $(top_srcdir)/../libiberty
+ 
+ AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
+-	@INCINTL@ $(HDEFINES) $(CFLAGS) $(PLUGIN_CFLAGS) \
++	@INCINTL@ $(HDEFINES) $(PLUGIN_CFLAGS) \
+ 	-DLOCALEDIR="\"$(datadir)/locale\""
+ 
+ BFDLIB = ../bfd/libbfd.la
+@@ -850,7 +850,7 @@ ld_new_LDADD = $(EMULATION_OFILES) $(EMU
+ #
+ @ENABLE_PLUGINS_TRUE@noinst_LTLIBRARIES = libldtestplug.la
+ @ENABLE_PLUGINS_TRUE@libldtestplug_la_SOURCES = testplug.c
+-@ENABLE_PLUGINS_TRUE@libldtestplug_la_CFLAGS = -g -O2
++@ENABLE_PLUGINS_TRUE@libldtestplug_la_CFLAGS =
+ @ENABLE_PLUGINS_TRUE@libldtestplug_la_LDFLAGS = -no-undefined -rpath /nowhere
+ MAINTAINERCLEANFILES = configdoc.texi ld.1 ld.info
+ 

+ 11 - 0
package/binutils/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- binutils-2.21.orig/ltmain.sh	2010-01-09 22:11:32.000000000 +0100
++++ binutils-2.21/ltmain.sh	2011-01-14 19:07:08.000000000 +0100
+@@ -4980,7 +4980,7 @@ func_mode_link ()
+       # @file GCC response files
+       # -tp=* Portland pgcc target processor selection
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 1 - 3
package/bitlbee/Makefile

@@ -19,7 +19,6 @@ include ${TOPDIR}/mk/package.mk
 $(eval $(call PKG_template,BITLBEE,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
 CONFIG_STYLE:=		minimal
-
 TCFLAGS+=		-fPIC
 CONFIGURE_ARGS:=	--target=${REAL_GNU_TARGET_NAME} \
 			--prefix=/usr/ \
@@ -33,13 +32,12 @@ CONFIGURE_ARGS:=	--target=${REAL_GNU_TARGET_NAME} \
 			--strip=0 \
 			--ipv6=1 \
 			--ssl=openssl
-
 INSTALL_TARGET=		install-etc install-bin
 
 post-configure:
 	@echo 'CFLAGS+="-I${STAGING_TARGET_DIR}/usr/include/iconv"' >> \
 		${WRKBUILD}/Makefile.settings
-	@echo 'LFLAGS+="-L${STAGING_TARGET_DIR}/usr/lib"' >> \
+	@echo 'LFLAGS+=${TARGET_LDFLAGS}' >> \
 		${WRKBUILD}/Makefile.settings
 
 post-install:

+ 5 - 5
package/bluez/patches/patch-Makefile_in

@@ -1,6 +1,6 @@
---- bluez-4.59.orig/Makefile.in	Thu Dec 24 17:42:48 2009
-+++ bluez-4.59/Makefile.in	Tue Dec 29 01:31:12 2009
-@@ -48,7 +48,6 @@ noinst_PROGRAMS = $(am__EXEEXT_7) $(am__EXEEXT_8) $(am
+--- bluez-4.59.orig/Makefile.in	2009-12-24 17:42:48.000000000 +0100
++++ bluez-4.59/Makefile.in	2011-01-14 19:24:13.000000000 +0100
+@@ -48,7 +48,6 @@ noinst_PROGRAMS = $(am__EXEEXT_7) $(am__
  	$(am__EXEEXT_10) $(am__EXEEXT_11)
  @SBC_TRUE@am__append_1 = sbc/libsbc.la
  @SBC_TRUE@am__append_2 = sbc/sbcinfo sbc/sbcdec sbc/sbcenc
@@ -8,7 +8,7 @@
  @NETLINK_TRUE@am__append_4 = plugins/netlink.la
  @ECHOPLUGIN_TRUE@am__append_5 = echo
  @ECHOPLUGIN_TRUE@am__append_6 = plugins/echo.c
-@@ -318,7 +317,6 @@ sbc_libsbc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(
+@@ -318,7 +317,6 @@ sbc_libsbc_la_LINK = $(LIBTOOL) $(AM_V_l
  @DUND_TRUE@am__EXEEXT_6 = compat/dund$(EXEEXT)
  @SBC_TRUE@am__EXEEXT_7 = sbc/sbcinfo$(EXEEXT) sbc/sbcdec$(EXEEXT) \
  @SBC_TRUE@	sbc/sbcenc$(EXEEXT)
@@ -16,7 +16,7 @@
  @TOOLS_TRUE@am__EXEEXT_9 = tools/avinfo$(EXEEXT) tools/ppporc$(EXEEXT) \
  @TOOLS_TRUE@	tools/hcieventmask$(EXEEXT) \
  @TOOLS_TRUE@	tools/hcisecfilter$(EXEEXT)
-@@ -918,8 +916,6 @@ lib_libbluetooth_la_DEPENDENCIES = $(local_headers)
+@@ -918,8 +916,6 @@ lib_libbluetooth_la_DEPENDENCIES = $(loc
  @SBC_TRUE@sbc_sbcdec_LDADD = sbc/libsbc.la
  @SBC_TRUE@sbc_sbcenc_SOURCES = sbc/sbcenc.c sbc/formats.h
  @SBC_TRUE@sbc_sbcenc_LDADD = sbc/libsbc.la

+ 11 - 0
package/bluez/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- bluez-4.59.orig/ltmain.sh	2009-12-24 17:42:43.000000000 +0100
++++ bluez-4.59/ltmain.sh	2011-01-14 19:25:00.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 5 - 3
package/bogofilter/Makefile

@@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk
 
 PKG_NAME:=		bogofilter
 PKG_VERSION:=		1.2.2
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_MD5SUM:=		39d27c13eae8a5064d68e20d585e60de
 PKG_DESCR:=		mail filter
 PKG_SECTION:=		mail
@@ -14,8 +14,6 @@ PKG_BUILDDEP:=		libiconv libdb
 PKG_URL:=		http://bogofilter.sourceforge.net/
 PKG_SITES:=		${MASTER_SITE_SOURCEFORGE:=bogofilter/}
 
-PKG_HOST_DEPENDS:=	!darwin
-
 include ${TOPDIR}/mk/package.mk
 
 $(eval $(call PKG_template,BOGOFILTER,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
@@ -25,9 +23,13 @@ CONFIGURE_ENV+=		LIBS="-liconv" \
 CONFIGURE_ARGS+=	--without-libsqlite3-prefix \
 			--without-libqdbm-prefix \
 			--with-included-gsl \
+			--disable-static \
 			--with-libdb-prefix=${STAGING_TARGET_DIR}/usr \
 			--disable-transactions
 
+pre-build:
+	touch $(WRKBUILD)/src/lexer_v3.l $(WRKBUILD)/src/Makefile.in $(WRKBUILD)/src/lexer_v3.c
+
 post-install:
 	${INSTALL_DIR} ${IDIR_BOGOFILTER}/usr/bin
 	${INSTALL_BIN} ${WRKINST}/usr/bin/bogofilter \

+ 2 - 6
package/busybox/Makefile

@@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=		busybox
 PKG_VERSION:=		1.18.1
-PKG_RELEASE:=		2
+PKG_RELEASE:=		3
 PKG_MD5SUM:=		f15fe752d8b7012aa5e59f83b88ccb1c
 PKG_DESCR:=		Core utilities for embedded systems
 PKG_SECTION:=		base
@@ -23,10 +23,6 @@ include $(TOPDIR)/mk/package.mk
 $(eval $(call PKG_template,BUSYBOX,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 $(eval $(call PKG_template,UDHCPD,udhcpd,${PKG_VERSION}-${PKG_RELEASE},busybox,${PKGSD_UDHCPD},${PKGSC_UDHCPD}))
 
-SUB_INSTALLS-y:=
-SUB_INSTALLS-m:=
-SUB_INSTALLS-${ADK_PACKAGE_UDHCPD}+=	udhcpd-install
-
 CONFIG_STYLE:=		manual
 BUILD_STYLE:=		manual
 INSTALL_STYLE:=		manual
@@ -56,7 +52,7 @@ else
 	    IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) busybox
 endif
 
-do-install: ${SUB_INSTALLS-m} ${SUB_INSTALLS-y}
+do-install:
 ifeq ($(ADK_NATIVE),y)
 	$(MAKE) V=1 \
 	    IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) install $(MAKE_TRACE)

+ 11 - 0
package/busybox/config/miscutils/Config.in

@@ -547,6 +547,17 @@ config BUSYBOX_READAHEAD
 	  As readahead(2) blocks until each file has been read, it is best to
 	  run this applet as a background job.
 
+config BUSYBOX_RFKILL
+        bool "rfkill"
+        default y  # doesn't build on Ubuntu 9.04
+        help
+          Enable/disable wireless devices.
+
+          rfkill list : list all wireless devices
+          rfkill list bluetooth : list all bluetooth devices
+          rfkill list 1 : list device corresponding to the given index
+          rfkill block|unblock wlan : block/unblock all wlan(wifi) devices
+
 config BUSYBOX_RUNLEVEL
 	bool "runlevel"
 	default n

+ 10 - 0
package/busybox/patches/007-missing-headers.patch

@@ -0,0 +1,10 @@
+--- busybox-1.18.1/include/platform.h~	Mon Dec 20 00:41:03 2010
++++ busybox-1.18.1/include/platform.h	Thu Jan  6 20:03:58 2011
+@@ -155,6 +155,7 @@
+ # include <sex.h>
+ #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) \
+    || defined(__APPLE__)
++# include <sys/param.h>		/* contains needed types for the following */
+ # include <sys/resource.h>  /* rlimit */
+ # include <machine/endian.h>
+ # define bswap_64 __bswap64

+ 8 - 6
package/bzr/Makefile

@@ -1,12 +1,12 @@
-# This file is part of the OpenADK project. OpenADK is copyrighted
+# This file is part of the OpenADK project. OpenADK is copyrighted 
 # material, please see the LICENCE file in the top-level directory.
 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=		bzr
-PKG_VERSION:=		2.3b3
+PKG_VERSION:=		2.3b4
 PKG_RELEASE:=		1
-PKG_MD5SUM:=		94f9181b9a4ab84b94cfbc06bd5dfd91
+PKG_MD5SUM:=		62ba2dbd8b13745bc89e24dd4191cdc5
 PKG_DESCR:=		bazaar
 PKG_SECTION:=		scm
 PKG_DEPENDS:=		python2
@@ -25,11 +25,13 @@ INSTALL_STYLE:=		manual
 include $(TOPDIR)/mk/python.mk
 
 do-build:
-	cd $(WRKBUILD); env PYTHONPATH=$(PYTHON_LIBDIR) $(PYTHON) ./setup.py install --prefix="$(WRKINST)/usr"
+	cd $(WRKBUILD); env PYTHONPATH=$(PYTHON_LIBDIR) $(PYTHON) ./setup.py install --prefix=$(WRKINST)/usr build_ext --allow-python-fallback
 
 do-install:
+	$(INSTALL_DIR) $(IDIR_BZR)/usr/lib/python$(PYTHON_VERSION)/site-packages
+	$(CP) $(WRKINST)/usr/lib/python$(PYTHON_VERSION)/site-packages/* \
+		$(IDIR_BZR)/usr/lib/python$(PYTHON_VERSION)/site-packages
 	$(INSTALL_DIR) $(IDIR_BZR)/usr/bin
-	$(INSTALL_BIN) $(WRKINST)/usr/bin/bzr \
-		$(IDIR_BZR)/usr/bin
+	$(INSTALL_BIN) $(WRKINST)/usr/bin/bzr $(IDIR_BZR)/usr/bin
 
 include ${TOPDIR}/mk/pkg-bottom.mk

+ 1 - 1
package/ca-certificates/Makefile

@@ -15,7 +15,7 @@ PKG_SITES:=		http://ftp.debian.org/debian/pool/main/c/ca-certificates/
 
 DISTFILES:=		${PKG_NAME}_${PKG_VERSION}.tar.gz
 
-PKG_FLAVOURS:=		SMALL
+PKG_FLAVOURS_CA_CERTS:=	SMALL
 PKGFD_SMALL:=		Minimal set of CA certificates
 
 include $(TOPDIR)/mk/package.mk

+ 11 - 0
package/cairo/patches/patch-build_ltmain_sh

@@ -0,0 +1,11 @@
+--- cairo-1.8.10.orig/build/ltmain.sh	2010-02-20 00:39:43.000000000 +0100
++++ cairo-1.8.10/build/ltmain.sh	2011-01-14 20:17:40.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 15 - 0
package/cairo/patches/patch-src_cairo-features_h

@@ -0,0 +1,15 @@
+--- cairo-1.8.10.orig/src/cairo-features.h	2010-02-19 22:34:38.000000000 +0100
++++ cairo-1.8.10/src/cairo-features.h	2011-01-14 20:12:28.000000000 +0100
+@@ -10,11 +10,11 @@
+ #define CAIRO_HAS_SVG_SURFACE 1
+ #define CAIRO_HAS_USER_FONT 1
+ #define CAIRO_HAS_XLIB_SURFACE 1
+-#define CAIRO_HAS_XLIB_XRENDER_SURFACE 1
+ 
+ /*#undef CAIRO_HAS_QUARTZ_FONT */
+ /*#undef CAIRO_HAS_QUARTZ_SURFACE */
+ /*#undef CAIRO_HAS_WIN32_FONT */
+ /*#undef CAIRO_HAS_WIN32_SURFACE */
++/*#undef CAIRO_HAS_XLIB_XRENDER_SURFACE */
+ 
+ #endif

+ 11 - 0
package/ccid/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- ccid-1.4.1.orig/ltmain.sh	2010-08-04 15:28:29.000000000 +0200
++++ ccid-1.4.1/ltmain.sh	2011-01-14 20:22:38.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 10 - 1
package/cgilib/patches/patch-ltmain_sh

@@ -1,6 +1,6 @@
 $Id: update-patches 24 2008-08-31 14:56:13Z wbx $
 --- cgilib-0.7.orig/ltmain.sh	2008-04-29 23:33:55.000000000 +0200
-+++ cgilib-0.7/ltmain.sh	2009-05-09 03:58:09.000000000 +0200
++++ cgilib-0.7/ltmain.sh	2011-01-14 20:26:24.000000000 +0100
 @@ -43,8 +43,8 @@ EXIT_FAILURE=1
  
  PROGRAM=ltmain.sh
@@ -65,6 +65,15 @@ $Id: update-patches 24 2008-08-31 14:56:13Z wbx $
  	continue
  	;;
  
+@@ -1676,7 +1706,7 @@ EOF
+       # -F/path gives path to uninstalled frameworks, gcc on darwin
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+ 
+ 	# Unknown arguments in both finalize_command and compile_command need
+ 	# to be aesthetically quoted because they are evaled later.
 @@ -2135,10 +2165,7 @@ EOF
  	case $pass in
  	dlopen) libs="$dlfiles" ;;

+ 9 - 9
package/collectd/Makefile

@@ -13,26 +13,26 @@ PKG_DEPENDS:=		libpthread
 PKG_URL:=		http://collectd.org/
 PKG_SITES:=		http://collectd.org/files/
 
-PKG_FLAVOURS:=		CPU LOAD MEMORY PING
-PKGFD_CPU:=		collect CPU statistics
-PKGFD_LOAD:=		collect system load statistics
-PKGFD_MEMORY:=		collect memory usage statistics
-PKGFD_PING:=		enable ping statistic plugin
+PKG_FLAVOURS_COLLECD:=	WITH_CPU WITH_LOAD WITH_MEMORY WITH_PING
+PKGFD_WITH_CPU:=	collect CPU statistics
+PKGFD_WITH_LOAD:=	collect system load statistics
+PKGFD_WITH_MEMORY:=	collect memory usage statistics
+PKGFD_WITH_PING:=	enable ping statistic plugin
 
 include ${TOPDIR}/mk/package.mk
 
 $(eval $(call PKG_template,COLLECTD,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
-ifneq (${ADK_PACKAGE_COLLECTD_CPU},y)
+ifneq (${ADK_PACKAGE_COLLECTD_WITH_CPU},y)
 DISABLE_CPU:=--disable-cpu
 endif
-ifneq (${ADK_PACKAGE_COLLECTD_LOAD},y)
+ifneq (${ADK_PACKAGE_COLLECTD_WITH_LOAD},y)
 DISABLE_LOAD:=--disable-load
 endif
-ifneq (${ADK_PACKAGE_COLLECTD_MEMORY},y)
+ifneq (${ADK_PACKAGE_COLLECTD_WITH_MEMORY},y)
 DISABLE_MEMORY:=--disable-memory
 endif
-ifneq (${ADK_PACKAGE_COLLECTD_PING},y)
+ifneq (${ADK_PACKAGE_COLLECTD_WITH_PING},y)
 DISABLE_PING:=--disable-ping
 endif
 

+ 11 - 0
package/collectd/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- collectd-4.10.0.orig/ltmain.sh	2010-05-01 11:15:57.000000000 +0200
++++ collectd-4.10.0/ltmain.sh	2011-01-14 20:29:06.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 2 - 0
package/coreutils/Makefile

@@ -21,6 +21,8 @@ include $(TOPDIR)/mk/package.mk
 #$(eval $(call PKG_template,COREUTILS,$(PKG_NAME),$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 $(eval $(call PKG_template,TSORT,tsort,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKGSD_TSORT},${PKGSC_TSORT}))
 
+CONFIGURE_ARGS+=	--disable-rpath
+
 post-install:
 	$(INSTALL_DIR) $(IDIR_TSORT)/usr/bin
 	$(INSTALL_BIN) $(WRKINST)/usr/bin/tsort \

+ 2 - 1
package/cryptsetup/Makefile

@@ -24,7 +24,8 @@ include ${TOPDIR}/mk/package.mk
 
 $(eval $(call PKG_template,CRYPTSETUP,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
-CONFIGURE_ARGS+=	--disable-selinux
+CONFIGURE_ARGS+=	--disable-selinux \
+			--disable-static
 
 post-install:
 	${INSTALL_DIR} ${IDIR_CRYPTSETUP}/usr/sbin ${IDIR_CRYPTSETUP}/usr/lib

+ 11 - 0
package/cryptsetup/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- cryptsetup-1.1.3.orig/ltmain.sh	2010-01-17 11:29:15.000000000 +0100
++++ cryptsetup-1.1.3/ltmain.sh	2011-01-14 20:48:34.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 2 - 2
package/cups/Makefile

@@ -21,7 +21,7 @@ include ${TOPDIR}/mk/package.mk
 $(eval $(call PKG_template,CUPS,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
 CONFIGURE_ENV+=		ac_cv_func_sigset=no \
-			OPTIM='-fPIC'
+			OPTIM='-fPIC $(TARGET_CFLAGS)'
 
 CONFIGURE_ARGS+=	--with-cups-user=cups \
 			--with-cups-group=cups \
@@ -42,7 +42,7 @@ CONFIGURE_ARGS+=	--with-cups-user=cups \
 			--disable-ssl
 
 FAKE_FLAGS+=		DSTROOT="${WRKINST}" STRIP="/bin/true"
-XAKE_FLAGS+=		OPTIM='-fPIC'
+XAKE_FLAGS+=		OPTIM='-fPIC $(TARGET_CFLAGS)'
 
 post-install:
 	${INSTALL_DIR} ${IDIR_CUPS}/usr/bin

+ 5 - 10
package/curl/Makefile

@@ -21,7 +21,7 @@ PKGSS_LIBCURL:=		libopenssl zlib
 PKGSD_LIBCURL_DEV:=	development files for libcurl
 PKGSC_LIBCURL_DEV:=	devel
 
-PKG_FLAVOURS:=		WITH_IPV6
+PKG_FLAVOURS_CURL:=	WITH_IPV6
 PKGFD_WITH_IPV6:=	enable IPv6 support
 
 include ${TOPDIR}/mk/package.mk
@@ -30,11 +30,6 @@ $(eval $(call PKG_template,CURL,curl,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS
 $(eval $(call PKG_template,LIBCURL,libcurl,${PKG_VERSION}-${PKG_RELEASE},${PKGSS_LIBCURL},${PKGSD_LIBCURL},${PKGSC_LIBCURL}))
 $(eval $(call PKG_template,LIBCURL_DEV,libcurl-dev,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKGSD_LIBCURL_DEV},${PKGSC_LIBCURL_DEV}))
 
-SUB_INSTALLS-y:=
-SUB_INSTALLS-m:=
-SUB_INSTALLS-${ADK_PACKAGE_CURL}+=		curl-install
-SUB_INSTALLS-${ADK_PACKAGE_LIBCURL_DEV}+=	libcurl-dev-install
-
 CONFIGURE_ENV+=		curl_typeof_curl_socklen_t=socklen_t
 CONFIGURE_ARGS+=	--disable-thread \
 			--enable-cookies \
@@ -63,14 +58,14 @@ else
 CONFIGURE_ARGS+=	--disable-ipv6
 endif
 
-post-install: ${SUB_INSTALLS-m} ${SUB_INSTALLS-y}
-	${INSTALL_DIR} ${IDIR_LIBCURL}/usr/lib
-	${CP} ${WRKINST}/usr/lib/libcurl.so* ${IDIR_LIBCURL}/usr/lib/
-
 curl-install:
 	${INSTALL_DIR} ${IDIR_CURL}/usr/bin
 	${INSTALL_BIN} ${WRKINST}/usr/bin/curl ${IDIR_CURL}/usr/bin/
 
+libcurl-install:
+	${INSTALL_DIR} ${IDIR_LIBCURL}/usr/lib
+	${CP} ${WRKINST}/usr/lib/libcurl.so* ${IDIR_LIBCURL}/usr/lib/
+
 libcurl-dev-install:
 	${INSTALL_DIR} ${IDIR_LIBCURL_DEV}/usr/include/curl
 	${CP} ${WRKINST}/usr/include/curl/*.h \

+ 3 - 3
package/curl/patches/patch-configure

@@ -1,6 +1,6 @@
---- curl-7.19.7.orig/configure	2009-11-04 13:26:02.000000000 +0100
-+++ curl-7.19.7/configure	2009-12-03 21:07:01.000000000 +0100
-@@ -19233,15 +19233,6 @@ fi
+--- curl-7.21.0.orig/configure	2010-06-05 00:32:04.000000000 +0200
++++ curl-7.21.0/configure	2011-01-14 12:05:38.000000000 +0100
+@@ -19714,15 +19714,6 @@ fi
  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    fi
  

+ 11 - 0
package/curl/patches/patch-ltmain_sh

@@ -0,0 +1,11 @@
+--- curl-7.21.0.orig/ltmain.sh	2010-05-27 21:20:16.000000000 +0200
++++ curl-7.21.0/ltmain.sh	2011-01-14 12:07:25.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"

+ 8 - 1
package/dansguardian/Makefile

@@ -13,18 +13,25 @@ PKG_DEPENDS:=		libpcre zlib
 PKG_BUILDDEP:=		pcre zlib
 PKG_URL:=		http://dansguardian.org/
 PKG_SITES:=		http://dansguardian.org/downloads/2/Stable/
+PKG_NEED_CXX:=		1
 PKG_CXX:=		DANSGUARDIAN
 
 include ${TOPDIR}/mk/package.mk
 
 $(eval $(call PKG_template,DANSGUARDIAN,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
+LIBRARIES:=-nodefaultlibs -luClibc++ -lgcc -lm
+ifeq ($(ADK_TOOLCHAIN_GCC_USE_SSP),y)
+LIBRARIES+=-lssp
+endif
+
 ifeq ($(ADK_COMPILE_DANSGUARDIAN_WITH_UCLIBCXX),y)
 CONFIGURE_ENV+=		CXXFLAGS="-fno-threadsafe-statics -fno-builtin -nostdinc++ \
 			-I${STAGING_TARGET_DIR}/usr/include/uClibc++" \
-			LIBS="-nodefaultlibs -luClibc++ -lgcc -lm"
+			LIBS="$(LIBRARIES)"
 endif
 
+
 CONFIGURE_ARGS+=	--enable-orig-ip \
 			--with-proxyuser=proxy \
 			--with-proxygroup=proxy

+ 3 - 3
package/dbus/patches/patch-configure

@@ -1,6 +1,6 @@
---- dbus-1.2.16.orig/configure	2009-07-14 21:43:08.000000000 +0200
-+++ dbus-1.2.16/configure	2010-01-15 19:03:24.000000000 +0100
-@@ -25213,19 +25213,6 @@ if test "x$GCC" = "xyes"; then
+--- dbus-1.2.24.orig/configure	2010-03-23 20:11:22.000000000 +0100
++++ dbus-1.2.24/configure	2011-01-14 19:21:37.000000000 +0100
+@@ -25294,19 +25294,6 @@ if test "x$GCC" = "xyes"; then
       ;;
    esac
  

+ 39 - 0
package/dbus/patches/patch-ltmain_sh

@@ -0,0 +1,39 @@
+--- dbus-1.2.24.orig/ltmain.sh	2010-03-12 23:22:29.000000000 +0100
++++ dbus-1.2.24/ltmain.sh	2011-01-14 19:22:39.000000000 +0100
+@@ -4765,7 +4765,7 @@ func_mode_link ()
+       # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+       # @file GCC response files
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"
+@@ -5516,27 +5516,6 @@ func_mode_link ()
+ 	      esac
+ 	    fi
+ 
+-	    # Hardcode the library path.
+-	    # Skip directories that are in the system default run-time
+-	    # search path.
+-	    case " $sys_lib_dlsearch_path " in
+-	    *" $absdir "*) ;;
+-	    *)
+-	      case "$compile_rpath " in
+-	      *" $absdir "*) ;;
+-	      *) compile_rpath="$compile_rpath $absdir"
+-	      esac
+-	      ;;
+-	    esac
+-	    case " $sys_lib_dlsearch_path " in
+-	    *" $libdir "*) ;;
+-	    *)
+-	      case "$finalize_rpath " in
+-	      *" $libdir "*) ;;
+-	      *) finalize_rpath="$finalize_rpath $libdir"
+-	      esac
+-	      ;;
+-	    esac
+ 	  fi # $linkmode,$pass = prog,link...
+ 
+ 	  if test "$alldeplibs" = yes &&

+ 30 - 3
package/digitemp/patches/patch-Makefile

@@ -1,7 +1,7 @@
 do not use static linking on Cygwin
 --- digitemp-3.6.0.orig/Makefile	2008-08-28 23:37:00.000000000 +0200
-+++ digitemp-3.6.0/Makefile	2010-01-06 19:12:56.868375000 +0100
-@@ -11,8 +11,8 @@
++++ digitemp-3.6.0/Makefile	2011-01-14 21:37:33.000000000 +0100
+@@ -11,8 +11,9 @@
  
  VERSION = 3.6.0
  
@@ -9,10 +9,20 @@ do not use static linking on Cygwin
 -CFLAGS	= -I./src -I./userial -O2 -Wall # -g
 +CC	?= gcc
 +CFLAGS	?= -I./src -I./userial 
++LDFLAGS ?=
  
  OBJS		=	src/digitemp.o src/device_name.o src/ds2438.o
  HDRS		= 	src/digitemp.h src/device_name.h
-@@ -57,7 +57,6 @@ endif
+@@ -45,7 +46,7 @@ DS2490OBJS	=	userial/ds2490/ownet.o user
+ # If you add a new OSTYPE here please email it to me so that I can add
+ # it to the distribution in the next release
+ # -----------------------------------------------------------------------
+-SYSTYPE := $(shell uname -s)
++SYSTYPE := Linux
+ 
+ ifeq ($(SYSTYPE), Linux)
+   CFLAGS += -DLINUX
+@@ -57,7 +58,6 @@ endif
  
  ifneq (, $(findstring CYGWIN,$(SYSTYPE)))
    CFLAGS += -DCYGWIN
@@ -20,3 +30,20 @@ do not use static linking on Cygwin
  endif
  
  ifeq ($(SYSTYPE), SunOS)
+@@ -116,13 +116,13 @@ all:		help
+ 
+ # Build the Linux executable
+ ds9097:		$(OBJS) $(HDRS) $(ONEWIREOBJS) $(ONEWIREHDRS) $(DS9097OBJS)
+-		$(CC) $(OBJS) $(ONEWIREOBJS) $(DS9097OBJS) -o digitemp_DS9097 $(LIBS)
++		$(CC) $(LDFLAGS) $(OBJS) $(ONEWIREOBJS) $(DS9097OBJS) -o digitemp_DS9097 $(LIBS)
+ 
+ ds9097u:	$(OBJS) $(HDRS) $(ONEWIREOBJS) $(ONEWIREHDRS) $(DS9097UOBJS)
+-		$(CC) $(OBJS) $(ONEWIREOBJS) $(DS9097UOBJS) -o digitemp_DS9097U $(LIBS)
++		$(CC) $(LDFLAGS) $(OBJS) $(ONEWIREOBJS) $(DS9097UOBJS) -o digitemp_DS9097U $(LIBS)
+ 
+ ds2490:		$(OBJS) $(HDRS) $(ONEWIREOBJS) $(ONEWIREHDRS) $(DS2490OBJS)
+-		$(CC) $(OBJS) $(ONEWIREOBJS) $(DS2490OBJS) -o digitemp_DS2490 $(LIBS)
++		$(CC) $(LDFLAGS) $(OBJS) $(ONEWIREOBJS) $(DS2490OBJS) -o digitemp_DS2490 $(LIBS)
+ 
+ 
+ # Clean up the object files and the sub-directory for distributions

+ 1 - 1
package/dillo/Makefile

@@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=		dillo
 PKG_VERSION:=		2.2
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_MD5SUM:=		f8bcd62093f178bed81e46cc54e73f42
 PKG_DESCR:=		small graphical web browser
 PKG_SECTION:=		x11/apps

+ 11 - 0
package/dillo/patches/patch-Makefile_in

@@ -0,0 +1,11 @@
+--- dillo-2.2.orig/Makefile.in	2010-02-11 11:20:01.000000000 +0100
++++ dillo-2.2/Makefile.in	2011-01-07 21:37:49.000000000 +0100
+@@ -242,7 +242,7 @@ target_vendor = @target_vendor@
+ top_build_prefix = @top_build_prefix@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+-SUBDIRS = lout dw dlib dpip src doc dpid dpi test
++SUBDIRS = lout dw dlib dpip src doc dpid dpi
+ EXTRA_DIST = Doxyfile dillorc install-dpi-local
+ sysconf_DATA = dillorc
+ all: config.h

+ 14 - 0
package/dillo/patches/patch-configure

@@ -0,0 +1,14 @@
+--- dillo-2.2.orig/configure	2010-02-11 11:19:59.000000000 +0100
++++ dillo-2.2/configure	2011-01-07 21:35:04.000000000 +0100
+@@ -5830,11 +5830,6 @@ typedef unsigned char   bool_t;
+ _______EOF
+ 
+ 
+-if test "`$CPP -v < /dev/null 2>&1 | grep '/usr/local/include' 2>&1`" = ""; then
+-  CPPFLAGS="$CPPFLAGS -I/usr/local/include"
+-  LDFLAGS="$LDFLAGS -L/usr/local/lib"
+-fi
+-
+ for ac_func in gethostbyname
+ do :
+   ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"

+ 11 - 0
package/dillo/patches/patch-src_IO_Makefile_in

@@ -0,0 +1,11 @@
+--- dillo-2.2.orig/src/IO/Makefile.in	2010-02-11 11:20:01.000000000 +0100
++++ dillo-2.2/src/IO/Makefile.in	2011-01-07 21:38:15.000000000 +0100
+@@ -188,7 +188,7 @@ top_build_prefix = @top_build_prefix@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ AM_CPPFLAGS = -DDILLO_BINDIR='"$(bindir)/"'
+-AM_CFLAGS = @LIBFLTK_CFLAGS@
++AM_CFLAGS = 
+ AM_CXXFLAGS = @LIBFLTK_CXXFLAGS@
+ noinst_LIBRARIES = libDiof.a
+ libDiof_a_SOURCES = \

+ 3 - 6
package/dnsmasq/Makefile

@@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk
 
 PKG_NAME:=		dnsmasq
 PKG_VERSION:=		2.55
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_MD5SUM:=		b093d7c6bc7f97ae6fd35d048529232a
 PKG_DESCR:=		A lightweight DNS and DHCP server
 PKG_SECTION:=		dns
@@ -17,13 +17,10 @@ include ${TOPDIR}/mk/package.mk
 $(eval $(call PKG_template,DNSMASQ,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
 CONFIG_STYLE:=		manual
-INSTALL_STYLE:=		manual
 
-MAKE_FLAGS+=		BINDIR=/usr/sbin MANDIR=/usr/man COPTS="${TCFLAGS}"
-
-do-install:
+post-install:
 	${INSTALL_DIR} ${IDIR_DNSMASQ}/usr/sbin ${IDIR_DNSMASQ}/etc
-	${INSTALL_BIN} ${WRKBUILD}/src/dnsmasq ${IDIR_DNSMASQ}/usr/sbin/
+	${INSTALL_BIN} ${WRKINST}/usr/sbin/dnsmasq ${IDIR_DNSMASQ}/usr/sbin/
 	${INSTALL_DATA} ./files/dnsmasq.conf ${IDIR_DNSMASQ}/etc/dnsmasq.conf
 
 include ${TOPDIR}/mk/pkg-bottom.mk

+ 20 - 0
package/dnsmasq/patches/patch-Makefile

@@ -0,0 +1,20 @@
+--- dnsmasq-2.55.orig/Makefile	2010-06-06 21:22:30.000000000 +0200
++++ dnsmasq-2.55/Makefile	2011-01-07 21:43:23.000000000 +0100
+@@ -13,7 +13,7 @@
+ #  You should have received a copy of the GNU General Public License
+ #  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+-PREFIX = /usr/local
++PREFIX = /usr
+ BINDIR = ${PREFIX}/sbin
+ MANDIR = ${PREFIX}/share/man
+ LOCALEDIR = ${PREFIX}/share/locale
+@@ -24,7 +24,7 @@ MSGMERGE = msgmerge
+ MSGFMT = msgfmt
+ XGETTEXT = xgettext
+ 
+-CFLAGS = -Wall -W -O2
++CFLAGS ?= -Wall
+ 
+ #################################################################
+ 

+ 4 - 4
package/dnsmasq/patches/patch-src_config_h

@@ -1,6 +1,6 @@
---- dnsmasq-2.47.orig/src/config.h	2009-02-05 13:14:24.000000000 +0100
-+++ dnsmasq-2.47/src/config.h	2009-03-19 18:40:37.000000000 +0100
-@@ -45,7 +45,7 @@
+--- dnsmasq-2.55.orig/src/config.h	2010-06-07 23:01:19.000000000 +0200
++++ dnsmasq-2.55/src/config.h	2011-01-07 21:40:34.000000000 +0100
+@@ -47,7 +47,7 @@
  #   elif defined(__sun__) || defined (__sun)
  #      define LEASEFILE "/var/cache/dnsmasq.leases"
  #   else
@@ -9,7 +9,7 @@
  #   endif
  #endif
  
-@@ -282,8 +282,9 @@ typedef unsigned long in_addr_t; 
+@@ -269,8 +269,9 @@ NOTES:
  /* We assume that systems which don't have IPv6
     headers don't have ntop and pton either */
  

+ 2 - 4
package/dosfstools/Makefile

@@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk
 
 PKG_NAME:=		dosfstools
 PKG_VERSION:=		3.0.9
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_MD5SUM:=		bd273cf8aa6341c0b52cbac72050bcf4
 PKG_DESCR:=		Utilities to create and check MS-DOS FAT filesystems
 PKG_SECTION:=		fs
@@ -17,9 +17,7 @@ include ${TOPDIR}/mk/package.mk
 $(eval $(call PKG_template,DOSFSTOOLS,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
 CONFIG_STYLE:=		manual
-
-XAKE_FLAGS+=		PREFIX="" \
-			OPTFLAGS="${TARGET_CFLAGS} -D_FILE_OFFSET_BITS=64"
+XAKE_FLAGS+=		PREFIX="" OPTFLAGS="-D_FILE_OFFSET_BITS=64"
 
 post-install:
 	${INSTALL_DIR} ${IDIR_DOSFSTOOLS}/sbin

+ 11 - 0
package/dosfstools/patches/patch-Makefile

@@ -0,0 +1,11 @@
+--- dosfstools-3.0.9.orig/Makefile	2009-10-04 11:03:23.000000000 +0200
++++ dosfstools-3.0.9/Makefile	2011-01-07 21:50:15.000000000 +0100
+@@ -29,7 +29,7 @@ OPTFLAGS = -O2 -fomit-frame-pointer $(sh
+ #WARNFLAGS = -Wall -pedantic -std=c99
+ WARNFLAGS = -Wall
+ DEBUGFLAGS = -g
+-CFLAGS += $(OPTFLAGS) $(WARNFLAGS) $(DEBUGFLAGS)
++CFLAGS += $(WARNFLAGS)
+ 
+ VPATH = src
+ 

+ 1 - 1
package/dovecot/Makefile

@@ -12,7 +12,7 @@ PKG_SECTION:=		mail
 PKG_URL:=		http://www.dovecot.org/
 PKG_SITES:=		http://www.dovecot.org/releases/2.0/
 
-PKG_CHOICES:=		WITH_OPENSSL WITH_GNUTLS
+PKG_CHOICES_DOVECOT:=	WITH_OPENSSL WITH_GNUTLS
 PKGCD_WITH_OPENSSL:=	use OpenSSL for crypto
 PKGCS_WITH_OPENSSL:=	libopenssl
 PKGCB_WITH_OPENSSL:=	openssl

Some files were not shown because too many files changed in this diff