make
./src/client/cmdline/captive-cmdline --load-module=/var/lib/captive/ntoskrnl.exe --filesystem=/var/lib/captive/ntfs.sys --disk --blind /dev/hda1
</pre>
+
+@{[ vskip "3ex" ]}
+
+<h2>Download</h2>
+
+<table border="1" align="center" style="text-align: center;" width="100%"><tr><th>Distribution</th>
+ <th>Installation Case #1<br />Filesystem and installer<br />(recommended)</th>
+ <th>Installation Case #2<br />Manual installation<br />(filesystem, expert user)</th>
+ <th>Installation Case #3<br />Command-line client<br />(no filesystem access)</th></tr>
+HERE
+my %pkg=(
+ 1=>[qw(captive captive-lufs captive-install lufs gnome-vfs-httpcaptive ntfsprogs ntfsprogs-gnomevfs)],
+ 2=>[qw(captive captive-lufs lufs)],
+ 3=>[qw(captive)],
+ );
+my %version=(
+ map(($_=>["1.1","0"]),qw(captive captive-lufs captive-install)),
+ "lufs"=>["0.9.7","1captive7"],
+ "gnome-vfs-httpcaptive"=>["2.3.8captive2","0"],
+ "ntfsprogs"=>["200309071734","1captive1"],
+ "ntfsprogs-gnomevfs"=>["1.0.2","0"],
+ );
+my %has_devel=(map(($_=>1),qw(
+ ntfsprogs
+ )));
+my %pkg_nosrc=(map(($_=>1),qw(
+ captive-lufs
+ captive-install
+ ntfsprogs
+ ntfsprogs-gnomevfs
+ )));
+
+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 $ntfsprogs_after=sub ($) {
+ my($format)=@_;
+ return () if $case!=1;
+ return '<hr width="80%" />requirement: '
+ .a_href('http://linux-ntfs.sourceforge.net/downloads.html#downloads','ntfsprogs')
+ .' '.$format.' ≥ 1.8.0';
+ };
+
+my @dist=(
+ {
+ "name"=>"Debian GNU/Linux<br />'unstable' i386",
+ "id"=>"debian",
+ "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_arch("dist/$file",$file);
+ (my $filedev=$file)=~s/^\Q$pkg\E_/${pkg}-dev_/;
+ $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
+ return $r;
+ },
+ },
+ {
+ "name"=>"Sources (.tar.gz)",
+ "id"=>"source",
+ "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";
+ return $file,$file;
+ },
+ "after"=>sub { return &{$ntfsprogs_after}(".tar.gz"); },
+ },
+ );
+
+for my $dist (@dist) {
+ print "<a name=".$dist->{"id"}."><tr>";
+ print "<td>".$dist->{"name"}."</td>";
+ for my $casel (1,2,3) {
+ $case=$casel;
+ print "<td>";
+ print join("<br />",map({ my $pkg=$_;
+ my($file,$text)=&{$dist->{"out"}}($pkg,@{$version{$pkg}});
+ (!defined $text ? ($file) || () : (&$a_href_arch("dist/$file",$text)));
+ } @{$pkg{$case}}),map({ (!$_ ? () : (&{$_}())); } $dist->{"after"}));
+ print "</td>";
+ }
+ print "</tr></a>\n";
+ }
+print <<"HERE";
+</table>
+
+@{[ vskip "3ex" ]}
+
+
+<h1>@{[ a_href './','Back to Captive Main Page' ]}</h1>
+
HERE
.re { font-style: italic; }
table.mailman > * /* FIXME: What is it? */ > tr > th,
table.mailman > * /* FIXME: What is it? */ > tr > td { padding: 1ex; text-align: center; }
+table.download { border-style: none; margin: 8px; }
+table.download td { padding: 8px; }
",
);
<h2>NEWS</h2>
<dl>
- <dt>captive-1.0.2 (2003-11-06) [@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/captive/NEWS?rev=HEAD','archive' ]}]</dt>
+ <dt>captive-1.1 (2003-11-27) [@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/captive/NEWS?rev=HEAD','archive' ]}]</dt>
<dd>
<ul>
- <li>Fixed sandbox chroot(2) compatibility bug</li>
- <li>Fixed serious sandbox-server spawn memory leak for big files copying to NTFS</li>
- <li>Improved performance - 1GHz CPU: read 1.5MB/s, write 500KB/s, 20MB of RAM</li>
- <li>Various GNU/Linux distributions compatibility fixes</li>
+ <li>Distributed as 'captive-static' fully independent single package</li>
+ <li>Allow concurrent file access by multiple handles - fixes scp(1) copying</li>
+ <li>Installer now features MS-Windows drivers download retries from microsoft.com</li>
+ <li>Installer compatibility and UI lockup fixes</li>
+ <li>Fixed SUSE-9.0 package installation compatibility (Christian Kristukat)</li>
+ </ul>
+ </dd>
+ <dt>lufs-0.9.7captive7 (2003-11-27) [@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/lufs/NEWS.captive?rev=1.1.2.9','archive' ]}]</dt>
+ <dd>
+ <ul>
+ <li>Branch update for 0.9.7 (no changes apply to 'captive' branch)</li>
+ <li>'prepmod'-wrap 'lufsd' instead of 'lufsmnt' as 'prepmod' fail is safe this way</li>
+ <li>Fixed kernel module compilation if invoked by mount(8)</li>
+ <li>Drop lufsumount(1) in the favor of compatibility with generic umount(8)</li>
+ <li>Kernel module prebuilding compatibility with TurboLinux and SuSE kernels</li>
</ul>
</dd>
</dl>
+HERE
+print vskip "1ex";
-@{[ vskip "1ex" ]}
-
-
-<table border="1" align="center" style="text-align: center;" width="100%"><tr><th>Distribution</th>
- <th>Installation Case #1<br />Filesystem and installer<br />(recommended)</th>
- <th>Installation Case #2<br />Manual installation<br />(filesystem, expert user)</th>
- <th>Installation Case #3<br />Command-line client<br />(no filesystem access)</th></tr>
-HERE
-my %pkg=(
- 1=>[qw(captive captive-lufs captive-install lufs gnome-vfs-httpcaptive ntfsprogs ntfsprogs-gnomevfs)],
- 2=>[qw(captive captive-lufs lufs)],
- 3=>[qw(captive)],
- );
-my %reqpkg=(
- 1 =>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline libgnomeui)],
- 23=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline)],
- );
my %version=(
- map(($_=>["1.0.2","0"]),qw(captive captive-lufs captive-install)),
- "lufs"=>["0.9.6","1captive6"],
- "gnome-vfs-httpcaptive"=>["2.3.8captive2","0"],
- "ntfsprogs"=>["200309071734","1captive1"],
- "ntfsprogs-gnomevfs"=>["1.0.2","0"],
- );
-my %has_rh8=(map(($_=>1),qw(
- gnome-vfs-httpcaptive
- captive
- captive-lufs
- captive-install
- )));
-my %has_mdk91=(map(($_=>1),qw(
- gnome-vfs-httpcaptive
- lufs
- captive
- captive-lufs
- captive-install
- )));
-my %has_mdk92=(map(($_=>1),qw(
- captive
- captive-lufs
- captive-install
- )));
-my %has_devel=(map(($_=>1),qw(
- ntfsprogs
- )));
-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 @libxml2_rh8_pkgs=qw(libxml2-2.5.4-1.i386.rpm libxml2-python-2.5.4-1.i386.rpm libxml2-devel-2.5.4-1.i386.rpm);
-
-my $ntfsprogs_after=sub ($) {
- my($format)=@_;
- return () if $case!=1;
- return '<hr width="80%" />requirement: '
- .a_href('http://linux-ntfs.sourceforge.net/downloads.html#downloads','ntfsprogs')
- .' '.$format.' ≥ 1.8.0';
- };
-
-my @dist=(
- {
- "name"=>"Red Hat 9<br />Shrike i386",
- "out"=>sub {
- my($pkg,$version_base,$version_ext)=@_;
- return () if $pkg eq "ntfsprogs";
- my $file="$pkg-$version_base-$version_ext.i386.rpm";
- my $r=&$a_href_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- return $r;
- },
- "after"=>sub { return &{$ntfsprogs_after}(".i386.rpm"); },
- },
- {
- "name"=>"Red Hat 8<br />Psyche i386<br />"
- ."(".a_href("#libxml2_rh8","libxml2 upgrade note").")",
- "out"=>sub {
- my($pkg,$version_base,$version_ext)=@_;
- return () if $pkg eq "ntfsprogs";
- my $file="$pkg-$version_base-$version_ext".(!$has_rh8{$pkg} ? "" : "rh8").".i386.rpm";
- my $r=&$a_href_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- if ($pkg eq "captive-install") {
- for (@libxml2_rh8_pkgs) {
- $r.="<br />".&$a_href_arch('ftp://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/'.$_,$_)." of Red Hat 9";
- }
- }
- return $r;
- },
- "after"=>sub { return &{$ntfsprogs_after}(".i386.rpm"); },
- },
- {
- "name"=>"Mandrake 9.2<br />TBA i586",
- "out"=>sub {
- my($pkg,$version_base,$version_ext)=@_;
- return () if $pkg eq "ntfsprogs";
- my $file="$pkg-$version_base-$version_ext"
- .($has_mdk92{$pkg} ? "mdk92.i586.rpm" : ($has_mdk91{$pkg} ? "mdk91.i586.rpm" : ".i386.rpm"));
- my $r=&$a_href_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- return $r;
- },
- "after"=>sub { return &{$ntfsprogs_after}(".i386.rpm"); },
- },
- {
- "name"=>"Mandrake 9.1<br />Bamboo i586",
- "out"=>sub {
- my($pkg,$version_base,$version_ext)=@_;
- return () if $pkg eq "ntfsprogs";
- my $file="$pkg-$version_base-$version_ext".($has_mdk91{$pkg} ? "mdk91.i586.rpm" : ".i386.rpm");
- my $r=&$a_href_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- return $r;
- },
- "after"=>sub { return &{$ntfsprogs_after}(".i386.rpm"); },
- },
- {
- "name"=>"Debian GNU/Linux<br />'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_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E_/${pkg}-dev_/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- return $r;
- },
- },
- {
- "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).".tar.gz";
- return $file,$file;
- },
- "after"=>sub { return &{$ntfsprogs_after}(".tar.gz"); },
- },
- {
- "name"=>"Sources (.src.rpm)<br />(Red Hat 9 - Shrike)",
- "out"=>sub {
- my($pkg,$version_base,$version_ext)=@_;
- return () if $pkg eq "ntfsprogs";
- return () if $pkg_nosrc{$pkg};
- my $file="$pkg-$version_base-$version_ext.src.rpm";
- return $file,$file;
- },
- "after"=>sub { return &{$ntfsprogs_after}(".i386.rpm (incl. -devel)"); },
- },
+ map(($_=>["1.1","0"]),qw(captive captive-lufs captive-install)),
+ "lufs"=>["0.9.7","1captive7"],
);
-for my $dist (@dist) {
- if ($dist->{"name"} eq "Debian GNU/Linux<br />'unstable' i386") {
- print "<tr>";
- print "<td>SUSE-9.0</td>";
- print '<td colspan="3" style="padding: 4ex;">';
- print "Expected these days; ".a_href('#lists','subscribe <b>captive-announce-list</b> below.');
- print join(", ",map("<span class=\"reqpkg\">$_</span>",@{$reqpkg{$case}}));
- print '</td>';
- print "</tr>\n";
- }
- print "<tr>";
- print "<td>".$dist->{"name"}."</td>";
- for my $casel (1,2,3) {
- $case=$casel;
- print "<td>";
- print join("<br />",map({ my $pkg=$_;
- my($file,$text)=&{$dist->{"out"}}($pkg,@{$version{$pkg}});
- (!defined $text ? ($file) || () : (&$a_href_arch("dist/$file",$text)));
- } @{$pkg{$case}}),map({ (!$_ ? () : (&{$_}())); } $dist->{"after"}));
- print "</td>";
- }
- print "</tr>\n";
- }
-print "<tr style=\"height: 2ex;\"></tr>\n";
-print "<tr>";
- print "<td>Package Requirements</td>";
- for my $case (1,23) {
- print "<td".($case==23 ? ' colspan="2"' : '').">";
- print join(", ",map("<span class=\"reqpkg\">$_</span>",@{$reqpkg{$case}}));
- print "</td>";
- }
-print "</tr>\n";
print <<"HERE";
+<h2>Download</h2>
+
+<h3>Choose one preferred installation format:</h3>
+
+<table border="0" align="center" width="100%"><tr><td align="center">
+<table border="1" align="center" style="text-align: center;" class="download">
+ <tr>
+ <td>
+ RPM i386 binary<br />
+ tested for distributions:
+ <table border="0"><tr><td align="left"><ul>
+ <li>Red Hat 9 Shrike</li>
+ <li>Red Hat 8 Psyche</li>
+ <li>Mandrake 9.1 Bamboo</li>
+ <li>SuSE 9.0</li>
+ </ul></td></tr></table>
+ </td>
+ <td>@{[ a_href 'dist/captive-static-'.$version{"captive"}[0].'-'.$version{"captive"}[1].'.i386.rpm',
+ undef(),"size"=>1,"basename"=>1 ]}</td>
+ </tr>
+ <tr>
+ <td>.tar.gz i386 binary<br />(for non-RPM distributions)</td>
+ <td>@{[ a_href 'dist/captive-static-'.$version{"captive"}[0].'.tar.gz',undef(),"size"=>1,"basename"=>1 ]}</td>
+ </tr>
+ <tr>
+ <td>Debian .deb binaries</td>
+ <td>@{[ a_href 'CVS.html.pl#debian','Download Page' ]} [link]</td>
+ </tr>
+ <tr>
+ <td>Source archives</td>
+ <td>@{[ a_href 'CVS.html.pl#source','Download Page' ]} [link]</td>
+ </tr>
</table>
+</td></tr></table>
-<blockquote>
- <p><a name="libxml2_rh8"><b><i>Red Hat 8 Psyche</i> upgrade of <i>libxml2</i> package:</b></a>
- Upgrade only the packages already installed on your system to prevent
- many dependency requirements - do not use "<code>rpm -U</code>",
- use "<code>rpm -F</code>" instead:</p>
- <blockquote><p class="quote">
- <code>rpm -F @{[ join(" ",@libxml2_rh8_pkgs) ]}</code>
- </p></blockquote>
-</blockquote>
@{[ vskip "3ex" ]}
<h2>Overview</h2>
-<p>'<b>captive</b>' is the base package. It contains debugging '<b>captive-cmdline</b>' client.<br />
-'<b>captive-lufs</b>' permits mounting NTFS as regular filesystem. It needs '<b>lufs</b>'.<br />
-'<b>lufs</b>' is a daemon to enable userland process to provide filesystem functions.</p>
-
<p>Any errors from '<b>captive-lufs</b>' are written to '<b>/var/log/messages</b>'.</p>
<p>Needed drivers (at least ntoskrnl.exe+ntfs.sys) must be in '<b>/var/lib/captive</b>'.</p>
<p>'<b>captive</b>' package creates '<b>captive</b>' user and '<b>captive</b>' group on your system.</p>
-<h2>Package Version Conflicts</h2>
-
-<dl>
-
-<dt>@{[ a_href 'http://lufs.sourceforge.net/lufs/','lufs' ]}</dt>
-<dd><p><b>'captive' version required</b>: 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.</p></dd>
-
-</dl>
-
-
<h2>LUFS Kernel Driver Module</h2>
<p>@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} (Linux Userland File
<h1>See Also</h1>
<ul>
- <li>@{[ a_href 'Preview.html.pl','<span style="font-size: larger;">Technology Preview</span>' ]}</li>
- <li>@{[ a_href 'CVS.html.pl','CVS Repository' ]}</li>
+ <li>@{[ a_href 'Preview.html.pl','Technology Preview' ]}</li>
+ <li>@{[ a_href 'CVS.html.pl','Download Sources, CVS Repository' ]}</li>
<li>@{[ a_href 'doc/','Developer Documentation' ]}; highlights:<ul>
<li>@{[ a_href 'doc/About.html.pl#versions','Microsoft Windows Versions Compatibility' ]}</li>
<li>@{[ a_href 'doc/Architecture.html.pl#law','Laws and Licensing Conditions' ]}</li>