alperakcan / fuse-ext2

Fuse-ext2 is a multi OS FUSE module to mount ext2, ext3 and ext4 file system devices and/or images with read write support.
GNU General Public License v2.0
798 stars 127 forks source link

OSX 10.11 "El Capitan" make fails #10

Closed josecanciani closed 7 years ago

josecanciani commented 9 years ago

Hello. I've installed El Capitan and I'm trying to build ext2fuse.

I've installed OSXFUSE 2.8 (which should work with El Capitan). I also have Xcode 7 beta and it's Command Line tools (I had to run xcode-select --switch pointing to the Xcode beta path).

Then I've installed e2fsprogs with homebrew and I was able to run the configure script of ext2fuse with this environment:

$ CFLAGS="-idirafter/usr/local/Cellar/e2fsprogs/1.42.12/include -idirafter/usr/local/include/osxfuse" LDFLAGS="-L/usr/local/Cellar/e2fsprogs/1.42.12/lib" ./configure

But when I try "make" it seems everything goes as planned until it reaches this error:

$ make
/Applications/Xcode-beta.app/Contents/Developer/usr/bin/make  all-recursive
Making all in fuse-ext2
make[2]: Nothing to be done for 'all'.
Making all in tools
Making all in macosx
( cd ../../tools/macosx/prefpane; \
      xcodebuild; \
    )
=== BUILD TARGET fuse-ext2 OF PROJECT fuse-ext2 WITH THE DEFAULT CONFIGURATION (Release) ===

Check dependencies
error: There is no SDK with the name or path '/Users/joe/Sites/fuse-ext2/tools/macosx/prefpane/macosx10.9'

** BUILD FAILED **

The following build commands failed:
    Check dependencies
(1 failure)
make[3]: *** [prefpane] Error 65
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

Any ideas?

Thanks, Jose

colindean commented 9 years ago

This configure line worked better for me. It doesn't hardcode package versions. I'm on Mavericks.

CFLAGS="-idirafter/$(brew --prefix e2fsprogs)/include -idirafter/usr/local/include/osxfuse" LDFLAGS="-L$(brew --prefix e2fsprogs)/lib" ./configure
josecanciani commented 9 years ago

Yeah, it's cleaner, but it doesn't fix the original problem :(

alperakcan commented 9 years ago

can you please try again with commit 6fa1c01f133581f027b8dcda0e890bcbb8053b26

josecanciani commented 9 years ago

Yes, make ended without errors! But the sudo make install is getting this:

$ sudo make install Making install in fuse-ext2 .././install-sh -c -d '/usr/local/bin' /bin/sh ../libtool --mode=install /usr/bin/install -c fuse-ext2 fuse-ext2.probe fuse-ext2.wait fuse-ext2.install fuse-ext2.uninstall '/usr/local/bin' libtool: install: /usr/bin/install -c fuse-ext2 /usr/local/bin/fuse-ext2 libtool: install: /usr/bin/install -c fuse-ext2.probe /usr/local/bin/fuse-ext2.probe libtool: install: /usr/bin/install -c fuse-ext2.wait /usr/local/bin/fuse-ext2.wait libtool: install: /usr/bin/install -c fuse-ext2.install /usr/local/bin/fuse-ext2.install libtool: install: /usr/bin/install -c fuse-ext2.uninstall /usr/local/bin/fuse-ext2.uninstall /usr/bin/install -c -d "/sbin" install: chmod 755 /sbin: Operation not permitted ln -s -f "../System/Library/Filesystems/fuse-ext2.fs/mount_fuse-ext2" "/sbin/mount_fuse-ext2" ln: /sbin/mount_fuse-ext2: Operation not permitted make[2]: * [install-exec-local] Error 1 make[1]: * [install-am] Error 2 make: *\ [install-recursive] Error 1

josecanciani commented 9 years ago

I'll update Xcode from beta 3 to current beta 5 and I'll let you know.

josecanciani commented 9 years ago

It seems that won't work, it has to do with the new rootless feature, no-one can touch the /sbin folder: http://www.macworld.com/article/2948140/os-x/private-i-el-capitans-system-integrity-protection-will-shift-utilities-functions.html

Can we change the install script to install elsewhere? Will it automatically mount if we do?

jgclark commented 9 years ago

Same issue as @josecanciani: the make install fails because of /sbin mentions. I tried changing the Makefile accordingly, but am too rusty on how these things work.

josecanciani commented 9 years ago

I tried creating /usr/loca/sbin and then running both with: ./configure --sbindir=/usr/local/sbin sudo make install exec_prefix=/usr/local and it gave the same error: /usr/bin/install -c -d "/sbin" install: chmod 755 /sbin: Operation not permitted

The /sbin dir must be hardcoded somewhere. But again I don't know if fuse-ext2 can work from another directory.

Any ideas?

Jose

jgclark commented 9 years ago

I tried the first of your commands, @josecanciani but this is the different error I got:

...
checking for lseek64... no
checking for library containing sem_post... none required
checking for library containing fuse_main... no
configure: error: Can't find libfuse, please install it
muammar commented 8 years ago

I also tried to configure to build from source but I get:

checking for uname... yes
checking for utime... yes
checking for llseek... no
checking for lseek64... no
checking for library containing sem_post... none required
checking for library containing fuse_main... no
configure: error: Can't find libfuse, please install it

FUSE for OS X seems to be correctly installed.

Update:

I run configure as follows:

$ CFLAGS="-idirafter/usr/local/Cellar/e2fsprogs/1.42.13/include -idirafter/usr/local/include/osxfuse/" LDFLAGS="-L/usr/local/lib -L/usr/local/Cellar/e2fsprogs/1.42.13/lib" ./configure  --sbindir=/usr/local/sbin

$ make -j4
...
** BUILD SUCCEEDED **

$ sudo make install
Making install in fuse-ext2
 /usr/local/bin/gmkdir -p '/usr/local/bin'
  /bin/sh ../libtool   --mode=install /usr/local/bin/ginstall -c fuse-ext2 fuse-ext2.probe fuse-ext2.wait fuse-ext2.install fuse-ext2.uninstall '/usr/local/bin'
libtool: install: /usr/local/bin/ginstall -c fuse-ext2 /usr/local/bin/fuse-ext2
libtool: install: /usr/local/bin/ginstall -c fuse-ext2.probe /usr/local/bin/fuse-ext2.probe
libtool: install: /usr/local/bin/ginstall -c fuse-ext2.wait /usr/local/bin/fuse-ext2.wait
libtool: install: /usr/local/bin/ginstall -c fuse-ext2.install /usr/local/bin/fuse-ext2.install
libtool: install: /usr/local/bin/ginstall -c fuse-ext2.uninstall /usr/local/bin/fuse-ext2.uninstall
/usr/local/bin/ginstall -c -d "/sbin"
ln -s -f "../System/Library/Filesystems/fuse-ext2.fs/mount_fuse-ext2" "/sbin/mount_fuse-ext2"
ln: /sbin/mount_fuse-ext2: Operation not permitted
make[2]: *** [install-exec-local] Error 1
make[1]: *** [install-am] Error 2
make: *** [install-recursive] Error 1

Therefore, the same error as reported by @josecanciani.

Edit 2:

@josecanciani it is hardcoded here:

https://github.com/alperakcan/fuse-ext2/blob/e6df7212b536842c25fd7ce59b0753aba1bd6b7a/fuse-ext2/Makefile.am

I changed it manually, but then:

Making install in fuse-ext2
 /usr/local/bin/gmkdir -p '/usr/local/bin'
  /bin/sh ../libtool   --mode=install /usr/local/bin/ginstall -c fuse-ext2 fuse-ext2.probe fuse-ext2.wait fuse-ext2.install fuse-ext2.uninstall '/usr/local/bin'
libtool: install: /usr/local/bin/ginstall -c fuse-ext2 /usr/local/bin/fuse-ext2
libtool: install: /usr/local/bin/ginstall -c fuse-ext2.probe /usr/local/bin/fuse-ext2.probe
libtool: install: /usr/local/bin/ginstall -c fuse-ext2.wait /usr/local/bin/fuse-ext2.wait
libtool: install: /usr/local/bin/ginstall -c fuse-ext2.install /usr/local/bin/fuse-ext2.install
libtool: install: /usr/local/bin/ginstall -c fuse-ext2.uninstall /usr/local/bin/fuse-ext2.uninstall
/usr/local/bin/ginstall -c -d "/sbin"
ln -s -f "../System/Library/Filesystems/fuse-ext2.fs/mount_fuse-ext2" "/usr/local/sbin/mount_fuse-ext2"
/Applications/Xcode.app/Contents/Developer/usr/bin/make  install-data-hook
make[3]: Nothing to be done for `install-data-hook'.
Making install in tools
Making install in macosx
/usr/local/bin/ginstall -c -d /System/Library/Filesystems/fuse-ext2.fs
/usr/local/bin/ginstall: cannot change permissions of ‘/System/Library/Filesystems/fuse-ext2.fs’: No such file or directory
make[3]: *** [install-exec-local] Error 1
make[2]: *** [install-am] Error 2
make[1]: *** [install-recursive] Error 1
make: *** [install-recursive] Error 1

/System/ is also protected by the rootless thingy from Apple...

muammar commented 8 years ago

I "solved" this partially by installing the fuse-ext2 binary after disabling rootless as shown in here:

http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html

jgclark commented 8 years ago

Like @muammar I disabled SIP and then it seemed to build and install OK. But it failed on the tests shown in the README, not finding the files listed.

I plugged in a very old external disk with what I think are ext2 partitions, and diskutil reports that it's mounted them as ext2, without me doing anything. Should this be the behaviour? I was still expecting to have to mount manually. The 2 mounted ext2 partitions are completely empty, which is suspicious.

muammar commented 8 years ago

@jgclark I didn't do the tests in README, but so far I can access my ext4 partition with writing support as usual.

Normally, the partitions are mounted automatically. In my case, I can access all content in the partitions.

jgclark commented 8 years ago

Glad it's working for you! Thanks for confirming it will mount automatically for you.

surak commented 8 years ago

Can you post the binary so others don't have to suffer as you already did? :-)

muammar commented 8 years ago

@surak You can install the version that is published by @alperakcan in sourceforge. That's what I used.

jgclark commented 8 years ago

@muammar Thanks for the tip. For others, it's at http://sourceforge.net/projects/fuse-ext2/?source=directory

Gminded commented 8 years ago

@jgclark The only version at sourceforge is 0.0.7, as far as I know. That doesn't appear to work in El Capitan (at least on my machine).

Actually the latest version didn't work well for me either, it just generates lots of Untitled volumes, but I suspect that something went wrong when I compiled it.

surak commented 8 years ago

@muammar it does not work for el capitan.

muammar commented 8 years ago

You have to disable csrutil:

muammar@zarathustra ⮀ ~ ⮀ csrutil status
System Integrity Protection status: enabled (Custom Configuration).

Configuration:
    Apple Internal: disabled
    Kext Signing: disabled
    Filesystem Protections: disabled
    Debugging Restrictions: disabled
    DTrace Restrictions: disabled
    NVRAM Protections: disabled

This is an unsupported configuration, likely to break in the future and leave your machine in an unknown state.
screen shot 2015-10-24 at 00 30 43 screen shot 2015-10-24 at 00 31 11 screen shot 2015-10-24 at 00 31 35 screen shot 2015-10-24 at 00 34 24

@surak It does work for El Capitan (at least in my system).

vult2000 commented 8 years ago

I can't make it work. I'm fairly certain the build is completing and it installs (I did the csrutil fix), but it will not mount regardless of which method I choose. Whether I issue the command as:

mount -t fuse-ext /dev/disk2s2 /Volumes/Linux

-or-

fuse-ext /dev/disk2s2 /Volumes/Linux

neither command issues any error messages, but the disk does not mount. I watch the system.log when running the commands and nothing shows there either. I'm stumped. If I open the System Prefs I see the same thing as you (except 0.09 for the fuse-ext2 version).

Any ideas?

gregdaynes commented 8 years ago

@vult2000 Try sudo, and make sure you make the director Linux in /Volumes

mkdir /Volumes/Linux
sudo fuse-ext /dev/disk2s2 /Volumes/Linux
alamaz commented 8 years ago

@vul2000 @gregdaynes I had a similar problem (no mount and no error message) the trick was to use sudo for mkdir and fuse-ext as well (permissions issue)

jstep322 commented 8 years ago

I cannot get this to work. My problem is similar to @vult2000.

Running OS X El Capitan 10.11.2. I installed Fuse 2.8.2 from their website. After disabling csrutil, I installed fuse-ext2 0.0.7 from the sourceforge link.

However, when I try to run: sudo mount -t fuse-ext2 /dev/disk1s1 /Volumes/Linux A window pops up with the following error:

FUSE-EXT2 could not mount /dev/disk1
at /Volumes/Linux because the following problem occurred:

fuse-ext2: version:'0.0.7', fuse_version:'27' [main (../../fuse-ext2/fuse-ext2.c:324)]
fuse-ext2: enter [do_probe (../../fuse-ext2/do_probe.c:30)]
fuse-ext2: Error while trying to open /dev/disk1 (rc=13) [do_probe (../../fuse-ext2/do_probe.c:34)]
fuse-ext2: Probe failed [main (../../fuse-ext2/fuse-ext2.c:340)]

And when I try to run: sudo fuse-ext2 /dev/disk1s1 /Volumes/Linux, the command completes without printing an error, but the disk is not mounted.

Does it matter that I am using fuse-ext2 instead of fuse-ext?

I also tried this with fuse-ext2 0.0.9, and I get the same popup window but no error.

Note: I am trying to read/write an ext4-formatted SD card (I loaded it with Raspbian Jessie following these instructions). I tried fuse-ext2 with the disk both mounted and unmounted (diskutil), but no luck yet.

EDIT: I was able to mount the ext4 filesystem from my SD card by using a Linux VM as described here.

matjack1 commented 8 years ago

I have the exact same problem as @jstep322, but with an ext3 filesystem.

chunkster29 commented 8 years ago

I've got it working using the Official Version from http://prdownloads.sourceforge.net/fuse-ext2/fuse-ext2-0.0.7.dmg?download using osx fuse 2.8.3 tested on both Yosemite and El Capitan with SIP turned off if have it installed already remove with sudo make uninstall from the directory you installed it from and install the dmg version

eblot commented 8 years ago

Installing to /Library rather than to /System/Library does help: 95c8e5f6b416b061f941bcd4333ff0bd32fa00f9 The latest version (v0.0.9) works on El Capitan w/o messing with SIP settings

$  csrutil status
System Integrity Protection status: enabled.
$ mount | grep ext2
/dev/disk4s2 on /Volumes/Development/root (osxfusefs_ext2, local, synchronous)
$ df | grep disk4s2
/dev/disk4s2                        29688888    595752  27585024     3%     2243   940605    0%   /Volumes/Development/root
savoca commented 8 years ago

@alperakcan Any instructions on uninstallation? No point in having broken installations taking up disk space needlessly since you seem to be unable to support El Capitan.

RobertJansson commented 8 years ago

I deployed a computer with OS X 10.11.3, compiled and installed the myriad of tools needed and disabled rootless before it successfully compiled. It was a hassle to get the binary but it's now working when put in /Library/FileSystems. Made the folder and mounted with: /usr/local/bin/fuse-ext2 /dev/disk1s1 /Volumes/Linux gfx

Michelasso commented 8 years ago

@RobertJansson Any chance we can get the 0.0.9 binary for El Capitan already compiled?

RobertJansson commented 8 years ago

I would absolutely upload that but only if that doesn't violate any license? Can anyone tell if such distribution must contain any documents and also let me know if you know any good distribution model? Can we do it here somehow?

Michelasso commented 8 years ago

I think that if you fork this project and add the download there it should be fine. As long as the code and any change you make stay in public domain. Although I believe the best solution would be if the master could integrate your changes. But I'm not really an expert of this legal stuff.

RobertJansson commented 8 years ago

There is no change in code but a huge hassle to setup the full environmental, build and compile. I'll try and upload a simple installer here but make sure it doesn't surface or re-distributes elsewhere. I truly hope someone delete this post if there are any form of violations because my true intention is to help.

Please try this installer and let me know if it does the job or if there are any problems. I have not bothered with certificate so control-click and select open to pass the quarantine. Two files will be installed:

/Library/Filesystems/fuse-ext2.fs (v.0.0.9)
/Library/PreferencePanes/fuse-ext2.prefPane (64 bit version)

Installer: fuse-ext2 (OSX 10.11).v0.0.9.pkg.zip

Michelasso commented 8 years ago

Ok Robert, I could install the package with no issues as you can see on thus screenshot:

screenshot 2016-03-20 09 11 05

The problem is that I have a couple of SD cards partitioned FAT32/ext4 (I think it was ext4) and only the FAT32 gets recognized. But I know the ext partitions were recognized in Yosemite.

Could it be because I've run

sudo fuse-ext2.uninstall

before installing it? There are no fuse-ext2.* files in /use/local/bin either.

PS: now that I checked it better your .pkg file is only 54KB? What did I exactly install?

Michelasso commented 8 years ago

I restored with Time Machine all fuse-ext2 files I uninstalled. This is what I get:

bash-3.2# fuse-ext2 -o rw+ /dev//disk3s2  /mnt
fuse-ext2: version:'0.0.7', fuse_version:'27' [main (../../fuse-ext2/fuse-ext2.c:324)]
fuse-ext2: enter [do_probe (../../fuse-ext2/do_probe.c:30)]
fuse-ext2: leave [do_probe (../../fuse-ext2/do_probe.c:55)]
fuse-ext2: opts.device: /dev//disk3s2 [main (../../fuse-ext2/fuse-ext2.c:351)]
fuse-ext2: opts.mnt_point: /mnt [main (../../fuse-ext2/fuse-ext2.c:352)]
fuse-ext2: opts.volname: sdext [main (../../fuse-ext2/fuse-ext2.c:353)]
fuse-ext2: opts.options: rw+ [main (../../fuse-ext2/fuse-ext2.c:354)]
fuse-ext2: parsed_options: rw,allow_other,local,noappledouble,fsname=/dev//disk3s2,fstypename=ext2,volname=sdext [main (../../fuse-ext2/fuse-ext2.c:355)]
fuse-ext2: mounting read-write [main (../../fuse-ext2/fuse-ext2.c:369)]
bash-3.2# touch /mnt/foo
bash-3.2# ls -l /mnt/foo 
-rw-r--r--  1 root  wheel  0 20 Mar 10:02 /mnt/foo
bash-3.2# rm /mnt/foo

So it partially works I suppose. Disk Utility doesn't recognize the ext partition, though.

RobertJansson commented 8 years ago

You did exactly install what I exactly said and you can verify that opening the package in Installer and select show files. But you are right you also need the binaries so hope you can take them like this because putting them in the package require scripting and testing. Let me know if it's better. usr-local-bin.zip

Michelasso commented 8 years ago

Ok, I tested it now. A couple of things:

bash-3.2# fuse-ext2 -o rw+ /dev//disk3s2  /mnt
dyld: Library not loaded: /usr/local/lib/libosxfuse.2.dylib
  Referenced from: /usr/local/bin/fuse-ext2
  Reason: Incompatible library version: fuse-ext2 requires version 12.0.0 or later, but libosxfuse.2.dylib provides version 10.0.0
Trace/BPT trap: 5

PS: thinking better at it I didn't see the library in the list when I uninstalled it. Nor from the Time Machine

RobertJansson commented 8 years ago

I don't know what is new in this so try take my lib. lib.zip Man-page for /usr/local/share/man: man1.zip

Michelasso commented 8 years ago

I don't know what the heck I did anymore. After installing the lib files it stopped working. So I restored the lib and bin folders of /usr/local. And that didn't work either. I installed your apk and only the binary files (no libs) and now it works manually via command line. Disk Utility has no idea what that partition is, though. While "diskutil" instead does.

Well, it's better than nothing I suppose. Otherwise I'll fire up my Linux virtual machine. Thanks a lot anyway! :+1: :)

RobertJansson commented 8 years ago

It came to be quite messy and I should have made a complete package instead and taken the time to test it before. Glad you are sorted.

I mount the disk image I started from with the normal hdiutil attach, got the diskID and used fuse-ext2 to mount the volume. umount and hdiutil detach was used to remove the volume. Sorry to say but Disk utility is a program I stopped using at OSX10.6 because it was very unreliable and limited. You should not even bother about the new version. diskutil and hdiutil on the other hand are awesome.

Michelasso commented 8 years ago

Well, actually I used to like Disk Utility until Yosemite. I could do some neat stuff with it using the UI. Like resize a partition on the fly. Or format a partition in ext4. It's this new one in El Capitan that seems to have gone back to the stone age. I just upgraded to a new MBP (and with it to El Capitan), I couldn't believe my eyes.

Anyway, now I don't remember well (I don't really use Linux filesystems much, but when I do I'd love to do it from the Finder), but I think in Yosemite fuse-ext2 was auto-mounting the ext partitions. Is that working for you or it's gone?

danieltroger commented 8 years ago

It's gone.

Am 21.03.2016 um 09:54 schrieb Michelasso notifications@github.com:

Well, actually I used to like Disk Utility until Yosemite. I could do some neat stuff with it using the UI. Like resize a partition on the fly. Or format a partition in ext4. It's this new one in El Capitan that seems to have gone back to the stone age. I just upgraded to a new MBP (and with it to El Capitan), I couldn't believe my eyes.

Anyway, now I don't remember well (I don't really use Linux filesystems much, but when I do I'd love to do it from the Finder), but I think in Yosemite fuse-ext2 was auto-mounting the ext partitions. Is that working for you or it's gone?

— You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub

RobertJansson commented 8 years ago

The new version is very beautiful but the usefulnes was really gone a long time ago. Try to make the 650 MB recovery partition and get it right in the old version and you see some real flaws. A disk utility that can't even get the numbers right, mix bit with bytes, can't reach the partition type the OS require etc is not a good tool for more than monitoring. I must say I almost like the new version better for overview (but that is personal). Just write your own tool for mounting or automate by probing for changes on the bus.

LouisCAD commented 8 years ago

@eblot Do you have a compiled binary to let us try it without having to disable SIP?

gpz500 commented 8 years ago

I made binary packages without having to disable SIP. You can download them from here: https://github.com/gpz500/fuse-ext2/releases. Glad if you try them ;-).

PS: because the packages are not signed, you have to Ctrl+click on fuse-ext2.pkg, click on Open and then click on Open again.

manuelnaranjo commented 8 years ago

Works pretty well for me, now I can mount my 1TB ext4 HD

jd4ever commented 8 years ago

@gpz500, thank you! It works!

I have been able to mount the drive using the following command typed into Terminal

mkdir /Volumes/Linux
sudo mount -t fuse-ext2 /dev/disk2s6 /Volumes/Linux

http://apple.stackexchange.com/a/150241

Battant commented 8 years ago

Hello,

I have an ext4 hard disk and I tried to upgrade my system to os x et captain but the fuse2.ext2 extention don't work, I have fond this :

http://apple.stackexchange.com/questions/210198/mount-ext4-on-el-capitan

Could you help me to fix this bug ?

Best regards

Battant

Battant commented 8 years ago

Hello,

I have found this article in french ;

http://www.digitalspirit.org/blog/index.php/post/2009/10/12/Monter-une-partition-ext2,-ext3-ou-ext4-sur-MacOs

Could you help me to found and extension make this action automatically ?

Best regards

Battant

soerenkampschroer commented 8 years ago

@gpz500 Glad to report that it works for me as well. Only annoyance is that it can only be mounted through command line and I get "This disk you inserted was not readable by this computer" message every time I log in.

Is there any eta on proper support for 10.11?