system/ciopfs: New maintainer.

Signed-off-by: B. Watson <yalhcru@gmail.com>

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2020-04-13 22:38:37 -04:00 committed by Willy Sudiarto Raharjo
parent 9b3bef6888
commit 2e438af4f8
No known key found for this signature in database
GPG key ID: 887B8374D7333381
5 changed files with 167 additions and 24 deletions

View file

@ -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.

View file

@ -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

View file

@ -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"

138
system/ciopfs/ciopfs.txt Normal file
View file

@ -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 its 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 arent 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 libcs
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 shouldnt 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 didnt really benchmark or optimize it so far.
There is the usual overhead associated with user / kernel space context
switches. Furthermore, ciopfs in its current implementation uses libcs
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 dont hesitate to write me an email.
License
ciopfs is licensed under the GNU GPL v2.

View file

@ -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