diff --git a/website/content/en/cgi/ports.cgi b/website/content/en/cgi/ports.cgi index 0e6d425ee6..1e9de512e3 100755 --- a/website/content/en/cgi/ports.cgi +++ b/website/content/en/cgi/ports.cgi @@ -1,654 +1,654 @@ #!/usr/bin/perl -T # # Copyright (c) 1996-2023 Wolfram Schneider # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # ports.cgi - search engine for FreeBSD ports # o search for a port by name or description use POSIX qw(strftime); use Time::Local; require "./cgi-style.pl"; $t_style = qq` `; sub init_variables { $localPrefix = '/usr/ports'; # ports prefix # Directory of the up-to-date INDEX* $portsDatabaseHeadDir = "/usr/local/www/ports"; # Ports database file to use if ( -f "$portsDatabaseHeadDir/INDEX-13" ) { $ports_database = 'INDEX-13'; } elsif ( -f "$portsDatabaseHeadDir/INDEX-12" ) { $ports_database = 'INDEX-12'; } else { $ports_database = 'INDEX'; } # URL of ports tree for browsing $remotePrefixFtp = 'ports'; # 'ftp://ftp.FreeBSD.org/pub/FreeBSD/branches/-current/ports'; # where to get -current packages local ($p) = 'ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386'; local ($palpha) = 'ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/alpha'; local ($pamd64) = 'ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/amd64'; local ($pia64) = 'ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/ia64'; local ($psparc64) = 'ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/sparc64'; $remotePrefixFtpPackagesDefault = '6-STABLE/i386'; # This is currently unused %remotePrefixFtpPackages = ( '7-CURRENT/i386', "$p/packages-7-current/All", '6-STABLE/i386', " $p/packages-6-stable/All", '5-STABLE/i386', " $p/packages-5-stable/All", '4-STABLE/i386', " $p/packages-4-stable/All", '6.0-RELEASE/i386', "$p/packages-6.0-release/All", '5.4-RELEASE/i386', "$p/packages-5.4-release/All", '4.11-RELEASE/i386', "$p/packages-4.11-release/All", '4-STABLE/alpha', "$palpha/packages-4-stable/All", '5.4-RELEASE/alpha', "$palpha/packages-5.4-release/All", '4.11-RELEASE/alpha', "$palpha/packages-4.11-release/All", '7-CURRENT/amd64', "$pamd64/packages-7-current/All", '6-STABLE/amd64', "$pamd64/packages-6-stable/All", '5-STABLE/amd64', "$pamd64/packages-5-stable/All", '6.0-RELEASE/amd64', "$pamd64/packages-6.0-release/All", '5.4-RELEASE/amd64', "$pamd64/packages-5.4-release/All", '7-CURRENT/ia64', "$pia64/packages-7-current/All", '6-STABLE/ia64', "$pia64/packages-6-stable/All", '6.0-RELEASE/ia64', "$pia64/packages-6.0-release/All", '5.4-RELEASE/ia64', "$pia64/packages-5.4-release/All", '7-CURRENT/sparc64', "$psparc64/packages-7-current/All", '6-STABLE/sparc64', "$psparc64/packages-6-stable/All", '5-STABLE/sparc64', "$psparc64/packages-5-stable/All", '6.0-RELEASE/sparc64', "$psparc64/packages-6.0-release/All", '5.4-RELEASE/sparc64', "$psparc64/packages-5.4-release/All", ); $remotePrefixHtml = "$hsty_base/ports"; # Web interface for the Ports tree $remotePrefixRepo = 'https://cgit.FreeBSD.org/ports'; # Ports documentation $portsDesc = "$hsty_base/ports/"; # location of the tiny BSD daemon $daemonGif = "Really small BSD Daemon"; # visible E-Mail address, plain text $mailto = 'www@FreeBSD.org'; # Mailinglist for FreeBSD Ports $mailtoList = 'ports@FreeBSD.org'; # use mailto:email?subject $mailtoAdvanced = 'yes'; # the URL if you click at the E-Mail address (see below) $mailtoURL = "mailto:$mailto" if !$mailtoURL; # security $ENV{'PATH'} = '/bin:/usr/bin'; # extension type for packages $packageExt = 'tbz'; local ($packageDB) = '../ports/packages.exists'; &packages_exist( $packageDB, *packages ) if -f $packageDB; } sub packages_exist { local ( $file, *p ) = @_; open( P, $file ) || do { warn "open $file: $!\n"; warn "Cannot create packages links\n"; return 1; }; while (

) { chop; $p{$_} = 1; } close P; return 0; } # return the date of the last ports database update sub last_update { local ($file) = "$portsDatabaseHeadDir/$ports_database"; local ( $modtime, $modtimestr ); $modtime = ( stat($file) )[9]; if ( defined($modtime) && $modtime > 0 ) { $modtimestr = strftime( "%Y-%m-%d %H:%M:%S UTC", gmtime($modtime) ); } else { $modtimestr = "Unknown"; } return $modtimestr; } sub last_update_message { return "

Last database update: " . &last_update . "

\n"; } sub dec { local ($_) = @_; s/\+/ /g; # '+' -> space s/%(..)/pack("c",hex($1))/ge; # '%ab' -> char ab return ($_); } # $indent is a bit of optional data processing I put in for # formatting the data nicely when you are emailing it. # This is derived from code by Denis Howe # and Thomas A Fine sub decode_form { local ( $form, *data, $indent, $key, $_ ) = @_; foreach $_ ( split( /&/, $form ) ) { ( $key, $_ ) = split( /=/, $_, 2 ); $_ =~ s/\+/ /g; # + -> space $key =~ s/\+/ /g; # + -> space $_ =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig; # undo % escapes $key =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig; # undo % escapes $_ =~ s/[\r\n]+/\n\t/g if defined($indent); # indent data after \n $data{$key} = $_; } } sub escapeHTML { my $toencode = shift; return "" unless defined($toencode); $toencode =~ s{&}{&}gso; $toencode =~ s{<}{<}gso; $toencode =~ s{>}{>}gso; $toencode =~ s{"}{"}gso; return $toencode; } # encode unknown data for use in a URL sub encode_url { local ($_) = @_; s/([\000-\032\;\/\?\:\@\&\=\%\'\"\`\<\>\177-\377 ])/sprintf('%%%02x',ord($1))/eg; # s/%20/+/g; $_; } sub warn { print "$_[0]" } sub env { defined( $ENV{ $_[0] } ) ? $ENV{ $_[0] } : undef; } sub exit { exit 0 } sub readindex { local ( *var, *msec ) = @_; local ($localportsdb) = "$portsDatabaseHeadDir/$ports_database"; local ( @tmp, @s ); open( C, $localportsdb ) || do { warn "Cannot open ports database $localportsdb: $!\n"; &exit; }; while () { next if $query && !/$query/oi; chop; @tmp = split(/\|/); $var{"$tmp[1]"} = $_; @s = split( /\s+/, $tmp[6] ); foreach (@s) { $msec{"$tmp[1],$_"} = 1; } } close C; } # extract sub collections sub readcoll { local ( @a, @b, %key ); local ($file) = '../ports/categories'; local ($localportsdb) = "$portsDatabaseHeadDir/$ports_database"; if ( -r $file && open( C, $file ) ) { while () { chop; if (/^\s*([^,]+),\s*"([^"]+)",\s*([A-Z]+)/) { @b = split( /\s+/, $1 ); foreach (@b) { if ( !defined( $key{$_} ) ) { $key{$_} = 1; } } } } } else { if ( -r $localportsdb ) { open( C, $localportsdb ) || do { warn "Cannot open ports database $localportsdb: $!\n"; &exit; } } while () { chop; @a = split('\|'); @b = split( /\s+/, $a[6] ); foreach (@b) { if ( !defined( $key{$_} ) ) { $key{$_} = 1; } } } } close C; @a = (); foreach ( sort keys %key ) { push( @a, $_ ); } return @a; } # basic function for HTML output sub out { local ($line) = @_; local ( $version, $path, $local, $comment, $descfile, $email, $sections, $bdepends, $rdepends, @rest ) = split( /\|/, $line ); if ( $path =~ m%^$localPrefix/([^/]+)%o ) { if ( !$out_sec || $1 ne $out_sec ) { print "\n" if $counter > 0; print qq{\n

} . qq{Category $1} . "

\n
\n"; $out_sec = $1; } } $counter++; $pathDownload = $path; $pathB = $path; $pathB =~ s/^$localPrefix/ports/o; $path =~ s/^$localPrefix/$remotePrefixFtp/o; $descfile =~ s/^$localPrefix/$remotePrefixFtp/o; $version = &encode_url($version); #$version =~ s/[\+,]/X/g; local ($l) = $path; $l =~ s%^$remotePrefixFtp%$remotePrefixRepo/log%o; local ($t) = $path; $t =~ s%^$remotePrefixFtp%$remotePrefixRepo/tree%o; $descfile =~ s%^$remotePrefixFtp%$remotePrefixRepo/plain%o; print qq{
$version
\n}; print qq{
}, &escapeHTML($comment), qq{
\n}; print qq[Description :\n]; # Link package in "default" arch/release. Verify it's existence on ftp-master. if ( $packages{"$version.$packageExt"} ) { print qq[Package :\n]; } print qq[Changes
\n]; print qq{Maintained by: $email
\n}; local (@s) = split( /\s+/, $sections ); if ( $#s > 0 ) { print qq{Also listed in: }; foreach (@s) { print qq{$_ } if $_ ne $out_sec; } print "
\n"; } if ( $bdepends || $rdepends ) { local ($flag) = 0; local ($last) = ''; print qq{Requires: }; foreach ( sort split( /\s+/, "$bdepends $rdepends" ) ) { # delete double entries next if $_ eq $last; $last = $_; print ", " if $flag; $flag++; print qq{$_}; } print "
\n"; } print qq[
]; # XXX: should be done in a CSS print qq[
 
]; print qq[\n\n]; } # search and output sub search_ports { local (@a) = (); local ( $key, $name, $text ); foreach $key ( sort keys %today ) { next if $today{$key} !~ /$query/oi; @a = split( /\|/, $today{$key} ); $name = $a[0]; #$name =~ s/(\W)/\\$1/g; $text = $a[3]; #$text =~ s/(\W)/\\$1/g; if ( $section ne "all" ) { next if $a[6] !~ /^$section(\s|$)/; } #warn "$stype:$query: $name $text\n"; if ( $stype eq "name" && $name =~ /$query/o ) { &out( $today{$key} ); } elsif ( $stype eq "text" && $text =~ /$query/oi ) { &out( $today{$key} ); } elsif ( $stype eq "all" && ( $text =~ /$query/oi || $name =~ /$query/io ) ) { &out( $today{$key} ); } elsif ( $stype eq 'maintainer' && $a[5] =~ /$query/io ) { &out( $today{$key} ); } elsif ( $stype eq 'requires' && ( $a[7] =~ /$query/io || $a[8] =~ /$query/io ) ) { &out( $today{$key} ); } } } sub forms { print qq{

The FreeBSD Ports and Packages Collection offers a simple way for users and administrators to install applications. FAQ

}; print qq{

"Package Name" searches for the name of a port or distribution. "Description" searches case-insensitive in a short comment about the port. "All" searches case-insensitive for the package name and in the description about the port.

Search for:

}; } sub footer { print qq{ Powered by FreeBSD © 1996-2023 by Wolfram Schneider. All rights reserved.
}; #print q{$FreeBSD$} . "
\n"; print qq{General questions about FreeBSD ports should be sent to } . qq{} . qq{$mailtoList
\n}; print &last_update_message; print qq{
\n

\n}; } sub check_query { my ($query, $sourceid) = @_; $query =~ s/"/ /g; $query =~ s/^\s+//; $query =~ s/\s+$//; # XXX: Firefox opensearch autocomplete workarounds if ($sourceid eq 'opensearch') { # remove space before a dot $query =~ s/ \././g; # remove space between double colon $query =~ s/: :/::/g; } return $query; } sub check_input { if ($query) { $stype = "all" if !$stype; if ( !( $stype eq "name" || $stype eq "text" || $stype eq "maintainer" || $stype eq "requires" || $stype eq "all" ) ) { &warn( "unknown search type ``$type'', use `all', `text', `name', 'requires', or `maintainer'\n" ); &exit(0); } else { return; } } } sub faq { print qq{

FreeBSD Ports Search FAQ

Keywords

Description
A more detailed description.
Changes
Read the latest changes.

Misc

The script ports.cgi use the file $ports_database as database for its operations. $ports_database is updated automatically every two hours.

You may also search the -ports manual pages.

+ports manual pages.

Back to the search engine


}; } # # Main # &init_variables; $query_string = &env('QUERY_STRING'); $path_info = &env('PATH_INFO'); &decode_form( $query_string, *form ); $section = $form{'sektion'}; $section = 'all' if ( !$section ); $query = $form{'query'}; $stype = $form{'stype'}; $sourceid = $form{'sourceid'} // ""; $script_name = &env('SCRIPT_NAME'); if ( $path_info eq "/source" ) { # XXX print "Content-type: text/plain\n\n"; open( R, $0 ) || do { print "ick!\n"; &exit; }; while () { print } close R; &exit; } if ( $stype eq "faq" ) { print &short_html_header( "FreeBSD Ports Search FAQ", 1 ); &faq; &footer; print &html_footer; &exit(0); } print &html_header( "FreeBSD Ports Search", 1 ); # allow `/ports.cgi?netscape' where 'netscape' is the query port to search # this make links to this script shorter if ( !$query && $query_string =~ /^([^=&]+)$/ ) { $query = $1; } # automatically read collections, need only 0.2 sec on a pentium @sec = &readcoll; $query = &check_query($query, $sourceid); &forms; if ( $query_string eq "" || !$query ) { &footer; print &html_footer; &exit(0); } &check_input; $counter = 0; # search if ($query) { &readindex( *today, *msec ); $query =~ s/([^\w\^])/\\$1/g; &search_ports; } if ( !$counter ) { print "Sorry, nothing found.\n"; print qq{You may look for other } . qq{FreeBSD Search Services.\n}; } else { print "
\n"; } print qq{
\n}; &footer; print &html_footer; diff --git a/website/content/en/docproj/doc-set.adoc b/website/content/en/docproj/doc-set.adoc index 9cdc09eba9..cb33da7403 100644 --- a/website/content/en/docproj/doc-set.adoc +++ b/website/content/en/docproj/doc-set.adoc @@ -1,22 +1,22 @@ --- title: "FreeBSD Documentation Project: Documentation Set" sidenav: docs --- = FreeBSD Documentation Project: Documentation Set FreeBSD's documentation falls into three basic categories: -. https://www.freebsd.org/cgi/man.cgi[*The manual pages*] +. https://man.freebsd.org/cgi/man.cgi[*The manual pages*] + The manual pages are part of the base system, but are also an important component of the documentation. Both the Documentation project and source committers update and maintain manual pages. + At present, the Japanese team has translated many of the manual pages. Other volunteers could pitch in to translate the manual pages to other languages as well. . link:../../docs/books/[*The Books*] + The project has a large amount of documentation that is "book length", or becoming that way. These include the FreeBSD FAQ and the FreeBSD Handbook. . link:../../docs/books#ARTICLES[*The Articles*] + FreeBSD has a wealth of information available in shorter, article form -- similar to the tutorials or HOWTO documentation of other projects. link:../[FreeBSD Documentation Project Home] diff --git a/website/content/en/projects/newbies.adoc b/website/content/en/projects/newbies.adoc index 86e85e4950..4d4bdfa6fc 100644 --- a/website/content/en/projects/newbies.adoc +++ b/website/content/en/projects/newbies.adoc @@ -1,44 +1,44 @@ --- title: "Resources for Newbies" sidenav: docs --- include::shared/en/urls.adoc[] = Resources for Newbies == Getting FreeBSD The latest FreeBSD releases are available link:../../where/[here]. Before you begin, please carefully read the link:{handbook}bsdinstall[installation instructions] == Learning about FreeBSD * The link:{handbook}[FreeBSD Handbook] and link:{faq}[Frequently Asked Questions (FAQ)] are the main documents for FreeBSD. Essential reading, they contain a lot of material for newbies as well as advanced users. For users interested in installing a GUI, see the link:{handbook}x11[X Windows] chapter. -* https://www.freebsd.org/cgi/man.cgi[Manual pages] are good for reference but not always the best introduction for a novice. They generally provide information on a specific command, driver or service. +* https://man.freebsd.org/cgi/man.cgi[Manual pages] are good for reference but not always the best introduction for a novice. They generally provide information on a specific command, driver or service. == Questions and Support * Join the FreeBSD-Questions mailing list to see the questions you were too afraid to ask, and their answers. Subscribe by filling out the following form: https://lists.FreeBSD.org/subscription/freebsd-questions. You can look up old questions and answers via the link:../../search/#mailinglists[search] page. * The FreeBSD https://forums.freebsd.org[Forums] offer another support channel. Many users have written various tutorials and lots of new users receive help there. * You can link:../../search/[search] the Handbook and FAQ, the whole web site, or the FreeBSD mailing list archives. * The link:../../support/[Support] page contains a wealth of information about FreeBSD, including mailing lists, user groups, web and FTP sites, release information, and links to some sources of UNIX(R) information. == Learning about FreeBSD-derived projects FreeBSD is widely used as a building block for other commercial and open-source operating systems. Some of the most widely used and publicly available systems are listed below. * https://www.truenas.com/[TrueNAS] is a Network Attached Storage (NAS) software that shares and protects data from modern-day threats like ransomware and malware. TrueNAS makes it easy for users and client devices to access shared data through virtually any sharing protocol. * https://ghostbsd.org[GhostBSD] is derived from FreeBSD, GhostBSD uses the GTK environment to provide a beautiful looks and comfortable experience on the modern BSD platform offering a natural and native UNIX(R) work environment. * https://nomadbsd.org[NomadBSD] is a persistent live system for USB flash drives, based on FreeBSD. Together with automatic hardware detection and setup, it is configured to be used as a desktop system that works out of the box, but can also be used for data recovery, for educational purposes, or to test FreeBSD's hardware compatibility. * https://www.midnightbsd.org[MidnightBSD] is a BSD-derived operating system developed with desktop users in mind. It includes all the software you'd expect for your daily tasks: mail, web browsing, word processing, gaming, and much more. * http://www.pfsense.org[pfSense] is a FreeBSD based network security solution. pfSense software, with the help of the package system, is able to provide the same functionality or more of common commercial firewalls, without any of the artificial limitations. It has successfully replaced every big name commercial firewall you can imagine in numerous installations around the world. == How to Contribute Everyone has something to contribute to the FreeBSD community, even newbies! Some are busy working with the new advocacy group and some have become involved with the link:../../docproj/[Documentation Project] as reviewers. Other FreeBSD newbies might have particular skills and experiences to share, either computer related or not, or just want to meet new newbies and make them feel welcome. There are always people around who help others simply because they like to. Friends who run FreeBSD are a great resource. No book can replace chatting on the phone or across a pizza with someone who has the same interests, enjoys similar accomplishments, and faces the same challenges. If you do not have many friends who use FreeBSD, consider using your old FreeBSD CDs to create some more. link:../../usergroups/[User groups] are good places to meet other FreeBSD users. If there is no one nearby, you might consider starting one! For more information on getting involved in the community, see the link:{contributing}[Contributing to FreeBSD] article.