get rid of FS::SSH.pm (became Net::SSH and Net::SCP on CPAN)
authorivan <ivan>
Sun, 22 Apr 2001 01:56:15 +0000 (01:56 +0000)
committerivan <ivan>
Sun, 22 Apr 2001 01:56:15 +0000 (01:56 +0000)
16 files changed:
FS/FS.pm
FS/FS/SSH.pm [deleted file]
FS/FS/svc_acct.pm
FS/FS/svc_acct_sm.pm
FS/FS/svc_domain.pm
FS/FS/svc_www.pm
FS/MANIFEST
README
bin/svc_acct.export
bin/svc_acct.import
bin/svc_acct_sm.export
bin/svc_acct_sm.import
bin/svc_domain.import
fs_passwd/fs_passwd_server
fs_signup/fs_signup_server
htdocs/docs/install.html

index 64461a5..3fd66b1 100644 (file)
--- a/FS/FS.pm
+++ b/FS/FS.pm
@@ -14,27 +14,11 @@ FS - Freeside Perl modules
 
 =head1 SYNOPSIS
 
 
 =head1 SYNOPSIS
 
-FS is the temporary prefix for many disparate modules written for the Freeside
-ISP billing software.  This includes:
-
-=head2 Database metadata classes
-
-L<FS::dbdef> - Database class
-
-L<FS::dbdef_table> - Database table class
-
-L<FS::dbdef_column> - Database column class
-
-L<FS::dbdef_colgroup> - Database column group class
-
-L<FS::dbdef_index> - Database index class
-
-L<FS::dbdef_unique> - Database unique index class
+FS is the unofficial (i.e. non-CPAN) prefix for the Perl module portion of the
+Freeside ISP billing software.  This includes:
 
 =head2 Utility classes
 
 
 =head2 Utility classes
 
-L<FS::SSH> - Simple wrappers around ssh and scp commands.
-
 L<FS::Conf> - Freeside configuration values
 
 L<FS::UID> - User class (not yet OO)
 L<FS::Conf> - Freeside configuration values
 
 L<FS::UID> - User class (not yet OO)
@@ -127,7 +111,7 @@ The main documentation is in htdocs/docs.
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: FS.pm,v 1.3 1999-08-04 12:41:47 ivan Exp $
+$Id: FS.pm,v 1.4 2001-04-22 01:56:14 ivan Exp $
 
 =head1 SUPPORT
 
 
 =head1 SUPPORT
 
@@ -155,7 +139,8 @@ Freeside distribution, which are both different from the CVS version tag for
 each file, which appears under the VERSION heading.
 
 Those modules which would be useful separately should be pulled out, 
 each file, which appears under the VERSION heading.
 
 Those modules which would be useful separately should be pulled out, 
-renamed appropriately and uploaded to CPAN.
+renamed appropriately and uploaded to CPAN.  So far: DBIx::DBSchema, Net::SSH
+and Net::SCP...
 
 =cut
 
 
 =cut
 
diff --git a/FS/FS/SSH.pm b/FS/FS/SSH.pm
deleted file mode 100644 (file)
index 84ac06b..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-package FS::SSH;
-
-use strict;
-use vars qw(@ISA @EXPORT_OK $ssh $scp);
-use Exporter;
-use IPC::Open2;
-use IPC::Open3;
-
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(ssh scp issh iscp sshopen2 sshopen3);
-
-$ssh="ssh";
-$scp="scp";
-
-=head1 NAME
-
-FS::SSH - Subroutines to call ssh and scp
-
-=head1 SYNOPSIS
-
-  use FS::SSH qw(ssh scp issh iscp sshopen2 sshopen3);
-
-  ssh($host, $command);
-
-  issh($host, $command);
-
-  scp($source, $destination);
-
-  iscp($source, $destination);
-
-  sshopen2($host, $reader, $writer, $command);
-
-  sshopen3($host, $reader, $writer, $error, $command);
-
-=head1 DESCRIPTION
-
-  Simple wrappers around ssh and scp commands.
-
-=head1 SUBROUTINES
-
-=over 4
-
-=item ssh HOST, COMMAND 
-
-Calls ssh in batch mode.
-
-=cut
-
-sub ssh {
-  my($host,$command)=@_;
-  my(@cmd)=($ssh, "-o", "BatchMode yes", $host, $command);
-#      print join(' ',@cmd),"\n";
-#0;
-  system(@cmd);
-}
-
-=item issh HOST, COMMAND
-
-Prints the ssh command to be executed, waits for the user to confirm, and
-(optionally) executes the command.
-
-=cut
-
-sub issh {
-  my($host,$command)=@_;
-  my(@cmd)=($ssh, $host, $command);
-  print join(' ',@cmd),"\n";
-  if ( &_yesno ) {
-       ###print join(' ',@cmd),"\n";
-    system(@cmd);
-  }
-}
-
-=item scp SOURCE, DESTINATION
-
-Calls scp in batch mode.
-
-=cut
-
-sub scp {
-  my($src,$dest)=@_;
-  my(@cmd)=($scp,"-Bprq",$src,$dest);
-#      print join(' ',@cmd),"\n";
-#0;
-  system(@cmd);
-}
-
-=item iscp SOURCE, DESTINATION
-
-Prints the scp command to be executed, waits for the user to confirm, and
-(optionally) executes the command.
-
-=cut
-
-sub iscp {
-  my($src,$dest)=@_;
-  my(@cmd)=($scp,"-pr",$src,$dest);
-  print join(' ',@cmd),"\n";
-  if ( &_yesno ) {
-       ###print join(' ',@cmd),"\n";
-    system(@cmd);
-  }
-}
-
-=item sshopen2 HOST, READER, WRITER, COMMAND
-
-Connects the supplied filehandles to the ssh process (in batch mode).
-
-=cut
-
-sub sshopen2 {
-  my($host,$reader,$writer,$command)=@_;
-  open2($reader,$writer,$ssh,'-o','Batchmode yes',$host,$command);
-}
-
-=item sshopen3 HOST, WRITER, READER, ERROR, COMMAND
-
-Connects the supplied filehandles to the ssh process (in batch mode).
-
-=cut
-
-sub sshopen3 {
-  my($host,$writer,$reader,$error,$command)=@_;
-  open3($writer,$reader,$error,$ssh,'-o','Batchmode yes',$host,$command);
-}
-
-sub _yesno {
-  print "Proceed [y/N]:";
-  my($x)=scalar(<STDIN>);
-  $x =~ /^y/i;
-}
-
-=head1 BUGS
-
-Not OO.
-
-scp stuff should transparantly use rsync-over-ssh instead.
-
-=head1 SEE ALSO
-
-L<ssh>, L<scp>, L<IPC::Open2>, L<IPC::Open3>
-
-=cut
-
-1;
-
index 9d2db0e..79104b8 100644 (file)
@@ -9,7 +9,7 @@ use Carp;
 use FS::Conf;
 use FS::Record qw( qsearchs fields );
 use FS::svc_Common;
 use FS::Conf;
 use FS::Record qw( qsearchs fields );
 use FS::svc_Common;
-use FS::SSH qw(ssh);
+use Net::SSH qw(ssh);
 use FS::part_svc;
 use FS::svc_acct_pop;
 use FS::svc_acct_sm;
 use FS::part_svc;
 use FS::svc_acct_pop;
 use FS::svc_acct_sm;
@@ -536,7 +536,7 @@ sub radius_check {
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: svc_acct.pm,v 1.14 2001-01-31 07:21:00 ivan Exp $
+$Id: svc_acct.pm,v 1.15 2001-04-22 01:56:15 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -552,7 +552,7 @@ counterintuitive.
 =head1 SEE ALSO
 
 L<FS::svc_Common>, L<FS::Record>, L<FS::Conf>, L<FS::cust_svc>,
 =head1 SEE ALSO
 
 L<FS::svc_Common>, L<FS::Record>, L<FS::Conf>, L<FS::cust_svc>,
-L<FS::part_svc>, L<FS::cust_pkg>, L<FS::SSH>, L<ssh>, L<FS::svc_acct_pop>,
+L<FS::part_svc>, L<FS::cust_pkg>, L<Net::SSH>, L<ssh>, L<FS::svc_acct_pop>,
 schema.html from the base documentation.
 
 =cut
 schema.html from the base documentation.
 
 =cut
index 15cf86d..8cec60b 100644 (file)
@@ -5,7 +5,7 @@ use vars qw( @ISA $nossh_hack $conf $shellmachine @qmailmachines );
 use FS::Record qw( fields qsearch qsearchs );
 use FS::svc_Common;
 use FS::cust_svc;
 use FS::Record qw( fields qsearch qsearchs );
 use FS::svc_Common;
 use FS::cust_svc;
-use FS::SSH qw(ssh);
+use Net::SSH qw(ssh);
 use FS::Conf;
 use FS::svc_acct;
 use FS::svc_domain;
 use FS::Conf;
 use FS::svc_acct;
 use FS::svc_domain;
@@ -233,7 +233,7 @@ sub check {
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: svc_acct_sm.pm,v 1.2 2000-06-30 10:37:18 ivan Exp $
+$Id: svc_acct_sm.pm,v 1.3 2001-04-22 01:56:15 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -244,7 +244,7 @@ The $recref stuff in sub check should be cleaned up.
 =head1 SEE ALSO
 
 L<FS::Record>, L<FS::Conf>, L<FS::cust_svc>, L<FS::part_svc>, L<FS::cust_pkg>,
 =head1 SEE ALSO
 
 L<FS::Record>, L<FS::Conf>, L<FS::cust_svc>, L<FS::part_svc>, L<FS::cust_pkg>,
-L<FS::svc_acct>, L<FS::svc_domain>, L<FS::SSH>, L<ssh>, L<dot-qmail>,
+L<FS::svc_acct>, L<FS::svc_domain>, L<Net::SSH>, L<ssh>, L<dot-qmail>,
 schema.html from the base documentation.
 
 =cut
 schema.html from the base documentation.
 
 =cut
index 08bcc24..a70c1a3 100644 (file)
@@ -478,7 +478,7 @@ sub submit_internic {
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: svc_domain.pm,v 1.9 2001-04-22 01:38:39 ivan Exp $
+$Id: svc_domain.pm,v 1.10 2001-04-22 01:56:15 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -495,7 +495,7 @@ The $recref stuff in sub check should be cleaned up.
 =head1 SEE ALSO
 
 L<FS::svc_Common>, L<FS::Record>, L<FS::Conf>, L<FS::cust_svc>,
 =head1 SEE ALSO
 
 L<FS::svc_Common>, L<FS::Record>, L<FS::Conf>, L<FS::cust_svc>,
-L<FS::part_svc>, L<FS::cust_pkg>, L<FS::SSH>, L<Net::Whois>, L<ssh>,
+L<FS::part_svc>, L<FS::cust_pkg>, L<Net::Whois>, L<ssh>,
 L<dot-qmail>, schema.html from the base documentation, config.html from the
 base documentation.
 
 L<dot-qmail>, schema.html from the base documentation, config.html from the
 base documentation.
 
index 6e74195..bce69d6 100644 (file)
@@ -8,7 +8,7 @@ use FS::svc_Common;
 use FS::cust_svc;
 use FS::domain_record;
 use FS::svc_acct;
 use FS::cust_svc;
 use FS::domain_record;
 use FS::svc_acct;
-use FS::SSH qw(ssh);
+use Net::SSH qw(ssh);
 
 @ISA = qw( FS::svc_Common );
 
 
 @ISA = qw( FS::svc_Common );
 
@@ -220,7 +220,7 @@ sub check {
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: svc_www.pm,v 1.3 2000-11-22 23:30:51 ivan Exp $
+$Id: svc_www.pm,v 1.4 2001-04-22 01:56:15 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
@@ -232,7 +232,10 @@ L<FS::part_svc>, L<FS::cust_pkg>, schema.html from the base documentation.
 =head1 HISTORY
 
 $Log: svc_www.pm,v $
 =head1 HISTORY
 
 $Log: svc_www.pm,v $
-Revision 1.3  2000-11-22 23:30:51  ivan
+Revision 1.4  2001-04-22 01:56:15  ivan
+get rid of FS::SSH.pm (became Net::SSH and Net::SCP on CPAN)
+
+Revision 1.3  2000/11/22 23:30:51  ivan
 tyop
 
 Revision 1.2  2000/03/01 08:13:59  ivan
 tyop
 
 Revision 1.2  2000/03/01 08:13:59  ivan
index a373f9a..98f76ac 100644 (file)
@@ -3,7 +3,6 @@ FS.pm
 FS/CGI.pm
 FS/Conf.pm
 FS/Record.pm
 FS/CGI.pm
 FS/Conf.pm
 FS/Record.pm
-FS/SSH.pm
 FS/UI/Base.pm
 FS/UI/CGI.pm
 FS/UI/Gtk.pm
 FS/UI/Base.pm
 FS/UI/CGI.pm
 FS/UI/Gtk.pm
diff --git a/README b/README
index 31601ef..dab32d6 100644 (file)
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
-Freeside, (pre-1.3.0)
+Freeside, (1.3.0)
 
 
-Copyright (C) 2000 Ivan Kohler
+Copyright (C) 2000,2001 Ivan Kohler
 Copyright (C) 1999 Silicon Interactive Software Design
 All rights reserved
 
 Copyright (C) 1999 Silicon Interactive Software Design
 All rights reserved
 
index 3280904..0733595 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 #
 #!/usr/bin/perl -w
 #
-# $Id: svc_acct.export,v 1.17 2001-02-21 23:48:19 ivan Exp $
+# $Id: svc_acct.export,v 1.18 2001-04-22 01:56:15 ivan Exp $
 #
 # Create and export password files: passwd, passwd.adjunct, shadow,
 # acp_passwd, acp_userinfo, acp_dialup, users
 #
 # Create and export password files: passwd, passwd.adjunct, shadow,
 # acp_passwd, acp_userinfo, acp_dialup, users
 # ivan@sisd.com 98-sep-18
 # 
 # $Log: svc_acct.export,v $
 # ivan@sisd.com 98-sep-18
 # 
 # $Log: svc_acct.export,v $
-# Revision 1.17  2001-02-21 23:48:19  ivan
+# Revision 1.18  2001-04-22 01:56:15  ivan
+# get rid of FS::SSH.pm (became Net::SSH and Net::SCP on CPAN)
+#
+# Revision 1.17  2001/02/21 23:48:19  ivan
 # add icradius_secrets config file to export to a non-Freeside MySQL database for
 # ICRADIUS
 #
 # add icradius_secrets config file to export to a non-Freeside MySQL database for
 # ICRADIUS
 #
@@ -70,7 +73,8 @@ use Fcntl qw(:flock);
 use IO::Handle;
 use DBI;
 use FS::Conf;
 use IO::Handle;
 use DBI;
 use FS::Conf;
-use FS::SSH qw(scp ssh);
+use Net::SSH qw(ssh);
+use Net::SCP qw(scp);
 use FS::UID qw(adminsuidsetup datasrc dbh);
 use FS::Record qw(qsearch fields);
 use FS::svc_acct;
 use FS::UID qw(adminsuidsetup datasrc dbh);
 use FS::Record qw(qsearch fields);
 use FS::svc_acct;
index 795b853..0acd731 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -Tw
 #
 #!/usr/bin/perl -Tw
 #
-# $Id: svc_acct.import,v 1.11 2000-06-29 12:27:01 ivan Exp $
+# $Id: svc_acct.import,v 1.12 2001-04-22 01:56:15 ivan Exp $
 #
 # ivan@sisd.com 98-mar-9
 #
 #
 # ivan@sisd.com 98-mar-9
 #
 # don't import /var/spool/freeside/conf/shells!  ivan@sisd.com 98-aug-13
 #
 # $Log: svc_acct.import,v $
 # don't import /var/spool/freeside/conf/shells!  ivan@sisd.com 98-aug-13
 #
 # $Log: svc_acct.import,v $
-# Revision 1.11  2000-06-29 12:27:01  ivan
+# Revision 1.12  2001-04-22 01:56:15  ivan
+# get rid of FS::SSH.pm (became Net::SSH and Net::SCP on CPAN)
+#
+# Revision 1.11  2000/06/29 12:27:01  ivan
 # s/password/_password/ for PostgreSQL wasn't done in the import.
 #
 # Revision 1.10  2000/06/28 12:32:30  ivan
 # s/password/_password/ for PostgreSQL wasn't done in the import.
 #
 # Revision 1.10  2000/06/28 12:32:30  ivan
@@ -49,7 +52,7 @@ use strict;
 use vars qw(%part_svc);
 use Date::Parse;
 use Term::Query qw(query);
 use vars qw(%part_svc);
 use Date::Parse;
 use Term::Query qw(query);
-use FS::SSH qw(iscp);
+use Net::SCP qw(iscp);
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch);
 use FS::svc_acct;
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch);
 use FS::svc_acct;
index bda17e3..a0938ca 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -Tw
 #
 #!/usr/bin/perl -Tw
 #
-# $Id: svc_acct_sm.export,v 1.8 2000-07-06 03:37:24 ivan Exp $
+# $Id: svc_acct_sm.export,v 1.9 2001-04-22 01:56:15 ivan Exp $
 # 
 # Create and export config files for sendmail, qmail
 #
 # 
 # Create and export config files for sendmail, qmail
 #
 # /var/spool/freeside/conf and sendmail updates ivan@sisd.com 98-aug-14
 #
 # $Log: svc_acct_sm.export,v $
 # /var/spool/freeside/conf and sendmail updates ivan@sisd.com 98-aug-14
 #
 # $Log: svc_acct_sm.export,v $
-# Revision 1.8  2000-07-06 03:37:24  ivan
+# Revision 1.9  2001-04-22 01:56:15  ivan
+# get rid of FS::SSH.pm (became Net::SSH and Net::SCP on CPAN)
+#
+# Revision 1.8  2000/07/06 03:37:24  ivan
 # don't error out on invalid svc_acct_sm.domuid's that can't be matched in
 # svc_acct.uid - just warn.
 #
 # don't error out on invalid svc_acct_sm.domuid's that can't be matched in
 # svc_acct.uid - just warn.
 #
@@ -68,7 +71,8 @@
 use strict;
 use vars qw($conf);
 use Fcntl qw(:flock);
 use strict;
 use vars qw($conf);
 use Fcntl qw(:flock);
-use FS::SSH qw(ssh scp);
+use Net::SSH qw(ssh);
+use Net::SCP qw(scp);
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch qsearchs);
 use FS::svc_acct;
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch qsearchs);
 use FS::svc_acct;
index 0714af3..723fb02 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -Tw
 #
 #!/usr/bin/perl -Tw
 #
-# $Id: svc_acct_sm.import,v 1.8 2000-12-03 15:14:00 ivan Exp $
+# $Id: svc_acct_sm.import,v 1.9 2001-04-22 01:56:15 ivan Exp $
 #
 # ivan@sisd.com 98-mar-9
 #
 #
 # ivan@sisd.com 98-mar-9
 #
 # ivan@sisd.com 98-jul-13
 #
 # $Log: svc_acct_sm.import,v $
 # ivan@sisd.com 98-jul-13
 #
 # $Log: svc_acct_sm.import,v $
-# Revision 1.8  2000-12-03 15:14:00  ivan
+# Revision 1.9  2001-04-22 01:56:15  ivan
+# get rid of FS::SSH.pm (became Net::SSH and Net::SCP on CPAN)
+#
+# Revision 1.8  2000/12/03 15:14:00  ivan
 # bugfixes from Jeff Finucane <jeff@cmh.net>, thanks!
 #
 # Revision 1.7  2000/06/29 10:51:52  ivan
 # bugfixes from Jeff Finucane <jeff@cmh.net>, thanks!
 #
 # Revision 1.7  2000/06/29 10:51:52  ivan
@@ -41,7 +44,7 @@
 use strict;
 use vars qw(%d_part_svc %m_part_svc);
 use Term::Query qw(query);
 use strict;
 use vars qw(%d_part_svc %m_part_svc);
 use Term::Query qw(query);
-use FS::SSH qw(iscp);
+use Net::SCP qw(iscp);
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch qsearchs);
 use FS::svc_acct_sm;
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch qsearchs);
 use FS::svc_acct_sm;
index 329465c..3d3be9d 100644 (file)
@@ -1,11 +1,11 @@
 #!/usr/bin/perl -w
 #
 #!/usr/bin/perl -w
 #
-# $Id: svc_domain.import,v 1.1 2000-02-03 05:17:39 ivan Exp $
+# $Id: svc_domain.import,v 1.2 2001-04-22 01:56:15 ivan Exp $
 
 use strict;
 use vars qw( %d_part_svc );
 use Term::Query qw(query);
 
 use strict;
 use vars qw( %d_part_svc );
 use Term::Query qw(query);
-use FS::SSH qw(iscp);
+use Net::SCP qw(iscp);
 use FS::UID qw(adminsuidsetup datasrc);
 #use FS::Record qw(qsearch qsearchs);
 #use FS::svc_acct_sm;
 use FS::UID qw(adminsuidsetup datasrc);
 #use FS::Record qw(qsearch qsearchs);
 #use FS::svc_acct_sm;
index c15c940..f4b67ae 100755 (executable)
@@ -12,7 +12,7 @@
 
 use strict;
 use IO::Handle;
 
 use strict;
 use IO::Handle;
-use FS::SSH qw(sshopen2);
+use Net::SSH qw(sshopen2);
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw(qsearchs);
 use FS::svc_acct;
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw(qsearchs);
 use FS::svc_acct;
index 86455a4..8fbc819 100755 (executable)
@@ -6,7 +6,7 @@
 use strict;
 use IO::Handle;
 use Tie::RefHash;
 use strict;
 use IO::Handle;
 use Tie::RefHash;
-use FS::SSH qw(sshopen2);
+use Net::SSH qw(sshopen2);
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw( qsearch qsearchs );
 use FS::cust_main_county;
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw( qsearch qsearchs );
 use FS::cust_main_county;
index af5251d..d94ffe7 100644 (file)
@@ -32,6 +32,9 @@ Before installing, you need:
       <li><a href="http://search.cpan.org/search?dist=Text-Template">Text-Template</a>
       <li><a href="http://search.cpan.org/search?dist=DBI">DBI
       <li><a href="http://search.cpan.org/search?mode=module&query=DBD">DBD for your database engine</a>
       <li><a href="http://search.cpan.org/search?dist=Text-Template">Text-Template</a>
       <li><a href="http://search.cpan.org/search?dist=DBI">DBI
       <li><a href="http://search.cpan.org/search?mode=module&query=DBD">DBD for your database engine</a>
+      <li><a href="http://search.cpan.org/search?dist=DBIx-DBSchema">DBIx-DBSchema</a>
+      <li><a href="http://search.cpan.org/search?dist=Net-SSH">Net-SSH</a>
+      <li><a href="http://search.cpan.org/search?dist=Net-SCP">Net-SCP</a>
     </ul>
 </ul>
 Install the Freeside distribution:
     </ul>
 </ul>
 Install the Freeside distribution: