From 2e438af4f87dda8adf1a7beb8bdf5b629a2bb743 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Mon, 13 Apr 2020 22:38:37 -0400 Subject: [PATCH] system/ciopfs: New maintainer. Signed-off-by: B. Watson Signed-off-by: Willy Sudiarto Raharjo --- system/ciopfs/README | 10 ++- system/ciopfs/ciopfs.SlackBuild | 37 ++++----- system/ciopfs/ciopfs.info | 4 +- system/ciopfs/ciopfs.txt | 138 ++++++++++++++++++++++++++++++++ system/ciopfs/slack-desc | 2 +- 5 files changed, 167 insertions(+), 24 deletions(-) create mode 100644 system/ciopfs/ciopfs.txt diff --git a/system/ciopfs/README b/system/ciopfs/README index 8288557370..2c70999a57 100644 --- a/system/ciopfs/README +++ b/system/ciopfs/README @@ -1,3 +1,7 @@ -ciopfs is a case-insensitive FUSE filesystem. It is useful for getting -around issues where, say, a game is ported from Linux to Windows but -the mods for that game still expect a case-insenitive filesystem. +ciopfs (case insensitive on purpose filesystem) + +ciopfs is a stackable or overlay linux userspace file system (implemented +with FUSE) which mounts a normal directory on a regular file sytem in +case insensitive fashion. It's useful for getting around issues where, +say, a game is ported from Linux to Windows but the mods for that game +still expect a case-insenitive filesystem. diff --git a/system/ciopfs/ciopfs.SlackBuild b/system/ciopfs/ciopfs.SlackBuild index 27b116836c..6658402742 100644 --- a/system/ciopfs/ciopfs.SlackBuild +++ b/system/ciopfs/ciopfs.SlackBuild @@ -3,6 +3,7 @@ # Slackware build script for ciopfs # Copyright 2015 Dugan Chen Canada +# Copyright 2020 B. Watson # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,6 +23,11 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# 20200413 bkw: +# - take over maintenance +# - i486 => i586 +# - include "links -dump" of web page as ciopfs.txt + PRGNAM=ciopfs VERSION=${VERSION:-0.4} BUILD=${BUILD:-1} @@ -29,7 +35,7 @@ TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) ARCH=i486 ;; + i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac @@ -40,8 +46,8 @@ TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" @@ -63,28 +69,23 @@ rm -rf $PRGNAM-$VERSION tar xvf $CWD/$PRGNAM-$VERSION.tar.gz cd $PRGNAM-$VERSION chown -R root:root . -find -L . \ - \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ - -o -perm 511 \) -exec chmod 755 {} \; -o \ - \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ - -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; - +find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \ + \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+ CFLAGS="$SLKCFLAGS" \ -CXXFLAGS="$SLKCFLAGS" \ -make -install -Dm755 ciopfs $PKG/bin/ciopfs -mkdir -p $PKG/sbin -( cd $PKG/sbin -ln -s ../bin/ciopfs mount.ciopfs -) + make -find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ - | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true +install -s -Dm755 ciopfs $PKG/bin/ciopfs +mkdir -p $PKG/sbin +ln -s ../bin/ciopfs $PKG/sbin/mount.ciopfs mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +# 20200413 bkw: Upstream includes no documentation. Text file made from +# upstream's web site. +cat $CWD/$PRGNAM.txt > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.txt + mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc diff --git a/system/ciopfs/ciopfs.info b/system/ciopfs/ciopfs.info index 1b7880ed43..64b2a2ee75 100644 --- a/system/ciopfs/ciopfs.info +++ b/system/ciopfs/ciopfs.info @@ -6,5 +6,5 @@ MD5SUM="1798fc043034f292efd887c05fc4ea1e" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" -MAINTAINER="Dugan Chen" -EMAIL="thedoogster [at] gmail [dot] com" +MAINTAINER="B. Watson" +EMAIL="yalhcru@gmail.com" diff --git a/system/ciopfs/ciopfs.txt b/system/ciopfs/ciopfs.txt new file mode 100644 index 0000000000..2d5981faa0 --- /dev/null +++ b/system/ciopfs/ciopfs.txt @@ -0,0 +1,138 @@ + ciopfs - case insensitive on purpose filesystem + +ciopfs is a stackable or overlay linux userspace file system (implemented with +FUSE) which mounts a normal directory on a regular file system in case +insensitive fashion. + +The commands below should illustrate it’s function: + +mkdir -p ~/tmp/ciopfs/{.data,case-insensitive} +ciopfs ~/tmp/ciopfs/.data ~/tmp/ciopfs/case-insensitive +cd ~/tmp/ciopfs +mkdir -p case-insensitive/DeMo/SubFolder +echo demo >> case-insensitive/DEMO/subFolder/MyFile + +At this point your file system should look like this: + +case-insensitive +`-- DeMo + `-- SubFolder + `-- MyFile +.data +`-- demo + `-- subfolder + `-- myfile + +To avoid any conflicts you should not manipulate the data directory directly, +any change should be done over the mount point. All filenames in the data +directory which aren’t all lower case are ignored. + +If you want to mount the file system automatically at boot time add a line like +the one below to your /etc/fstab. + +/ciopfs/data /ciopfs/mnt ciopfs allow_other,default_permissions,use_ino,attr_timeout=0 0 0 + +Note that ciopfs is primarily designed for single user mode. It was originally +developed to mount the wine program folder and provide faster case insensitive +file access. If you want to give multiple users write access to the same file +system, then you have to mount it as root. However, in order to avoid security +problems ciopfs will force fuse into single threaded mode and thus hurt +performance. + +News + + * ciopfs-0.4 released (18.06.2011) + * Bugfix in symlink creation + * Better errno handling + * ciopfs-0.3 released (25.09.2010) + * Security improvements: ciopfs forces single threaded mode if the file + system is mounted by root and accessible for others + * ASCII mode should now work (an off by one error which caused a segfault + was fixed) + * Various bug fixes + * ciopfs-0.2 released (30.06.2008) + * Unicode support based on glib + * Better error handling in out of memory situations + * Various code cleanups + * ciopfs-0.1 released (24.05.2008) + +How it works + +ciopfs works by translating every path element to lower case before further +operations take place. On file or directory creation the original file name is +stored in an extended attribute which is later returned upon request. + +This is illustrated below: + +getfattr -dR .data +# file: .data/demo +user.filename="DeMo" + +# file: .data/demo/subfolder +user.filename="SubFolder" + +# file: .data/demo/subfolder/myfile +user.filename="MyFile" + +Runtime Requirements + +If you want the file system to preserve case information you have to make sure +that the underlying file system supports extended attributes (for example for +ext{2,3} you need a kernel with CONFIG_EXT{2,3}_FS_XATTR enabled). You probably +also want to mount the underlying filesystem with the user_xattr option which +allows non root users to create extended attributes. + +Build Requirements + +In order to compile ciopfs you will need the fuse development files, libattr and +if you plan to use Unicode characters within file names you will either need +glib which is the default or alternatively libicu. + +If you want to use neither of those the file system will fall back to libc’s +tolower(3) function which is only defined for [a-zA-Z]. Hence, it will only work +case insensitively for ASCII file names. + +For ease of use the following 3 Makefile targets are supported: + + * unicode-glib (default) + * unicode-icu + * ascii + +Running one of those followed by sudo make install should do everything that is +needed. + +Alternatively, you can also use one of the distribution provided binary +packages. + +POSIX Compliance + +ciopfs passes all test of a slightly patched POSIX file system test suite when +mounted as root user with the following options: + +allow_other,use_ino,attr_timeout=0,entry_timeout=0 + +and $fs set to "ciopfs" in the test suite configuration file. This was last +tested with pjd-fstest-20090130-RC.tgz and ext3 as the underlying file system. + +Stability and Speed + +ciopfs just passes every requested operation to the underlying file system, so +in theory it shouldn’t have a negative impact on stability. However, if you find +a bug then send me an email with the instruction to reproduce it. + +As far as speed is of concern, I didn’t really benchmark or optimize it so far. +There is the usual overhead associated with user / kernel space context +switches. Furthermore, ciopfs in it’s current implementation uses libc’s +malloc/free quite extensively, maybe this could be a bottleneck. + +Development + +You can always fetch the current code base from the git repository located at +Github or Sourcehut. + +If you have comments, suggestions, ideas, a bug report, a patch or something +else related to ciopfs then don’t hesitate to write me an email. + +License + +ciopfs is licensed under the GNU GPL v2. diff --git a/system/ciopfs/slack-desc b/system/ciopfs/slack-desc index 71fd50e058..dc82790fcd 100644 --- a/system/ciopfs/slack-desc +++ b/system/ciopfs/slack-desc @@ -6,7 +6,7 @@ # customary to leave one space after the ':' except on otherwise blank lines. |-----handy-ruler------------------------------------------------------| -ciopfs: ciopfs (case insensitive FUSE filesystem) +ciopfs: ciopfs (case insensitive on purpose filesystem) ciopfs: ciopfs: ciopfs is a stackable or overlay linux userspace file system ciopfs: (implemented with fuse) which mounts a normal directory on a regular