From 90832dbe97a44069856768ee81b3baf6743b215c Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Fri, 7 Jan 2011 18:21:32 +0100 Subject: real solution for the aufs2-util problem - export the aufs2 branch's content into a tarball - fetch that tarball from a local mirror (for now) - drop that Makefile patch, can be solved by passing the right params to make Signed-off-by: Phil Sutter --- package/aufs2-util/Makefile | 27 +- package/aufs2-util/patches/patch-Makefile | 33 - package/aufs2-util/src/COPYING | 340 ------ package/aufs2-util/src/Makefile | 93 -- package/aufs2-util/src/README | 46 - package/aufs2-util/src/au_util.h | 67 -- package/aufs2-util/src/aubrsync | 304 ------ package/aufs2-util/src/auchk | 130 --- package/aufs2-util/src/aufs.in.5 | 1684 ----------------------------- package/aufs2-util/src/aufs.shlib | 83 -- package/aufs2-util/src/auplink.c | 64 -- package/aufs2-util/src/br.c | 172 --- package/aufs2-util/src/c2sh.c | 42 - package/aufs2-util/src/c2tmac.c | 44 - package/aufs2-util/src/compat.h | 34 - package/aufs2-util/src/mount.aufs.c | 255 ----- package/aufs2-util/src/mtab.c | 216 ---- package/aufs2-util/src/plink.c | 356 ------ package/aufs2-util/src/proc_mnt.c | 85 -- package/aufs2-util/src/rdu.c | 749 ------------- package/aufs2-util/src/umount.aufs | 31 - 21 files changed, 23 insertions(+), 4832 deletions(-) delete mode 100644 package/aufs2-util/patches/patch-Makefile delete mode 100644 package/aufs2-util/src/COPYING delete mode 100644 package/aufs2-util/src/Makefile delete mode 100644 package/aufs2-util/src/README delete mode 100644 package/aufs2-util/src/au_util.h delete mode 100755 package/aufs2-util/src/aubrsync delete mode 100755 package/aufs2-util/src/auchk delete mode 100644 package/aufs2-util/src/aufs.in.5 delete mode 100644 package/aufs2-util/src/aufs.shlib delete mode 100644 package/aufs2-util/src/auplink.c delete mode 100644 package/aufs2-util/src/br.c delete mode 100644 package/aufs2-util/src/c2sh.c delete mode 100644 package/aufs2-util/src/c2tmac.c delete mode 100644 package/aufs2-util/src/compat.h delete mode 100644 package/aufs2-util/src/mount.aufs.c delete mode 100644 package/aufs2-util/src/mtab.c delete mode 100644 package/aufs2-util/src/plink.c delete mode 100644 package/aufs2-util/src/proc_mnt.c delete mode 100644 package/aufs2-util/src/rdu.c delete mode 100755 package/aufs2-util/src/umount.aufs diff --git a/package/aufs2-util/Makefile b/package/aufs2-util/Makefile index 4078fa8e1..14ceeb4c7 100644 --- a/package/aufs2-util/Makefile +++ b/package/aufs2-util/Makefile @@ -4,26 +4,45 @@ include $(TOPDIR)/rules.mk PKG_NAME:= aufs2-util -PKG_VERSION:= 130809 +PKG_VERSION:= 2-301210 PKG_RELEASE:= 1 +PKG_MD5SUM:= 83b07d6a6d43362dfc234ecff11367f3 PKG_DESCR:= aufs2 utilities PKG_SECTION:= fs PKG_URL:= http://aufs.sf.net/ +# created from git via: +# $ git archive --format tar origin/aufs2 | \ +# 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} +TCFLAGS+= -I${LINUX_DIR}/include +XAKE_FLAGS+= Install=install 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_BIN) ${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 diff --git a/package/aufs2-util/patches/patch-Makefile b/package/aufs2-util/patches/patch-Makefile deleted file mode 100644 index 5cfb193c3..000000000 --- a/package/aufs2-util/patches/patch-Makefile +++ /dev/null @@ -1,33 +0,0 @@ - - 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 $< $@ - -+c2sh c2tmac: CC = ${HOSTCC} -+c2sh c2tmac: CFLAGS="-I${KDIR}/include" -+c2sh c2tmac: LDFLAGS= -+c2sh c2tmac: CPPFLAGS= -+ - 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 - 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 diff --git a/package/aufs2-util/src/COPYING b/package/aufs2-util/src/COPYING deleted file mode 100644 index f90922eea..000000000 --- a/package/aufs2-util/src/COPYING +++ /dev/null @@ -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. - - - Copyright (C) - - 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. - - , 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. diff --git a/package/aufs2-util/src/Makefile b/package/aufs2-util/src/Makefile deleted file mode 100644 index 544dfc538..000000000 --- a/package/aufs2-util/src/Makefile +++ /dev/null @@ -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 diff --git a/package/aufs2-util/src/README b/package/aufs2-util/src/README deleted file mode 100644 index 1e1f45422..000000000 --- a/package/aufs2-util/src/README +++ /dev/null @@ -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: ; diff --git a/package/aufs2-util/src/au_util.h b/package/aufs2-util/src/au_util.h deleted file mode 100644 index 21b965510..000000000 --- a/package/aufs2-util/src/au_util.h +++ /dev/null @@ -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 -#include - -/* - * 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__ */ diff --git a/package/aufs2-util/src/aubrsync b/package/aufs2-util/src/aubrsync deleted file mode 100755 index 54adac9cb..000000000 --- a/package/aufs2-util/src/aubrsync +++ /dev/null @@ -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" diff --git a/package/aufs2-util/src/auchk b/package/aufs2-util/src/auchk deleted file mode 100755 index 26a3d8027..000000000 --- a/package/aufs2-util/src/auchk +++ /dev/null @@ -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 diff --git a/package/aufs2-util/src/aufs.in.5 b/package/aufs2-util/src/aufs.in.5 deleted file mode 100644 index 0cbb14487..000000000 --- a/package/aufs2-util/src/aufs.in.5 +++ /dev/null @@ -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 -/\*[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 -/fs/aufs/si_/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 -/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 /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 `=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 `=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 -/fs/aufs/si_/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 maxim