X-Git-Url: http://git.jankratochvil.net/?p=www.jankratochvil.net.git;a=blobdiff_plain;f=project%2Fcaptive%2FIndex.html.pl;h=8ded6ed99793ea52cdb1fc7727d80d89e5d4865f;hp=1ff8a3fb55da50d0bf3cc1c7e1b1683edf1dde36;hb=2fe6609a064210cfdde7b2361f975616abe2ae76;hpb=02935b1e07536418ed90a2fba77bc16e7fa162ea diff --git a/project/captive/Index.html.pl b/project/captive/Index.html.pl index 1ff8a3f..8ded6ed 100755 --- a/project/captive/Index.html.pl +++ b/project/captive/Index.html.pl @@ -27,8 +27,8 @@ use warnings; BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use My::Project; -use project::captive::ListItem; +Wuse 'My::Project'; +Wuse 'project::captive::ListItem'; my $W=My::Project->init_project( @@ -42,7 +42,7 @@ my $W=My::Project->init_project( ); -print vskip("10ex")."

!!! DO NOT DISCLOSE - **************** !!!

\n".vskip("10ex"); +print vskip("10ex")."

!!! DO NOT DISCLOSE !!!

\n".vskip("10ex"); print <<"HERE";

The First Read/Write NTFS for Free Operating Systems

@@ -61,11 +61,24 @@ my @stuff=( ." hal.dll.", ); -print "

$_

\n" for ($stuff[int rand @stuff]); -print vskip "3ex"; +print <<"HERE"; + + + + + + + + + +
+ @{[ map("

$_

\n",($stuff[int rand @stuff])) ]} +
@{[ a_href My::Web::img_src('captive-install-acquire'), + img('captive-install-acquire-small','[ Captive Microsoft Windows Drivers Acquire Illustration ]') ]}
+ +@{[ vskip "3ex" ]} -print <<'HERE'; @@ -82,8 +95,8 @@ my %reqpkg=( 3=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline)], ); my %version=( - map(($_=>["0.9.1","0"]),qw(captive captive-lufs captive-install)), - "lufs"=>["0.9.6","1captive2"], + map(($_=>["0.9.4","0"]),qw(captive captive-lufs captive-install)), + "lufs"=>["0.9.6","1captive3"], "gnome-vfs-httpcaptive"=>["2.3.8captive2","0"], "ntfsprogs"=>["200309071734","1captive1"], "ntfsprogs-gnomevfs"=>["1.0.1","0"], @@ -108,15 +121,25 @@ my %pkg_nosrc=(map(($_=>1),qw( captive-lufs captive-install ))); + +my $case; +my $a_href_arch=sub ($$%) +{ +my($file_base,$text,%args)=@_; + + $text=~s/[._]\D.*$// if $case!=1 && $text!~/^[.]/; + return a_href $file_base,$text,"size"=>($case==1),%args; +}; + my @dist=( { "name"=>"Red Hat 9
Shrike i386", "out"=>sub { my($pkg,$version_base,$version_ext)=@_; my $file="$pkg-$version_base-$version_ext.i386.rpm"; - my $r=a_href "dist/$file",$file; + my $r=&$a_href_arch("dist/$file",$file); (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/; - $r.="
".a_href("dist/$filedev",$filedev) if $has_devel{$pkg}; + $r.="
".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg}; return $r; }, }, @@ -125,12 +148,12 @@ my @dist=( "out"=>sub { my($pkg,$version_base,$version_ext)=@_; my $file="$pkg-$version_base-$version_ext".(!$has_rh8{$pkg} ? "" : "rh8").".i386.rpm"; - my $r=a_href "dist/$file",$file; + my $r=&$a_href_arch("dist/$file",$file); (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/; - $r.="
".a_href("dist/$filedev",$filedev) if $has_devel{$pkg}; + $r.="
".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg}; if ($pkg eq "captive-install") { - for (qw(libxml2-2.5.4-1.i386.rpm libxml2-python-2.5.4-1.i386.rpm)) { - $r.="
".a_href('ftp://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/'.$_,$_)." of Red Hat 9"; + for (qw(libxml2-2.5.4-1.i386.rpm libxml2-python-2.5.4-1.i386.rpm libxml2-devel-2.5.4-1.i386.rpm)) { + $r.="
".&$a_href_arch('ftp://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/'.$_,$_)." of Red Hat 9"; } } return $r; @@ -141,52 +164,40 @@ my @dist=( "out"=>sub { my($pkg,$version_base,$version_ext)=@_; my $file="$pkg-$version_base-$version_ext".(!$has_mdk91{$pkg} ? ".i386.rpm" : "mdk91.i586.rpm"); - my $r=a_href "dist/$file",$file; + my $r=&$a_href_arch("dist/$file",$file); (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/; - $r.="
".a_href("dist/$filedev",$filedev) if $has_devel{$pkg}; + $r.="
".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg}; return $r; }, }, { - "name"=>"Red Hat .src.rpm
(of 9 - Shrike)", - "out"=>sub { - my($pkg,$version_base,$version_ext)=@_; - return () if $pkg_nosrc{$pkg}; - my $file="$pkg-$version_base-$version_ext.src.rpm"; - return $file,$file; - }, - }, - { "name"=>"Debian GNU/Linux
'unstable' i386", "out"=>sub { my($pkg,$version_base,$version_ext)=@_; $version_ext=~s/^\d+//; my $file="${pkg}_$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext)."_i386.deb"; - my $r=a_href "dist/$file",$file; + my $r=&$a_href_arch("dist/$file",$file); (my $filedev=$file)=~s/^\Q$pkg\E_/${pkg}-dev_/; - $r.="
".a_href("dist/$filedev",$filedev) if $has_devel{$pkg}; + $r.="
".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg}; return $r; }, }, { - "name"=>"Debian GNU/Linux
sources", + "name"=>"Sources (.tar.gz)", "out"=>sub { my($pkg,$version_base,$version_ext)=@_; return () if $pkg_nosrc{$pkg}; $version_ext=~s/^\d+//; - my $file="${pkg}_$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext); - return CGI::escapeHTML($file).":" - .' ' .a_href("dist/$file.dsc",".dsc","size"=>0) - .' '.a_href("dist/$file.tar.gz",".tar.gz"); + my $file="$pkg-$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext).".tar.gz"; + return $file,$file; }, }, { - "name"=>"Sources (.tar.gz)", + "name"=>"Sources (.src.rpm)
(Red Hat 9 - Shrike)", "out"=>sub { my($pkg,$version_base,$version_ext)=@_; return () if $pkg_nosrc{$pkg}; - $version_ext=~s/^\d+//; - my $file="$pkg-$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext).".tar.gz"; + my $file="$pkg-$version_base-$version_ext.src.rpm"; return $file,$file; }, }, @@ -195,11 +206,12 @@ my @dist=( for my $dist (@dist) { print ""; print ""; - for my $case (1,2,3) { + for my $casel (1,2,3) { + $case=$casel; print ""; } @@ -218,9 +230,26 @@ print <<"HERE"; available Microsoft Windows drivers versions. Now you can execute:

-

# mount -t captive-ntfs /dev/hda1 /mnt/dosc

+

+ # mkdir /mnt/dosc
+ # mount -t captive-ntfs /dev/hda1 /mnt/dosc +

+ +

Overview

+ +

'captive' is the base package. It contains debugging 'captive-cmdline' client.
+'captive-lufs' permits mounting NTFS as regular filesystem. It needs 'lufs'.
+'lufs' is a daemon to enable userland process to provide filesystem functions.

+ +

Any errors from 'captive-lufs' are written to '/var/log/messages'.

+ +

Needed drivers (at least ntoskrnl.exe+ntfs.sys) must be in '/var/lib/captive'.

+ +

'captive' package creates 'captive' user and 'captive' group on your system.

+ +

Package version conflicts

@@ -260,122 +289,73 @@ Linux kernel version (rpm -q kernel) and re-run /usr/share/lufs/prepmod.

-

The First Free Microsoft Windows Kernel API Emulation

- -

Compatibility with existing binary Microsoft Windows file system drivers was -reached. Microsoft Windows kernel system components required by these drivers -were analyzed and successfuly emulated in the GNU/Linux operating system. -Project brings Microsoft Windows kernel emulation framework to support even -other types Microsoft Windows drivers in the future.

- -
-
Emulation principle equivalent
-
-

@{[ a_href 'http://www.winehq.com/','Wine Project' ]}

-

No code could be shared - Wine emulates only Microsoft Windows userland. - Filesystem drivers completely belong to Microsoft Windows kernelland.

-
- -
Closed-source read-only-crippled @{[ '$0' ]} equivalent for Microsoft Windows
-
-

@{[ a_href 'http://www.sysinternals.com/ntw2k/freeware/ntfswin98.shtml', - 'NTFS for Windows 98' ]}

-

There is a @{[ a_href 'http://www.sysinternals.com/images/screenshots/ntfs98ap.gif', - 'diagram' ]} showing exactly the principle of Captive NTFS project. - There is apparently disabled read/write functionality in NTFS for - Windows 98 as the same company also sells the following product sharing - the same codebase:

-
- -
Closed-source read/write @{[ '$299' ]} equivalent for MS-DOS
-
-

@{[ a_href 'http://www.winternals.com/products/repairandrecovery/ntfsdospro.asp', - 'NTFSDOS Professional' ]}

-

This product is the most close equivalent to Captive NTFS but it is - a commercial product, closed-source and it has filesystem interface only - for MS-DOS.

-
- -
The only real competition: Closed-source read/write @{[ '$299' ]} equivalent
-
-

@{[ a_href 'http://www.vmware.com/download/workstation.html', - 'VMware Workstation' ]}

-

Original Microsoft Windows operating system can be run inside a virtual - machine running under GNU/Linux and share the read-write NTFS disk by using - a network file sharing through a VMware virtual network card.

-

You need @{[ '$299' ]} for this product and you need to - give up your system security by running un@{[ a_href '#sandbox','sandbox' ]}ed - closed-source program in your GNU/Linux.

-
-
- +
Distribution Installation Case #1
Filesystem and installer
(recommended)
Installation Case #2
Manual installation
(filesystem, expert user)
".$dist->{"name"}.""; print join("
",map({ my $pkg=$_; my($file,$text)=&{$dist->{"out"}}($pkg,@{$version{$pkg}}); - (!defined $text ? ($file) || () : (a_href("dist/$file",$text))); + (!defined $text ? ($file) || () : (&$a_href_arch("dist/$file",$text))); } @{$pkg{$case}})); print "
+ + + + + + +
+

The First Free Microsoft Windows Kernel API Emulation

+ +

Compatibility with existing binary Microsoft Windows file system drivers was + reached. Microsoft Windows kernel system components required by these drivers + were analyzed and successfuly emulated in the GNU/Linux operating system. + Project brings Microsoft Windows kernel emulation framework to support even + other types Microsoft Windows drivers in the future. + @{[ a_href 'http://www.reactos.com/','ReactOS' ]} + code base made a big asset for this functionality.

+
@{[ a_href 'http://www.reactos.com/',img('reactos','ReactOS') ]}
-

Security

- -

Re: @{[ a_href 'http://linux-ntfs.sourceforge.net/info/ntfs.html#7.7', - "7.7 Can't we write a wrapper for Windows' driver?" ]}

- -

> It sounds like a great idea, to start with, but there are numerous -problems.

- -

> The largest technical problem is joining the Windows -system DLL to the Linux VFS. It could be done, but it wouldn't be pretty.
-Yep. :-)

- -

> It would have to run as part of the kernel which would mean -that if it went wrong it could crash the machine. With no source, we might not -be able to work around the problem.
-Nope, -@{[ a_href 'http://lufs.sourceforge.net/lufs/','Linux Userland File System (LUFS)' ]} -moves the filesystem implementation to UNIX userland where the Microsoft -Windows filesystem is completely unarmed by Captive jail of chroot(2), -setuid(2) and setrlimit(2). There only remains one narrow connection to the rest of -system (by CORBA/ORBit). The filesystem's life environment gets kill(2)ed when -UNIX is no longer satisfied with it. Safety similiar to -@{[ a_href 'http://www.vmware.com/solutions/security.html','VMware sandbox' ]}.

- -

> The next major problem is compatibility. -Which version of the Windows system file would we use? Picking one would limit -its use, making the wrapper versatile for all of them would be a programming -nightmare.
-Microsoft Windows NTFS filesystem driver is capable of accessing older formats -of the filesystem. This project currently runs Microsoft Windows XP version, -porting to Microsoft Windows 2003 Server expected. (Microsoft Windows upgrades -NTFS disk filesystem to its own version during complete CD-ROM Microsoft -Windows system installation - such operation is not threat this project use.)

- -

> And it gets worse. The legal implications of -distributing Windows systems files would cause problems.
-User must be careful to obey all licensing restrictions according to his -local country laws.
-> Also the proprietary nature of the driver would mean that -the other kernel coders would not investigate any problems if someone had used -the NTFS wrapper.
-It does not apply to this project due to the implemented -@{[ a_href '#sandbox','filesystem separation' ]}.

@{[ vskip "3ex" ]}

See also

@{[ vskip "3ex" ]}

Why did I install Microsoft Windows and wrote such disgusting piece of code?
- I expect @{[ a_href $W->{"top_dir"}."/CV.html.pl","yet another challenging task" ]}, ! + Expecting @{[ a_href top_dir()."/CV.html.pl","yet another challenging task" ]}, !

HERE