X-Git-Url: http://git.jankratochvil.net/?p=www.jankratochvil.net.git;a=blobdiff_plain;f=project%2Fcaptive%2FIndex.html.pl;h=8ded6ed99793ea52cdb1fc7727d80d89e5d4865f;hp=d98fe1c8ff15b5afb003a586713d6ae6b6219d6d;hb=2fe6609a064210cfdde7b2361f975616abe2ae76;hpb=ae6ae56dc5cef8a5c1a77f8fa2ec400b9fe30988 diff --git a/project/captive/Index.html.pl b/project/captive/Index.html.pl index d98fe1c..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

@@ -52,7 +52,7 @@ HERE my @stuff=( "A lot of people claim themselves as Windows Programmers.\n" ." Now I can finally join them - I also wrote my own Microsoft Windows.", - "Why do they need 5000 developers" + "Why do they need ".a_href('http://www.winsupersite.com/reviews/winserver2k3_gold2.asp','5000 developers') ." to write Microsoft Windows when it is just One Man Show task?", @@ -61,14 +61,27 @@ 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'; - + HERE my %pkg=( @@ -82,11 +95,11 @@ my %reqpkg=( 3=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline)], ); my %version=( - map(($_=>["0.9","0"]),qw(captive captive-lufs captive-install)), - "lufs"=>["0.9.6","1captive1"], + 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","0"], + "ntfsprogs-gnomevfs"=>["1.0.1","0"], ); my %has_rh8=(map(($_=>1),qw( gnome-vfs-httpcaptive @@ -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,25 +230,42 @@ 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

-
lufs
+
@{[ a_href 'http://lufs.sourceforge.net/lufs/','lufs' ]}

'captive' version required: Although you may already have the original package installed you must replace it by the local 'captive'-marked version containing some 'captive'-essential fixes and extensions.

-
ntfsprogs
+
@{[ a_href 'http://linux-ntfs.sourceforge.net/','ntfsprogs' ]}

Original version >=200309071734 sufficient: The package downloadable here has no code patches - you can freely use the original version instead. Unfortunately the last public release is 1.7.1 while this project requires at least -snapshot version -200309071734 +@{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/','snapshot' ]} version +@{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/ntfsprogs-200309071734.tar.bz2','200309071734' ]} which is not packaged (.rpm/.deb) yet. Packaged versions are provided here for your convenience.

@@ -245,7 +274,7 @@ your convenience.

LUFS kernel driver module

-

LUFS (Linux Userland File +

@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} (Linux Userland File System) needs Linux kernel module driver (lufs.o) compatible with your running Linux kernel. Binary driver is supplied already precompiled for many Linux kernel versions in the binary packages above (.i386.rpm and @@ -260,120 +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 unsandboxed - closed-source program in your GNU/Linux.

-
-
- +
Distribution Installation Case #1
Filesystem and installer
(recommended)
Installation Case #2
Manual installation
(filesystem available)
Installation Case #2
Manual installation
(filesystem, expert user)
Installation Case #3
Command-line client
(no filesystem access)
".$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: 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 -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