Finally merged the branch 'apache20'(+'apache2') back to the main trunk.
[www.jankratochvil.net.git] / project / captive / Index.pm
diff --git a/project/captive/Index.pm b/project/captive/Index.pm
new file mode 100755 (executable)
index 0000000..f28a8ca
--- /dev/null
@@ -0,0 +1,372 @@
+# $Id$
+# Main page of 'My::Project::captive'
+# Copyright (C) 2003-2005 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+Wuse 'project::Lib';
+
+
+our @ListItem=(
+               "name"=>"Captive",
+               "platform"=>"unixuser",
+               "priority"=>666,
+               "summary"=>"The first free NTFS read/write filesystem for GNU/Linux",
+               "license"=>"GPL",
+               "maintenance"=>"update",
+               "language"=>"i386 asm, C, Perl",
+               "icon"=>"captive-install-acquire-icon",
+               "cvs-of main tree"=>"captive",
+               "cvs-of branched ReactOS subdir"=>"reactos:captive",
+               "cvs-of branched LUFS"=>"lufs:captive",
+               "cvs-of 'httpcaptive://' method"=>"gnome-vfs-httpcaptive:captive",
+               "cvs-of 'libntfs://' method"=>"ntfsprogs-gnomevfs",
+               "description"=>sub { return <<"HERE"; },
+<p>Project implements the first full read/write free access to NTFS disk drives.
+You can mount your Microsoft Windows NT, 200x or XP partition as
+a transparently accessible volume for your GNU/Linux.</p>
+<p>This compatibility was achieved in
+the @{[ a_href 'http://www.winehq.com/','Wine' ]} way by using the original
+Microsoft Windows <i>ntfs.sys</i> driver. It emulates the required subsystems of
+the Microsoft Windows kernel by reusing one of the original
+<i>ntoskrnl.exe</i>, @{[ a_href 'http://www.reactos.com/','ReactOS' ]} parts, or
+this project's own reimplementations, on a case by case basis.
+Project includes the first open source MS-Windows kernel API for Free operating systems.
+Involvement of the original driver files was chosen to achieve the best
+and unprecedented filesystem compatibility and safety.</p>
+<p>As opposed to other projects this is currently the only software supporting the full
+read/write access including the possibility to create/delete files, modify directories
+etc.</p>
+HERE
+               );
+
+sub handler
+{
+my $W=project::Lib->init(
+               "no_project_data"=>1,
+               "css_push"=>"./Index.css",
+               "project_text_after_title"=>sub { return ""
+                               .'<table border="0" class="navigate"><tr>'
+                                       .'<td>&bull;&nbsp;'.a_href('#download','Download').'</td>'
+                                       .'<td>&bull;&nbsp;'.a_href('#news','NEWS').'</td>'
+                                       .'<td>&bull;&nbsp;'.a_href('#testimonials','Testimonials').'</td>'
+                                       .'<td>&bull;&nbsp;'.a_href('#press','Internet Press').'</td>'
+                                       .'<td>&bull;&nbsp;'.a_href('#notes','Installation Notes').'</td>'
+                                       .'<td>&bull;&nbsp;'.a_href('#lists','Mailing Lists').'</td>'
+                                       .'<td>&bull;&nbsp;'.a_href('#seealso','See Also').'</td>'
+                               .'</tr></table>'
+                               },
+               );
+
+
+print <<"HERE" if !$W->{"no_job"};
+@{[ vskip "3ex" ]}
+
+<table border="0" style="margin: 3ex; padding: 2ex; background: #bb8888;" class="margin-center">
+       <tr><td style="font-size: larger;">
+               Looking for a challenging job: @{[ a_href $W->{"resume_url"},"My resume" ]}
+       </td></tr>
+</table>
+HERE
+
+my %version=(
+               map(($_=>["1.1.5","0"]),qw(captive captive-lufs captive-install)),
+               "lufs"=>["0.9.7","1captive8"],
+               );
+
+print <<"HERE";
+<h2 id="download">Download</h2>
+
+<h3>Choose the one preferred installation format:</h3>
+
+<table border="1" frame="border" rules="rows" style="text-align: center;" class="download">
+       <tr>
+               <td>
+                       <p>RPM i386 binary<br />tested for distributions:</p>
+                       <table border="0"><tr><td align="left"><ul>
+                               <li>Red&nbsp;Hat&nbsp;9&nbsp;Shrike</li>
+                               <li>Red&nbsp;Hat&nbsp;8&nbsp;Psyche</li>
+                               <li>SuSE&nbsp;9.0</li>
+                               <li>SuSE&nbsp;9.1</li>
+                               <li>Mandrake&nbsp;9.1&nbsp;Bamboo</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>
+                       <p>.tar.gz i386 binary<br />(for non-RPM distributions)</p>
+               </td>
+               <td>@{[ a_href 'dist/captive-static-'.$version{"captive"}[0].'.tar.gz',undef(),"size"=>1,"basename"=>1 ]}</td>
+       </tr>
+       <tr>
+               <td>Source archives</td>
+               <td>@{[ a_href 'CVS.pm#source','download link' ]}</td>
+       </tr>
+</table>
+
+<h4>Development Status</h4>
+
+<p>Project is no longer developed. The key functionality is reached
+by the latest released version. All its resources are available
+@{[ a_href 'CVS.pm#source','here' ]} for download.</p>
+
+<h4>Known Issue</h4>
+
+<p>Captive was written to interface with the Linux kernel via
+@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]}.
+Unfortunately, this project is no longer being maintained by its author.
+Mounting of NTFS devices usually works, but is no longer supported by the
+author of Captive. Always unmount the device by umount(8) command before shutting
+down your GNU/Linux system.</p>
+
+<p>A port of Captive to the newer
+@{[ a_href 'http://fuse.sourceforge.net/','FUSE' ]}
+interface has not yet been implemented.
+There is an experimental LUFS-FUSE bridge called
+@{[ a_href 'http://sourceforge.net/project/showfiles.php?group_id=121684','lufis' ]}
+that can be used in the meanwhile.
+Also, the captive-cmdline(1) interface will get around any kernel compatibility
+problems.</p>
+
+@{[ vskip "3ex" ]}
+
+<h2 id="news">NEWS</h2>
+
+<dl>
+       <dt>captive-1.1.5 (2004-01-18) [@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/captive/NEWS?rev=HEAD','archive' ]}]</dt>
+       <dd>
+               <ul>
+                       <li>Fixed ignorance of the file truncate operation via LUFS (Matthias R.)</li>
+                       <li>Support for reading of HIDDEN SYSTEM NTFS files via LUFS</li>
+                       <li>Fixed refusal to mount some NT4.0 NTFSes (Nerijus Baliunas, Scott Chevalley)</li>
+                       <li>Support <code>/dev/ataraid</code> devices (Ivan Tonov)</li>
+               </ul>
+       </dd>
+       <dt>lufs-0.9.7captive8 (2003-12-06) [@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/lufs/NEWS.captive?rev=1.1.2.11','archive' ]}]</dt>
+</dl>
+
+@{[ vskip "3ex" ]}
+
+<h2 id="testimonials">Captive NTFS Testimonials</h2>
+
+<ul>
+       <li>Hospital of Castelo Branco - Bruno Santos
+               <p>we are preparing the machines to install another system that will allow
+               the digitalization of medical images - PACS (picture archive and
+               communication system).</p>
+
+               <p>since the computers that are need are about 100 and we need to install
+               windows in all of them (even we have an almost automated instalation - but
+               requires some administrator interaction). So, we want to install
+               windows2000 without pressing a key.</p>
+
+               <p>@{[ a_href 'TestimonialBrunoSantos.pm','<span style="font-style: italic;">[ more ]</span>' ]}</p>
+       </li>
+       <li>@{[ a_href 'http://www.amunra.co.uk/','Dave &quot;AmunRa&quot; Rigby' ]}
+               <p>Ok, I'm impressed (@{[ a_href 'http://www.amunra.co.uk/archives/000028.php','Captive Review' ]})</p>
+               <p>Linux software generally has a reputation for having some great, novell
+               ideas, but often lacking in the general 'spit and polish' - difficult to
+               install, unreliable, and so on. However the latest program I have tried out
+               - Captive, is a breath of fresh air - simple to install and set up, and It
+               Just WorksTM. And not only that, it's probably one of the most useful and
+               technically impressive projects I've seen in a long time ...</p>
+               <p><span style="font-style: italic;">[ snip ]</span></p>
+       </li>
+       <li>Derek J Witt
+               <p>I commend you for this project. I am currently using this on my XP NTFS
+               partitions and I am impressed that I can actually move, edit, and remove files
+               and directories with no apparent ill effects. This is very nice indeed.</p>
+               <p>I initially was skeptical because it uses wine and parts of ReactOS
+                (I have messed with this OS a few times), but you have proved me wrong. I have
+               noticed no lag on my system.  I do notice the initial mounting process does
+               take slightly longer than the Linux-NTFS project. But, once I'm past that, it's
+               quite transparent.</p>
+               <p><span style="font-style: italic;">[ technical question cut ]</span></p>
+       </li>
+       <li>James Van't Slot
+               <p>Just wanted to drop you a note and say &quot;Excellent work!&quot;</p>
+               <p>I just installed captive and it worked as advertized right out of the
+               rpm.  Thanks, I've been holding off recompiling my kernel until NTFS is
+               supported out of the box for Redhat.  Now I don't have to bother.</p>
+               <p>Thanks again and keep up the great work.</p>
+       </li>
+</ul>
+
+<h2 id="press">@{[ a_href 'Press.pm','Internet Press' ]}</h2>
+
+@{[ vskip "3ex" ]}
+
+
+<h1 id="notes">Installation Notes</h1>
+<p>You should first run <b>captive-install-acquire</b> command to check your
+available Microsoft Windows drivers versions. Now you can execute:</p>
+
+<blockquote>
+       <p class="quote" style="white-space: pre;"
+># captive-cmdline \\
+               --load-module=/var/lib/captive/ntoskrnl.exe \\
+               --filesystem=/var/lib/captive/ntfs.sys \\
+               --sandbox-server=/usr/sbin/captive-sandbox-server \\
+               --bug-pathname=/tmp/captive-bug-%FT%T.captivebug.xml.gz \\
+               --disk --rw /dev/hda1
+# Now you can use ftp(1)-like command-line interface for the NTFS disk access.</p
+       >
+       <p>(Backslash end-of-line characters '\\' to be omitted for line continuation.)</p>
+</blockquote>
+
+
+<h2>Overview</h2>
+
+<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>LUFS Kernel Driver Module</h2>
+
+<p>@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} (Linux Userland File
+System) needs Linux kernel module driver (<i>lufs.o</i>) compatible with your
+running Linux kernel. The binary driver is supplied already precompiled for many
+Linux kernel versions in the binary packages above (<b>.i386.rpm</b> and
+<b>_i386.deb</b> archives).</p>
+
+<p>If you cannot <b>mount</b>(8) your NTFS filesystem you should run <span
+class="quote">/usr/share/lufs/prepmod</span> to see the reasons. It is always
+recommended to upgrade to the latest stable kernel supplied by your GNU/Linux
+distribution vendor. You may need to install package
+<b>kernel-source</b> (Red Hat) or <b>kernel-headers</b> (Debian) matching your
+Linux kernel version (<b>rpm&nbsp;-q&nbsp;kernel</b>) and re-run <span
+class="quote">/usr/share/lufs/prepmod</span>.</p>
+
+<p><b>WARNING:</b> This 'captive' package may modify your Linux kernel
+sources matching your currently running kernel version. These minor
+modifications may include a dependencies rebuild, compiling build tools, fixes of
+several include files, etc. All the modifications are done at the mount(8) time
+by the automatically executed <span class="quote">/usr/share/lufs/prepmod</span> script.
+This behavior was not present in the original
+@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} distribution
+by @{[ a_href 'http://www.malinux.net/main/','Florin Malita' ]}.</p>
+
+
+HERE
+
+
+print rightimg <<"HERE",'reactos','ReactOS',"a_href"=>'http://www.reactos.com/';
+       <h2>The First Open Source MS-Windows Kernel API for Free OS</h2>
+
+       <p>Compatibility with the existing binary Microsoft Windows file system drivers has been
+       reached. Microsoft Windows kernel system components required by these drivers
+       were analyzed and successfully emulated in the GNU/Linux operating system.
+       The project brings the Microsoft Windows kernel emulation framework to support even
+       other types of Microsoft Windows drivers in the future.
+       The <span class="productname">@{[ a_href 'http://www.reactos.com/','ReactOS' ]}</span>
+       code base proved to be a big asset for this functionality.</p>
+HERE
+
+
+my @lists=qw(captive-announce-list captive-list captive-devel-list);
+
+print <<"HERE";
+
+<h2 id="lists">Mailing Lists</h2>
+
+<form action="@{[ uri_escaped(path_web "/Mailman.pm") ]}" @{[ form_method "post" ]}>
+       <table border="1" class="mailman" style="border-collapse: collapse; border-style: solid; border-width: 1px;">
+               <tr>@{[ map('<th>'.$_.'@jankratochvil.net</th>',@lists) ]}</tr>
+               <tr><td>New version announcements<br />
+                       (low traffic, recommended)</td>
+                               <td>User support,<br />bug reports</td>
+                               <td>Development</td>
+                               </tr>
+               <tr>@{[ map({ "<td>".a_href($W->{"mailman_url"}."listinfo/$_",'Mailman Infopage')."</td>"; } @lists) ]}</tr>
+               <tr>@{[ map({ "<td>".a_href($W->{"pipermail_url"}."$_",'Archive')."</td>"; } @lists) ]}</tr>
+               <tr>@{[
+                       map(('<td><input type="checkbox" name="list" value="'.$_.'"'
+                                       .($_ ne "captive-announce-list" ? '' : ' checked="checked"')
+                                       .' /> Subscribe?</td>'),@lists)
+                       ]}</tr>
+               <tr><td colspan="3">
+                       <table border="0" style="text-align: left;">
+                               <tr><td>Email address:            </td><td><input type="text"     name="email"   size="30" /></td></tr>
+                               <tr><td>Your new Mailman password:</td><td><input type="password" name="pw"      size="15" /></td></tr>
+                               <tr><td>Reenter your password:    </td><td><input type="password" name="pw-conf" size="15" /></td></tr>
+                       </table>
+                       <p>
+                               <input type="hidden" name="back" value="/project/captive/#lists" />
+                               <input type="submit" name="email-button" value="Subscribe me" />
+                       </p>
+               </td></tr>
+       </table>
+</form>
+
+
+@{[ vskip "3ex" ]}
+
+<h1 id="seealso">See Also</h1>
+<ul>
+       <li>@{[ a_href 'Preview.pm','Technology Preview' ]}</li>
+       <li>@{[ a_href 'CVS.pm','Download Sources, CVS Repository' ]}</li>
+       <li>@{[ a_href 'doc/','Developer Documentation' ]}; highlights:<ul>
+               <li>@{[ a_href 'doc/About.pm#versions','Microsoft Windows Versions Compatibility' ]}</li>
+               <li>@{[ a_href 'doc/Architecture.pm#law','Laws and Licensing Conditions' ]}</li>
+               <li>@{[ a_href 'doc/Details.pm#sandbox','Sandboxing of W32 Filesystem' ]}</li>
+               <li>@{[ a_href 'doc/TODO.pm#todo_fsck','TODO: Fsck of NTFS' ]}</li>
+               <li>@{[ a_href 'doc/TODO.pm#todo_surprise','TODO: NTFS Support for Partition Surprise' ]}</li>
+               <li>@{[ a_href 'doc/Related.pm#LinuxNTFScompet','Related Projects - Linux NTFS' ]}</li>
+               <li>@{[ a_href 'doc/Related.pm#vmware','Related Projects - VMware Workstation' ]}</li>
+               <li>@{[ a_href 'doc/LinuxNTFS.pm',"Re: 7.7 Can't we write a wrapper for Windows' driver?" ]}</li>
+               </ul></li>
+       <li>@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/captive/TODO?rev=HEAD','Known Bugs' ]}</li>
+       <li>Man Pages<ul>
+               @{[
+                       do {
+                               my @mans=(
+                                               'captive'=>[7,'Microsoft Windows NT kernel emulation for NTFS disk access'],
+                                               'mount.captive'=>[8,'mount(8) interface for NTFS disk access'],
+                                               'lufs-captivefs'=>[7,'Linux Userland File System module for NTFS as filesystem'],
+                                               'captive-cmdline'=>[1,'Command-line client for captive(7) NTFS disk access'],
+###                                            'captive-sandbox-server'=>[1,'Security+safety wrapper for NTFS disk access'],
+                                               'captive-install-acquire'=>[1,'Find MS Windows XP driver files for NTFS'],
+###                                            'captive-install-fstab'=>[1,'Manage captive-ntfs /etc/fstab entries'],
+                                               );
+                               my @r;
+                               while (@mans) {
+                                       my $file=shift @mans;
+                                       my($section,$name)=@{shift @mans};
+                                       push @r,"<li>".a_href("man/$file.pod.html",$file)."($section) - $name</li>\n";
+                                       }
+                               @r;
+                               }
+                       ]}
+               </ul></li>
+       <li>@{[ a_href 'Resources.pm','Related Pages' ]}</li>
+       <li>@{[ a_href 'Thanks.pm','Thanks' ]}</li>
+</ul>
+HERE
+
+
+exit;
+}
+1;