pifty
/
tutes-dump
Archived
1
1
Fork 1

initial and only intended commit

This commit is contained in:
pifty 2020-07-11 10:11:19 +00:00
commit 7b2d7b24b9
751 changed files with 99882 additions and 0 deletions

7
bin/convert.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
mkdir ./dump 2> /dev/null
for f in $(find ./site-tutorials -name *.html); do
echo converting $f ...
perl bin/html2docuwiki.pl < $f > dump/$(basename $f).docuwiki
done

9
bin/html2docuwiki.pl Normal file
View File

@ -0,0 +1,9 @@
use strict;
use warnings;
use HTML::WikiConverter::DokuWiki ();
# slurp mode
$/ = undef;
my $html = <>;
print HTML::WikiConverter::DokuWiki->new( dialect => 'DokuWiki' )->html2wiki($html);

View File

@ -0,0 +1,5 @@
====== Gate One SSH Interface ======
SDF provides a HTTPS based SSH client using Gate One at [[https://ssh.sdf.org|ssh.sdf.org]]. This allows use of SSH behind networks that filter or block SSH traffic. It also maintains a persistent connection over unstable network connections.
$Id: Gate_One.html,v 1.1 2019/03/19 19:05:32 kj8am Exp kj8am $

View File

@ -0,0 +1,32 @@
====== Instant Messaging on SDF ======
On SDF you can use nearly all of the popular instant messaging protocols via fast and efficient text clients. Many users have set up scripts so that they can use various IM clients via their computers or wireless devices such as two way pagers, blackberry, palm pilots and cellphones, and you can too.
Some of the clients listed in this page are able to connect simultaneusly to various IM networks as centerim and finch (which is purple/pidgin based). Links are provided to web pages with detailed steps to connect to the various IM networks using the available clients at SDF
Also, some clients are not very actively maintained, so may not be able to connect to the networks they claim are able to connect to, your best bet are centerim and finch.
===== Available clients =====
(+) In AMD64 hosts. (*) In Alpha hosts.
^ ^ bsflite (+) ^ centericq (+) ^ centerim ^ ekg (+) ^ finch (*) ^ naim (+) ^ mcabber (+) ^
| AIM | YES | YES | YES | | YES | YES | |
| Gadu-Gadu | | YES | YES | YES | YES | | |
| [[http://sdf.org/?tutorials/jabber|Jabber/XMMP]] | | YES | YES | | YES | | YES |
| [[http://sdf.org/?tutorials/msn|MSN]] | | YES | YES | | YES | | |
| YAHOO | | YES | YES | | YES | | |
| ICQ | | YES | YES | | YES | | |
===== Bitlbee =====
Bitlbee is an IRC gateway to MSN, ICQ, Jabber, Yahoo, and AIM. It allows you to connect to these services using an irc client.
- connect with your favorite irc client to im.bitlbee.org.
- say "help" to the root nick, or just type help. everything you need is there.
===== A list of Instant Messaging libraries available =====
* p5-Net-AIM-1.22 - Implementation of the AOL Instant Messenger TOC protocol
* libyahoo-0.18.4 - Yahoo! Messenger client library
* ... $Id: InstantMessaging.html,v 1.2 2013/07/17 03:16:52 tcj Exp $

View File

@ -0,0 +1,32 @@
====== Instant Messaging on SDF ======
On SDF you can use nearly all of the popular instant messaging protocols via fast and efficient text clients. Many users have set up scripts so that they can use various IM clients via their computers or wireless devices such as two way pagers, blackberry, palm pilots and cellphones, and you can too.
Some of the clients listed in this page are able to connect simultaneusly to various IM networks as centerim and finch (which is purple/pidgin based). Links are provided to web pages with detailed steps to connect to the various IM networks using the available clients at SDF
Also, some clients are not very actively maintained, so may not be able to connect to the networks they claim are able to connec to, your best bet are centerim and finch.
===== Available clients =====
(+) In AMD64 hosts. (*) In Alpha hosts.
^ ^ bsflite (+) ^ centericq (+) ^ centerim ^ ekg (+) ^ finch (*) ^ naim (+) ^ mcabber (+) ^
| AIM | YES | YES | YES | | YES | YES | |
| Gadu-Gadu | | YES | YES | YES | YES | | |
| [[http://sdf.org/?tutorials/jabber|Jabber/XMMP]] | | YES | YES | | YES | | YES |
| [[http://sdf.org/?tutorials/msn|MSN]] | | YES | YES | | YES | | |
| YAHOO | | YES | YES | | YES | | |
| ICQ | | YES | YES | | YES | | |
===== Bitlbee =====
Bitlbee is an IRC gateway to MSN, ICQ, Jabber, Yahoo, and AIM. It allows you to connect to these services using an irc client.
- connect with your favorite irc client to im.bitlbee.org.
- say "help" to the root nick, or just type help. everything you need is there.
===== A list of Instant Messaging libraries available =====
* p5-Net-AIM-1.22 - Implementation of the AOL Instant Messenger TOC protocol
* libyahoo-0.18.4 - Yahoo! Messenger client library
* ... $Id: InstantMessenging.html,v 1.11 2011/02/08 21:32:28 clemens Exp $

193
dump/PPTP.html.docuwiki Normal file
View File

@ -0,0 +1,193 @@
====== Connecting to the SDF VPN with PPTP ======
===== Contents =====
* [[#overview|Overview]]
* [[#setup|Setting it up]]
* [[#xp|Connecting in Windows XP]]
* [[#vista|Connecting in Windows Vista]]
* [[#linux|Connecting in Linux]]
* [[#freebsd|Connecting in FreeBSD]]
* [[#osx|Connecting in Mac OS X]]
* [[#wrapup|The Wrap-up]]
===== Overview =====
The Virtual Private Network (VPN) provided by SDF has a number of uses. The most beneficial of that is to allow confidential communication over a public network. Basically, the SDF VPN will allow you (once routing is enabled) to communicate securely over an insecure connection such as a public Wireless Fidelity (Wi-Fi) network.
The major benefit of this over SSH forwarding/tunneling is that it is much easier to configure and automatically tunnels **all** connections leaving your computer, and not just those specifically configured for forwarding. Some may see this as a negative aspect of the VPN, however.
===== Setting it up =====
The SDF VPN is quite easy to set up. You must first choose a VPN plan that is right for you, based on assumed bandwidth usage. Pricing and more package information is available through the shell by typing '**vpn**' without the quotes.
Once you've been added to the VPN membership level (you'll receive an email notification of this), you must set up your VPN access by typing '**setvpn**' in the shell, without quotes. This will allow you to configure your VPN secret (password) for connecting.
You should make note of the VPN's IP address when setting up your secret.
Once you've configured your VPN account, it's time to connect. Continue reading below for step-by-step instructions on connecting to the VPN.
===== Connecting in Windows XP =====
- Open the Windows Control Panel.
- Open the Network Connections item in Control Panel. Generally you would click the "**Network and Internet Connections**" option, then click "**Network Connections**". A list of existing dial-up and LAN connections will be displayed.
- Click on the "**Create a new connection**" option from the left-hand side of the window. The Windows XP New Connection Wizard will come up.
- Click the "**Next**" option to begin the wizard. Then choose the "**Connect to the network at my workplace**" option from the list and click "**Next**".
- On the Network Connection page of the wizard, choose the "**Virtual Private Network connection**" option and click "**Next**".
- Choose a name for this connection on the "**Connection Name**" screen. Windows will use this to reference the VPN connection.
- Choose an option on the "**Public Network**" screen and click "**Next**". The default option, "**Automatically dial this initial connection**" can be used if the VPN connection will always be initiated when the computer is not already connected to the Internet. Otherwise, choose the "**Do not dial the initial connection**" option. This requires that the public Internet connection be established first, before this new VPN connection will be initiated. **Choose this option.**
- Enter the IP address for the VPN on the "**VPN Server Selection**" screen. This is obtained via the '**setvpn**' command (without quotes) in the shell.
- Choose an option on the "**Connection Availability**" screen and click "**Next**". The default option, "**My Use Only**", ensures that Windows will make this VPN connection available only to the user that is currently logged in to the computer. If you don't want this, select the "**Anyone's use**" option.
- Click "**Finish**" to complete the wizard. You may wish to select the option to create a desktop shortcut for easy access. The information for the VPN connection will be saved for current and/or future use.
===== Connecting in Windows Vista =====
Connecting to the VPN is slightly different in Windows Vista. Please use these instructions to connect to SDF's VPN through Vista.
- Click on the "**Start**" button and then choose "**Connect to**".
- Click on the "**Set up a connection or network**" option on the window that follows. It's near the bottom.
- On the window that comes up, scroll down and click on the "**Connect to a workplace**" option. Then click "**Next**".
- A question asking "**Do you want to use a connection you already have?**" may appear. Select "**No, create a new connection.**" if it does and then click "**Next**".
- Next you'll be asked "**How do you want to connect?**" Select "**Use my Internet connection (VPN)**".
- You'll then be asked for the Internet address. Enter the address you remembered when accessing '**setvpn**' (without quotes) in the SDF shell.
- Enter a name for this VPN connection in the "**Destination name:**" field. This is how Windows Vista will reference the VPN.
- If you don't want to connect immediately, check the "**Do not connect now; just set it up so I can connect later.**" option.
- Do not check the "**Use a smart card.**" option.
- When finished, click "**Next**"
- You'll then configure the username and password needed to authenticate to the VPN. The username is your SDF username and the password is the secret you set up via the '**setvpn**' command in the shell.
- Leave the "**Domain**" field blank.
- Click the "**Create**" button once you are done. You should then see a window pop up saying that "**The connection is ready to use.**" Click on "**Close**".
===== Connecting in Linux =====
- Make sure PPP and PPTP are installed. The can be accomplished in Debian or Ubuntu by entering '**sudo apt-get install pptp-linux**' into a terminal.
- Create a file named sdfpptp in /etc/ppp/peers by entering '**sudo gedit /etc/ppp/peers**'. Replace gedit with your choice of text editor. Add the following to the file: (Be sure to replace **//username//** with your username.)\\ \\ Note: Make sure to replace **//IP Address//** with the IP address/hostname provided when running '**setvpn**' in the shell.\\
remotename sdfpptp
linkname sdfpptp
ipparam sdfpptp
pty "pptp --loglevel 0 **//IP Address//** --nolaunchpppd"
name **//username//**
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
require-mppe
nomppe-stateful
require-mppe-128
nomppe-40
noauth
nodetach
lock
bsdcomp 9,15
deflate 9,15
idle 0
- Save the file.
- Edit /etc/ppp/chap-secrets by entering '**sudo gedit /etc/ppp/chap-secrets**'. Add the line **//username// stfpptp //password// *** replacing //username// and //password// with your SDF username and your password set by **'setvpn'**.
- Make sure a specific route to the VPN exists. Run '**sudo route add **//VPN-IP//** gw **//GW-IP//****' replacing **//VPN-IP//** with the IP address/hostname provided when running '**setvpn**', and replace **//GW-IP//** with your gateway IP address. If you do not know the IP address of your gateway, enter '**route**'. It is the gateway IP next to the destination **default**.
- Enter '**sudo pppd call sdfpptp**' into a terminal. Wait for it to show the local and remote IP addresses. You should now be connected. Do not close the terminal until you are ready to disconnect.
- Open another terminal. Enter '**sudo route add -net 192.94.73.0/24 dev ppp0**'. This will route all your connections to SDF through the VPN.
Alternatively to steps 5 and 6, you might use a wrapper script like this:\\
#!/bin/bash
SDFVPNHOST=**//IP Address//**
RT=`ip route get $SDFVPNHOST | head -1`
DEV=`echo $RT | awk '{while ($num != "dev") {num++}{print $(num+1)}}'`
VIA=`echo $RT | awk '{while ($num != "via") {num++}{print $(num+1)}}'`
ip route add $SDFVPNHOST via $VIA dev $DEV
ip route add $SDFVPNHOST via $VIA dev $DEV table sdftun
pppd call sdfpptp
ip route del $SDFVPNHOST via $VIA dev $DEV
ip route del $SDFVPNHOST via $VIA dev $DEV table sdftun
This automatically detects the default gateway and adds appropriate routes, starts the VPN and deletes the routes after VPN has been stopped. If you do not use a custom routing table dedicated to the SDF VPN you should delete the lines ending in "table sdftun".\\
==== GUI Setup With NetworkManager ====
Any of the newer Linux distros that use NetworkManager (Debian, Ubuntu, Fedora, etc.) on their default desktops have a GUI interface to PPTP VPN configuration. You'll need to install a package to get this capability (although this now seems to be included in the latest Ubuntu 10.10 release):
Fedora:
yum install NetworkManager-pptp
Debian/Ubuntu:
apt-get install network-manager-pptp
Once installed, restart the NetworkManager service (///etc/init.d/NetworkManager restart//) and left-click on the network manager icon in your taskbar. Highlight **VPN Connections** and click on **Configure VPN**:
{{tutorials/images/vpn1.png|Network Manager - Overview Settings}}\\ {{tutorials/images/vpn4.png|Network Manager - VPN Settings Overview}}
Click on the **Add** button, and choose **Point-to-Point Tunneling Protocol (PPTP)**, then click **Create**. Fill out the **User name**, **Password** and **Gateway** fields with appropriate values ([[#setup|from when you ran //setvpn//]]):
{{tutorials/images/vpn2.png|Network Manager Settings - VPN Settings Detail}}
Now click on **Advanced**:
{{tutorials/images/vpn3.png|Network Manager Settings - Advanced VPN Details}}
Under **Authentication**, **de-select all the methods except MSCHAPv2**. Then select **Use Point-to-Point Encryption (MPPE)** and choose **128-bit (most secure)** in the **Security** dropdown. Click **OK**, then **Apply** and close all other configuration dialogs. Now when you left-click on the network manager icon, you should have your PPTP VPN listed under **VPN Connections**. Just select it and wait. If it is successful, you'll see a little lock icon appear over the usual network manager icon. If not, check your system log for errors. This will be ///var/log/messages// or ///var/log/syslog//, depending on your distro.
==== A Note on Routing ====
If you use network manager, all traffic will be routed through the PPTP VPN for you once you are connected. If that's not what you want, you can click on **IPV4 Settings** and then **Routes** to have simple static routes added for you automatically when the VPN connects. You can also check **Use this connection only for resources on this network**, which in our case means only connections to SDF hosts will be encrypted.
{{tutorials/images/vpn5.png|Network Manager Settings - Add Routes}}
===== Connecting in FreeBSD =====
* Install mpd4 from ports or packages.
* Add the following section to your /usr/local/etc/mpd4/mpd4.conf: sdfvpn: new -i ng1 sdfvpn sdfvpn set iface disable on-demand set iface idle 0 # disconnect the client after 8 hours set iface session 28800 set iface route 10.0.0.0/24 set iface route default set bundle disable multilink set auth authname "USERNAME" set auth password "PASSWORD" set link yes acfcomp protocomp set link no eap set link no pap set link accept chap set link mtu 1460 set link keep-alive 10 75 set ipcp yes vjcomp set ipcp ranges 0.0.0.0/0 set ipcp yes req-pri-dns req-sec-dns # # The five lines below enable Microsoft Point-to-Point encryption # (MPPE) using the ng_mppc(8) netgraph node type. # set bundle yes compression set ccp yes mppc set ccp yes mpp-compress set ccp yes mpp-e128 #set bundle accept crypt-reqd set ccp yes mpp-stateless open
* You will have to replace three (3) things in this config:
- Your USERNAME
- Your PASSWORD
- The local address of SDF's VPN host. This can be found in /etc/hosts on SDF. The local IP will start with 10.0.0, but have the same last octet as the public IP. '
* Add this in your /usr/local/etc/mpd4/mpd4.links file: sdfvpn: set link type pptp set pptp peer set pptp enable originate outcall set pptp disable incoming
* You will have to replace one (1) thing in this config:
- The public address of SDF's VPN host. You can get this by running setvpn at the shell.
* Now, as root, run mpd4 sdfvpn.
* You should now be connected to SDF over a layer 3 tunnel across the Internet.
* Your new routes are only for SDF's hosts, and use their internal IP addresses. These are the 10.0.0.x ones. I'm working on how to route to the public ones over the VPN without creating a routing loop to the VPN host. I copied SDF's /etc/hosts file to my machine so that I can run 'ssh sdf1' to connect through the tunnel.
===== Connecting in Mac OS X =====
- Open /Applications/Internet Connect.app
- Click on the **VPN** button.
- Click on the Configuration dropdown and go to "**Edit Configurations...**"
- Press the **+** button at the bottom left of the window to add a configuration.
- Under "**Description**" put whatever you want. SDF VPN is a good choice.
- Under the "**Server Address**," Enter the IP address for the VPN on the "**VPN Server Selection**" screen. This is obtained via the '**setvpn**' command (without quotes) in the shell.
- Under Username put your SDF username and the password is the secret you set up via the '**setvpn**' command in the shell.
- Choose "**Automatic**" encryption.
- Click "**OK**".
- Then, whenever you want to connect you can return to this **Internet Connect Application** and go to the VPN, choose the SDF VPN and click connect. Optionally, you can click "**Show VPN status in the menu bar**" and you can connect to the VPN from the menu bar icon.
===== Connecting On An iPad =====
- Log into SDF and run the 'setvpn' command.
- Hit 'p' to set up your password.
- Enter your password twice. The password must be 14 characters or less, and ideally should contain letters, numbers, upper and lower case, and a special symbol, though there are no actual complexity requirements.
- After you have set up your password, the setvpn wizard will tell you what IP address to connect to. It will be 192.94.73.X. Write this whole IP address down. You will need it in a later step.
- Hit 'q' to exit the configuration.
- Turn on your iPad and go to the Settings.
- Go into the Network subsection.
- Go into the VPN subsection. This will bring up the 'Add Configuration' window.
- Select "PPTP" at the top.
- In the Description field, label this connection something useful to identify it, such as 'SDF VPN'.
- In the 'Server' field, put in the IP address that you wrote down earlier.
- In the 'account' field, put your SDF user name.
- In the 'Password' field, put the password that you set up while running the setvpn wizard in the set above. This will cause the iPad to remember your password for you. If you wish to type it in each time you connect, leave this field blank.
- Set the encryption level to 'Maximum'
- Leave the 'Send All Traffic' slider set to 'On', unless you specifically want to (and know how to) set up VPN usage in individual applications.
- Hit the 'Save' button at the top
- To turn on VPN, slide the VPN slider to 'On' for the connection called SDF and open the browser. Connect to http://whatsmyip.org and verify that the IP address it shows as your source.
===== The wrap-up =====
Now that you have your VPN configured to connect, make sure that you don't forget to use it! Using the VPN while connected through a public access network (or even your home network!) will tunnel all connections through SDF and out to the Internet (once routing is enabled). Please make sure to use the VPN responsibly, as all actions and activity will be traced back to SDF.
Enjoy!
----
$Id: PPTP.html,v 1.2 2011/06/15 15:51:32 avoyager Exp $

View File

@ -0,0 +1,94 @@
====== Building a Basic Ruby on Rails Application ======
* **Part I: Getting Started**
* [[#introduction|Introduction]]
* [[#creating_project|Creating a Rails Project]]
* [[#building_model|Building The Data Model]]
* [[#quick_demo|A Quick Demonstration!]]
* **Part II: Layout and Design**
* **Part III: Making it Better**
* **Appendix**
* [[#appendix_sdf_utils|Appendix A: SDF Utility Scripts]]
* [[#appendix_database_conf|Appendix B: Configuring A Database]]
----
===== Introduction =====
[ To Be Written ]
===== Creating a Rails Project =====
All rails applications reside in their own directory tree. This tree is automatically generated by the '"rails"' command ( '"man rails "' for more information ). To create our project's directory structure, execute the following:
" (alterego@sverige)# rails ~/html/bookmarks --database=sqlite3\\ (alterego@sverige)# ln -s bookmarks ~/html/rails\\ (alterego@sverige)# cd ~/html/rails "
The first command creates our project's directory tree under the '"~/html/bookmarks"' directory. Then we create a symlink from this directory, to '"~/html/rails"' so that the SDF utility scripts will be able to find, and work with this project. ( [[#appendix_sdf_utils| More info]] )
The '"--database=sqlite3"' argument to the '"rails"' executable, informs Rails to configure the new project to use an SQLite3 database backend. If you have 'dba' membership then you can use MySQL as your backend by substituting '"sqlite3"' with '"mysql"'. This tutorial will however focus in using SQLite3 as it is available to all MetaARPA members. If you are going to use MySQL as your database backend, then you'll have to read [[#appendix_database_conf|this]] in order to configure your backend properly.
The final command changes your working directory to your new projects' root. The rest of the commands in this tutorial rely on you being at this location in order to execute correctly.
===== Building The Data Model =====
Now we are sitting in our nice new Rails project's root directory, we can start building our application. The most important thing in any database driven application like this one, is the data model. It specifies what data our application interacts with, and //how// we interact with it.
In this application, we only have one data type, that is a 'Link', this link must have a name, some descriptive information and the target URI. Normally at this stage you'd have to roll-up your sleaves and write one of those fugly SQL statements to create your table. Not us, Rails has cunningly abstracted database interaction for us, so no more SQL! In order to create our mode we must run this command:
" (alterego@sverige)# ruby script/generate model link "
This command line executes the Ruby script, '"script/generate"'. The '"generate"' script is extremely useful, it automates the process of creating files to add specific functionality to our applications. You can tell what operations a '"generate"' command has performed by reading it's output. This command created the two files required to create our 'Link' model.
Next we need to edit the '"db/migrate/001_create_links.rb"' file. Files located under the '"db/migrate"' directory are used to perform revision changes on your project's database. This file will allow us to specify our databases table without the need for any SQL, and, if required, roll our database back to before this migration occured.
==== Edit '"db/migrate/001_create_links.rb"' ====
class CreateLinks &lt; ActiveRecord::Migration
def self.up
create_table :links do |t|
t.column :name, :string
t.column :info, :string
t.column :url, :string
end
end
def self.down
drop_table :links
end
end
Now we've specified our '"links"' table's structure. We have to commit the revision in order to create the table. To do this execute the following:
" (alterego@sverige)# rake db:migrate "
Going into the details of this command is way outside the scope of this document, I wouldn't have used it in this tutorial if it wasn't for it being such an easy way to generate a database across different backends.
[[| ]]
===== A Quick Demonstration! =====
Before we move on to defining the application controller, I thought I would try and impress you with Rails magic. The next two commands will allow you to list, view, edit and delete items from your database through your web browser:
" (alterego@sverige)# ruby script/generate scaffold link\\ (alterego@sverige)# ruby script/server -p `id -u` "
Right, those two commands did quite a bit. The first one generated a basic set of HTML templates and application logic. The second command started a web server, written in Ruby, running on a port that was specified from your userid. You'll notice on the second line of output from the '"server "' script, the address that it has bound itself too, along with the port number ( your user id ) it is running on in standard URI format.
So, open up a web browser, and point it to '"http://sverige.freeshell.org:[ YOUR USER ID ]"' substituting your user id. Your browser should open 'Ruby on Rails: Welcome aboard' page. This just indicates that the Rails environment and server are running. Now, go back to your browsers' address bar, and append '"/links"' after your user id. Your browser should now show a rather rubbish looking list view, with no elements.
At this point it will probably be a good idea to play around and add some items as we'll need them for the next sections. Besides, I need to make myself a drink ...
===== To Be Continued ... =====
----
===== Appendix A: SDF Utility Scripts =====
There are two utility scripts written specifically for Rails applications on SDF. The first 'ror' toggles whether the Rails project under '" ~/html/rails"' has it's server started when the syste boots. The second script 'railsctl', is start/stop daemon, which starts or stops the Rails project located in the standard SDF project location.
As you may want to play with multiple Rails projects, it doesn't really matter where you put them, or what you call them. But if you plan on using the SDF utility scripts, which is a good idea if you want to host your project, then it's probably a good idea to symlink your current project directory to '"~/html/rails"'
===== Appendix B: Configuring A Database =====
[ To Be Written ]
$Id: Rails_Basic_Application.html,v 1.2 2006/12/31 14:27:54 alterego Exp $

View File

@ -0,0 +1,175 @@
====== Ruby on Rails on SDF ======
----
===== Content =====
* [[#whatisrails|What is Rails?]]
* [[#prerequisites|Prerequisites]]
* [[#starting|Getting started]]
* [[#hello|Hello, world!]]
* [[#maintenance|Maintenance and Utility Scripts]]
----
===== [[|What is Rails?]] =====
[[http://www.rubyonrails.org/|Ruby on Rails]] is a WebDev framework written in the [[http://www.ruby-lang.org/|Ruby]] programming language.
===== [[|Prerequisites]] =====
* You must be a MetaARPA member to use Rails (see [[http://sdf.lonestar.org/index.cgi?access|memberships]] page).
* Most Rails applications use a database, so you'll probably want dba membership as well (see [[http://sdf.lonestar.org/index.cgi?access|memberships]] page). However MetaARPA members may use sqlite if they so desire.
===== Getting started =====
**Step 1:** Run "mkhomepg" if you have not already done so (see the [[http://sdf.lonestar.org/index.cgi?tutorials/building_a_website|building_a_website]] tutorial for more information on the "mkhomepg" command).
**Step 2:** Use the rails command to construct the base for your new rails application:
$ cd $HOME/html
$ rails rails
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create components
create db
create doc
create lib
create lib/tasks
create log
create public/images
create public/javascripts
create public/stylesheets
create script/performance
create script/process
create test/fixtures
create test/functional
create test/integration
create test/mocks/development
create test/mocks/test
create test/unit
create vendor
create vendor/plugins
create tmp/sessions
create tmp/sockets
create tmp/cache
create Rakefile
create README
create app/controllers/application.rb
create app/helpers/application_helper.rb
create test/test_helper.rb
create config/database.yml
create config/routes.rb
create public/.htaccess
create config/boot.rb
create config/environment.rb
create config/environments/production.rb
create config/environments/development.rb
create config/environments/test.rb
create script/about
create script/breakpointer
create script/console
create script/destroy
create script/generate
create script/performance/benchmarker
create script/performance/profiler
create script/process/reaper
create script/process/spawner
create script/runner
create script/server
create script/plugin
create public/dispatch.rb
create public/dispatch.cgi
create public/dispatch.fcgi
create public/404.html
create public/500.html
create public/index.html
create public/favicon.ico
create public/robots.txt
create public/images/rails.png
create public/javascripts/prototype.js
create public/javascripts/effects.js
create public/javascripts/dragdrop.js
create public/javascripts/controls.js
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
It has become SDF policy to have the project that you want to be served under '$HOME/html/rails' in actuality you can locate the rails project directory anywhere and call it what you like. The 'railsctl' and 'ror' command expect the project that you want to host to be located in the afore-mentioned directory. So, if you want your server to be started when the host starts and 'railsctl' to find your project then you should symlink your current project to that location, or use that location.
**step 3:**
Start the webrick server on the port that is equal to your uid, which you can obtain by executing 'id -u':
$ railsctl start
- or -
$ ruby $HOME/html/rails/my_first_project/script/server -p `id -u`
=&gt; Booting WEBrick...
=&gt; Rails application started on http://0.0.0.0:60844
=&gt; Ctrl-C to shutdown server; call with --help for options
Then point your browser at "http://yourdomain:&lt;YOUR UID&gt;" You should now be looking at the default 'Welcome to Rails page'. Now you can begin to develop your rails app.
===== [[|Hello, world of Rails!]] =====
Rails is a Model-View-Controller framework. Rails accepts incoming requests from a browser, decodes the request to a controller, and calls an action method in that controller. The controller then invokes a particular view to display the results to the user. The good news is that Rails takes care of most of the internal plumbing that links all these actions. To write our simple Hello, World! application, we need code for a controller and a view. We don't need code for a model, because we're not dealing with any data. Let's start with the controller.
In the same way that we used the rails command to create a new Rails application, we can also use a generator script to create a new controller for our project. This command is called generate, and it lives in the script subdirectory of the my_first_project project we created. So, to create a controller called Say, we make sure we're in the my_first_project directory and run the script, passing in the name of the controller we want to create.
$ ruby $HOME/html/rails/my_first_project/script/generate controller Say
exists app/controllers/
exists app/helpers/
create app/views/say
exists test/functional/
create app/controllers/say_controller.rb
create test/functional/say_controller_test.rb
create app/helpers/say_helper.rb
The script logs the files and directories it examines, noting when it adds new Ruby scripts or directories to your application. For now, we're interested in one of these scripts and (in a minute) the new directory. The source file we'll be looking at is the controller. You'll find it in the file app/controllers/say_controller.rb. Let's have a look at it.
class SayController &lt; ApplicationController
end
Pretty minimal, eh? SayController is an empty class that inherits from ApplicationController, so it automatically gets all the default controller behavior. Let's spice it up. We need to add some code to have our controller handle the incoming request. What does this code have to do? For now, it'll do nothing. We simply need an empty action method.
Let's add an action called hello to our say controller. Adding a hello action means creating a method called hello in the class SayController. But what should it do? For now, it doesn't have to do anything. Remember that a controller's job is to set up things so that the view knows what to display. In our first application, there's nothing to set up, so an empty action will work fine. Use your favorite editor to change the file say_controller.rb in the app/controllers directory, adding the hello method as shown.
class SayController &lt; ApplicationController
def hello
end
end
Now let's try calling it. Navigate to the URL "http://yourdomain:60844/say/hello" in a browser window. (Note that in the development environment we don't have any application string at the front of the path - we route directly to the controller.) You'll see something that looks like an error.
It might be annoying, but the error is perfectly reasonable (apart from the weird path). We created the controller class and the action method, but we haven't told Rails what to display. And that's where the views come in. Remember when we ran the script to create the new controller? The command added three files and a new directory to our application. That directory contains the template files for the controller's views. In our case, we created a controller named say, so the views will be in the directory app/views/say. To complete our Hello, World! application, let's create a template. By default, Rails looks for templates in a file with the same name as the action it's handling. In our case, that means we need to create a file called hello.rhtml in the directory app/views/say. (Why .rhtml? We'll explain in a minute.) For now, let's just put some basic HTML in there.
&lt;html&gt;&lt;head&gt;&lt;title&gt;Hello, Rails!&lt;/title&gt;&lt;/head&gt; &lt;body&gt;
&lt;h1&gt;Hello from Rails and SDF!&lt;/h1&gt; &lt;/body&gt; &lt;/html&gt;
Save the file hello.rhtml, and refresh your browser window. You should see it display our friendly greeting. Notice that we didn't have to restart the application to see the update. During development, Rails automatically integrates changes into the running application as you save files.
===== [[|Maintenance and Utility Scripts]] =====
There are currently two main scripts that MetaARPA members can run to manage their RoR instance. The first is //ror// which is used to toggle automatic startup of your RoR instance upon system boot. The second is //railsctl// which allows you to //start//, //stop// and //restart// your RoR instance.
----
==== Footnotes: ====
[[#uid|<sup>1</sup>]]Use the "id" command to find your uid
$ id
uid=60844(phm) gid=500(arpa) groups=500(arpa),600(MetaARPA)
// Note: if you do not see metaARPA here you're not in the metaARPA group and Rails won't work for you. //
----
$Id: Ruby_on_Rails.html,v 1.7 2006/12/29 06:54:24 phm Exp $

181
dump/SSH-SDF.html.docuwiki Normal file
View File

@ -0,0 +1,181 @@
====== Using SSH for connections/transfer to/from SDF ======
===== Contents =====
* Overview
* [[#sdf|SDF issues]]
* ssh and [[#port_tunneling|port tunneling]]
* [[#public_key|public key]] authentication
* [[#socks|socks tunneling]] from a school/uni network
===== Overview =====
This tutorial discusses some important points concerning use of SSH for encrypted traffic to and from SDF. Your first source for information are the manpages: "man ssh" - read them, if you want to make good use of "ssh" and company!
//Note: this text has been assembled from articles written by several users; therefore, layout and wording may vary, and topics can be referred at several places.//
SSH stands for Secure SHell, and is a replacement for telnet, to permit secure terminal connections. The system mainly consists of the following programs:
"ssh"This is the main program, used for direct terminal connections to a remote computer. In principle it is used like "ssh remoteuser@some.remote.host"."scp"This is a replacement for ftp or rcp, and permits secure copying of files to and from a remote computer. Its basic syntax is "scp localfile remoteuser@some.remote.host:remotefile" to copy a file //to// the remote computer, and "scp remoteuser@some.remote.host:remotefile localfile" to copy a file //from// the remote computer. Note that you can also use wildcards in the remote and local file description (which may need quotes around the remote file name, depending on your shell). "sftp"This is a replacement for ftp, permitting listing of a remote file system and copying to and from it. It has more capabilities than scp, but needs a remote service running under ssh. In principle it is used like "sftp remoteuser@some.remote.host".
On the client side, a lot of programs are available; you may be best off by using a search engine with the keywords "ssh client" and your local operating system.
===== SDF issues =====
Here we discuss some peculiarities concerning SDF and SSH.
==== file and directory permissions ====
[[#public_key|Public key authentication]] will not work, if the home directory ("$HOME") or the user's ssh directory "$HOME/.ssh" are world writable. Your home directory should never be world writable, anyway!
To make sure you have the right permissions, execute the following command in the shell while logged into your account:\\ "chmod go-w $HOME $HOME/.ssh"
You should look up "chmod" in the manpages, if you don't understand this command.
===== special topics =====
==== How to enable Port Tunneling and Why ====
=== What is port tunneling good for ===
Port tunneling is the ability to tunnel from your internet point for presence back to SDF servers and use the SDF servers like a [[http://en.wikipedia.org/wiki/SOCKS|Socks 4 Proxy]]. This allows your connection to be encrypted via SSL between your internet access point and SDF. This allows your traffic to be more secure if you are on a public internet access point
=== What tools are needed ===
* A good SSH Client that allows tunneling ([[http://www.putty.nl/|PuTTY]] in my examples)
* Any software package that understands SOCKS 4 ([[http://www.ceruleanstudios.com/|Trillian]] in my example)
* [[http://sdf.lonestar.org/index.cgi?faq?MEMBERS?01|MetaARPA]] membership
=== How to set up PuTTY ===
First you need to connect to a SSL enabled SDF server: otaku.freeshell.org on port 443. {{tutorials/images/PuTTY1.gif?456x435|putty screenshot 1}}\\ Then you need to configure the port to tunnel on your local machine. Generally Socks proxies use port 1080 so that is a good port. Click on the Tunnels category and configure the tunnel as shown below. {{tutorials/images/PuTTY2.gif?456x435|putty screenshot 2}}\\ Click on the "Add" button and you should see the screen as listed below. {{tutorials/images/PuTTY3.gif?456x435|putty screenshot 3}}\\ Then go back to session and name and save the session. Click connect and the tunnel should become active.
=== How to use the Tunnel you just enabled ===
I am now going to configure Trillian (A great multi IM chat program) to use the Tunnel. It should be obvious how to configure other applications from these screenshots. \\ First click on the "Trillian Prefernces" and select "Advanced Preferences". Select "Proxy" If you want all your chat services to use the proxy select use one setting for all services checkbox. Otherwise configure this on each service you want to encrypt over the tunnel. {{tutorials/images/Trillian.gif?730x530|Trillian screenshot 1}}\\ Click on "Close". Now your service should be able to connect through the tunnel. Again this will encrypt all traffic from your Internet Access Point to SDF. Once it leaves SDF it will no longer be encrypted (Unless you are hitting a HTTPS page or something already encrypted). \\ \\ Technically any program that supports a Socks 4 proxy can be used with the tunnel.
==== SSH Public Key Authentication ====
These instructions attempt to explain the basic concepts of SSH Public Key Authentication, what it is, and the steps required to use it.
//Note: Please make sure to have set the [[#sdf_permissions|correct permissions]] in your SDF account, before attempting to set up public key authentication!// Also note that there is another way of doing this, explained further down by another user. Your mileage may vary!
Logging in with SSH key authentication means that you do not have to use your SDF account password. Instead, you generate a 'key' -- which is two long strings of characters stored in a pair of files -- and these files are used to verify that you are who you say you are. Since your key can reliably identify you, you can authorize the user of this key (you, hopefully) to log in to your SDF account. You can authorize any key you wish, and adding someone's key would allow them to log in to your SDF account, without even using or knowing your password.
This may sound insecure or easily exploitable. In fact though, due to much research and theory, it can be very secure. Notice "can be" in that last sentence. The key files are taking the place of a password in proving to the server that you're really you. Just like you have to keep passwords secret, the strength of this method relies on you following certain guidelines. You will generate a pair of mathematically related keys: one public and the other private. **You should never give out your private key, nor should you make the file that contains it readable by any other user. This would be like storing your password in a world-readable file.** Only your *public* key will be listed on the server. Ensuring that your private key remains private is the most important of the guidelines that I mentioned. On to the instructions:
=== Windows instructions: ===
You will need an SSH client and a key generator for Windows. These instructions are written for the popular programs PuTTY and PuTTYgen. Both are available at www.chiark.greenend.org.uk/~sgtatham/putty/download.html.
Run PuTTYgen. At the bottom of the window, you can select which type of key you want to generate. You will need to pick between RSA and DSA encryption: go with RSA -- the relevant website is here: the.earth.li/~sgtatham/putty/0.53b/htmldoc/Chapter8.html#8.2.2 . Your choice will have no effect on the rest of the steps here. For current applications, 1024 bits is plenty for a key to have. If youre feeling paranoid, 2048 bits should (barring any revolutions in prime factoring) keep your key secure for a decade or two.
Now press Generate and wave your mouse around to seed some randomness in the key generator. Viola, you have a key.
You can then add a passphrase to your key, and use just that one passphrase whenever you log in to an ssh server using your key. Alternately you can use no passphrase. Be aware though that if //you// don't have to use a password to login from your computer, then //neither would anyone else that sits down at your computer// or otherwise accesses your local account.
The key comment is for your personal convenience, I reccomend youruser@yourlocalmachine and maybe the date, but of course it's up to you. Now save both the private and public key file somewhere (My Documents is a good choice, but pick somewhere that only *you* will have read access to.)
Next, you need to configure PuTTY to use this key. Fire up PuTTY and load your session or create a new one. Then in the Category list on the left, selecct Connection &gt; SSH &gt; Auth. Browse for your key and load it up. Also, you'll want to allow changes of username if your SDF account name is different from your local one.
You're almost done! Now you need to let the server know about your new key. After you do this, the ssh, scp and sftp programs will use the key files automatically. So (optionally, but it is recommended) save your session, and then connect. Now do the following to authorize your key:
0. Copy the contents in the Key Generator window ("Public key for pasting into OpenSSH authorized_keys file")
1. Log in as normal and run the following commands.
2. "$ mkdir ~/.ssh"
3. "$ cd ~/.ssh/"
4. "$ touch authorized_keys"
5. Open the authorized_keys file you just created in a text editor.
6. Paste the contents of that box in to the authorized_keys file. In PuTTY, right click copies and pastes.
7. Save the authorized_keys file.
You should now be able to log in using SSH Key Authentication.
----
I succeeded somewhat differently. In my trial, public key should be rather copied not from the saved public key, but from **Public key for pasting into OpenSSh authorized_keys file:** textbox in the PuTTYgen window. Note that we can also extract from existing PuTTYgen-type private keys (just load into it, and the public key should be there.).
=== OpenSSH instructions: ===
You can get OpenSSH at www.openssh.com or through package installers like rpm or apt-get. There are versions for most major non-Windows operating systems (and even one for Cygwin.) Once you have the OpenSSH suite set up, the program you will need to run is "ssh-keygen -t". The -t option is required, and specifies the type of encryption algorithm used in generating a key. You should use RSA encryption to generate your key -- the relevant website is here: the.earth.li/~sgtatham/putty/0.53b/htmldoc/Chapter8.html#8.2.2 .
you@yourcomputer:~ $ ssh-keygen -t rsa
You can then add a passphrase to your key, and use this passphrase whenever you log in to an SSH-enabled server. Alternately you can use no passphrase. Be aware though that if //you// don't have to use a password to login from your user account, then //neither would anyone else that sits down at your computer// or otherwise accesses your local account.
You now have two new files in the ~/.ssh/ directory. These files are your public and private key and will be named id_rsa.pub and id_rsa respectively. The ssh, scp and sftp programs use these files automatically. To enable the server to recognize your key, follow these steps:
1. Log in as normal and run the following commands.
2. "$ mkdir ~/.ssh"
3. "$ cd ~/.ssh/"
4. "$ touch authorized_keys"
5. Open the authorized_keys file you just created in a text editor.
6. Paste the contents of your id_dsa.pub file in to the authorized_keys file.
7. Save the authorized_keys file.
You should now be able to log in using SSH Key Authentication.
==== connecting to SDF from a network ====
//... or configuring SSH clients to use a SOCKS proxy server//
Assuming that you are having trouble connecting to SDF from your college network you will probably have to configure a connection through a SOCKS proxy. This tutorial gives help on configuring various clients to use a SOCKS proxy.
You will need to know the following information from your system administrator...
* Proxy hostname i.e. "socks-proxy.example.com"
* SOCKS version (4 or 5)
* Port number to connect to (default is 1080)
* Your username and password
=== SSH(C) SSH Communications Security Corp ===
This client is often supplied by universities to their students.
- Access the settings dialogue under "Edit → Settings"
- Under the "Connection" section, make sure that the tickbox marked "Connect through firewall" is checked {{tutorials/images/ssh-connection-setting.png}}
- Under the "Firewall" section (near the bottom of the list) enter your SOCKS proxy settings in the form of "socks://[host]:[port]" Illustrated are the settings for TCD. {{tutorials/images/ssh-firewall-setting.png}}
- Connect as normal!
=== PuTTY ===
A popular free SSH client.
- Select in the left window "Proxy" (located under the "Connection" branch)
- Enter in your details. Illustrated are those for TCD. {{tutorials/images/ssh-putty-config.png}}
- Connect as normal! (You may want to save these details for future use)
=== Commandline ssh client ===
Those using MacOSX, Linux, SunOS or some BSD or other will be used to using the commandline ssh client to connect to SDF. Connecting via SOCKS is slightly more difficult and relies on an external program known as 'connect'.
All the details for using this program are documented on its webpage at http://zippo.taiyo.co.jp/~gotoh/ssh/connect.html
Good luck!
Alternatively, issue a command from your workstation similar to this one (MetaARPA membership required):
> ssh -D 9999 -p 443 username@sverige.freeshell.org
Then, configure your browser to use the SOCKS proxy on "localhost" using port 9999 as shown here using Firefox:
{{tutorials/images/firefox-socks-proxy.png}}
For additional security and privacy, configure Firefox to do remote DNS lookups rather than the default local DNS lookups. In //about:config// search for //network.proxy.socks_remote_dns// and toggle its value to //true//.
----
$Id: SSH-SDF.html,v 1.8 2008/07/12 05:38:37 cowl Exp cowl $

View File

@ -0,0 +1,73 @@
=== SSH Public Key Authentication ===
These instructions attempt to explain the basic concepts of SSH Public Key Authentication, what it is, and the steps required to use it.
Logging in with SSH key authentication means that you do not have to use your SDF account password. Instead, you generate a 'key' -- which is two long strings of characters stored in a pair of files -- and these files are used to verify that you are who you say you are. Since your key can reliably identify you, you can authorize the user of this key (you, hopefully) to log in to your SDF account. You can authorize any key you wish, and adding someone's key would allow them to log in to your SDF account, without even using or knowing your password.
This may sound insecure or easily exploitable. In fact though, due to much research and theory, it can be very secure. Notice "can be" in that last sentence. The key files are taking the place of a password in proving to the server that you're really you. Just like you have to keep passwords secret, the strength of this method relies on you following certain guidelines. You will generate a pair of mathematically related keys: one public and the other private. **You should never give out your private key, nor should you make the file that contains it readable by any other user. This would be like storing your password in a world-readable file.** Only your *public* key will be listed on the server. Ensuring that your private key remains private is the most important of the guidelines that I mentioned. On to the instructions:
=== Windows instructions: ===
You will need an SSH client and a key generator for Windows. These instructions are written for the popular programs PuTTY and PuTTYgen. Both are available at www.chiark.greenend.org.uk/~sgtatham/putty/download.html.
Run PuTTYgen. At the bottom of the window, you can select which type of key you want to generate. You will need to pick between RSA and DSA encryption: go with RSA -- the relevant website is here: the.earth.li/~sgtatham/putty/0.53b/htmldoc/Chapter8.html#8.2.2 . Your choice will have no effect on the rest of the steps here. For current applications, 1024 bits is plenty for a key to have. If youre feeling paranoid, 2048 bits should (barring any revolutions in prime factoring) keep your key secure for a decade or two.
Now press Generate and wave your mouse around to seed some randomness in the key generator. Viola, you have a key.
You can then add a passphrase to your key, and use just that one passphrase whenever you log in to an ssh server using your key. Alternately you can use no passphrase. Be aware though that if //you// don't have to use a password to login from your computer, then //neither would anyone else that sits down at your computer// or otherwise accesses your local account.
The key comment is for your personal convenience, I reccomend youruser@yourlocalmachine and maybe the date, but of course it's up to you. Now save both the private and public key file somewhere (My Documents is a good choice, but pick somewhere that only *you* will have read access to.)
Next, you need to configure PuTTY to use this key. Fire up PuTTY and load your session or create a new one. Then in the Category list on the left, selecct Connection &gt; SSH &gt; Auth. Browse for your key and load it up. Also, you'll want to allow changes of username if your SDF account name is different from your local one.
You're almost done! Now you need to let the server know about your new key. After you do this, the ssh, scp and sftp programs will use the key files automatically. So (optionally, but it is recommended) save your session, and then connect. Now do the following to authorize your key:
0. Copy the contents in the Key Generator window ("Public key for pasting into OpenSSH authorized_keys file")
1. Log in as normal and run the following commands.
2. "$ mkdir ~/.ssh"
3. "$ cd ~/.ssh/"
4. "$ touch authorized_keys"
5. Open the authorized_keys file you just created in a text editor.
6. Paste the contents of that box in to the authorized_keys file. In PuTTY, right click copies and pastes.
7. Save the authorized_keys file.
You should now be able to log in using SSH Key Authentication.
----
I succeeded somewhat differently. In my trial, public key should be rather copied not from the saved public key, but from **Public key for pasting into OpenSSh authorized_keys file:** textbox in the PuTTYgen window. Note that we can also extract from existing PuTTYgen-type private keys (just load into it, and the public key should be there.).
=== OpenSSH instructions: ===
You can get OpenSSH at www.openssh.com or through package installers like rpm or apt-get. There are versions for most major non-Windows operating systems (and even one for Cygwin.) Once you have the OpenSSH suite set up, the program you will need to run is "ssh-keygen -t". The -t option is required, and specifies the type of encryption algorithm used in generating a key. You should use RSA encryption to generate your key -- the relevant website is here: the.earth.li/~sgtatham/putty/0.53b/htmldoc/Chapter8.html#8.2.2 .
you@yourcomputer:~ $ ssh-keygen -t rsa
You can then add a passphrase to your key, and use this passphrase whenever you log in to an SSH-enabled server. Alternately you can use no passphrase. Be aware though that if //you// don't have to use a password to login from your user account, then //neither would anyone else that sits down at your computer// or otherwise accesses your local account.
You now have two new files in the ~/.ssh/ directory. These files are your public and private key and will be named id_rsa.pub and id_rsa respectively. The ssh, scp and sftp programs use these files automatically. To enable the server to recognize your key, follow these steps:
1. Log in as normal and run the following commands.
2. "$ mkdir ~/.ssh"
3. "$ cd ~/.ssh/"
4. "$ touch authorized_keys"
5. Open the authorized_keys file you just created in a text editor.
6. Paste the contents of your id_dsa.pub file in to the authorized_keys file.
7. Save the authorized_keys file.
You should now be able to log in using SSH Key Authentication.
$Id: SSH_Key_Authentication.html,v 1.5 2006/08/17 16:35:08 samble Exp $

56
dump/UTF-8.html.docuwiki Normal file
View File

@ -0,0 +1,56 @@
====== Localization and You: UTF8 on NetBSD ======
NetBSD is a great little operating system, but its a much smaller project than Linux. This means there isnt as much call for better internationalization support, as most of the users and developers are perfectly comfortable with ASCII or the ISO88591 western European locale. This can cause some problems when using software that expects Unicode, also known as UTF8, also known as the one true text encoding for the future. Heres how to fix it. These instructions assume youre using a bourne-compatible shell like ksh, bash, or zsh. If youre using (t)csh youre on your own.
===== Environment Variables =====
Most of the time, you can “fake” proper UTF8 support by exporting three environment variables and leaving it up to your local terminal emulator to handle the rest. Add the following three lines to your ~/.profile :
"export LANG="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
"
Save, kill any screen or tmux sessions or other background processes, and log out. When you log in again, you should have a proper UTF8 terminal as far as most programs are concerned.
Perl will throw the following error when invoked:
"perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = "en_US.UTF-8",
LC_CTYPE = "en_US.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
"
Feel free to ignore this error. As long as youve got those environment variables set, you should be fine.
Python 3 expects all source files to be UTF8 text, so please make sure to change these things before working on python3 code.
===== Rxvt-Unicode =====
Rxvt-Unicode, urxvt, rxvt-unicode256color. By whatever name you call it, its a very popular terminal among Linux and *BSD “power users.” Unfortunately, using urxvt adds an extra degree of difficulty to connecting to SDF - theres no "$TERM" setting that corresponds with it! Im sure some of you have tried logging in to SDF from urxvt, only to have scary warnings printed to stderr and have everything treated like a dumb paper teletype. Dont worry, theres a very simple fix for that as well. Open up ~/.profile again and add these lines:
"if [ $TERM == "rxvt-unicode" ] || [ $TERM == "rxvt-unicode-256color" ]; then
export TERM="rxvt"
fi
"
In simple terms, this tricks NetBSD into thinking your terminal is rxvt, the original program urxvt is based on. If you have a MetaArpa account, dont worry - the MetaArray is running CentOS, which understands urxvt just fine.
===== Escape Characters =====
NetBSDs terminal has what are called “escape characters.” These are characters in the “high ASCII” (decimal 129255) range that manipulate the shell session when read from stdin or written to stdout. As you might imagine, this screws with programs that write large amounts of arbitrary characters to standard output, like the “kermit -s” or “sz” file transfer programs. For sx/sy/sz (X/Y/ZMODEM protocols) your best bet is to just not use them with SDF for now. If youre on a TCP/IP connection (which most of you are) its easier to stick with scp/sftp for secure transfers, and http or ftp for insecure. If you really need “in-line” file transfer, there is a way to make “kermit -s” work around NetBSDs escape characters. This is adding the "-8" and "-0" flags. If I wanted to transfer the SQLite database “winning-lottery-numbers.sqlite” from SDF to my home machine, I would do it like this:
"tidux@sdf:~$ kermit -s -8 -0 winning-lottery-numbers.sqlite
"
Then my local kermit program would receive the transfer and I could continue working on SDF as usual. If you do this often, it may be wise to add an alias in your shell configuration files, like so:
"alias send='kermit -s -8 -0'
"
----
I hope this guide has been helpful to you. Happy UTF8 hacking!

View File

@ -0,0 +1,21 @@
====== How to enable Port Tunneling and Why ======
===== What is port tunneling good for =====
Port tunneling is the ability to tunnel from your internet point for presence back to SDF servers and use the SDF servers like a [[http://en.wikipedia.org/wiki/SOCKS|Socks 4 Proxy]]. This allows your connection to be encrypted via SSL between your internet access point and SDF. This allows your traffic to be more secure if you are on a public internet access point
===== What tools are needed =====
* A good SSH Client that allows tunneling ([[http://www.putty.nl/|PuTTY]] in my examples)
* Any software package that understands SOCKS 4 ([[http://www.ceruleanstudios.com/|Trillian]] in my example)
* [[http://sdf.lonestar.org/index.cgi?faq?MEMBERS?01|MetaArpa]] membership
===== How to set up PuTTY =====
First you need to connect to a SSL enabled SDF server: otaku.freeshell.org on port 443. {{tutorials/images/PuTTY1.gif?456x435|putty screenshot 1}}\\ Then you need to configure the port to tunnel on your local machine. Generally Socks proxies use port 1080 so that is a good port. Click on the Tunnels category and configure the tunnel as shown below. {{tutorials/images/PuTTY2.gif?456x435|putty screenshot 2}}\\ Click on the "Save" button and you should see the screen as listed below. {{tutorials/images/PuTTY3.gif?456x435|putty screenshot 3}}\\ Then go back to session and name and save the session. Click connect and the tunnel should become active.
===== How to use the Tunnel you just enabled =====
I am now going to configure Trillian (A great multi IM chat program) to use the Tunnel. It should be obvious how to configure other applications from these screenshots. \\ First click on the "Trillian Prefernces" and select "Advanced Preferences". Select "Proxy" If you want all your chat services to use the proxy select use one setting for all services checkbox. Otherwise configure this on each service you want to encrypt over the tunnel. {{tutorials/images/Trillian.gif?730x530|Trillian screenshot 1}}\\ Click on "Close". Now your service should be able to connect through the tunnel. Again this will encryte all traffic from your Internet Access Point to SDF. Once it leaves SDF it will no longer be encrypted (Unless you are hitting a HTTPS page or something already encrytped). \\ \\ Technically any program that supports a Socks 4 proxy can be used with the tunnel.
$ID: $

185
dump/VPN.html.docuwiki Normal file
View File

@ -0,0 +1,185 @@
====== SDF's VPN servers ======
* [[#pptp|Accessing the PPTP Server (USA)]]
* [[#openvpn|Accessing the OpenVPN Server (USA/EU)]]
====== Connecting to the SDF VPN with OpenVPN (USA/EU) ======
===== Contents =====
==== Generic Instructions ====
* [[#overview-openvpn-generic|Overview]]
* [[#software-openvpn-generic|OpenVPN software]]
* [[#setup-openvpn-generic|Setting it up]]
* [[#overview-openvpn-extractcerts|Obtaining your certificates]]
* [[#overview-openvpn-verifycerts|Verifying your certificates]]
==== Targeted Instructions ====
* [[#openvpn-openwrt|Connecting in OpenWRT]]
* [[#viscosity|Connecting with Viscosity]]
===== Overview =====
OpenVPN is the prefered VPN method to connect with SDF. OpenVPN uses Transport Layer Security (TLS) to authenticate users and encrypt communications. When SDF users register for VPN service they are issued a certificate and private key. Connecting via OpenVPN also results in users being issued a static public facing IP address for their VPN session.
The Virtual Private Network (VPN) provided by SDF has a number of uses. The most beneficial of that is to allow confidential communication over a public network. Basically, the SDF VPN will allow you (once routing is enabled) to communicate securely over an insecure connection such as a public Wireless Fidelity (Wi-Fi) network.
The major benefit of this over SSH forwarding/tunneling is that it is much easier to configure and automatically tunnels **all** connections leaving your computer, and not just those specifically configured for forwarding. Some may see this as a negative aspect of the VPN, however.
Registration instructions and VPN dues are found by running the **vpn** command from an SDF login session.
Before proceeding please mind the following note.
__NEVER__ send your private key to anyone in an email message.\\ __NEVER__ post your private key in a bboard posting, online forum, or chat session.\\
===== Getting the OpenVPN software =====
* [[http://openvpn.net/index.php/open-source/downloads.html|Download OpenVPN for Windows or UNIX/Linux]]
* [[https://tunnelblick.net/downloads.html|Download the TunnelBlick OpenVPN client for MacOS X]]===== Setting it up =====You will receive your OpenVPN certificate via SDF internal email for both the USA and EU server. If you lose this email, you must make post on the internal bboard:REQUESTS to have them reissued. You may use either server when it suits you. The server addresses are:
* openvpn.sdf.org (Tukwila, Washington USA)
* openvpn.sdfeu.org (Falkenstein, Germany EU) ==== Obtaining your certificates ====The email message from the SDF administrator will contain:
* A certificate for the SDF Certificate Authority (CA).
* A certificate for your VPN user certificate.
* A private key which is associated with your user certificate.
* The port and port of the SDF and SDF Europe OpenVPN servers.
* Settings to use for your OpenVPN configuration file.You must extract each of the certificates and the private key from the email message. You must also create an OpenVPN configuration file.One thing to note about the OpenVPN configuration file that you may receive with your email: If the line that begins with remote follows with 192.94.73.x (where x will be the number you're assigned to) you'll need to change that to 205.166.94.x. This is because the sdf IP block had to change near the end of 2016. This may have been corrected on emails sent since the change.==== Verifying your certificates ====Let us assume that the SDF CA has been saved into a file called sdf.ca. Let us also assume that your user certificate has been saved into a file called yourCert.crt. You can use openssl to verify the extraction steps have been performed correctly.\\ $**openssl verify -CAfile sdf.ca yourCert.crt**\\ yourCert.crt:OK\\ \\ $**openssl x509 -noout -serial -fingerprint -subject -in sdf.ca**\\ serial=88FF6DD2D8A905FE\\ SHA1 Fingerprint=BA:26:E0:3C:25:10:80:CF:FA:51:2B:05:A1:81:AD:C7:48:94:07:74\\ subject= /C=US/ST=WA/L=SEATTLE/O=sdf.org/CN=sdf.org CA/emailAddress=smj@sdf.org\\ \\ $**openssl x509 -noout -serial -fingerprint -subject -in yourCert.crt**\\ serial=YOUR_SERIAL_NUMBER\\ SHA1 Fingerprint=YOUR_CERT_FINGERPRINT\\ subject= /C=US/ST=WA/L=SEATTLE/O=sdf.org/CN=YOUR_USER_NAME@sdf.lonestar.org/emailAddress=smj@sdf.org===== Connecting in OpenWRT =====These instructions were created using OpenWRT Bleeding Edge, r33132.==== Installing OpenVPN ====Run the following command to install openvpn with opkg:root@OpenWrt:~# opkg install openvpn\\
----
====== Connecting to the SDF VPN server (PPTP) (USA) =========== Contents =====
* [[#overview|Overview]]
* [[#setup|Setting it up]]
* [[#xp|Connecting in Windows XP]]
* [[#vista|Connecting in Windows Vista]]
* [[#linux|Connecting in Linux]]
* [[#openwrt|Connecting in OpenWRT]]
* [[#freebsd|Connecting in FreeBSD]]
* [[#osx|Connecting in Mac OS X]]
* [[#wrapup|The Wrap-up]]===== Overview =====PPTP is a legacy method to connect to the SDF VPN. Dynamic IP addresses are assigned if you use this method.The Virtual Private Network (VPN) provided by SDF has a number of uses. The most beneficial of that is to allow confidential communication over a public network. Basically, the SDF VPN will allow you (once routing is enabled) to communicate securely over an insecure connection such as a public Wireless Fidelity (Wi-Fi) network.The major benefit of this over SSH forwarding/tunneling is that it is much easier to configure and automatically tunnels **all** connections leaving your computer, and not just those specifically configured for forwarding. Some may see this as a negative aspect of the VPN, however.===== Setting it up =====The SDF VPN is quite easy to set up. You must first choose a VPN plan that is right for you, based on assumed bandwidth usage. Pricing and more package information is available through the shell by typing '**vpn**' without the quotes.Once you've been added to the VPN membership level (you'll receive an email notification of this), you must set up your VPN access by typing '**setvpn**' in the shell, without quotes. This will allow you to configure your VPN secret (password) for connecting.You should make note of the VPN's IP address when setting up your secret.Once you've configured your VPN account, it's time to connect. Continue reading below for step-by-step instructions on connecting to the VPN.===== Connecting in Windows XP =====
- Open the Windows Control Panel.
- Open the Network Connections item in Control Panel. Generally you would click the "**Network and Internet Connections**" option, then click "**Network Connections**". A list of existing dial-up and LAN connections will be displayed.
- Click on the "**Create a new connection**" option from the left-hand side of the window. The Windows XP New Connection Wizard will come up.
- Click the "**Next**" option to begin the wizard. Then choose the "**Connect to the network at my workplace**" option from the list and click "**Next**".
- On the Network Connection page of the wizard, choose the "**Virtual Private Network connection**" option and click "**Next**".
- Choose a name for this connection on the "**Connection Name**" screen. Windows will use this to reference the VPN connection.
- Choose an option on the "**Public Network**" screen and click "**Next**". The default option, "**Automatically dial this initial connection**" can be used if the VPN connection will always be initiated when the computer is not already connected to the Internet. Otherwise, choose the "**Do not dial the initial connection**" option. This requires that the public Internet connection be established first, before this new VPN connection will be initiated. **Choose this option.**
- Enter the IP address for the VPN on the "**VPN Server Selection**" screen. This is obtained via the '**setvpn**' command (without quotes) in the shell.
- Choose an option on the "**Connection Availability**" screen and click "**Next**". The default option, "**My Use Only**", ensures that Windows will make this VPN connection available only to the user that is currently logged in to the computer. If you don't want this, select the "**Anyone's use**" option.
- Click "**Finish**" to complete the wizard. You may wish to select the option to create a desktop shortcut for easy access. The information for the VPN connection will be saved for current and/or future use.===== Connecting in Windows Vista =====Connecting to the VPN is slightly different in Windows Vista. Please use these instructions to connect to SDF's VPN through Vista.
- Click on the "**Start**" button and then choose "**Connect to**".
- Click on the "**Set up a connection or network**" option on the window that follows. It's near the bottom.
- On the window that comes up, scroll down and click on the "**Connect to a workplace**" option. Then click "**Next**".
- A question asking "**Do you want to use a connection you already have?**" may appear. Select "**No, create a new connection.**" if it does and then click "**Next**".
- Next you'll be asked "**How do you want to connect?**" Select "**Use my Internet connection (VPN)**".
- You'll then be asked for the Internet address. Enter the address you remembered when accessing '**setvpn**' (without quotes) in the SDF shell.
- Enter a name for this VPN connection in the "**Destination name:**" field. This is how Windows Vista will reference the VPN.
- If you don't want to connect immediately, check the "**Do not connect now; just set it up so I can connect later.**" option.
- Do not check the "**Use a smart card.**" option.
- When finished, click "**Next**"
- You'll then configure the username and password needed to authenticate to the VPN. The username is your SDF username and the password is the secret you set up via the '**setvpn**' command in the shell.
- Leave the "**Domain**" field blank.
- Click the "**Create**" button once you are done. You should then see a window pop up saying that "**The connection is ready to use.**" Click on "**Close**".===== Connecting in Linux =====
- Make sure PPP and PPTP are installed. The can be accomplished in Debian or Ubuntu by entering '**sudo apt-get install pptp-linux**' into a terminal.
- Create a file named sdfpptp in /etc/ppp/peers by entering '**sudo gedit /etc/ppp/peers**'. Replace gedit with your choice of text editor. Add the following to the file: (Be sure to replace **//username//** with your username.)\\ \\ Note: Make sure to replace **//IP Address//** with the IP address/hostname provided when running '**setvpn**' in the shell.\\
remotename sdfpptp
linkname sdfpptp
ipparam sdfpptp
pty "pptp --loglevel 0 **//IP Address//** --nolaunchpppd"
name **//username//**
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
require-mppe
nomppe-stateful
require-mppe-128
nomppe-40
noauth
nodetach
lock
bsdcomp 9,15
deflate 9,15
idle 0
- Save the file.
- Edit /etc/ppp/chap-secrets by entering '**sudo gedit /etc/ppp/chap-secrets**'. Add the line **//username// stfpptp //password// *** replacing //username// and //password// with your SDF username and your password set by **'setvpn'**.
- Make sure a specific route to the VPN exists. Run '**sudo route add **//VPN-IP//** gw **//GW-IP//****' replacing **//VPN-IP//** with the IP address/hostname provided when running '**setvpn**', and replace **//GW-IP//** with your gateway IP address. If you do not know the IP address of your gateway, enter '**route**'. It is the gateway IP next to the destination **default**.
- Enter '**sudo pppd call sdfpptp**' into a terminal. Wait for it to show the local and remote IP addresses. You should now be connected. Do not close the terminal until you are ready to disconnect.
- Open another terminal. Enter '**sudo route add -net 192.94.73.0/24 dev ppp0**'. This will route all your connections to SDF through the VPN.Alternatively to steps 5 and 6, you might use a wrapper script like this:\\
#!/bin/bash
SDFVPNHOST=**//IP Address//**
RT=`ip route get $SDFVPNHOST | head -1`
DEV=`echo $RT | awk '{while ($num != "dev") {num++}{print $(num+1)}}'`
VIA=`echo $RT | awk '{while ($num != "via") {num++}{print $(num+1)}}'`
ip route add $SDFVPNHOST via $VIA dev $DEV
ip route add $SDFVPNHOST via $VIA dev $DEV table sdftun
pppd call sdfpptp
ip route del $SDFVPNHOST via $VIA dev $DEV
ip route del $SDFVPNHOST via $VIA dev $DEV table sdftun
This automatically detects the default gateway and adds appropriate routes, starts the VPN and deletes the routes after VPN has been stopped. If you do not use a custom routing table dedicated to the SDF VPN you should delete the lines ending in "table sdftun".\\ ==== GUI Setup With NetworkManager ====Any of the newer Linux distros that use NetworkManager (Debian, Ubuntu, Fedora, etc.) on their default desktops have a GUI interface to PPTP VPN configuration. You'll need to install a package to get this capability (although this now seems to be included in the latest Ubuntu 10.10 release):Fedora:
yum install NetworkManager-pptp
Debian/Ubuntu:
apt-get install network-manager-pptp
Once installed, restart the NetworkManager service (///etc/init.d/NetworkManager restart//) and left-click on the network manager icon in your taskbar. Highlight **VPN Connections** and click on **Configure VPN**:{{tutorials/images/vpn1.png|Network Manager - Overview Settings}}\\ {{tutorials/images/vpn4.png|Network Manager - VPN Settings Overview}}Click on the **Add** button, and choose **Point-to-Point Tunneling Protocol (PPTP)**, then click **Create**. Fill out the **User name**, **Password** and **Gateway** fields with appropriate values ([[#setup|from when you ran //setvpn//]]):{{tutorials/images/vpn2.png|Network Manager Settings - VPN Settings Detail}}Now click on **Advanced**:{{tutorials/images/vpn3.png|Network Manager Settings - Advanced VPN Details}}Under **Authentication**, **de-select all the methods except MSCHAPv2**. Then select **Use Point-to-Point Encryption (MPPE)** and choose **128-bit (most secure)** in the **Security** dropdown. Click **OK**, then **Apply** and close all other configuration dialogs. Now when you left-click on the network manager icon, you should have your PPTP VPN listed under **VPN Connections**. Just select it and wait. If it is successful, you'll see a little lock icon appear over the usual network manager icon. If not, check your system log for errors. This will be ///var/log/messages// or ///var/log/syslog//, depending on your distro.==== A Note on Routing ====If you use network manager, all traffic will be routed through the PPTP VPN for you once you are connected. If that's not what you want, you can click on **IPV4 Settings** and then **Routes** to have simple static routes added for you automatically when the VPN connects. You can also check **Use this connection only for resources on this network**, which in our case means only connections to SDF hosts will be encrypted.{{tutorials/images/vpn5.png|Network Manager Settings - Add Routes}}===== Connecting in OpenWRT ========= Overview ====OpenWRT provides both a kernelspace and userspace method for connecting to PPTP networks as a client. The userspace and kernelspace methods are both outlined below, you only need to use one of them to start a connection. This documentation was created using OpenWRT Bleeding Edge (r33006), so older versions may have trouble. The full OpenWRT PPTP Client documentation can be found on the OpenWRT wiki here: http://wiki.openwrt.org/doc/howto/vpn.client.pptp==== PPTP Kernel Module ====For this setup you'll need to install the following kernel module packages: //kmod-pptp//, //kmod-mppe//.
- Login to your OpenWRT device via SSH.
- Install the required kernel modules and plugins: //opkg install kmod-pptp kmod-mppe ppp-mod-pptp//
- Open ///etc/config/network// with the editor of your choice. Example: //vi /etc/config/network//. Add the following lines to the end of the file: (change USERNAME to your SDF Username, and the values PASSWORD and SDF.VPN.IP.ADDRESS to thoes set in the //setvpn// command. #### VPN configuration config 'interface' 'vpn' option 'ifname' 'pptp-vpn' option 'proto' 'pptp' option 'username' 'USERNAME' option 'password' 'PASSWORD' option 'server' 'SDF.VPN.IP.ADDRESS' option 'buffering' '1' option 'defaultroute' '0'
- Open ///etc/ppp/options.pptp// with the editor of your choice. Example: //vi /etc/ppp/options.pptp//. Add the following lines to the end of the file (the //plugin// may need to be changed to match your system): noipdefault nodefaultroute maxfail 0 debug plugin "/usr/lib/pppd/2.4.5/pptp.so" refuse-eap refuse-pap refuse-chap refuse-mschap mppe required,stateless noauth nodetach bsdcomp 9,15 deflate 9,15 idle 0
- Restart networking to connect to the VPN: ///etc/init.d/networking restart//.
- If everything worked correctly, the //ifconfig// command should display a new interface named //pptp-vpn// looking something like this: pptp-vpn Link encap:Point-to-Point Protocol inet addr:192.94.73.44 P-t-P:192.94.73.25 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1460 Metric:1 RX packets:21 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:1159 (1.1 KiB) TX bytes:128 (128.0 B)
- Routing can be set up like any Linux OS, so follow the routing instructions found above: [[#linux|Linux]].==== PPTP Userspace Utility ====
- Login to your OpenWRT device via SSH.
- Install the required userspace tools and module for MPPE: //opkg install pptp kmod-mppe//
- Follow the [[#linux|Linux]] directions above like normal.
- If you are still having trouble, look over the official OpenWRT documentation found here: http://wiki.openwrt.org/doc/howto/vpn.client.pptp==== ========= Connecting in FreeBSD =====
* Install mpd4 from ports or packages.
* Add the following section to your /usr/local/etc/mpd4/mpd4.conf: sdfvpn: new -i ng1 sdfvpn sdfvpn set iface disable on-demand set iface idle 0 # disconnect the client after 8 hours set iface session 28800 set iface route 10.0.0.0/24 set iface route default set bundle disable multilink set auth authname "USERNAME" set auth password "PASSWORD" set link yes acfcomp protocomp set link no eap set link no pap set link accept chap set link mtu 1460 set link keep-alive 10 75 set ipcp yes vjcomp set ipcp ranges 0.0.0.0/0 set ipcp yes req-pri-dns req-sec-dns # # The five lines below enable Microsoft Point-to-Point encryption # (MPPE) using the ng_mppc(8) netgraph node type. # set bundle yes compression set ccp yes mppc set ccp yes mpp-compress set ccp yes mpp-e128 #set bundle accept crypt-reqd set ccp yes mpp-stateless open
* You will have to replace three (3) things in this config:
- Your USERNAME
- Your PASSWORD
- The local address of SDF's VPN host. This can be found in /etc/hosts on SDF. The local IP will start with 10.0.0, but have the same last octet as the public IP. '
* Add this in your /usr/local/etc/mpd4/mpd4.links file: sdfvpn: set link type pptp set pptp peer set pptp enable originate outcall set pptp disable incoming
* You will have to replace one (1) thing in this config:
- The public address of SDF's VPN host. You can get this by running setvpn at the shell.
* Now, as root, run mpd4 sdfvpn.
* You should now be connected to SDF over a layer 3 tunnel across the Internet.
* Your new routes are only for SDF's hosts, and use their internal IP addresses. These are the 10.0.0.x ones. I'm working on how to route to the public ones over the VPN without creating a routing loop to the VPN host. I copied SDF's /etc/hosts file to my machine so that I can run 'ssh sdf1' to connect through the tunnel. ===== Connecting in Mac OS X =====
- Open /Applications/Internet Connect.app
- Click on the **VPN** button.
- Click on the Configuration dropdown and go to "**Edit Configurations...**"
- Press the **+** button at the bottom left of the window to add a configuration.
- Under "**Description**" put whatever you want. SDF VPN is a good choice.
- Under the "**Server Address**," Enter the IP address for the VPN on the "**VPN Server Selection**" screen. This is obtained via the '**setvpn**' command (without quotes) in the shell.
- Under Username put your SDF username and the password is the secret you set up via the '**setvpn**' command in the shell.
- Choose "**Automatic**" encryption.
- Click "**OK**".
- Then, whenever you want to connect you can return to this **Internet Connect Application** and go to the VPN, choose the SDF VPN and click connect. Optionally, you can click "**Show VPN status in the menu bar**" and you can connect to the VPN from the menu bar icon.===== Connecting On An iPad =====
- Log into SDF and run the 'setvpn' command.
- Hit 'p' to set up your password.
- Enter your password twice. The password must be 14 characters or less, and ideally should contain letters, numbers, upper and lower case, and a special symbol, though there are no actual complexity requireme nts.
- After you have set up your password, the setvpn wizard will tell you what IP address to connect to. It will be 192.94.73.X. Write this whole IP address down. You will need it in a later step.
- Hit 'q' to exit the configuration.
- Turn on your iPad and go to the Settings.
- Go into the Network subsection.
- Go into the VPN subsection. This will bring up the 'Add Configuration' window.
- Select "PPTP" at the top.
- In the Description field, label this connection something useful to identify it, such as 'SDF VPN'.
- In the 'Server' field, put in the IP address that you wrote down earlier.
- In the 'account' field, put your SDF user name.
- In the 'Password' field, put the password that you set up while running the setvpn wizard in the set above. This will cause the iPad to remember your password for you. If you wish to type it in each time you connect, leave this field blank.
- Set the encryption level to 'Maximum'
- Leave the 'Send All Traffic' slider set to 'On', unless you specifically want to (and know how to) set up VPN usage in individual applications.
- Hit the 'Save' button at the top
- To turn on VPN, slide the VPN slider to 'On' for the connection called SDF and open the browser. Connect to http://sdf.org/ip and verify that the IP address it shows as your source. ==== Connecting with Viscosity ====[[http://www.sparklabs.com/viscosity/|Viscosity]] is an OpenVPN client for Mac and Windows
- Open Viscosity's preferences window.
- Create a new connection{{tutorials/images/viscosity1.png?450|Viscosity screenshot #1}}
- In the New Connection window,
* Give your connection a name
* Enter the server IP you received via e-mail under **Remote Server**
* Make sure protocol is set to **tap** not **tun**
* Uncheck **Enable DHCP**.{{tutorials/images/viscosity2.png?450|Viscosity screenshot #2}}
- Move on to the Authentication tab
* You will need to copy the certificates and keys you received in e-mail to a //SECURE// location on your //local// disk.
* Select the appropriate certificate or key for each of the three SLL file locations{{tutorials/images/viscosity4.png?450|Viscosity screenshot #3}}
- Now move to the Options tab
- Set LZO Compression to **On** or **On (Adaptive)**{{tutorials/images/viscosity5.png?450|Viscosity screenshot #4}} That's it! Hit Save, and you're ready to roll securely through the SDF VPN.===== Wrap-up =====Now that you have your VPN configured to connect, make sure that you don't forget to use it! Using the VPN while connected through a public access network (or even your home network!) will tunnel all connections through SDF and out to the Internet (once routing is enabled). Please make sure to use the VPN responsibly, as all actions and activity will be traced back to SDF.Enjoy!
----

View File

@ -0,0 +1,176 @@
====== CentOS on SDF VPS ======
//Updated for CentOS 7//
===== Contents =====
* [[#basics|Basics]]
* [[#networking|Networking]]
* [[#ssh|Setting up SSH]]
* [[#security|Security]]
* [[#software|Software Management]]
* [[#updating|Updating the System]]
* [[#reference|References]]
===== Basics =====
Logging into your VPS for the first time you will need to use the default username and password listed below.\\ Default Username: root\\ Default Password: rootroot
One of the first things you will want to do is change the default root password by typing //passwd// at the prompt. Don't forget this password as there is currently no way to recover it.
It is a good habit to create a regular user account for working, using su to obtain root privileges as needed. To create a regular user account:
useradd -Gwheel &lt;username&gt;
This user will be able to perform administrative tasks by runing //su// to obtain superuser privileges using the root password. CentOS ships with sudo installed, so adding the new user to wheel group and editing /etc/sudoers with //visudo// to uncoment the following line:
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
===== Networking =====
You will need to ssh into the vps control panel server that you were given in your welcome email which should have the format of //vps&lt;number&gt;.sdf.org//.
Once logged into your control panel you will see a line at the top of the screen that details your chosen Operating System and IP Address.\\ //VPS Maintenance Shell for &lt;os&gt; (205.166.94.xxx)//\\ This information will be important for setting up your server to have network access.
Start your server, and log in via the console. (default= root:rootroot)
Open /etc/sysconfig/network-scripts/ifcfg-eth0 in an editor and add the following, replacing the 'xxx' with the last octet of your assigned IP address, add:
DEVICE=eth0
BOOTPROTO=none
IPADDR=205.166.94.xxx
NETMASK=255.255.255.0
GATEWAY=205.166.94.1
DNS1=205.166.94.20
ONBOOT=yes
Your MAC address could be in the eth0 script, but if you only have one network interface with only one IP assigned to it, this should be enough.
Change the next line in /etc/sysconfig/network:
HOSTNAME=my.host.name
Change hostname (FQDN and alias) in /etc/hosts so it reads like this:
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
205.166.94.xxx my.host.name my
You should also run the following commands (or reboot your server) in order for the changes to take effect:
/bin/hostname
/bin/systemctl restart rsyslog
/bin/systemctl restart network
===== Setting up SSH =====
You may wish to add ssh access to your VPS. It is highly recommended that you disable root login via ssh and use a normal user account to login. In CentOS the OpenSSH service is installed and enabled by default.
==== Disable root Login ====
Edit /etc/ssh/sshd_config and uncomment the line:
#PermitRootLogin yes
To:
PermitRootLogin no
Also you can raise the security level in OpenSSH a little bit by allowing only to certain users ssh access to your vps (eg. the user you have created before)
Add one line at the end of /etc/ssh/sshd_config like this:
AllowUsers username anotheruser
Now restart sshd by running/typing:
/bin/systemctl restart sshd
You can now test ssh by running ssh user@localhost.
===== Security =====
In CentOS SELinux is enabled by default, SDF's CentOS VPS has SELinux configured to run in permissive mode, so it will log any security problem but won't enforce any policy. If you are not familiar with SELinux I suggest you to leave it this way, you can learn more about SLinux in CentOS in the [[#reference|Deployment Guide]]
CentOS 7 uses firewalld, you can learn more about configuring firewalld [[https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7|here]].
===== Software Management =====
Yellow Dog Updater Modified (yum) is the default package manager used in CentOS ( all versions ). It is used to install and update packages from CentOS (and 3rd party) Repositories.
You can configure this repositoires in /etc/yum.repos.d, by default CentOS Base and CentOS Updates are enabled by default, SDF seems to be running [citation needed] default CentOS kernel, but to play safe I advise you to add the following line in /etc/yum.repos.d/CentOS-Base.repo once under sections //[base]// and //[updates]//:
exclude=kernel-PAE* kernel-debug* kernel-devel* kernel-doc* kernel-xen*
CentOS is aimed to be 100% binary compatible with RHEL, so it is very enterprise oriented and the best advise is to stick with pre-built packages.
==== Searching software ====
If you wanted to look for GNU Screen, you can search yum database by running:
yum search screen
yum will return a list of package names and descriptions matching the word used as parameter for //search//. CentOS has groups of packages available you can know what software groups are available for install as the software groups installed already.
yum grouplist
This command will return installed and available for install software groups.
Installed Groups in SDF VPS CentOS image:
* DNS Name Server
* Dialup Networking Support
* Editors
* FTP Server
* Legacy Network Server
* Mail Server
* MySQL Database
* Network Servers
* News Server
* Server Configuration Tools
* System Tools
* Text-based Internet
* Web Server
* Windows File Server
* Yum Utilities
==== Installing software ====
If you want to install GNU screen as in the example above, you must run the following:
yum install screen
If you wish to install the development toolchain you can do it by running this command:
yum groupinstall "Development Tools"
Be aware that this can be a lot of stuff and you may run out of space in hard drive, so start by removing unused software groups (e.g., yum groupremove "Windows File Server") and then move to install desired/needed software groups or standalone packages.
==== 3rd party repos ====
Most needs could do it well with repositoires shiped by default CentOS, but there are other options like the CentOS Plus repository, shiped but disabled by default, since this repo contains items that actually upgrade certain base CentOS components. This repo will change CentOS so that it is not exactly like the upstream provider's content. Popular packages from this repository include: postfix with database support, a rebuilt kernel with additional drivers &amp; filesystem support, php5 and mysql5.
contrib is also a disabled default in CentOS. This repository contains packages contributed by CentOS users which do not overlap with any of the core distribution packages. These packages have not been tested by the CentOS developers and may not track the upstream version releases very closely.
To enable repositories temporarily, append --enablerepo=reponame before the command for yum, such as:
yum --enablerepo=centosplus --enablerepo=contrib search postfix
Other popular repos are RPMForge, this repository provides over 4000 packages for CentOS. Read the instructions on [[http://wiki.centos.org/AdditionalResources/Repositories/RPMForge|Installing RPMForge]]. This repository is considered by many in the community to be stable and safe.
EPEL, this repository (See http://fedoraproject.org/wiki/EPEL) provides rebuilds of Fedora packages for RedHat Enterprise Linux.
===== Updating the System =====
To update your system, run the following command:
* yum update
===== References =====
* [[http://www.centos.org/docs/5/html/5.2/Deployment_Guide/| Deployment Guide]]
* [[http://wiki.centos.org/|CentOS Wiki]]
----
$Id: VPS_Centos.html,v 1.10 2017/01/04 17:30:19 kickback Exp $

View File

@ -0,0 +1,201 @@
{{http://sdf.org/tutorials/images/Debian.png}}
====== Debian on SDF VPS ======
===== Contents =====
* [[#basics|Basics]]
* [[#timezone|Timezone]]
* [[#networking|Networking]]
* [[#ssh|Setting up SSH]]
* [[#pkg-mgt|Package Management]]
* [[#firewall|Firewall Setup]]
* [[#upgrading|Software and Distribution Updating]]
* [[#memreduce|Reducing Memory Usage]]
===== Basics =====
The root user on a fresh Debian VPS has the default password "rootroot".
After logging in to your VPS for the first time, please change this password to something more secure. Type "passwd" at the prompt and follow the instructions. Don't forget this password as there is currently no way to recover it.
It is a good habit to create a regular user account for working, using "su" to obtain root privileges as needed. To create a regular user account:
useradd -m &lt;username&gt;
This user will be able to perform administrative tasks by runing "su" to obtain superuser privileges using the root password.
===== Set Your Timezone =====
dpkg-reconfigure tzdata
===== Networking =====
In your control panel at vps.sdf.org, note YOUR_IP (e.g. 205.166.94.255) on the top line, and YOUR_HOSTNAME (e.g. debian99).
Start your server, and log in via the console. (default= root:rootroot)
Open /etc/network/interfaces in an editor and add the following, replacing the text YOUR_IP with your own actual IP number, add:
auto eth0
iface eth0 inet static
address YOUR_IP
netmask 255.255.255.0
network 205.166.94.0
broadcast 205.166.94.255
gateway 205.166.94.1
dns-nameservers 205.166.94.20
//Note: For VPS installations of Debian 8.4 (jesse) on VPS3, please omit the above dns-nameservers line from the interfaces file, and instead add this line to //**/etc/resolv.conf**:
nameserver 205.166.94.20
Add this to /etc/hosts:
YOUR_IP YOUR_HOSTNAME.sdf.org YOUR_HOSTNAME
Change /etc/hostname to:
YOUR_HOSTNAME
Run/Type:
/etc/init.d/networking restart
===== Setting up SSH =====
You may wish to add ssh access to your VPS. It is **//highly//** recommended that you disable root login via ssh and use a normal user account to login.
==== Install SSH ====
Run/Type:
apt-get install openssh-server
==== Disable root Login ====
Edit ///etc/ssh/sshd_config// and change the line:
PermitRootLogin yes
To:
PermitRootLogin no
Now restart sshd by running/typing:
/etc/init.d/ssh restart
You can now test ssh by running "ssh user@localhost".
===== Package Management =====
Refer to the following article to see how to clean up (remove packages) from your VPS:
* [[http://www.debian-administration.org/articles/462|Cleaning up a Debian GNU/Linux system]]
===== Firewall Setup =====
Disable IPv6:
# echo "blacklist ipv6" &gt;&gt; /etc/modprobe.d/blacklist
Edit rules:
# vi /etc/firewall
*filter
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A OUTPUT -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Load rules (now):
# iptables -F
# iptables-restore &lt; /etc/firewall
Load rules (boot):
# vi /etc/network/if-pre-up.d/firewall
#!/bin/sh
/sbin/iptables-restore &lt; /etc/firewall
# chmod 755 /etc/network/if-pre-up.d/firewall
===== Software and Distribution Updating =====
To update your system, run the following commands:
* apt-get update
* apt-get dist-upgrade -y ===== Reducing Memory Usage =====If you are using a 128MB slice, it's a good idea to reduce the memory usage of some processes or even disable them.==== cron and at ==== You might not need one or both of those, so you can deactivate them with
# update-rc.d -f atd remove
# update-rc.d -f cron remove
This frees up ca. 7MB (if both are deactivated). ==== getty / virtual terminals ==== This being a virtual system, you won't need getty on tty1-6. In order to eliminate them, edit /etc/inittab and modify the corresponding lines like this:
co:2345:respawn:/sbin/getty hvc0 9600 linux
#1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
You need to keep the line with hvc0 so you can attach a serial console from vps.sdf.org to your vps. This frees up ca. 10MB. ==== rsyslogd ==== rsyslogd eats a lot of memory by default (26MB on my vps) which can be reduced by the usage of ulimit. Edit /etc/init.d/rsyslog and include the following line just before the command where rsyslogd will be started:
ulimit -s 256
Example:
case "$1" in
start)
ulimit -s 256
log_daemon_msg "Starting $DESC" "$RSYSLOGD"
create_xconsole
do_start
case "$?" in
0) sendsigs_omit
log_end_msg 0 ;;
1) log_progress_msg "already started"
log_end_msg 0 ;;
*) log_end_msg 1 ;;
esac
;;
This frees up about 23MB. ==== portmap ==== I don't need portmap, so i removed it completely:
apt-get remove --purge portmap
==== openssh vs. dropbear ==== If you dont need all the extra features openssh has compared to dropbear, you can reduce memory consumption from 23MB to 5MB while being connected with 1 non-root user to the system by replacing openssh with dropbear.
apt-get install dropbear
Edit /etc/defaults/dropbear and set NO_START to 0 and add the extra args "-w -s -g" to disallow root and password logins (You'll be only able to login with a non root user and ssh keys):
# disabled because OpenSSH is installed
# change to NO_START=0 to enable Dropbear
NO_START=0
# the TCP port that Dropbear listens on
DROPBEAR_PORT=22
# any additional arguments for Dropbear
DROPBEAR_EXTRA_ARGS="-w -s -g"
# specify an optional banner file containing a message to be
# sent to clients before they connect, such as "/etc/issue.net"
DROPBEAR_BANNER=""
# RSA hostkey file (default: /etc/dropbear/dropbear_rsa_host_key)
#DROPBEAR_RSAKEY="/etc/dropbear/dropbear_rsa_host_key"
# DSS hostkey file (default: /etc/dropbear/dropbear_dss_host_key)
#DROPBEAR_DSSKEY="/etc/dropbear/dropbear_dss_host_key"
# Receive window size - this is a tradeoff between memory and
# network performance
DROPBEAR_RECEIVE_WINDOW=65536
Afterwards, you can deactivate openssh with
update-rc.d ssh remove
or uninstall it:
apt-get remove openssh-server
----
$Id: VPS_Debian.html,v 1.19 2018/02/22 02:06:34 slugmax Exp $

View File

@ -0,0 +1,123 @@
{{http://sdf.org/tutorials/images/NetBSD.png}}
====== NetBSD on SDF VPS ======
===== Contents =====
* [[#first_steps|First Steps]]
* [[#user_accounts|User Accounts]]
* [[#system_clock|System Clock]]
* [[#networking|Networking]]
* [[#pkgsrc|pkgsrc]]
* [[#tips|Miscellaneous Tips]]
* [[#references|References]]
===== First Steps =====
==== User Accounts ====
After you have installed and started your NetBSD VPS, go to the console and log-in as user root with the default password, "root".
One of the first things you will want to do is change the default root password by typing "passwd" at the prompt. Don't forget this password as there is currently no way to recover it.
It is also a good habit to create a regular user account for working, using "su" to obtain root privileges as needed. To create a regular user account which is part of the administrative "wheel" group:
useradd -m -G wheel &lt;username&gt;
Then immediately set its password with:
passwd &lt;username&gt;
This user will be in the "wheel" group and will be able to perform administrative tasks by runing "su" to obtain superuser privileges using the root password.
==== System Clock ====
It is customary on UNIX systems for the system clock to be set to UTC. To set the local time zone, find your zone file in "/usr/share/zoneinfo/" and link to it at "/etc/localtime" as follows:
ln -fs /usr/share/zoneinfo/Europe/Helsinki /etc/localtime
==== Networking ====
Look at the first line of your control panel at vps.sdf.org and note YOUR_HOSTNAME (e.g. netbsd99), EXTERNAL_IP (e.g. 205.166.94.nnn), and INTERNAL_IP (e.g. 10.1.0.nnn):
VPS Maintenance Shell for netbsd99 (205.166.94.nnn / 10.1.0.nnn)
-------- ------------- ----------
| | |
| EXTERNAL_IP INTERNAL_IP
|
YOUR_HOSTNAME
Open /etc/rc.conf in an editor and, replacing the text YOUR_HOSTNAME, EXTERNAL_IP, and INTERNAL_IP with your own actual host name and IP numbers, add:
hostname=YOUR_HOSTNAME.sdf.org
defaultroute=205.166.94.1
auto_ifconfig=yes
ifconfig_xennet0="inet EXTERNAL_IP netmask 0xffffff00"
ifconfig_xennet1="inet INTERNAL_IP netmask 0xffffff00"
Then put this in /etc/resolv.conf:
nameserver 205.166.94.20
Add this to /etc/hosts:
EXTERNAL_IP YOUR_HOSTNAME.sdf.org YOUR_HOSTNAME
Run/Type:
/etc/rc.d/network restart
===== pkgsrc =====
On NetBSD you can mount a pre-built (and still in progress) pkgsrc DESTDIR. Following the procedures below will effectively install the 2000+ included packages on your virtual NetBSD system.
Note that at the moment the pre-built pkgsrc assumes that its path is /pkgshare. Some programs won't work under a different prefix since they won't be able to find their shared libraries.
mkdir -p /pkgshare
rmdir /usr/pkg
ln -s /pkgshare /usr/pkg
rm -rf /var/db/pkg
ln -s /pkgshare/db/pkg /var/db/pkg
mount -t nfs 10.1.0.1:/pkgshare /pkgshare
export PATH=$PATH:/usr/pkg/bin:/usr/pkg/sbin
It is read only.
To set this up on boot, execute the steps above and then:
echo "nfs_client=YES" &gt;&gt; /etc/rc.conf
echo "rpcbind=YES" &gt;&gt; /etc/rc.conf
echo "10.1.0.1 vps" &gt;&gt; /etc/hosts
echo "vps:/pkgshare /pkgshare nfs ro" &gt;&gt; /etc/fstab
echo "export PATH=$PATH:/usr/pkg/bin:/usr/pkg/sbin" &gt;&gt; /etc/profile
Note that you cannot use both this pre-built pkgsrc and pre-built packages from netbsd.org. It may be possible to set the system up so you can, however this is best left to the experienced NetBSD administrator.
===== Miscellaneous Tips =====
==== Free up disk space by removing unwanted sets ====
The default image comes with all distribution sets installed. You can free up some disk space by removing the ones you don't need.
First, check which distribution sets are installed:
ls /etc/mtree
Decide which sets you want to remove and examine their contents. For example, to remove games and all X11 sets:
for set in games xbase xcomp xetc xfont xserver ; do \
tar tzf /usr/INSTALL/$set.tgz | sed -e 's/^\.//' &gt;&gt; /tmp/purgelist ; \
done
After examining "/tmp/purgelist" and removing any files you want to keep, do:
cat /tmp/purgelist | xargs rm
===== References =====
* [[http://www.netbsd.org/docs/guide/en/|The NetBSD Guide]]
* [[http://wiki-static.aydogan.net/The_NetBSD_System_Manager%27s_Manual|The NetBSD System Manager's Manual]]
----
$Id: VPS_NetBSD.html,v 1.23 2018/02/22 15:12:01 slugmax Exp $

View File

@ -0,0 +1,240 @@
====== Installing an OpenLDAP Server on a NetBSD VPS ======
**Note: This tutorial assumes youve already followed the [[http://sdf.org/?tutorials/VPS_NetBSD|NetBSD on SDF VPS]] tutorial to set up networking, the time zone and pkgsrc using the SDF VPS pkgsrc.**
An LDAP server can be used for an endless number of things. Essentially, LDAP is just an object-oriented hierarchical database. Common uses include authentication and authorisation, host management, a backend for Kerberos, a backend for a DHCP server, a shared address book and forming a part of some public key infrastructures.
In this tutorial, I will be setting up the LDAP server to provide authorisation and authentication for a nix client, but the first few stages are the same for almost any application of LDAP.
The OpenLDAP server is available in the SDF VPS pkgsrc and so the software is already installed, but does require some configuration.
===== Jargon and Tools =====
OpenLDAPThe LDAP server that will be usedSuffixThe suffix appended to all LDAP objects, which normally related to a domain nameRoot DNThe administrative user of the server, with read and write access to all data objects. The password for this user should be kept secure"slapd"The name of the executable of the OpenLDAP server"slappasswd"The name of the executable tool used for creating password hashes"pwd_mkdb"The name of the executable tool that generates the password databases
===== Initial Setup =====
To begin with, well create the chroot environment. Whilst the OpenLDAP server is running, this is the only part of the file system it will be able to see.
The first step is to create the directories and copy the initial configuration that comes from pkgsrc.
"# mkdir /var/chroot/openldap
# mkdir /var/chroot/openldap/etc /var/chroot/openldap/var
# cp -r /usr/pkg/etc_example/openldap /var/chroot/openldap/etc/
# cp -r /usr/pkg/var/openldap /var/chroot/openldap/var/"
The next step is to create the user and group that the server will run as, and allow for this information to be available in the chroot.
"# groupadd -g 17 slapd
# useradd -u 17 -g 17 -d /var/chroot/openldap slapd
# grep slapd /etc/master.passwd &gt; /var/chroot/openldap/etc/master.passwd
# pwd_mkdb -d /var/chroot/openldap /var/chroot/openldap/etc/master.passwd
# grep slapd /etc/group &gt; /var/chroot/openldap/etc/group"
No password needs to be set for the slapd user as no one will ever log in using its username. This disallows logins from that user.
Finally, well need to set the correct permissions necessary for OpenLDAP to access its data while keeping it secure.
"# chown -R slapd:slapd /var/chroot/openldap
# chmod -R 700 /var/chroot/openldap/var/openldap/openldap-data"
===== Initial Configuration =====
The next stage involves editing some configuration files so that paths are correct within the chroot and the chroot is enabled with the correct user and group.
This step also includes setting the password for the root DN (Distinguished Name), the LDAP administrative user.
Begin by creating a hash of the password you wish to use for the root DN. This should be a secure password, as the root DN can read and write to the database, regardless of any access restrictions that we set up later on. The slappasswd tool is used to do this.
"# slappasswd -s 'reallysecurepassword'
{SSHA}1LuiLGmSO+EoPA0uk80v4TC5xwacBOWg"
**Note: The "-s" flag passed here tells "slappasswd" that we want to pass the secret on the command line. If you execute "slappasswd" without any arguments, it will prompt for the password on the terminal allowing you to avoid having the password show up in any logs or in the running process list.**
You should copy the whole line to your clipboard as we will need it shortly. Then open up "/var/chroot/openldap/etc/openldap/slapd.conf" in your favourite editor.
The first three lines that need changing are near the top of the file. They start with include, pidfile and argsfile and have a path to a file following them. These paths point to the read-only filesystem of the SDF VPS pkgsrc and not our chroot, so they should be changed like so:
"include /etc/openldap/schema/core.schema
[...SNIPPED...]
pidfile /var/openldap/run/slapd.pid
argsfile /var/openldap/run/slapd.args"
Next, well need to set the suffix, the root DN, and the password for the root DN. The suffix is normally formed from your domain name. In this example, the domain name is shiftout.org, and so the suffix should be "dc=shiftout,dc=org". The suffix should then be copied onto the end of the root DN, so in this example, it becomes: "cn=manager,dc=shiftout,dc=org". For the root DNs password, replace "secret" with the string you copied to your clipboard earlier.
"suffix "dc=shiftout,dc=org"
rootdn "cn=manager,dc=shiftout,dc=org"
[...SNIPPED...]
rootpw {SSHA}1LuiLGmSO+EoPA0uk80v4TC5xwacBOWg"
Then there is one final path to modify. This is the directory that OpenLDAP uses for storing its data. Currently, it is set to point at the read-only SDF VPS pkgsrc, so this needs to be changed.
"directory /var/openldap/openldap-data"
The final step before running the server for the first time is to configure the rc scripts. These allow for the server to be started on boot.
First, copy the example rc script for slapd into the "/etc/rc.d" directory.
"# cp /usr/pkg/share/examples/rc.d/slapd /etc/rc.d/"
Then edit the new file "/etc/rc.d/slapd" with your favourite editor.
There are two lines you need to edit here. The line defining where to find "slapd" is fine as the read-only filesystem is fine for executing programs from, its only the configuration and data store we needed to move.
The first line that needs to be edited is the location of the configuration file, which should look like this:
"required_files="/var/chroot/openldap/etc/openldap/${name}.conf""
The second line is the command line arguments that are passed to "slapd" when it is started. This should look like:
"command_args="-u slapd -g slapd -r /var/chroot/openldap/ -f /etc/openldap/slapd.conf""
The "-u" and "-g" flags are used to specify the user and group that "slapd" should be running as. The "-r" flag tells slapd where to chroot, and the "-f" flag tells slapd where to find the configuration file. All configuration files are read after the chroot has happened, which is why the path does not include "/var/chroot/openldap" in it.
Finally, it is necessary to enable "slapd" in the "rc.conf" file.
"# echo "slapd=YES" &gt;&gt; /etc/rc.conf"
You can edit the file manually and add this line if you would like to keep your "rc.conf" organised in some way.
===== Testing =====
Before starting "slapd" as a daemon, it would be wise to first test that it is working fine using debug mode. The following command will start slapd in debug mode with the command line arguments we specified in "slapd"s rc file. 255 represents the debug level.
"# /usr/pkg/libexec/slapd -u slapd -g slapd -r /var/chroot/openldap/ -f /etc/openldap/slapd.conf -d 255"
If you see something similar to:
"502c06bd slapd starting
502c06bd daemon: added 4r listener=0x0
502c06bd daemon: added 6r listener=0x7f7ffc427180
502c06bd daemon: added 7r listener=0x7f7ffc427240
502c06bd daemon: select: listen=6 active_threads=0 tvp=NULL
502c06bd daemon: select: listen=7 active_threads=0 tvp=NULL
502c06bd daemon: activity on 1 descriptor
502c06bd daemon: waked
502c06bd daemon: select: listen=6 active_threads=0 tvp=NULL
502c06bd daemon: select: listen=7 active_threads=0 tvp=NULL"
Then you have succeeded in configuring an OpenLDAP to a point where it will start successfully. Press Ctrl+C to stop the server. You can start or stop the server as a daemon using "/etc/rc.d/slapd {start,stop}" just like you would with other daemons on NetBSD.
**Note: From this point, configuration will become specific to providing authentication and authorisation services for nix clients. If youre looking to use LDAP for another application, hopefully youve got to a point where a more generalised tutorial is able to help you.**
===== Including extra schemata =====
Three schemata will need to be used by "slapd" to enable you to store objects representing users and groups.
"cosine.schema"Includes “generally useful” objects and attributes (sic)"nis.schema"Includes objects and attributes for use in representing fields from BSD-style flat file authentication and authorisation files"inetorgperson.schema"Includes objects and attributes for representing contact information and organisational information
These files are included by adding the following three lines underneath the first include we changed earlier in the "/var/chroot/openldap/etc/openldap/slapd.conf" file:
"include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/inetorgperson.schema"
At the end of this file, well also add another index. Searching on non-indexed fields can result in no results being returned, so this is important.
"index uid eq"
===== Configuring ACLs =====
The sample configuration in "/var/chroot/openldap/etc/openldap/slapd.conf" is sane for using LDAP for authentication and authorisation so this step simply involves uncommenting the following:
"access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
access to *
by self write
by users read
by anonymous auth"
===== A second test =====
To ensure that no errors have been made while configuring, it would be a good idea now to run "slapd" again with the debug option. Any errors will be apparent in the output if they have occurred.
"# /usr/pkg/libexec/slapd -u slapd -g slapd -r /var/chroot/openldap/ -f /etc/openldap/slapd.conf -d 255"
===== Importing data =====
Assuming youve got this far with no problems, its time to import some data. The data used for interactions with an OpenLDAP server is stored in a text file in LDIF (LDAP Data Interchange Format). Once we have performed this initial import, further interactions can be performed through graphical clients.
Copy the following example into a text file:
"# Create top-level object in domain
dn: dc=shiftout,dc=org
objectClass: top
objectClass: dcObject
objectclass: organization
o: shiftOut
dc: shiftOut
description: shiftOut
dn: ou=people,dc=shiftout,dc=org
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=shiftout,dc=org
objectClass: organizationalUnit
ou: groups
dn: uid=irl,ou=people,dc=shiftout,dc=org
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: irl
sn: Learmonth
givenName: Iain
cn: Iain Learmonth
displayName: Iain R. Learmonth
uidNumber: 2000
gidNumber: 2000
userPassword: password
gecos: Iain R. Learmonth
loginShell: /bin/bash
homeDirectory: /home/irl
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: irl@sdf.org
homePhone: +1 (206) 299 2120 x1388
title: System Administrator
initials: IRL
dn: cn=irl,ou=groups,dc=shiftout,dc=org
objectClass: posixGroup
cn: irl
gidNumber: 2000"
The following is used in this example:
* Suffix: dc=shiftout,dc=org
* Initial user: irl
* Organisation name: shiftOut
These three values will need to be changed. Hopefully you can also use common sense to identify names and contact information that will need to be changed.
Assuming you have saved your LDIF file as "/tmp/ldif", run the following command to import it:
"ldapadd -D "cn=manager,dc=shiftout,dc=org" -Wx -f /tmp/ldif"
You will need to replace the bind DN here with the correct root DN and suffix you specified earlier.
**Note for experienced users: Tools such as "slapadd", "slapcat", etc. work directly on the OpenLDAP database files. As the path for this is set in a configuration file that assumes its being used in the chroot, they will not work. Experienced users may decide to setup another "slapd.conf" file for use outside the chroot, but the "ldapadd", "ldapsearch", etc. tools work just as well while the server is running.**
You can check the import was successful by running:
"ldapwhoami -D "uid=irl,ou=people,dc=shiftout,dc=org" -Wx"
Replace the uid and suffix with the ones that you have created. You should see an output similar to:
"dn:uid=irl,ou=people,dc=shiftout,dc=org"
If you see this, you have correctly configured a working LDAP server, to which you can add, query, modify, and remove data representing users and groups.
===== Graphical Client =====
Apache Directory Studio provides a graphical browser that you can use to add, query, modify and remove data from your LDAP database. It can be downloaded from http://directory.apache.org/studio/.
$Id: VPS_NetBSD_OpenLDAP.html,v 1.5 2012/08/16 00:47:07 irl Exp $

View File

@ -0,0 +1,77 @@
====== Plan 9 on SDF VPS ======
{{http://sdf.org/tutorials/images/plan9logo.jpg}}
==== Note! ====
Some parts of this tutorial are copy&amp;paste from Plan 9 wiki because they fit the flow of the writing as they are, so no claim from SDF's users is made over the authorship of such parts, which are clearly labeled as taken from Plan 9's wiki.
===== Contents =====
* [[#install|Install]]
* [[#basics|Basics]]
* [[#know|Things To Know When You Get to Plan 9's shell]]
* [[#networking|Networking]]
* [[#drawterm|Drawterm on Plan 9]]
* [[#applications|A Few Applications]]
* [[#adduser|Adding a User]]
* [[#timezone|Configure Timezone]]
* [[#links|Links (tutorials, videos, etc.)]]
===== Get involved =====
Plan 9 has active comunities which mostly interact by email. You are encouraged to join the [[http://mail.9fans.net/listinfo/9fans|9fans mailing list]] where discussion about Plan 9 and related technologies happen.
SDF also host a mailling list mainly for sdfers running Plan 9 in one SDF's VPS slice.
===== SDF Plan9 Boot Camp =====
SDF periodically runs a Plan9 Boot Camp which is open to anyone with an SDF user account. This Plan9 Boot Camps are announced on the bboard and are typically a Summer or Fall annual occurence and run for about 3 months.
Activities of the SDF Plan9 Boot Camp include:
* Installation or pre-generated Plan9 instance under Xen
* Self Guided Discoveries in: ed, network configuration
* Self Guided Discoveries in: drawterm (from your computer), rio and stats
* Self Guided Discoveries in: acme, sam, abaco, mothra and man
* Self Guided Discoveries in: mapdemo, catclock, juggle and tetris
* Self Guided Discoveries in: 9front and contrib via ftpfs
* Self Guided Discoveries in: 9fans mailing list and faces During the SDF Plan9 Boot Camp you are encouraged to make screenshots and vidoes of your Self Guided Discoveries and share your experiences on plan9-l to inspire others to do the same.===== Install =====After you have been allocated a VPS slice, connect by "ssh //&lt;SDF member ID&gt;//@//&lt;VPS slice&gt;//.sdf.org" (for example, "ssh papa@vps2.sdf.org"; you may omit your SDF member ID and the "@" if you are connecting from your SDF shell account). Your password is the same as your SDF member log-in.At the VPS console and type "x".If asked install from the ISO type "no". At some point there was an option to install from Plan9 iso image; at the time of updating the tutorial it does not ask for that option anymore.
Do you wish to continue? (yes/no) yes
Would you like to install Plan9 yourself from the ISO? (yes/no)
% Copying a fresh plan9 image [PLEASE WAIT]
[COMPLETE]
(continue)After the install ends type "z" and then "r" to restart the instance.===== Basics =====The Plan9 SDF VPS is the only VPS which is provided freely to SDF MetaARPA members. This slice includes cluster access to the SDF Plan9 Community 9p server as well as limited access to the Bell Labs server. It is highly recommend that you get involved in the [[http://mail.9fans.net/listinfo/9fans|9fans mailing list]] and request commit access. With your help, Plan9 at SDF can continue to grow. To request your free Plan 9 VPS, type '//plan9//' at the shell.When your Plan 9 system boots, it will ask you where root is from (via the network, or a local disk). Just hit "[ENTER]" to select local (the default): root is from (tcp, local)[local!#S/sd00/fossil]:Next, you will be prompted to log in. Log in as the default user, "glenda":
user[none]: glenda
time...
fossil(#S/sd00/fossil)...version...time...
init: starting /bin/rc
#m/mousectl: rc: can't open: unknown device in # filename
init: rc exit status: rc 24: error
init: starting /bin/rc
%You will now be sitting at an "rc" prompt, Plan 9's shell.===== Things To Know When You Get to Plan 9's shell =====
* **ctl-h** is backspace, kind of. **ctl-u** erases the current line. As with backspace, screen output may not be what you expect.
* To exit Plan 9 and be able to return **without** rebooting your server, Press **ctl-]** to close the console, then press 'q' to disconnect. You can return again by **ssh**ing to your allocated VPS server again (see [[#install|above]]) and getting back to the VPS console, and pressing 'c' to connect.
* The only line editor installed by default in the Plan 9 Image. is **//ed//**. For initially setting your DNS below or other tasks before you get DrawTerm running, [[https://www.howtoforge.com/linux-ed-command/|read this tutorial]] for this excrutiating experience (but then you can install DrawTerm). ===== Networking ========= Configuring Your IP Address ====In your control panel at "vps3.sdf.org", note YOUR_IP (e.g. 205.166.94.x) on the top line.Start your server, and log in via the console. (default=glenda)At the "rc" prompt (%), enter: "ip/ipconfig -g 205.166.94.1 ether /net/ether0 YOUR_IP 255.255.255.0"This configuration lasts until you reboot Plan 9. To make this permanent it is recommended to add this line to your /rc/bin/termrc.local file.To exit Plan 9 and be able to return **without** rebooting your server, see [[#know|above]].==== DNS Resolution ====You can get DNS resolution by editing "/lib/ndb/local" and changing: "ip=127.0.0.1 sys=localhost dom=localhost"to "ip=YOUR_IP sys=plan9 dom=plan9 dns=205.166.94.20"Once you've done that, from "rc" type "ndb/cs
ndb/dns -r"This configuration lasts until you reboot Plan 9. To make this permanent it is recommended to add those two lines to your /rc/bin/termrc.local file.To exit Plan 9 and be able to return **without** rebooting your server, see [[#know|above]].===== Drawterm =====Drawterm is essentially a BLIT terminal emulator which allows you to connect to your Plan9 system and load the //rio// windowing system. Rio is a direct successor of UNIX 'layers' and Plan 9 '8½'.At the "rc" prompt (%) in your Plan 9 VPS, enter these two lines. "echo 'key proto=p9sk1 dom=plan9 user=glenda !password=PASSWORD' &gt;/mnt/factotum/ctl
aux/listen1 -t tcp!*!ncpu /bin/cpu -R &amp;
"Replace PASSWORD with the password you want. This password lasts until you reboot Plan 9.To exit Plan 9 and be able to return **without** rebooting your server, see [[#know|above]].==== Getting Started with Drawterm ===={{http://sdf.org/tutorials/images/drawterm.png}}\\ Follow the [[https://web.archive.org/web/20120121090252/http://jgw.tx0.org/howto/building_drawterm.html|instructions]] to download and build Drawterm for your operating system. YOUR_IP must match the IP address described in [[#networking|Networking]].\\ "./drawterm -a YOUR_IP -c YOUR_IP -u glenda"After typing your password, press the right button of your mouse. A menu should appear. Then, release the button over the "New" option.\\ Now, press the right button again near the upper-left corner of drawterm, and drag the mouse to the lower right before releasing the button, drawing a rectangle.\\ You should now have a terminal window. The first thing you should probably do is to type "cat readme.rio" (or read it from [[http://sdf.org/tutorials/misc/readme.rio|here]])===== Plan 9 Applications ========= Browsing the Web ====You can use [[http://lab-fgb.com/abaco/|Abaco]] to browse the web. (Abaco is available in a default Plan 9 system.)You'll need to have your IP configured and DNS working in order to browse the web. After that, you'll have to run "webfs" and **then** "abaco". (You may want to add "webfs" in your "$home/lib/profile" just before plumber and rio; also, if you don't have a "$home/lib/webcookies" file, touch it.){{http://sdf.org/tutorials/images/abaco.png?600px}}When abaco starts, you can go to a webpage by clicking ""New"" with the middle button of the mouse, typing the address in the row below the one with ""Del Snarf Get …"" (see the previous figure: it's the one where the current address is), and pressing "Enter" on your keyboard. You can follow links by clicking on them, as is usual, with the left button (the shape of the cursor won't change, though).===== Adding a User =====You may wish to add a user to your system once you get the hang of things. There is really no need to create a new user when you are first starting out. To create a new user, you will have to connect to the file server console by typing: "con -l /srv/fscons"Now, at the file server prompt, create a new user. Replace USER with what you want your new user to be named: "uname USER USER"You will need to add that user to the "sys" group if you want it to be able to change system configuration files. Again, change USER to what your new user name is: "uname sys +USER"Exit the file server console by typing: "ctrl+\". You will now be at a "&gt;&gt;&gt;" prompt; type "q" to quit.===== Configure Time zone =====**Taken from [[http://plan9.bell-labs.com/wiki/plan9/Installation_instructions/index.html|Plan 9 Wiki Installation Instructions]]**You might want to configure your system's timezone. Figure out in which timezone you are, and then, assuming e.g. you are in the CET zone log in as user adm, then: "cp /adm/timezone/CET /adm/timezone/local"Last, but not the least, you may also want to edit/change the "TIMESYNCARGS" in your "/rc/bin/termrc" or "/rc/bin/cpurc"; for example, to use an NTP service, set it to: "TIMESYNCARGS=(-n 0-north-america.pool.ntp.org)" and reboot. ===== Working in Plan 9 =====TODO check if title worksNow that you are connected to your Plan 9 console with your new user you should run: "/sys/lib/newuser"And setup a password for the user in factotum so you can login from Drawterm.**Taken from [[http://plan9.bell-labs.com/wiki/plan9/Installation_instructions/index.html|Plan 9 Wiki Installation Instructions]]**When you drawterm to a Plan 9 cpu server, your local files will be available at /mnt/term. This means you can freely copy files between Plan 9 and your other os without the use of any additional protocols. In other words, when working with drawterm, your environment is actually a composite of your local os and the Plan 9 system - technically it is a three node grid, because the Drawterm program acts as an ultra-minimal independent Plan 9 terminal system, connecting your host os to the Plan 9 cpu server.===== Useful Plan9 Commands =====While there are many similarities between UNIX and Plan9, there are specific commands which may be unfamiliar to UNIX users. However, some of these commands have their roots in early UNIX systems as well as BTL Research UNIX.
* //**fshalt -h**// - This will gracefully shutdown Plan 9
* //**ed**// - This archaic line editor is the only one installed by default in the Plan 9 Image. For initially setting your DNS above or other tasks before you get DrawTerm running, [[https://www.howtoforge.com/linux-ed-command/|read this tutorial]] for this excrutiating experience (but then you can install DrawTerm).===== Links ========= Tutorials ====
* [[http://sdf.org/?tutorials/VPS_Plan9|Plan 9 on SDF VPS]]
* [[https://web.archive.org/web/20120121090252/http://jgw.tx0.org/howto/building_drawterm.html|Building Drawterm on NetBSD-5.x/i386]]
* [[http://www.quanstro.net/newbie-guide.pdf|A Plan 9 Newbie's Guide [PDF]]]
* [[https://web.archive.org/web/20170105023205/http://www.9gridchan.org/plan_9_basics|Plan 9 basics]]
* [[http://doc.cat-v.org/plan_9/misc/rit-intro|RIT Plan 9 introduction]]
* [[https://web.archive.org/web/20170601065710/http://plan9.bell-labs.com/wiki/plan9/UNIX_to_Plan_9_command_translation/index.html|Plan9 commands for UNIX users]]==== Utilities ====
* [[https://web.archive.org/web/20080616071532/http://cm.bell-labs.com/sys/man/|Manual pages]]
* [[http://citeseer.ist.psu.edu/viewdoc/download?doi=10.1.1.41.3287&rep=rep1&type=pdf|Rc -- A Shell for Plan 9 and UNIX Systems [PDF]]]==== Videos ====
* [[http://www.youtube.com/watch?v=SoGLU1l7LwY|Narrated Plan 9]]
* [[http://www.youtube.com/watch?v=dopu3ZtdCsg|Plan9 Acme Intro - Part 1]]
* [[http://www.youtube.com/watch?v=2vjD_B__SbQ|Plan9 Acme Intro - Part 2]]
* [[http://www.youtube.com/watch?v=cR96WQ6OR00|Plan9 Acme Intro - Part 3]]
* [[http://www.youtube.com/watch?v=byoznMe8ab4|Acme Mail Demo]]
* [[http://www.youtube.com/watch?v=Pydckb9ZU8Y|Acme Editor Demo]]==== Books ====
* [[http://lsub.org/who/nemo/9.intro.pdf|Introduction to Operating Systems Abstractions Using Plan 9 from Bell Labs [PDF]]]
----
$Id: VPS_Plan9.html,v 1.41 2020/06/16 00:17:20 smj Exp $

31
dump/agent.html.docuwiki Normal file
View File

@ -0,0 +1,31 @@
====== Using an SSH agent to avoid typing your password ======
==== Do not use this tutorial until you [[http://sdf.org/?tutorials/SSH-SDF#public_key|make a unix account accessible via public key authentication following this tutorial]]. ====
Not only is typing your passphrase once convenient, you can [[http://xkcd.com/936/|make your password very complicated and only ever type an easy to remember passphrase to access all your accounts]].
* Unix
* [[#shell|At the shell]]
* [[#anywm|Any Window Manager]]
* [[#gnome|Gnome]]
* [[#kde|KDE]]
* [[#macos|MacOS X]]
* [[#windows|Windows]]
===== At the shell =====
At any time, you can type\\ \\ " ssh-agent /bin/ksh\\ ssh-add $HOME/private_key.rsa\\ "\\ (you can replace "/bin/ksh" by your favorite shell). Any command issued from then on that uses "ssh" to interact with a server that hosts your public key (e.g. "ssh, sshfs, rsync") will not require a password e.g. \\ \\ " home_pc$ ssh-agent /bin/ksh\\ home_pc$ ssh-add $HOME/public_key.rsa\\ Enter passphrase for /home/user/public_key.rsa:\\ Identity added: /home/user/public_key.rsa (/home/user/public_key.rsa)\\ home_pc$ ssh miku.freeshell.org\\ miku$ "\\ \\
===== Any Window Manager =====
Arrange to have\\ \\ " ssh-add $HOME/private_key.rsa "\\ \\ run at login (e.g. via $HOME/.xinitrc or as a "Startup Application in Gnome/KDE"). You should get a popup asking for your passphrase.
===== Gnome =====
===== KDE =====
===== Mac OS X =====
===== Windows =====
You may have to change your openssh formatted private key to PuTTY's .ppk format via [[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html|PuTTYgen]]. \\ \\ $Id: agent.html,v 1.3 2011/09/11 13:31:10 jbaber Exp $

View File

@ -0,0 +1,108 @@
====== To DJ on ANONRADIO ======
To become a DJ, first you must subscribe to the //anonradio-l// mailing list by sending an email to "majordomo@sdf.org" that says:
"subscribe anonradio-l"
Then, send a message to the list and introduce yourself. Tell us about the show you want to do, and request a time-slot — for the current schedule, just visit [[http://anonradio.net|anonradio.net]]. When you are ready to schedule your show, email **//membership//** and you will be given a username, password, mountpoint and server name to stream your show to. Scheduled shows are automatically switched-in by the server.
Before getting your own show, you may like to try broadcasting during [[http://anonradio.net/openmic/|OpenMIC]].
===== Streaming =====
There are a variety of tools that can be used to stream to aNONradio from a variety of operating systems.
Regardless of what software you use, please ensure that your outgoing stream conforms to the following specifications:
Bit rate: 192 Kbps
Sample Rate: 44.1 KHz
Channels: 2 (stereo)
Format: mp3
==== liquidsoap ====
It is possible to stream a collection of audio files using liquidsoap:
liquidsoap 'output.icecast(%mp3, host="anonradio.net", port=8010,
user="YOURSDFUSERNAME", password="YOURICECASTPASSWORD",
mount="/YOURSDFUSERNAME", mksafe(playlist("/path/to/playlist.m3u")))'
"playlist.m3u" must then contain a list of these files. The above command must be terminated at the end of the show; if not, it will loop, resulting in weird behavior.
==== Mixxx ====
[[https://www.mixxx.org/|Mixxx]] is an open-source cross-platform graphical DJ tool which can stream to Icecast servers, including aNONradio. It is recommended if you are playing tracks from audio files stored on your computer.
==== butt ====
"[[http://danielnoethen.de/|"butt"]] (broadcast using this tool) is an easy to use, multi OS streaming tool. It supports SHOUTcast and Icecast and runs on Linux, Mac OS X and Windows. The main purpose of butt is to stream live audio data from your computers Mic or Line input to an Shoutcast or Icecast server. Recording is also possible. It is NOT intended to be a server by itself or automatically stream a set of audio files."
Instructions on using "butt" to stream to aNONradio are forthcoming.
==== Nicecast ====
There is [[http://sdf.org/?tutorials/anonradio-nicecast|an SDF tutorial for setting-up Nicecast]] on Mac OS X with iTunes / Skype / whatever else, all with voice-over capability.
==== Ezstream ====
To stream during your timeslot or during openmic, create a playlist of your desired songs:
"ls -d -1 /PATH/TO/YOUR/MUSIC/*.* &gt;&gt; playlist.m3u"
Copy the default ezstream config to your home directory:
mkdir ~/.ezstream
cp /usr/share/doc/ezstream/examples/ezstream_mp3.xml ~/.ezstream/
Edit your newly copied config thusly:
&lt;ezstream&gt;
&lt;url&gt;http://anonradio.net:8010/YOUR_DJ_MOUNT_NAME&lt;/url&gt;
&lt;sourceuser&gt;YOUR_DJ_USER_NAME&lt;/sourceuser&gt;
&lt;sourcepassword&gt;YOUR_DJ_PASSWORD&lt;/sourcepassword&gt;
&lt;format&gt;MP3&lt;/format&gt;
&lt;filename&gt;/PATH/TO/YOUR/playlist.m3u&lt;/filename&gt;
&lt;svrinfobitrate&gt;192&lt;/svrinfobitrate&gt;
&lt;svrinfosamplerate&gt;44100&lt;/svrinfosamplerate&gt;
&lt;stream_once&gt;1&lt;/stream_once&gt;
&lt;/ezstream&gt;
And start your stream with this command:
"ezstream -c ~/.ezstream/ezstream_mp3.xml"
If you are streaming a group of varying format files, you can homogenize them like this:
&lt;ezstream&gt;
&lt;url&gt;http://anonradio.net:8010/YOUR_DJ_MOUNT_NAME&lt;/url&gt;
&lt;sourceuser&gt;openmic&lt;/YOUR_DJ_USER_NAME&gt;
&lt;sourcepassword&gt;YOUR_DJ_PASSWORD&lt;/sourcepassword&gt;
&lt;format&gt;MP3&lt;/format&gt;
&lt;filename&gt;/PATH/TO/YOUR/playlist.m3u&lt;/filename&gt;
&lt;svrinfobitrate&gt;192&lt;/svrinfobitrate&gt;
&lt;svrinfosamplerate&gt;44100&lt;/svrinfosamplerate&gt;
&lt;stream_once&gt;1&lt;/stream_once&gt;
&lt;reencode&gt;
&lt;enable&gt;1&lt;/enable&gt;
&lt;encdec&gt;
&lt;format&gt;MP3&lt;/format&gt;
&lt;match&gt;.mp3&lt;/match&gt;
&lt;decode&gt;/usr/pkg/bin/madplay -v -Q -i -b 16 -R 44100 -S -o raw:- @T@&lt;/decode&gt;
&lt;encode&gt;/usr/pkg/bin/lame --preset cbr 192 -r -s 44.1 --bitwidth 16 - -&lt;/encode&gt;
&lt;/encdec&gt;
&lt;/reencode&gt;
&lt;/ezstream&gt;
There are also[[http://mustafejen.freeshell.org/ezpulse.html|instructions]] for streaming with ezstream on Debian using PulseAudio.
===== Streaming Metadata Manually =====
During your show you can login here:
http://anonradio.net/playlist/
Login with your anonradio.net streaming credentials. You will ONLY be able to login during your show.
This feature will be helpful to DJs who stream from analogue devices like turntables, cassettes and such that don't send playlist MetaData.
$Id: anonradio-dj.html,v 1.9 2020/06/15 06:14:02 smj Exp $

View File

@ -0,0 +1,73 @@
====== Setting up Nicecast on a Mac to work with Skype, iTunes, and whatever other app you want, all at once (plus voice-over!) ======
===== I. Set system input/output to something that won't feed back =====
In my case I'm using a Logitech USB headset (mic plus earphones), so I go into my System Preferences' Sound section and choose that headset for both input and output.
For Nicecasting purposes I find it's better to control your mic gain at the system level. On Mac OS X, you can click the mic icon at the right of the input volume slider to move the input (USB mic, in my case) sensitivity all the way up, and click the similar lefthand icon to move it all the way down.
{{http://sdf.org/tutorials/images/nicecast-systemaudio.png}}
Keep this "System Preferences &gt; Sound" window open. If you don't have a headset then you can probably use audio jack earphones and your computer's built-in microphone. Or, just a USB mic plus audio jack earphones. Etc. The idea is to prevent the computer's input from taking in the computer's output (feedback).
===== II. Open Nicecast and set it up =====
Nicecast has four windows:
**1.The Broadcast window**, which has several sub-areas, each activated by a button at the bottom of the window. The first button, "Source", is important -- you'll want to select "System Audio" from the drop-down menu there, and if it's your first time doing this then probably Nicecast will direct you to download an add-on program that enables system audio to be captured (it did this for me). The point of the "System Audio" option is that all outbound audio in your computer is fed into Nicecast and broadcasted, so, for example, you can use the audio from a few different applications at once. Other options on that dropdown are "Application", for specific and exclusive use of a program like Skype or iTunes, and then "Audio Device" for a some specific system-level audio input/output path (I have never used "Audio Device").
{{http://sdf.org/tutorials/images/nicecast-broadcast.png}}
If you're dealing with only one application such as Skype, then it would be good to check the "Include Audio Inputs" box under "Advanced", so Nicecast can hear you talking at all times and not just your conversation partner. However in this tutorial I'm primarily concerned with the "System Audio" dropdown option, which doesn't have any advanced options itself.
**2.The Server window**, which is where you control how Nicecast connects on a network. It has a "Built-In Server" option that allows you to broadcast from your own IP address and enables others to connect to you and hear you without involving a third party such as SDF; I have never tried this. However, I use the built-in server to test my setup, because it behaves the same way as a connection to the SDF ANONRADIO server. So while you're fiddling around you can use the built-in server, and then when it comes time to present your show you can switch to ANONRADIO, with the round radio buttons in the server pop-out drawer, controlled by little right and left buttons toward the top of the Server window.
{{http://sdf.org/tutorials/images/nicecast-server.png}}
The options in the server window should look something like those above, with your username instead of "mjt" and the password given to you for ANONRADIO instead of my blanked-out password. Of course if you don't have the ANONRADIO server in the Nicecast server drawer, you'll first want to create it by clicking "+".
**3. The effects window**
{{http://sdf.org/tutorials/images/nicecast-effects.png}}
Along with the "Gain" box at the top left (move it all the way to the right, probably, to 238%) you'll just need one effect: VoiceOver; maybe you can play with some other effects but I don't find them necessary or desirable. To add VoiceOver, click the first, top-left space in the Effects window where it says "Click here to insert effect", and choose "VoiceOver" from the dropdown "4X Effect" submenu. You can try playing with the VoiceOver effect's additional gain controls if it seems like you need to (especially after you check your archived audio file...see below).
{{http://sdf.org/tutorials/images/nicecast-crossfade.png}} {{http://sdf.org/tutorials/images/nicecast-duck.png}}
Directly on the lower left of the VoiceOver plugin, there's a tiny nonstandard button that says "EDITOR". Click it, and a window pops up, with three subsections: 1. Audio Input -- leave this alone. 2. Crossfade -- put the slider in the middle. 3. Auto Ducking -- move the slider all the way to the right, to "Off" (otherwise, constantly trying to overcome the mic's threshold is tiresome for the voice -- it's easier just to control the mic at the computer system level). Also on this window is the "Start" button for the voiceover. Go ahead and start it now, if you like. Sometimes order of operations seems to matter in Nicecast broadcasting, and sometimes it does not; a good general order seems to be: system, then Nicecast, then audio programs. That said, sometimes stopping then restarting some program or service within a program is helpful (like the VoiceOver plugin, or even clicking on the system level mic input controls to "wake it up").
**4. The archiving window**
{{http://sdf.org/tutorials/images/nicecast-archiving.png}}
This controls parameters for producing an mp3 recording of your broadcasts. This is useful for checking your levels and just making sure everything works and sounds the way you want it to. Click the "Archive" button to turn archiving on, if it's not on already. In this window you can also control some things like bitrate, channels, type, and most importantly where the archive file is saved.
===== III. Put on your headset =====
===== IV. Start your audio-generating programs =====
In this example, these are Skype and iTunes. Hopefully you heard the Skype startup sound through your headset. Play an mp3 in iTunes for a few seconds just to see that that sounds through the headset too.
You should double check your Skype preferences and under "Audio/Video" and make sure your headset, or whatever you've decided to use, is selected for everything. Mac OS X has system level audio controls, and then programs have program level audio controls, and I've found it's best to pay attention to both even if it seems like you don't need to.
===== V. Get ready to start broadcasting... =====
Nicecast should start archiving immediately if you've set that option on the Archiving window -- I save the archive on my desktop. On the Broadcast window: "Source" should be system audio..."Info" should be filled in if you want anonradio.net:8000 to read correctly..."Titles" won't register unless your source is //only// an audio player like iTunes..."Quality" is whatever you want...ignore "Share"...and "Effects" is superfluous.
{{http://sdf.org/tutorials/images/nicecast-broadcast.png}}
Click "Start Broadcast" on the Nicecast Broadcast window! The archived mp3 should show up on your desktop. Play an mp3 in iTunes, and then check to see if you can hear it and if the level meter in the Nicecast Broadcast window is moving appropriately.
{{http://sdf.org/tutorials/images/nicecast-voiceover.png}}
Make sure your VoiceOver plugin is started. Make sure your mic input is turned up at the system level in your "System Preferences &gt; Sound" window. You should hear the iTines mp3 and an echo-back of your own voice through your headset. Make sure the LeveL indicator in the Nicecast Broadcast window is active, depending on what audio is being fed to it.
Now let's try Skype. While letting iTunes play on, go to Skype, call your "Skype call testing service" contact, and do what it says (leave a message). Probably you will hear iTunes automatically turn itself down while Skype is going -- I think this is a function of Skype, and it's possible this can be changed in preferences. Yep -- under Preferences &gt; General, if you like, de-check "pause iTunes during calls".
You can try playing with other apps like video games, a movie player, etc etc, and locally outputting the sound. Nicecast should capture it all and send it out, along with your voice-over!
===== VI. At some point, stop broadcast =====
You should have an archive of your broadcast in the form of an mp3 file waiting for you on your desktop or wherever you chose to save it. When you're ready to broadcast during your time slot on SDF ANONRADIO, then in the Nicecast server window, select "ANONRADIO" rather than "Built-In Server". If you want, you can turn archiving off before you broadcast remotely (especially as your show will be archived at anonradio.net/archive).
$Id: anonradio-nicecast.html,v 1.1 2015/08/06 14:40:28 smj Exp $

View File

@ -0,0 +1,95 @@
====== ((( o ))) | | | ---===--- ANONRADIO ======
ANONRADIO (formerly SDF Radio) is a streaming "internet radio station".
To see the program schedule, visit http://anonradio.net
===== To Listen to ANONRADIO =====
The easiest way to start listening is to visit http://anonradio.net/listen in your web browser, and launch the web player.
Alternatively, you can use your favorite media player to open the live stream at "http://anonradio.net:8000/anonradio"
Don't know how to do that? Fear not! Below are instructions for how to do that with some popular media players.
==== On Windows ====
=== VLC media player (http://videolan.org) ===
- File -&gt; Open Network
- enter: http://anonradio.net:8000/anonradio
To get around occasional drops in the stream which may occur when DJs/programs are changing, select Playback -&gt; Repeat One.
==== On MacOSX ====
* Click on the M3U play icon on http://anonradio.net, or use http://anonradio.net:8000/anonradio.m3u
==== On Linux or BSD ====
=== VLC media player (http://videolan.org) ===
Using the GUI:
- Go to Media → Open Network Stream
- Enter the address http://anonradio.net:8000/anonradio and press the **Play** button
Using the ncurses interface ("nvlc"):
- Press P to show the playlist screen.
- Press A to add an item to the playlist
- Enter http://anonradio.net:8000/anonradio in the "Open:" field and press Enter
Or, if you start VLC from the command line, you can specify the stream to open:
$ vlc "http://anonradio.net:8000/anonradio"
=== mplayer (https://www.mplayerhq.hu) ===
At your shell, type:
$ mplayer http://anonradio.net:8000/anonradio
=== mpv (http://mpv.io) ===
This one's a little different — wait, no it's not. At your shell, type:
$ mpv "http://anonradio.net:8000/anonradio"
=== ncmpcpp (http://rybczak.net/ncmpcpp/) ===
- In "ncmpcpp", press 2 to access playlists
- Press a to add a station.
- Add "http://anonradio.net:8000/anonradio" and press enter.
=== SoX ([[http://sox.sourceforge.net/|http://sox.sourceforge.net]]) ===
At the shell:
$ play -t mp3 http://anonradio.net:8000/anonradio.m3u
note: the "play" command is part of the "SoX" program.
To make it more useful for ANONRADIO use, it's helpful to put it into a shell script like so:
"#!/bin/sh -e
# anonradio - streams SDF ANONradio via sox(1);
# retries automatically if stream dropped
if [ -x $(which sox) ]; then
trap 'printf "\n anonradio stream terminated... \n" &amp;&amp; exit 0' 2
clear
while [ 1 ]
do clear
printf "\nSDF ANONradio - http://anonradio.net - ^C to cancel\n"
sox -V0 -t mp3 http://anonradio.net:8000/anonradio.m3u -d
sleep 5
done
else
echo 'sox(1) not found or not executable - exiting...'
exit 1
fi
exit 0"
The above script will automatically reconnect to the anonradio stream if it gets dropped due to a DJ change or network abberation. Stream is terminated using the CNTL+C keys. See the "sox(1)" manpage for the full list of options.
$Id: anonradio.html,v 1.17 2019/01/15 05:34:50 jgw Exp $

View File

@ -0,0 +1,127 @@
====== ASCII Gaming on SDF... ======
Who says you need to shell out $500US for a video card to play a decent game?
==== Contents ====
- [[#intro|Introduction]]
- [[#tips|General Tips]]
- [[#category|Games by Category]]
* [[#adventure|Text Adventure]]
* [[#rpg|RPG / Dungeon]]
* [[#puzzle|Puzzle]]
* [[#arcade|Arcade / Action]]
* [[#board|Board / Card games]]
* [[#animation|ASCII Animation]]
* [[#text|Jokes / Random Text]]
- [[#comgames|Dopewars, Mazewars, and Netris]]
- [[#credits|Credits]]
----
===== [[|Introduction]] =====
Long before today's multi-million color pallets and 3d rendering engines there was one color and a TTY.
That is not to say, however, that text games are "old" or "outdated" or that games that were created decades ago cannot still be fun. Not only are some of the older ASCII games still incredibly playable and enjoyable today but there are many ASCII games still in active development with new ones being created all the time.
SDF has a good selection of text based games for your enjoyment with many genres from which to choose. Within those categories you'll also find a diverse selection of games. Maybe you are looking for a quick hit of space invaders while your code compiles. Perhaps you'd like to start a game of nethack which could take you many session over many months to complete. If you'd like to sit and play a game of tetris by yourself SDF can accommodate you but if you'd rather interact with other SDFers in a game of mazewar or netris those options are also available. No matter what your preferences are, no matter what your current mood is, odds are good that SDF will have something for you.
===== [[|General Tips]] =====
All games are started by typing the game's name at the command line on the appropriate system. You may be able to get information on command line options and game play by typing //man gamename// on SDF or //help gamename// on twenex.org(TOPS-20).
Please keep in mind that many of these games utilize the "vi" keys for directional movement.
k (up)
h (left) l (right)
j (down)
Also, most games contain some sort of in game help. To get the most out of your ASCII gaming experience, it is advised that you consult this during your first time playing a particular game. This is especially useful for text adventure and RPG/Dungeon games as the author has frequently written a back-story which is typically both entertaining and useful during game play.
Did you play a game on SDF and loved it? Hated it? Then use the //"game-review"// command at the SDF shell to submit a review for [[http://ascii-games.org|ascii-games.org]]. Your reviews will help others find a game that suits their gaming tastes.
===== [[|Games by Category]] =====
Here is a rough categorization of the games available on SDF and SDF's TOPS-20 system. A complete list of games on SDF can always be found by typing //"games"// at the shell prompt. TOPS-20 games can be listed by typing //"help games"// on twenex.org. Please visit [[http://ascii-games.org|ascii-games.org]] for user submitted reviews of these games.
* ==== [[|Text Adventure]] ====Text adventure games are interactive fiction adventures where the user must navigate the game based on the text based description of the player's in-game surroundings. The lack of graphics helps to keep text based adventure games feeling fresh even decades after their initial release.
* [[telnet://mud.sdf.org:4000|SDFmud]] - SDFmud makes its triumphant return!
* phantasia - An interterminal fantasy game. Gain experience killing monsters and other players!
* advent - 430 pt. Colossal Cave (Version II). (TOPS-20)
* dinkum - Adventure in Australia.
* tess - Beyond the tesseract, an abstract adventure.
* crime -A CRiME based adventure game. (TOPS-20)
* haunt - Can you solve the mystery of Chez Moose? BONG! (TOPS-20)
* mdl105 - Write your own adventure games! (TOPS-20)
* zork - The classic underground maze/puzzle. (TOPS-20)
* ==== [[|RPG / Dungeon]] ====These games involve navigating some sort of dungeon or maze. Unlike text adventures, these games often (though not always) contain some sort of ASCII-graphical interface. These games are usually a bit more free-flowing than their text-based counterparts as well. Many of these games allow multiplayer interactive play. These games are marked with an (M).
* dopewars - multi-user virtual urban life. (M)[[index.cgi?tutorials/ascii-gaming#comgames|[see note below]]]
* mdg - John Gonnerman's MultiUser Dungeon Game. (M)
* nethack - Can you find the Amulet of Yendor and survive?
* rogue - Before there was nethack, there was rogue.
* [[http://thxmoo.org|thxmoo]] - SDF's very own MOO!(M)
* hunt - multi-user maze/shoot.
* mazewar - A System V UNIX version of the classic. (M)[[index.cgi?tutorials/ascii-gaming#comgames|[see note below]]]
* cave - Multiplayer Dungeon Game. (TOPS-20)(M)
* ==== [[|Puzzle]] ====Puzzle games rely on the player's critical thinking and problem solving skills to complete.
* greed - How far will your greed take you?
* c4 - Connect Four.
* life - jpf's life simulator for SDF.
* othello - Strategy game similar to GO.
* tetris - A timed 2 dimensional puzzle
* netris - Head to Head tetris.(M)[[index.cgi?tutorials/ascii-gaming#comgames|[see note below]]]
* tttt - tic-tac-toc-toe with wraparound edges.
* robots - The robots are programmed to get you.
* torus - Faster, more intelligent robots are programmed to get you.
* zombies - The zombies are programmed to get you.
* manhunt - Can you escape from the LUGIMEN cops of ARCTURUS IV? (TOPS-20)
* wumpus - Can you slay the suckerfooted WUMPUS? (TOPS-20)
* sst - Super Star Trek. Can you protect the Federation from total annihilation?
* ==== [[|Arcade / Action]] ====Arcade type games involve real-time interaction. You'll have to dodge, duck, dip, dive and dodge your way to victory in these games.
* atc - Air Traffic Controller, not really arcade, but real real-time!
* invaders - Space Invaders.
* lander - Can you land the lunar module (LEM)?
* ski - Dodge trees and a snowman while you ski.
* snake - Collect $ while avoiding a ferocious snake.
* worm - You are a worm that eats numbers and becomes unwieldy.
* moon - Jochen Voss's moon-buggy.
* packman - Very cool ASCII packman for true VT100. (TOPS-20)
* ==== [[|Board / Card Games]] ====Just what the title says.
* bj - Black Jack
* knight - Knight's tour matrix.
* bkg - CMU's Multi-player/spectator Backgammon(TOPS-20)
* checkers - Checkers, you vs. computer. (TOPS-20)
* gin - The card game GIN. (TOPS-20)
* tech - TECH Chess. (TOPS-20)
* tech2 - TECH2 Chess. (TOPS-20)
* ==== [[|ASCII Animation]] ====Short ASCII movies.
* aybabtu - sdf's ALL YOUR BASE ARE BELONG TO US!
* linux - Linux massacre simulator.
* suicide - Animated suicide trio.
* ==== [[|Jokes / Random Text]] ====These "games" output random jokes, one-liners, quotes, or other information. Please be advised that some of these might output text that some would consider offensive. These programs have been labeled (R).
* oneliner - SDF one-liners .. since 1987
* smj - Display quips and commentary by your sysadmin.
* fortune - Print a random, hopefully interesting, adage.
* cookie - Fortune Cookies. (TOPS-20)
* crude - Random text Generator. (TOPS-20)(R)
* doit - Subject 'do it' Adverb. (TOPS-20)(R)
* fortune - yet another fortune cookie. (TOPS-20)
* kanji - Not quite kanji, but MRC thinks so.
* limerick - Very lewd limericks. (TOPS-20)(R)
* limrck - More lewd limericks. (TOPS-20)(R)
* moon - Phase of the moon. (TOPS-20)
* tingle - Nearly lewd, but requires imagination. (TOPS-20)
* today - A history lesson. (TOPS-20)
===== [[|Dopewars, Mazewars, and Netris]] =====
A special note for Dopewars, Mazewars, and Netris:
These games are fairly popular. They represent a good way to have fun and interact with fellow SDFers. Though they can be started from the command line, the best way to start a multiplayer game of dopewars, mazewars, or netris is to hop into SDF's [[http://sdf.lonestar.org/index.cgi?tutorials/comnotirc|COMMODE]] by typing //com// at the shell. You can then find other's to play with and launch those games directly from com.
===== [[|Credits]] =====
Much information contained herein was gleaned from //"games"//, //"help games"//(TOPS-20), and [[http://ascii-games.org|ascii-games.org]]. Much thanks to the maintainer(s) of those resources.
$Id: ascii-gaming.html,v 1.10 2012/05/28 23:20:43 credmon Exp $

26
dump/att605.html.docuwiki Normal file
View File

@ -0,0 +1,26 @@
[[https://sdf.org/tutorials/images/att605-4.jpg|{{https://sdf.org/tutorials/images/att605-4.jpg?30%}}]]
**//The SDF Travelling AT&amp;T 605 UNIX Terminal//**
=== What is it? ===
This is a former terminal used on the AT&amp;T 3B2/500 (retired 1998). It has been modified to work as a stand alone computer using a Raspberry Pi Zero W. Just give it a WIFI/hotspot and coordinate with SDF to use it at a vintage computer festival and help spread awareness of SDF's past as well as what we're doing today.
=== How do I get it? ===
The terminal can be borrowed for up to 2 weeks. It is shipped in a double box with signage, an ipod/headphones (for the NPR story) and an assortment of SDF stickers and CDs to give away. To reserve the terminal for use at your event, contact 'membership' and provide full details. Please be sure to give enough lead time, preferrably 2 weeks prior to your event.
=== I wanna use it! Where will the SDF Travelling AT&amp;T 605 UNIX Terminal be next? ===
* Mar 23-24, 2019 - Seattle, WA - Vintage Computer Festival Pacific Northwest //**COMPLETED**//
* May 3-5, 2019 - Wall, NJ - Vintage Computer Festival East //**COMPLETED**//
* Jul 10, 2019 - Seattle, NJ - USENIX UNIX50th @ Living Computers //**COMPLETED**//
* Aug 3-4, 2019 - Mountainview, CA - Vintage Computer Festival West //**COMPLETED**//
* Sep 14-15, 2019 - Elmhurst, Il - Vintage Computer Festival Midwest //**COMPLETED**//
* Nov 6, 2019 - Manhattan, NY - Suspenders NYC - Install Fest //**COMPLETED**//
* Dec 4, 2019 - Brooklyn, NY - NYC*BUG Holiday Party at Boat Bar //**COMPLETED**//
* Mar 19-22, 2020 - Tokyo, Japan - AsiaBSDcon - Tokyo University**CANCELLED**=== Technical Information ===**Configuration / New setup:**\\ Login as the user 'pi' with the randomly generated password and run 'sudo raspi-config'. This will allow you to setup the network once you're on site. Enter your SSID and passphrase through this dialog**Usage:**\\ While featuring raspian isn't really the point, you could use the terminal to feature local programs. If you login as user 'menu' password 'menu' and you have a network, you'll be connected to the Living Computer Museum's TTY service which will then allow you to connect to several vintage machines. Logging in as 'sdf' will take you to the old AT&amp;T 3B2/500 when it is running in Seattle, WA (can be arranged).It also features sdfer Seth Morabito's AT&amp;T 3B2/400 emulator which is a bit of a surreal experience - just login as '3b2' to spin up a virtual historical SDF.The terminal does not have a battery installed (due to leakage) so when you turn it on, it will default to 1200 7E1 with function key labels on. You'll want to set it to 9600 8N1 with labels off.[[https://sdf.org/tutorials/images/att605-6.jpg|{{https://sdf.org/tutorials/images/att605-6.jpg?30%}}]]**//The SDF Travelling AT&amp;T 605 UNIX Terminal Setup Screen//////**=== Weight and Dimensions of the shipping box ===
* 40 lbs
* 20 x 20 x 24 in
* Terminal goes into the inner box. There is a piece of foam to craddle the back
* The keyboard can be wrapped up outside the box $Id: att605.html,v 1.9 2020/02/26 15:32:52 smj Exp $

View File

@ -0,0 +1,118 @@
===== BASIC =====
=== The basics of BASIC ===
BASIC, which stands for **B**eginners **A**ll-Purpose **S**ymbolic **I**nstruction **C**ode is a programming language which was created at Dartmouth University by John Kemeny and Thomas Kurtz in the early 1960's. BASIC's authors intended to create a programming language and environment which would be useful to people who's primary interest was something other than computer programming. It was intended to be used by average users, scientists, and programming students alike. BASIC was instantly popular among the students and faculty of Dartmouth, and it saw rapid adoption on other systems. When the microcomputer revolution started to take hold in the 1970's and 1980's, BASIC was the default user environment of choice. As a result, many of today's programmers cut their teeth on BASIC. This tutorial will help you get started with this wonderful little language. BASIC remains a very easy to learn language, and it is great for writing small programs. Best of all, a lot of the concepts in BASIC transfer to other languages, so this can serve as a great jumping off point for your programming career!
One of the difficulties in learning BASIC lies in the wide array of BASIC compilers and interpreters that are currently in circulation. Each one of these programs comes with their own nuances and extensions to the BASIC programming language. The good news is that there is a lot of commonality between the various versions of BASIC, and once you've gained familiarity with one you can move to another pretty quickly. Best of all, there is a common thread which runs through all the various BASICs, and that is where we will begin. We'll start with a minimal subset of the language, one which will get you up and running with all the interpreters available on SDF.
Let's start with a simple working example. A classic one which children the world over have typed into computers since the dawn of the 80's!
10 PRINT "HELLO"
20 GOTO 10
If this is run through a BASIC interpreter, it will have the following output:
HELLO
HELLO
HELLO
HELLO
.... and so on off into infinity
In fact, why don't we try this out in one of our several BASIC interpreters! Go ahead and fire up bwbasic. To do this, just type "bwbasic" at the sdf prompt. Type in the program listed above, and then type RUN and press enter. Once you've been greeted enough times, press Ctrl-C to halt the program. The hole session should look like this:
######## ## ## ## ## ### ######## ######## ########
## ## ## ## ## ## ## ## ## ## ## ## ##
## ## #### ## ## ## ## ## ## ## ## ##
######## ## ## ## ## ## ## ## ###### ########
## ## ## ## ## ## ######### ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ##
######## ## ### ### ## ## ## ######## ## ##
######## ### ###### #### ######
## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ##
######## ## ## ###### ## ##
## ## ######### ## ## ##
## ## ## ## ## ## ## ## ##
######## ## ## ###### #### ######
Bywater BASIC Interpreter, version 3.00
Copyright (c) 1993, Ted A. Campbell
Copyright (c) 1995-1997, Jon B. Volkoff
Copyright (c) 2014-2015, Howard Wulf, AF5NE
bwBASIC: 10 PRINT "HELLO"
bwBASIC: 20 GOTO 10
bwBASIC: RUN
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
Program interrupted at line 10
bwBASIC:
To exit bwbasic, just type "quit" and press enter.
=== Structure of BASIC Lines of Code ===
Ok, so let's unpack what we just did a little bit. The basic layout of a BASIC statement works like this:
LINE_NUMBER COMMAND PARAMETERS
Each of these parts serves a specific purpose.
* LINE_NUMBER - Present in most BASICS. This serves as a label for the line so you can refer to it later, and in some BASICs it also serves as a method of editing lines. (more on this later!)
* COMMAND - This is what you want your program to do. There are lots of these, we'll discuss them in detail later.
* PARAMETERS - Most commands require some additional information. That's what this one is about.
So now with that in mind, let's take a look at our happy little program! The first line
10 PRINT "HELLO"
is line number 10. The command that we are using is "PRINT", and the parameter is "HELLO". PRINT puts information on the screen, and "HELLO" is that something we are putting on the screen. Pretty simple, right?
Now, what about the next line?
20 GOTO 10
GOTO is a command which tells them computer what line to execute next. Normally, the computer will just step through the lines of the program in order, but when it hits a GOTO, that's your chance to send it somewhere else. Here, we are sending it back to line 10. This causes it to print out "HELLO" again, then it hits line 20 again, and then it goes back to 10. This will go on and on forever, or until someone stops the program. Computers are very patient, so you can run this to your heart's content!
=== The BASIC Line Editor ===
Before we go any further with the language, we should explore what's going on with those line numbers. The answer lies in BASIC's origins. Originally, BASIC was run on a GE-235 running Dartmouth's Time Sharing System. The primary mode of interface was a teletype printer (this was the 1960's after all!) so everything was constantly being typed out to paper. This meant that modern text editing just wasn't available to BASIC programmers. To combat this, Kurtz and Kemeny implemented a line based editing scheme. The line numbers were the key to this.
First and foremost, these line numbers provide a guide for sequencing the program. The computer sorts them into increasing order. They need not be consecutive, and traditionally BASIC programmers would count by 10's or by 100's. The reason for this is that you could go back and insert new lines of code in between lines of code. Imagine, for instance, that you had entered our little program, but then decided you wanted a second line of output that said "GOODBYE". You could type the whole thing over again, or you could just type the following:
15 PRINT "GOODBYE"
Now, we can take a look at what the computer thinks the program is by using the LIST command:
LIST
10 PRINT "HELLO"
15 PRINT "GOODBYE"
20 GOTO 10
You can also use the line number to change the lines:
15 PRINT ":-D"
Or you can delete lines all together
15
So in short, these line numbers are both your labels in your program, and they are also a means to edit your program. Of course, I should mention that not all BASIC interpreters support this sort of direct editing. In those cases, you'll want to edit your program in a standard text editor (like ed!) [ok, or vi or emacs]. But for that old-school feel, you'll want to use line number editing.
=== Available BASIC Interpreters at SDF ===
* bwbasic
* yabasic
* brandy
* .. //This is exactly how to use BASIC at SDF with a plethora of fun and interesting programming examples just for you!//$Id: basic-language.html,v 1.4 2016/08/11 02:11:08 pngwen Exp $

View File

@ -0,0 +1,111 @@
====== Basic Programs ======
A collection of basic programs for running on new and old hardware. Feel free to add your own programs and platforms.
* [[#TOPS-20|TOPS-20 Programs]]
* [[#B10-MULTI|MULTI]]
* [[#CDC6500|CDC6500 Programs]]
* [[#6500-MULTI|MULTI]]
* [[#6500-JDC|Jeferson Disk Cipher]]
===== TOPS-20 Programs =====
The following programs run on TOPS-20 Basic (BASIC-10)
==== Multi ====
This is a simple multiplication table, altering line 5's data statement lets you change the length of the table. Give it a try, and put some crazy numbers in to see how it goes!
"
00001 REM Multi by epl692
00002 REM Change line 5 to alter the length of the table, try 24, or even 240.
00005 DATA 12
00100 READ T
00110 A$ = "#### "
00120 FOR X=1 TO T
00130 FOR Y=1 TO 12
00140 PRINT USING A$,X*Y;
00150 IF Y=12 THEN 00160 ELSE 00170
00160 PRINT ""
00170 REM NOTHING HERE
00180 NEXT Y
00190 NEXT X
00200 END
"
Here is a example of the output from a run
MULTI.B20 Sunday, October 16, 2016 08:58:02 1 2 3 4 5 6 7 8 9 10 11 12 2 4 6 8 10 12 14 16 18 20 22 24 3 6 9 12 15 18 21 24 27 30 33 36 4 8 12 16 20 24 28 32 36 40 44 48 5 10 15 20 25 30 35 40 45 50 55 60 6 12 18 24 30 36 42 48 54 60 66 72 7 14 21 28 35 42 49 56 63 70 77 84 8 16 24 32 40 48 56 64 72 80 88 96 9 18 27 36 45 54 63 72 81 90 99 108 10 20 30 40 50 60 70 80 90 100 110 120 11 22 33 44 55 66 77 88 99 110 121 132 12 24 36 48 60 72 84 96 108 120 132 144 Compile time: 0.005 secs Run time: 0.026 secs Elapsed time: 0:00:00
===== CDC6500 Programs =====
The following programs run on CDC6500 Basic
==== Multi ====
This is a simple multiplication table, altering line 5's data statement lets you change the length of the table. Give it a try, and put some crazy numbers in to see how it goes!
"
1 REM Multi by epl692
2 REM Change line 5 to alter the length of the table, try 24, or even 240.
5 DATA 12
100 READ T
110 A$ = "#### "
120 FOR X=1 TO T
130 FOR Y=1 TO 12
140 PRINT USING A$,X*Y;
150 IF Y=12 THEN 160 ELSE 170
160 PRINT ""
170 REM NOTHING HERE
180 NEXT Y
190 NEXT X
200 END
"
Here is a example of the output from a run
17/01/06. 16.25.32. PROGRAM MULTI 1 2 3 4 5 6 7 8 9 10 11 12 2 4 6 8 10 12 14 16 18 20 22 24 3 6 9 12 15 18 21 24 27 30 33 36 4 8 12 16 20 24 28 32 36 40 44 48 5 10 15 20 25 30 35 40 45 50 55 60 6 12 18 24 30 36 42 48 54 60 66 72 7 14 21 28 35 42 49 56 63 70 77 84 8 16 24 32 40 48 56 64 72 80 88 96 9 18 27 36 45 54 63 72 81 90 99 108 10 20 30 40 50 60 70 80 90 100 110 120 11 22 33 44 55 66 77 88 99 110 121 132 12 24 36 48 60 72 84 96 108 120 132 144 SRU 0.366 UNTS. RUN COMPLETE.
==== Jefferson Disk Cipher ====
Some Simple Encryption by tfurrows
"
001 REM Jefferson Disk Cipher, tfurrows@sdf.org
100 REM Setup the disks
101
104 DIM A$(16)
105 A$(1)="PDN HCAUBKQXEOZVRMGYJSFTWIL"
106 A$(2)="ECSGFONUHMR YXDZPTLQAJBWVKI"
107 A$(3)="TYFPZJS UNBWLXQREACDIOHMVKG"
108 A$(4)="XHTNOZSFUJKREDQAC MGPBLYWIV"
109 A$(5)="CPOMQZA TRFBGIWDLVHESJUKNXY"
110 A$(6)="SXCOFRKJZVEG BAPWDNIHLQMUTY"
111 A$(7)="H CLKIOZFSUPGREDBNVTYMAJWQX"
112 A$(8)="NTAJULBWZYCPDSR HVMIFGKOXEQ"
113 A$(9)="MHWNPZVLXCYJRKUSOEFADI TBGQ"
114 A$(10)="UVEZHPSDNAYLJQTXWFBG CKIROM"
115 A$(11)="ICNTHWZE LRMSQFGDAKXYJBOVUP"
116 A$(12)="SEMB QTFLPIOZCUKYVRDWXJHGNA"
117 A$(13)="RFTJWUZV HIYQOSLCMEXGDKPNAB"
118 A$(14)="EM FNZPGUQROYVXCBAHTISWDLKJ"
119 A$(15)="QPSGZDLNCIOUJK EXRAYHWFMTVB"
120 A$(16)="GSFYRQBDI ALKXPVUTZJONEWCHM"
121
150 PRINT "Enter message to encode/decode"
151 INPUT M$
152
200 REM Loop through message and set the jefferson disks
205
210 FOR I = 1 to LEN(M$)
215 C=C+1
220 IF C&gt;16 THEN C=1
225 L = POS(A$(C),SUBSTR(M$,I,1),1)
230 IF L &lt; LEN(A$(C)) THEN PRINT SUBSTR(A$(C),L+1,LEN(A$(C))-L);
235 IF L &gt; 1 THEN PRINT SUBSTR(A$(C),1,L) ELSE PRINT SUBSTR(A$(C),1,1)
240 NEXT i
"
Here is a example of the output from a run
17/01/06. 16.50.11. PROGRAM JDC ENTER MESSAGE TO ENCODE/DECODE ? THE CAKE IS A LIE WILPDN HCAUBKQXEOZVRMGYJSFT MR YXDZPTLQAJBWVKIECSGFONUH ACDIOHMVKGTYFPZJS UNBWLXQRE MGPBLYWIVXHTNOZSFUJKREDQAC POMQZA TRFBGIWDLVHESJUKNXYC PWDNIHLQMUTYSXCOFRKJZVEG BA IOZFSUPGREDBNVTYMAJWQXH CLK QNTAJULBWZYCPDSR HVMIFGKOXE TBGQMHWNPZVLXCYJRKUSOEFADI ROMUVEZHPSDNAYLJQTXWFBG CKI QFGDAKXYJBOVUPICNTHWZE LRMS QTFLPIOZCUKYVRDWXJHGNASEMB BRFTJWUZV HIYQOSLCMEXGDKPNA FNZPGUQROYVXCBAHTISWDLKJEM NCIOUJK EXRAYHWFMTVBQPSGZDL ALKXPVUTZJONEWCHMGSFYRQBDI OZVRMGYJSFTWILPDN HCAUBKQXE SRU 0.308 UNTS. RUN COMPLETE. Try running the program with FURCYBLXIKMBNMDDX. $Id: basic_programs.html,v 1.5 2017/01/07 01:00:12 epl692 Exp $

View File

@ -0,0 +1,161 @@
====== bboard ======
The "bboard" is a threaded multi discussion bulletin board. It goes back when the original SDF was just a BBS. You may think of it as a corkboard at a community center where members post notes with thumb tacks. It is, along with commode, one of the best ways to get help and news from SDF-EU. Voting of new features and changes on SDF-EU policies also take place at the bboard (ARPA membership or above required)
===== [[|Some relevant bboards]] =====
* To ask for help, use **"&lt;HELPDESK&gt;"** to have your query answered by another user
* All system notices are posted on **"&lt;ANNOUNCE&gt;"**
* Current discussions about SDF-EU happen on **"&lt;SDFEU&gt;"**
* You can make requests for new software and discuss account issues at **"&lt;REQUESTS&gt;"**
* **"&lt;ARPA&gt;"** and **"&lt;META&gt;"** boards are used for ARPA and MetaARPA related questions.
* Member services (such as VPN or VOIP) have their own board for questions and support.
===== [[|Getting around]] =====
==== [[|Listing boards]] ====
Type "bboard" on your shell. You will be presented with a list of current bboards (Boards Listing), sorted by most recent activity.
S D F - 1 Bulletin Board
================================================================================
[BBOARD] [POSTS] [TOPIC]
================================================================================
SDFEU [0066] SDF-EU User discussions
META [0022] No Description
HELPDESK [0690] Users Helping Users
NETWORKING [0008] No Description
ARPA [0148] ARPA members helping ARPA members
REQUESTS [0534] Software Updates and Installs for SDF and SDF-EU
[ SCROLL (F)ORWARD, (B)ACKWARD - (G)OTO or (Q)UIT ]
To navigate the boards listings, use "F" (Forward) and "B" (Backward) keys to go up and down. When you reach the end of the list (or you press "Q"), you will enter in Command Mode, and a prompt will be presented to you. Every time you run "bboard" you are placed in the **"&lt;GENERAL&gt;"** board by default, hence the prompt "&lt;GENERAL&gt; Command: ".
==== [[|Browsing messages]] ====
Say you want to review the **"&lt;SDFEU&gt;"** bboard for news about SDF-EU. On the Command Mode, type "G" (GOTO) followed of the name of the bboard (in this case "G → SDFEU") You will enter in Posts Listing, with all entries at the **"&lt;SDFEU&gt;"** bboard sorted by activity (most recent first)
================================================================================
[ID] [DATE] [AUTHOR] [REP] [SUBJECT]
================================================================================
[1] 03-May-12 [john] [0] New feature: SDF-EU intertubes
--------------------------------------------------------------------------------
[2] 02-May-12 [jane] [0] SSH Port Forwarding question
02-May-12 [jim] [1]
02-May-12 [james] [2]
--------------------------------------------------------------------------------
[3] 02-May-12 [jess] [0] Meetup at EuroBSDcon
02-May-12 [joshua] [1]
02-May-12 [jack] [2]
[ SCROLL (F)ORWARD, (B)ACKWARD - (T)YPE, (R)EPLY or (Q)UIT ]
Like in the Boards Listing, you can navigate the Posts Listing with keys "F" and "B". Pressing "Q" will return you to Command Mode.
==== [[|Read a message]] ====
Post #3 “Meetup at EuroBSCcon” caught your attention. To read it, press "T" (TYPE), followed by the post number (in this case "T → 3") This will put you on Reading Mode at the first message from the thread. You could also start reading the thread from a specific message; simply enter "T → 3.2" if you want to start reading the thread #3 from the second reply.
TACKER: jess (Jessica G. Doe)
SUBJECT: Meetup at EuroBSDcon
DATE: 02-May-12 21:44:05
HOST: odin
Anybody wanting to organize a meetup @EuroBSDcon?
&lt;SDF.3.0&gt;(3)[ &lt;ENTER&gt; to follow thread, (R)EPLY or (Q)UIT ]
==== [[|Post a message/reply]] ====
To post a new thread on the bboard you are currently in, press "P" (POST) and enter a subject. To publicly reply to a post, press "R" (REPLY) If you are in Reading Mode, you will reply to the thread you are currently in. If you are in Posts Listing, you will be asked for the post number you want to reply. Either way you will end up in the pico editor <sup>[[#fn__1|]]</sup>. Write down your reply and press "CTRL-x" to finish you post.
^ New Post ^
| &lt;SDFEU.1&gt; Command: POST Subject: Timezone? You have written: ----------------------------------------------------------- In which timezone(s) SDF-EU servers are? This BULLETIN contains 40 characters in 6 words of 2 lines. ----------------------------------------------------------- POST your BULLETIN? (y/n) % Rebuilding symbol table for BBOARD:&lt;SDFEU&gt; [QUEUED] Would you like to add a READERS POLL? (y/n) |
^ Reply ^
| &lt;SDFEU.1&gt; Command: REPLY (A NUMBER) 3 REPLY to "Meetup at EuroBSDcon" ? (y/n) You have replied: ----------------------------------------------------------- I would love to! This BULLETIN contains 16 characters in 4 words of 2 lines. ----------------------------------------------------------- POST your REPLY? (y/n) |
==== [[|...and much more]] ====
Now that you are confortable with the bboard, try exploring additional features:
* Post ("P"), reply ("R") and depost ("D") a message (use the **"&lt;TEST&gt;"** board for that)
* Review current voting polls ("V") or propose your own.
* Explore the archives ("A") and acquire ancient wisdom.
* See how many people are reading the bboard ("W") and get amazed by their idle times.
* Read the the intro ("?") and the list of commands ("H").
* Check the man page (type "man bboard" at your shell) for a complete reference of settings at startup.
===== [[|Command Reference]] =====
^ "(?)" | What is the BBOARD? |
^ "(L)IST" | List bulletin summaries |
^ "(G)OTO" | View another BBOARD (“GOTO” lists boards) |
^ "(T)YPE" | Displays the selected bulletin |
^ "(S)EARCH" | SEARCH the entire BBOARD on a KEYWORD |
^ "(N)EW SCAN" | SCAN the current BBOARD for NEW messages |
^ "(n)EW SCAN" | SCAN all BBOARDs for NEW messages |
^ "(V)IEW POLLS" | SCAN the entire BBOARD for READER POLLS |
^ "(F)ORWARD" | View the next thread within the current BBOARD |
^ "(B)ACKWARD" | View the previous thread within the current BBOARD |
^ "(P)OST" | POST a new bulletin (bulletins live 30 days) |
^ "(D)EPOST" | DEPOST a bulletin you have posted |
^ "(R)EPLY" | Respond to a bulletin |
^ "(M)KBOARD" | Create a new BBOARD |
^ "(K)ILL" | Toggle a BBOARD to and from your KILL list |
^ "(A)RCHIVE" | Enter/Exit the BBOARD archives |
^ "(C)OLORS" | Enable/disable colors |
^ "(W)HO" | Who is reading the bboard |
^ "(I)GNORE" | Manage your user ignore list |
^ "(Q)UIT" | QUIT the BBOARD |
\\ <sup>[[#fnt__1|]]</sup> If you want to change your default editor, check the "bboard" man page via the **man bboard** command at the shell prompt. \\ \\
===== [[|Customizing bboard(1)]] =====
Many SDF users find the lack of word-wrap and spell-checking when posting in bboard(1) frustrating. If a Vi editor is acceptable, some rudimentary auto-wrapping and spell-checking can be accomplished in //bboard(1)// with the following configuration files in your HOME (~$USER/) directory:
> "
#** ~$USER/.exrc**
" set auto-wrap width:"
set textwidth=78
" set RH margin guide:"
set guidewidth=79
" set elvis spellcheck stuff:"
set spell
set spelldict=/usr/share/dict/words
set spellautoload
#** ~$USER/.bboardrc**
# set editor to vi (will use elvis(1) editor):
EDITOR=vi
"
Once these files are in place your bboard(1) post editing environment will be elvis(1) based (a Vi editor clone; see **man elvis**) and should display a highlighted right-hand margin guide at 79 characters over, with text wrapping at 78 characters over. Note that these //~/.exrc// settings may adversely affect other Vi-style editors like nvi(1) or vim(1).
==== Running Spell-check on a bboard(1) Post: ====
Words deemed misspelled by the elvis(1) editor should appear in a different color. To spell-check the entire post, first move to position 1,1 with //'1G'// (or use the arrow keys, or //'h,j,k,l'// keys to navigate) then use //'gs'// to move to the first misspelled word. If spelling suggestions are available they'll appear numbered at the bottom of editing screen; to select, use //'#gs'//, where "#" is suggested word number. If no spelling suggestions are available, look the word up elsewhere, use //'cw'+[corrected word]+ESC// to correct, then //'gs'// to move to next misspelled word.
When finished editing your bboard(1) post use //'ZZ'// to quit. If you wish to cancel your post use //':q!'// to quit without saving.
==== Learning to use Vi-style Editors: ====
If you've never used a Vi-style editor you may wish to run the //vilearn(1)// command within your SDF shell session to get some practice. The Vi editor is //*modal*// - entering a Vi command such as //'i'// puts the editor in 'input' mode; pressing the //Esc// key puts the editor it back in 'command' mode. Within Vi, typing ':viusage' should display a summary of most Vi commands.
A free WikiBooks resource: [[https://en.wikibooks.org/wiki/Learning_the_vi_Editor|Learning the Vi Editor]]
If you decide to practice with elvis(1), the //':help'// command should provide an info(1)-like documentation environment (use //':q'// to close it). Keep in mind that this :help documentation is not available within bboard(1) as elvis(1) is run in a restricted command mode. More extensive elvis(1) documentation is on the main SDF hosts at ///usr/pkg/share/doc/elvis/elvis.html// .
==== If you would rather use a pico-like editor with a bit more power: ====
If you want to use an editor with in-program help and simple interface like the default //pico//, but slightly more powerful than the default **bboard** editor, you may wish to instead set your editor to //nano//, which is the default editor integrated into the Alpine mail program. It's the same as //pico//, but has additional commands, like regex searching.
To do this, instead of setting up your //.bboardrc// as above, set it as follows (you can do this with //nano ~/.bboardrc//!):
> "
#** ~$USER/.bboardrc**
# set editor to nano:
EDITOR=nano
"
//$Id: bboard-tutorial.html,v 1.12 2016/12/09 20:09:00 peteyboy Exp $//

View File

@ -0,0 +1,56 @@
====== Building a website on SDF ======
----
===== Contents =====
* [[#intro|Introduction]]
* [[#getting_started|Getting Started]]
* [[#firstpage|Your First Page!]]
* [[#problems|Problems]]
* [[#diagnose|Diagnose]]
\\
===== Introduction =====
Creating your own websites can be fun and SDF gives webspace to all its validated users, so the moment you become validated you can begin creating your own websites straight away.
In this tutorial when text looks like "this" this means it's a command you can run in your shell, once you've logged into SDF.
==== Getting Started ====
* "mkhomepg" - This command needs to be executed before you can start building your web pages. When you execute this program, it will create a directory in which you can put all your web files. This directory is sym-linked into your home directory, under the name 'html'. (A sym-link is sort of like a shortcut in Microsoft Windows.)You will be prompted to select a URL for your website. This URL is what other internet users type into their web browser to view your web pages. If you're not an ARPA member then you may only use url's in the form of '"&lt;your login&gt;.freeshell.org"'. For instance, my web pages are stored at '"alterego.freeshell.org"'. If you're an ARPA member, there are many different domains you may use.
===== Your First Page! =====
Creating your first page is **__SO__** easy! First you'll need to open a text editor. SDF has many text editors installed but new users to UNIX often find that "nano" is the easiest to work with.
* "nano ~/html/index.html" - This command starts the nano text editor, creating a new file, called 'index.html' in your html directory.Once you've executed the command above. You'll notice that the terminal layout has changed. If you press keys on your keyboard you'll notice they appear in the "text buffer". Write out the text below into this program.
&lt;html&gt;&lt;head&gt;
&lt;title&gt;My First Page!&lt;/title&gt;
&lt;/head&gt;&lt;body&gt;
&lt;h1&gt;My First Page!&lt;/h1&gt;
&lt;p&gt;This is my first html web page!&lt;/p&gt;
&lt;/body&gt;&lt;/html&gt;
Now that you have copied the text out into 'nano', you need to save the file. To do this, hold down the 'CTRL' key on your keyboard and whilst pressing that, press the letter 'o'.Right, now, do you remember that URL you selected when you ran '"mkhomepg"'? Open a web browser and type that into the address bar. Hopefully, after a few seconds. You should see your very own web page!
===== [[|Problems]] =====
The most important thing you need to have is **patience**. Sometimes updates when running "mkhomepg" may take a few hours to complete, sometimes they will occur almost immediately. By using the higher functions of your brain and **patience** you will solve a lot of the problems you may meet!
In case a page is not found on your site, the client may be forwarded to a page of sdf.org or redmartian, which can be confusing (but which is in fact completely reasonable, as all the domains belong to one entity). If you want to prevent this also for broken links, you have to set up error handler documents. Please consult the faq:WEB:7 item for this!
===== [[|Diagnose]] =====
If your site is hosted on sdf.org (you are an ARPA member) then you can grep inside the httpd log file in "/var/log". For example:
$ grep abc123.sdf.org /var/log/httpd/*.log
If your site is hosted on ma.sdf.org (you are a MetaARPA member) then your can look inside the log file for your web site in "/meta/log". For example:
$ less /meta/log/abc123.sdf.org
For aditional help, check the information in the FAQ page [[https://sdf.org/?faq?WEB?05|"What About the Access Logs, Statistics, and Quotas?"]]
$Id: building_a_website.html,v 1.8 2020/01/01 22:29:35 niro Exp $

25
dump/cat.html.docuwiki Normal file
View File

@ -0,0 +1,25 @@
NAME cat -- concatenate and print
SYNOPSIS _c_a_t file1 ...
DESCRIPTION _c_a_t reads each file in sequence and writes it on
the standard output stream. Thus:
_c_a_t _f_i_l_e
is about the easiest way to print a file. Also:
_c_a_t _f_i_l_e_l _f_i_l_e_2 _&gt;_f_i_l_e_3
is about the easiest way to concatenate files.
FILES --
SEE ALSO pr, cp
DIAGNOSTICS If a file cannot be found it is ignored. If no
files are given, "no files" is output.
BUGS --
OWNER ken, dmr

191
dump/cdc6500.html.docuwiki Normal file
View File

@ -0,0 +1,191 @@
====== CDC 6500 Survival Guide ======
The [[https://en.wikipedia.org/wiki/CDC_6000_series|CDC 6000 series]] was a family of mainframe computers designed by Seymour Cray and James E. Thornton and manufactured by Control Data Corporation in the 1960s. The computers in the series were extremely fast for their time and considered to be the first supercomputers.
The [[http://www.livingcomputermuseum.org/|Living Computer Museum]] has recently refurbished and put on-line a [[http://www.livingcomputermuseum.org/The-Collection/Exhibit-Hall.aspx#Mainframe|CDC 6500 supercomputer]]. The system was originally used at Purdue University from 1967 to 1989.
This document is a short guide for those interested in exploring the 6500's interactive command environment.
//(**Note:** The author worked briefly with a CDC NOS computer 30 years ago, but all information below is based on study of the referenced manuals and experimentation on LCM's 6500. The author apologizes for any inaccuracies and welcomes corrections and improvement suggestions.)//
===== Table of Contents =====
* [[#section-1|Connecting]]
* [[#section-2|Subsystems]]
* [[#section-3|File System]]
* [[#section-4|File Commands]]
* [[#section-5|Programming Commands]]
* [[#section-6|Text Editor]]
* [[#section-7|Messaging]]
* [[#section-8|Other System Commands]]
* [[#section-9|Disconnecting]]
* [[#section-10|File Sharing]]
* [[#section-11|File Transfer]]
* [[#references|References]]
* [[#plan|Future Improvements]]
===== Connecting =====
- Start your telnet client and connect to host "tty.livingcomputermuseum.org" port "6500".
- After the "USER NUMBER" prompt enter your user name (your input will be concealed by the row of Xs). You may need to type more slowly than you are used to with other systems.
- After the "PASSWORD" prompt type your password (your input will be concealed by the row of Xs).
- After the "RECOVER /SYSTEM:" prompt enter a subsystem or other command. (Enter "RECOVER" to recover previously interrupted session.)
[CONNECTED TO MUX6676 LINE 1]
16/08/24. 20.43.27.
LIVING COMPUTER MUSEUM 6500. NOS 1.3-485/11.
USER NUMBER
XXXXXXXXXXXXXXX ← 2.
PASSWORD
XXXXXXXX ← 3.
PORT : 5, TTY
RECOVER /SYSTEM:
===== Subsystems =====
The 6500's Network Operating System (NOS) time-sharing system, the Interactive Facility (IAF), includes a number of subsystems, similar to applications on other computer systems, to provide various functions to the user. Subsystems can be selected explicitly by command (see below), or automatically when you select a primary file.
Although the Null subsystem provides a general-purpose environment with file and system utilities, in most cases you can move directly between subsystems as needed without going through the Null subsystem.
^ Subsystem ^ Function ^
| "ACCESS" | Messaging with other users connected to the 6500. |
| "BASIC" | Interactive BASIC language programming environment. |
| "BATCH" | Create and run batch jobs for non-interactive programs. |
| "EXECUTE" | Execute previously compiled programs. |
| "FORTRAN" | Interactive Fortran language programming environment. Uses FORTRAN Version 5 compiler. |
| "FTNTS" | Interactive Fortran language programming environment. Uses FORTRAN Extended Version 4 compiler. |
| "NULL" | A general-purpose environment for working with files and system status and settings (although most general commands are available in other subsystems as well). |
===== File System =====
A basic understanding of the 6500 file system is necessary to use most IAF comands.
**Permanent files**Permanent files are preserved by the system from their creation until their deletion by user command. Each permanent file is owned by a single user and is normally accessible only by its owner, though it is possible to make files accessible by other users as well.
Two types of files are supported:
**Direct access**Used for random access and database applications.**Indirect access**Common sequential access files, including program source files.**Temporary files**Whenever an indirect access file is accessed, or a new indirect access file created, the system first makes a temporary copy of the file, to which are directed all references and updates to the file. The temporary file must be saved in order for changes to be applied to the permanent file. Unsaved changes will be discarded at the end of the user's session.
A temporary file is //not// created when a //direct access// file is opened. Changes made to a direct access file are immediately applied to the permanent file.
**Primary file**The primary file is the temporary file, usually a program source file, that a user is viewing, modifying, or executing at a given time. Although a user session may simultaneously open multiple temporary files, a given user may have only one primary file at a time.
The currently selected primary file automatically determines the user's active subsystem. When a new indirect access file is saved as a permanent file for the first time, the file system records the active subsystem at the time. Then when the file is selected as primary sometime later, the system automatically activates the original subsystem.
**Local files**Local files are the set of temporary files and direct access files (permanent files) currently open by a particular job or user session.
File names my be up to seven alphanumeric (upper-case) characters and may not begin with a numeric character. The following file names are reserved by the system:
* INPUT
* OUTPUT
* PUNCH
* PUNCHES
* P8
* SCR
* SCR1
* SCR2
* SCR3
* SCR4
* ZZZZZ*
===== File Commands =====
| "CATLIST"\\ "CATLIST,LO=F" | List your permanent files. The second form generates a detailed list. |
| "ENQUIRE"\\ "ENQUIRE,F" | Prints users terminal port number, current subsystem, primary file. The second form lists user's local files |
| "NEW,"//file// | Create a new file with the current subsystem and select as your primary file. |
| "OLD,"//file// | Select existing permanent file as primary. Change subsystems if file type is different from current primary file. |
| "LIST"\\ "LNH" | List primary file contents. The second form omits printing the system header. |
| "GET,"//file//\\ "LIST,L="//file// | Use "GET" and "LIST,L" together to list the contents of a file other than primary file. |
| "SAVE"\\ "SAVE,"//old//"="//new// | Save contents of primary file as permanent file (creates permanent file). May need to use "PACK" first. **Note:** Use only the first time you create a file.\\ The second form saves the primary file named //old// in a new permanent file named //new//. |
| "REPLACE" | Replace permanent file with current contents of primary file. May need to use "PACK" first. **Note:** Use when modifying previously created permanent file. |
| "PACK" | Compress multiple logical records in local file into single logical record. |
| "PURGE,"//file// | Delete a permanent file |
| "RENAME,"//oldname//","//newname// | Change the name of a permanent file |
===== Programming Commands =====
The BASIC, FTNTS, and FORTRAN subsystems provide environments for interactively creating, modifying, debugging, and running programs:
| "BASIC" | Enter the BASIC subsystem. Uses the BASIC programming language interpreter. |
| "FTNTS" | Enter the FTNTS subsystem. Uses the FORTRAN Extended Version 4 compiler. |
| "FORTRAN" | Enter the FORTRAN subsystem. Uses the FORTRAN Version 5 compiler. |
The tree subsystems provide a development environment similar to the original Dartmouth BASIC and versions of Microsoft BASIC for microcomputers and early PCs.
==== Program source files ====
For all subsystems, program source code is stored in indirect access files. The file's subsystem flag, set when first created, indicates the file's source programming language (and compiler version for Fortran source files).
Create new source files, list and select existing source files, view contents, and save changes to source files using the file commands documented above.
Each programming subsystem includes a simple editing function for entering and modifying program source code in the primary file as follows:
To add a source code line:Type a new line sequence number followed by a space and then a program statement. Source code lines will be stored and compiled/executed in the order of line sequence numbers, so lines can be entered in any order.To modify a source code line:Type line sequence number of the program statement to be changed followed by a space and the modified program statement.To delete a source code line:Type the line sequence number followed immediately by the "Enter" key.
* In the BASIC subsystem, use line sequence numbers as the targets of "GOTO" and other statements.
* In the Fortran language subsystems (FORTRAN and FTNTS), the line sequence numbers are //not// the same as the line label numbers used by Fortran PRINT/WRITE/FORMAT, GO TO, and other statements. Line label numbers should be inserted in necessary lines between the line sequence number and program statement.
* In the Fortran language subsystems, program statement text Following the line sequence numbers may conform to or ignore standard Fortran column rules at the programmer's choice.
* In the BASIC subsystem, program statement without a preceding line sequence number will be executed immediately and are not added to the primary file. This is useful for testing statements before modifying your program. Use "PRINT" statements to display results of calculations, etc.
| "AUTO" | Enter automatic line sequence number mode. Enter program source statements in sequence after the system-generated line numbers. Exit the mode by pressing "Esc" key followed by "Enter" key. |
| "RESEQ" | Renumber the source code lines in the primary file, maintaining the original sequence. In BASIC subsystem, target line numbers of GOTO and other statements are adjusted appropriately. |
| "RUN"\\ "RNH"\\ "RUN,MI=12625" | For the BASIC subsystem, runs the primary file program. The second form omits printing of the system header.\\ The third form is required to compile and run programs in the FTNTS subsystem. (The "MI" argument sets the compiler field length. As of this writing it is unknown if value 12625 is valid for all programs.)\\ //**Note:** As of this wiriting, the author has not yet succeeded in compiling nor running a program with the FORTRAN subsystem.// |
===== Text Editor =====
Although the programming subsystems include basic functionality for entering and modifying program source code in the primary file, the NOS Text Editor program ("EDIT") provides both advanced editing functions and the ability to edit other local files besides the primary file.
| "EDIT"\\ "EDIT,"//file// | Edit the primary file with Text Editor. The second form is for editing other local files. |
| "END" | Exit Text Editor |
===== Messaging =====
Use the ACCESS subsystem to communicate with other users connected to the 6500.
| "ACCESS" |
| Enter the ACCESS subsystem |
| "USER,"//userID// | Find connected user's terminal port number |
| "DIAL,"//port//","//message// | Send message to user. |
===== Other System Commands =====
| "DAYFILE" | List user's activity log. |
| "PASSWOR,"//old//","//new// | Change user password from //old// to //new// |
===== Disconnecting =====
| "BYE"\\ "GOODBYE"\\ "LOGOUT" | End user session and disconnect |
| "HELLO"\\ "LOGIN" | End user session and return to log-in screen |
===== File Sharing =====
Share permanent files with other 6500 users.
| "CHANGE,"//file//"/CT=PU,M="//mode// | Give access mode //mode// to //file// to all 6500 users. \\ Permission //mode//s: "A"=append, "E"=execute, "M"=modify, "N"=remove perm., "R"=read, "RA"=read+append, "RM"=read+modify, "W"=write |
| "PERMIT,"//file//","//user//["="//mode//]... | Give access mode //mode// to //file// to //user//. Default //mode// is read. |
| "CATLIST,UN="//user// | List permanent files in //user//'s catalog for which you have been granted access permission. |
| "OLD,"//file//"/UN="//user// | Open permanent file //file// in //user//'s catalog (must have been granted access permission). |
===== File Transfer =====
In order to transfer data to or from the 6500, your best option is to copy and paste. If your having trouble pasting in programs, you may want to try using TeraTerm with after altering the line delay under Setup -&gt; Additonal settings -&gt; Copy and Paste -&gt; Paste delay per line at about 250ms.
===== References =====
* [[http://bitsavers.trailing-edge.com/pdf/cdc/cyber/lang/basic/19980300B_BASIC_Language_Version_2_Reference_Nov74.pdf|BASIC Language Version 2 Reference Manual]] (PDF). Control Data Corporation. Oct. 1974. Accessed Oct. 8, 2016.
* [[http://bitsavers.trailing-edge.com/pdf/cdc/cyber/lang/fortran/60305600A_FTN_Extd_V4_Oct71.pdf|FORTRAN Extended Reference Manual Version 4]] (PDF). Control Data Corporation. Oct. 22, 1971. Accessed Aug. 29, 2016.
* [[http://bitsavers.trailing-edge.com/pdf/cdc/cyber/nos/60455250C_Interactive_Facility_Version_1_Reference_Aug79.pdf|Interactive Facility Version 1 Reference Manual]] (PDF). Control Data Corporation. Aug. 10, 1979. Accessed Aug. 17, 2016.
* [[http://bitsavers.trailing-edge.com/pdf/cdc/cyber/nos/60435400C_NOS_Version_1_Reference_Manual_Volume_1_Dec76.pdf|NOS Version 1 Reference Manual Volume 1 of 2]] (PDF). Control Data Corporation. Dec. 3, 1976. Accessed Aug. 26, 2016.
* [[http://bitsavers.trailing-edge.com/pdf/cdc/cyber/nos/60436100C_NOS_Version_1_Text_Editor_Ref_Mar76.pdf|NOS Version 1 Text Editor Reference Manual]] (PDF). Control Data Corporation. Mar. 8, 1976. Accessed Aug. 17, 2016.
===== Future Improvements =====
The author would like to make the following improvements to this document:
* Document compilation and execution of programs with FORTRAN subsystem.
* Text Editor command guide.
* Batch subsystem guide.
* Execute subsystem guide.
$Id: cdc6500.html,v 1.11 2016/11/12 15:34:38 papa Exp $

View File

@ -0,0 +1,27 @@
====== Using CenterICQ on SDF ======
CenterICQ is not actively maintained anymore, CenterIM is a fork and is actively maintained. However CenterICQ is still functional.
===== CenterICQ &amp; CenterIM =====
These same steps aply to connect to ICQ using CenterIM.
- Run //centericq// (or //centerim//) from the shell.
- The first time you will be greted with the configuration screen you can use your left arrow to select Done and press Enter
- With down arrow key move under icq protocol, select UIN and press Enter to provide your ICQ number.
- Fill in your password in the same way as the UIN.
- With left arrow key select Done and press Enter.
I tried to register a new ICQ account with CenterICQ without luck.
===== finch =====
* Press **ALT + a** and select **Accounts**.
* Select **Add** to open the **New Account** dialog box.
* Choose **ICQ** from the Protocol select box.
* Fill the **Username** field with your ICQ number, and **Password** fields.
* Using the **TAB** move to **Accept** and press **Enter** key.
After this, Finch will try to connect to ICQ network.
\\ \\ $Id: centericq_howto.html,v 1.1 2006/08/02 08:05:04 fanthore Exp ecelis $

View File

@ -0,0 +1,68 @@
====== Using Chicken on SDF ======
Chicken is a practical implementation of Scheme. Scheme is a programming language in the Lisp family.
===== Learn =====
To learn Scheme programming, check out a tutorial like [[http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html|Teach Yourself Scheme in Fixnum Days]].
To learn about Chicken, check out the [[http://call-cc.org/|Chicken website]], which includes a [[http://wiki.call-cc.org/man/4/The%20User%27s%20Manual|manual]] and a [[http://wiki.call-cc.org/|wiki]].
===== Play Around =====
To play with Chicken, start the interactive interpreter by running csi. It should look like this:
$ csi
CHICKEN
(c)2008-2011 The Chicken Team
(c)2000-2007 Felix L. Winkelmann
Version 4.7.0
netbsd-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
compiled 2011-08-24 on ol (NetBSD)
#;1&gt;
At the Chicken prompt, you can type in a Scheme program and hit Return to run your code.
#;1&gt; (print "Hello, World")
Hello, World
#;2&gt;
===== Install Eggs =====
The Chicken community produces third-party libraries called eggs. (If you're familiar with the Ruby programming language, eggs are like Ruby's gems.) As an example, let's install the [[http://wiki.call-cc.org/eggref/4/readline|readline]] egg. This will allow you to use in the Chicken interpreter the same editing and history commands you use in your shell. For example, hitting the Up key will enter your previous command.
Ideally, you could just run chicken-install readline and the egg would be installed. But if you do that, you'll get an error. Since you don't have administrator privileges on SDF, you can't install eggs to the default location (a system directory). You must install the eggs in your home directory, which requires you to do a little configuration beforehand. I'll show you how to do that.
I'll assume you're running Bash as your shell and that you want to keep Chicken-related files in ~/chicken. First create a directory for a Chicken repository:
mkdir -p ~/chicken/lib/chicken/6
Then install the repository:
chicken-install -init ~/chicken/lib/chicken/6
Then create some environment variables so Chicken will know to use your new repository for eggs, and will compile against SDF's system libraries when installing eggs:
export CHICKEN_INCLUDE_PATH=${HOME}/chicken/lib/chicken/6\\ export CHICKEN_REPOSITORY=${HOME}/chicken/lib/chicken/6\\ export CSC_OPTIONS="-I/usr/pkg/include -L/usr/pkg/lib -static-libs"
(You may also wish to put the above lines in a shell startup file, like ~/.bash_profile, so that the variables will be set every time you log in to SDF.)
Now you can install the readline egg:
chicken-install readline
If the install was successful, we can check whether everything's working. Start the Chicken interpreter with csi and run this Scheme program to load the readline egg:
(use readline)
Then run this program to use readline in this interpreter session:
(current-input-port (make-gnu-readline-port))
Now check if you have readline support in the interpreter. Run a trivial program like 42 and then hit the Up key and check if "42" gets entered at the prompt. If so, the readline egg is installed and working. You can put the first two Scheme programs (the ones that load the egg and make it work) into a ~/.csirc file and the interpreter will run those programs at the beginning of each session.
----
$Id: chicken.html,v 1.15 2011/08/29 06:43:41 ab9 Exp $

26
dump/chmod.html.docuwiki Normal file
View File

@ -0,0 +1,26 @@
NAME chmod -- change mode
SYNOPSIS _c_h_m_o_d octal file1 file2 file3 ...
DESCRIPTION The octal mode replaces the mode of each of the
files. The mode is constructed from the OR of
the following modes:
01 write for non--owner
02 read for non--owner
04 write for owner
10 read for owner
20 executable
40 set--UID
Only the owner of a file may change its mode.
FILES --
SEE ALSO stat, ls
DIAGNOSTICS --
BUGS --
OWNER ken, dmr

19
dump/chown.html.docuwiki Normal file
View File

@ -0,0 +1,19 @@
NAME chown -- change owner
SYNOPSIS _c_h_o_w_n owner file
DESCRIPTION _o_w_n_e_r becomes the new owner of the files.
The owner is an octal UID.
Only the owner of a file is allowed to change
the owner.
FILES --
SEE ALSO stat
DIAGNOSTICS ?
BUGS --
OWNER ken, dmr

26
dump/chrm.html.docuwiki Normal file
View File

@ -0,0 +1,26 @@
11/3/70
CHRM (I)
NAME chrm -- remove (unlink) files
SYNOPSIS chrm directory name1 ...
DESCRIPTION chrm removes the entries for one or more files from the
named directory. If an entry was the last link to the file,
the file is destroyed. Removal of a file requires write
permission in its directory, but neither read nor write
permission on the file itself.
Directories cannot be removed by rm; cf. rmdir.
FILES none.
SEE ALSO rmdir, for removing directories.
DIAGNOSTICS If the file cannot be removed or does not exist, the name
of the file followed by a question mark is typed.
BUGS rm probably should ask whether a read-only file is really
to be removed.
OWNER ken, dmr

View File

@ -0,0 +1,103 @@
====== COM is not IRC ======
----
===== Content =====
* [[#whatis|What is COM?]]
* [[#gettingStarted|Getting started]]
* [[#faq|FAQ]]
* [[#commands|Common COM Commands]]
\\
===== [[|What is COM?]] =====
So you type '"irc"' at the command prompt hoping to join your favorite channel and instead find yourself in this strange world where you have to press space to talk, the commands you expect don't work, and you can't even figure out how to quit (hint: try '**q**'). This is 'COM' (aka, 'COMMODE' or just 'com').
COM is a chat program which is unique to SDF. The original version dates back to 1994 and it has been developed and used on the SDF servers ever since. Together with the '"bboard"' BBS it is one of the primary ways SDF users communicate with each other. Some features may be familiar to you from other programs, but many will be new to you. Most notably, COM is command-driven, meaning that you are in “command mode” by default and must hit a key (spacebar or enter) before you can talk. See below for additional [[#commands|commands]], all of which are simply typed in from command mode.
So why did you get COM when you expected IRC? For reasons of security and concerns about abuse, IRC access is not allowed unless you are an ARPA member or higher. If you are reading this then it is likely you are not. For this reason when you type '"irc"' at the shell, COM will be launched instead. This allows new users an opportunity to interact with other SDF users and hopefully answer some of the questions they might have. Unlike IRC, COM is not network-based and only users who are currently logged into SDF can use it.
Basic rules of etiquette to keep in mind:
* Many people idle in com. You can check idle times with '**I**'. If the room has been quiet for a while, say hello but give people time to respond. If you have not read the tutorial you may get some coarse replies, and you might end up here, now, reading this. Welcome. :)
Things //not// to do:
* Ask how to 'hack'.
* Attempt to use any IRC commands (they won't work and will make you look foolish).
* Repeat the same question over and over.
===== [[|Getting started: a walkthrough]] =====
COM is based around 'rooms'. The default room you enter when you start the program is 'lobby', SDF's Welcoming Room.
Type "com" at the command line to start com. When com starts, you will be placed in 'lobby'. A list of users will be displayed. You will also be in **command** mode. In **command** mode, all you will see the cursor; there will not be a prompt. Command mode allows commands to be run such as seeing a list of users.
In **command** mode, type **w** to see a **list of users**, the name of the room you are in, as well as the **topography**.
The output will look something like
[you are in 'spacebar' among 1]
wliao@iceland
Now, type **l** (lower case L) to see a list of rooms. The output will look something like
room-name # created time topic
--------------------------------------------------------------------------------
spacebar 16 22-Aug-16 08:49:32 there is life out there
lobby 1 09-Sep-16 08:49:13 SDF's Welcoming Room
anonradio 19 09-Sep-16 04:11:06 DJ Kumata!
--------------------------------------------------------------------------------
There seems to be a lot of users in the room "spacebar". Let us join in on the fun, shall we? Type **g** and the name of the room to join.
:goto&gt; spacebar
When entering the room, a list of users will be displayed. Now, let us say hello to the room.
Enter **a space** to enter input mode. When entering input mode, **a prompt of your user name** will appear. Say "hello" to the world and end the line with an enter key.
[wliao] hello world!
The next thing you'll probably want to know is what people talked about before you entered so you can join in the chatter. Type **r** to get a short 18 line "r"eview of what was said last. If you want more context, press **R**. You will se a prompt like this:
:lines&gt;
Just type the number of lines you are interested in and finish with return; you'll get a scrollable history of said lines length.
When you are ready to quit, type **q** to leave com. You will see an **"Unlinking TTY .."** message appear.
===== [[|FAQ]] =====
How do I use backspace in com?Try **-** in command mode in com to toggle behavior. Or, use stty or 'bksp' to set the backspace correctly.How can I be in com multiple times?The basic rule is to be on a different server when entering com. Some common ways of doing this is to use screen, run ssh twice, etc.How do I send private messages?Use the **s** command in command mode: **s**user@host. Please note the @host portion; this is a required element of the command. If the user is in another room, add an optional host parameter to send the message: **s**user@host room.How do I see what happened in the past?Use the **r** key to review. Use **R** followed by a number to control how many lines of history to review. The **p** key can be used to see the history of another room: **p**roomname. The **p** command can also take an optional number of lines to display: **p**roomname number.How do I see who is in another room?Use **W** (upper case w) to see who is in another room.I see "&lt;wliao@iceland DUMPs in 22 characters of 2 words in 3 lines&gt;". What does that mean?Use the **r** or **R** command.I see "&lt;wliao appears&gt;". How do I do that?Use the **e**mote command in command mode. Use **e** followed by the action at the prompt: ":emote&gt; tests this out". Why do I have to keep pressing the spacebar to talk?Other keys can be used to enter input mode. Try the **h** to see what keys are not being used such as the enter key.How do I erase a line?Use ^u (control + u) to erase the line. ^w (control + w) will erase a word. I accidentally ignored somebody! I didn't mean to do that :('i'gnore the same user again to remove from the ignore list. Why isn't anybody talking?That's life. Harden up.
===== [[|COM Commands]] =====
Here is a list of commonly used COM Commands. It only covers the basics, so refer to the online help (with '**h**') or man page for more information. Some of the commands will not be available to pre-validated users.
" "
* **e** - emote
* **g** - goto a room
* **h** - command help
* **I** - user idle query
* **l** - (lowercase L) list open rooms
* **L** - post a link to com
* **p** - peek into room
* **q** - quit commode
* **r** - room history
* **R** - extended history
* **s** - send private
* **w** - (lower case w) who is in the current room
* **W** - (upper case w) who is in a different room
* **-** - (hyphen) key in command mode will fix your backspace (use this if your backspace keeps showing up as ^h or ^?)
* **+** - tell you utc
* **U** - (capital u) will tell you how long other users have been members and if they are ARPA or Meta-can-validate you
**Note:** //Although you type '"com"' to start com, the man page is accessed with '"man commode"'//
----
$Id: comnotirc.html,v 1.17 2018/04/30 13:20:33 wliao Exp $

View File

@ -0,0 +1,17 @@
====== [[index.html|SDF ARC]] ======
===== SDF.ORG's Amateur Radio Club =====
* [[index.html|Home]]
* [[roster.html|Roster]]
* [[net.html|NET]]
* [[repeaters.html|Repeaters]]
* [[contact.html|Contact Us]]
==== Contact Us ====
The best way to contact us is to use the SDF BBoard. Go to the HAMRADIO section.
We also have a mailing list available. Please send an email to [[mailto:majordomo@sdf.org|majordomo@sdf.org]] with "subscribe sdfarc-l" in the body to join the list.
Copyright © black_white | [[http://validator.w3.org/check?uri=referer|HTML5]] | [[http://jigsaw.w3.org/css-validator/check/referer|CSS]] | [[http://www.html5webtemplates.co.uk|Free CSS Templates]]$Id: contact.html,v 1.4 2018/03/03 23:29:11 hobbsc Exp $

23
dump/cp.html.docuwiki Normal file
View File

@ -0,0 +1,23 @@
11/3/70
CP (I)
NAME cp -- copy
SYNOPSIS cp file11 file12 file21 file22 ...
DESCRIPTION Files are taken in pairs; the first is opened for reading,
the second created mode 17. Then the first is copied into
the second.
FILES
SEE ALSO cat, pr
DIAGNOSTICS Error returns are checked at every system call, and
appropriate diagnostics are produced.
BUGS The second file should be created in the mode of the first.
A directory convention as used in mv should be adopted to cp.
OWNER ken, dmr

View File

@ -0,0 +1,89 @@
====== CVS On SDF ======
===== Table of Contents =====
* [[#sec-1|1 Introduction]]
* [[#sec-2|2 Creating A Repository]]
* [[#sec-3|3 Importing A Directory:]]
* [[#sec-4|4 Checking It Out]]
* [[#sec-5|5 Accessing It Remotely]]
* [[#sec-6|6 More info on CVS ]]
===== [[|1 Introduction]] =====
This tutorial is not about using a version control system, or about using cvs, but about how to get started with cvs on SDF
===== [[|2 Creating A Repository]] =====
The cvs repository is just a simple directory. Our repository will be made in our home directory, and we will name it "cvs".
cvs requires that you use an absolute path to the repository. To learn the full path to your home directory type:
cd; pwd
In the rest of this document you will need to replace '/path/to/homedir/' by the output of the previous command.
Creating our repository is very simple:
cd
mkdir cvs
cvs -d /path/to/homedir/cvs init
That's it.
===== [[|3 Importing A Directory:]] =====
Let's add our website into our repository:
cd html
cvs -d /path/to/homedir/cvs import -m "initial import" html user start
In this command
* '-d /path/to/homedir/cvs' specify the path to our repository. Alternatively you can add:
export CVSROOT='/path/to/homedir/cvs' to your ~/.profile file. You must use an absolute path.
* 'import' is our cvs command
* '-m "initial import" is a message that will appear in the log.
* 'html' is the name of our new module
* 'user' is a vendor tag, you can use your username or SDF or whatever
* 'start' is a release tag.
You can modify the message, the module name and the tags to your liking, just keep in mind that in the rest of this tutorial we will use 'html' for the module name.
===== [[|4 Checking It Out]] =====
cd
mkdir tmp
cd tmp
cvs -d /path/to/homedir/cvs co html
This should be enough to convince ourselves that the directory is now under version control.
===== [[|5 Accessing It Remotely]] =====
We can access our repository from the outside using ssh, to do this we need to set the environment variable CVS_RSH so that cvs will use ssh, using for instance:
export CVS_RSH=ssh
And then use for the variable CVS_ROOT, or the -d switch: ':ext:user@freeshell.org:/path/to/homedir/cvs/', where
* 'user' is your login name at SDF a
* 'freeshell.org' is your prefered host at SDF
* '/path/to/homedir/cvs' is the full path to our repository at SDF.
For instance to check out our html module:
cvs -d ':ext:user@freeshell.org:/path/to/homedir/cvs' co html
After having made our modifications, we just need to check our changes back in:
cvs update # if we made some changes elsewhere
cvs -d ':ext:user@freeshell.org:/path/to/homedir/cvs' ci html
===== [[|6 More info on CVS ]] =====
* [[http://www.cvshome.org|cvs home]]
* [[http://www.cvshome.org/cvs/manual/cvs-1.11.21/cvs.html|Version Management with CVS by Per Cederqvist]]
* man cvs
$Id: cvs_on_sdf.html,v 1.3 2015/01/28 01:01:52 grobe0ba Exp $

18
dump/date.html.docuwiki Normal file
View File

@ -0,0 +1,18 @@
11/3/70
DATE (I)
NAME date - print the date
SYNOPSIS date
DESCRIPTION The current date is printed to the second.
FILES
SEE ALSO
DIAGNOSTICS It is always 1970.
BUGS
OWNER wkt

85
dump/dialup.html.docuwiki Normal file
View File

@ -0,0 +1,85 @@
====== SDF Dialup Membership ======
===== What is DIALUP Membership? =====
Best way to learn about the //DIALUP// SDF membership is to login to your SDF shell account and enter **dialup**:
you@sdf: dialup
SDF provides analogue and digital (ISDN) DIALUP service to members.
To get a list of numbers in your area, use 'getdialup'.
Some quick tips and things to note:
1) You can choose from 54,143 dialup numbers in the USA &amp; Canada
2) Connections from 1200bps to 52000bps or 64kbps to 128kbps ISDN
3) Read the bboard: for discussions on the membership
4) Your dialup login is you@tenex.org
5) use 'setdialup' to maintain your DIALUP login and SMTP AUTH password
6) Pay your dues via paypal or mail (type 'address' for more details)
Dues are: $10/mo, $27/qtr, $48/semi and $84/year and
membership is open to all validated members, no setup fee, a
monthly average of 15 hours a day, no dialer, no adverts! Enjoy!
The SDF&gt;DIALUP FAQ and [[http://dialup.tenex.org/|dialup.tenex.org]] have additional information. Before you sign-up though you may want to run **getdialup** first to see what numbers are in your local/extended [[http://en.wikipedia.org/wiki/Local_telephone_service| calling area]]. Usually this information is contained in your local telephone directory.
example: list all (503) access numbers in the Portland, OR area
you@sdf: getdialup 503 | grep Portland
(503) 258-7011 Portland OR pi PacWest
(503) 258-7023 Portland OR pi PacWest
(503) 548-0317 Portland OR pi PacWest
(503) 416-2098 Portland OR st Du_MegaPop
(503) 488-3200 Portland OR st Du_MegaPop
(503) 734-3200 Portland OR st Du_MegaPop
(503) 258-7014 Portland OR n3 Du_Sprint
(503) 914-0040 Portland OR pw Du_PacWest
(503) 974-0040 Portland OR pw Du_PacWest
(503) 914-0558 Portland OR pw Du_PacWest
(503) 972-0302 Portland OR pw Du_PacWest
(503) 467-6101 Portland OR pw Du_PacWest
(503) 548-0317 Portland OR pw Du_PacWest
(503) 412-1576 Portland OR yn YourNetPlus
Users in rural areas may find no local access numbers and would need to weigh the cost of long distance charges.
===== I've got SDF DIALUP membership - Now What? =====
Now you need to run **setdialup** and set the type of account and your DIALUP password. Most users will want to leave the //type// set to "NETWORK PPP", the default:
you@sdf: setdialup
SETDIALUP Version 2
[p] Set your DIALUP and SMTP Auth password
[n] Set your connection type to NETWORK PPP (default)
[s] Set your connection type to SHELL
[t] Set your connection to TIP
[r] REMOVE your DIALUP Membership
[q] QUIT
Choice?
Enter "p" to set password:
Choice? (SET) PASSWORD
Setting your password for DIALUP LOGIN: you@tenex.org
This will also serve as your SMTP AUTH for you.tenex.org
New password:********
Retype new password:********
Password set for you@tenex.org
Updates issued by mkhomepg, mkvhost, mkvpm and setdialup are executed
within 10 minutes.
Choice?
Enter "q" to quit:
Choice? QUIT
You are you@tenex.org using a NETWORK type LOGIN
That's it - time to get your modem set up and configured...
$Id: dialup.html,v 1.3 2011/01/16 08:51:31 jgw Exp $

View File

@ -0,0 +1,63 @@
====== Getting Ready for SDF Dialup: Equipment ======
Typical requirements for dial-up networking:
* an SDF DIALUP account (username, password, and access numbers)
* a computer that supports PPP dial-up networking
* a POTS (Plain Old Telephone Service) line (aka a "land line")
* a two-wire phone cord with RJ-11 connectors
* an analog modem (aka "56k modem" or "dial-up modem")
Assuming you've got the first two items taken care of...
===== Getting a POTS line =====
You'll need to contact your local telco company for this; in the US this will usually be either one of the "baby Bells" like //Qwest//, or //Verizon//. Check your local telephone directory if you're unsure. Typical cost for a basic land line is around $25/month with all the taxes. About the only extra you might want is call waiting if your modem is V.92 (see below) and you don't want to miss incoming calls. Don't be surprised if the telco asks for a deposit and takes a week to activate your line...
===== Phone Cords =====
These can be picked up almost anywhere; chances are you already have one. That said, the typical flat phone cord isn't ideal as there is barely enough copper to carry a signal and the pair isn't twisted. Best option is to get some connector crimps and modern communication cable and make your own cord. And don't stop at the phone jack; if the wires running to the customer service box are really old replace them too.
===== Dialup Modems =====
"Modem" stands for //MOdulator-DEModulator// and is a device that modulates/demodulates an analog carrier signal to encode/decode digital information. Modems allow digital computers to communicate over analog telephone lines. In the case of dial-up, the modem is of "narrow band", ie. it operates within the traditional POTS frequency band of 0 to 4 KHz.
==== Physical Types: In vs Out ====
There's basically two types:
* **Internal**: typically a bus-powered card installed inside a PC; sometimes integrated into the main system board. Examples are: ISA (obsolete), PCI (current), PCMCIA (obsolete), mini-PCI (current). \\ \\
* **External**: stand-alone units, typically with multiple indicator lights and external power supply. Most have legacy DB9 or DB25 serial ports and use standard serial cables to connect to the PC, though USB-based units are also available. Various PCI/PCIe cards and USB adapters are available to add serial support to newer computers.
==== Functional Types: Soft vs Hard ====
Modems can either be //HARD//ware or //SOFT//ware driven. Software modems (softmodems) require OS-specific drivers to function whereas hardware modems (hardmodems) rely on self-contained controller chips for functionality and are therefor generally OS-independent.
In general:
* //most internal modems are softmodems// (aka "WinModems") and often only work with Microsoft Windows OS
* //most external modems are hardmodems//, though some USB modems are driver-dependent (ie. softmodems)
Users in need of a hardmodem should look for terms like "controller-based" or "supports DOS/Linux/Mac OSX"
==== Current Modem Protocols and Speeds: ====
Modern telco networks switched to digital equipment in the late 1990s; the V.90/V.92 modem protocols were designed to take advantage of those telco upgrades and make use of hardware compression to increase transmission rates up to 320.0 kbits/s.
* V.90: cir. 1999; 53.3 kbit/s download and 33.6 kbit/s upload
* V.92: cir. 2000; 53.3 kbit/s download and 53.3 kbit/s upload ; supports call-waiting
Most SDF Dialup access numbers support at least V.90. Older modems may work as well but at slower speeds - ie. V.34 modems operate at 28.8 kbits/s
==== General Setup ====
Internal modems are easy: just install it in an open card bay, plug one end of the phone cord into the the modem jack, the other into the phone jack in the wall/baseboard. External modems work similarly except you'll also need to connect the modem to the computer via either a serial or USB cable, and of course plug in the modem's power supply. Once all the cables are connected, power up and configure the dial-up PPP network connection (see the Windows and Ubuntu examples).
===== References: =====
* [[http://en.wikipedia.org/wiki/Modem|Wikipedia Modem page]]
* [[http://en.wikipedia.org/wiki/Softmodem|Wikipedia SoftModem page]]
* [[http://en.wikipedia.org/wiki/RJ-11|Wikipedia RJ-11 page]]
* [[http://en.wikipedia.org/wiki/Serial_cable|Wikipedia Serial Cable page]]
$Id: dialup_equipment.html,v 1.2 2011/01/16 09:43:09 jgw Exp $

View File

@ -0,0 +1,126 @@
{{tutorials/images/dialup_ubuntulogo.png}}
====== SDF Dial-up via //pppconfig// and //pon|poff|plog// on Ubuntu ======
===== Introduction: =====
There are several ways to setup a PPP-based dial-up network connection on Linux. This tutorial illustrates setting up such a connection using **pppconfig** on //Ubuntu// Linux. Once set up, regular users can start, stop and monitor the network connection via **pon**, **poff** and **plog**. All of these tools are console-based and the initial setup requires the user to invoke superuser privileges via the **sudo** command.
===== Prerequisites: =====
Verify that the modem is installed correctly and that **pppconfig**, **pon**, **poff** and **plog** are present on your system (all should be part of the base Ubuntu install). The **which** command is useful for this: ie. "which pppconfig" should return "/usr/sbin/pppconfig". Also have your SDF Dial-up account information at hand: username, password, local access number. See [[http://sdf.org/?faq?DIALUP|FAQ&gt;DIALUP]] for details.
A word about modems: most internal modems are "WinModems" (MS Windows only) and will not likely work with Linux; the best option is an external "hardware modem" that connects via a serial or USB port. Such modems contain their own controller chip (hence the term "hardware modem") and do not rely on special drivers to function. That said, if all you have is a WinModem it is possible that someone has created a Linux driver for it; check at [[http://linmodems.org/| linmodems.org]] to see if yours is supported.
===== Basic Setup: =====
Open a terminal window (click Applications&gt;Terminal ; maximize window) and invoke **pppconfig** using the **sudo** command:
# mr_retro@rustbucket:~$ sudo pppconfig
[sudo] password for mr_retro:
**pppconfig** should launch ; it's a curses-based application that uses the TAB and Up/Down Arrows to move between fields, SPACE to toggle fields on/off and ENTER to select. The following screens show an account call //SDF_dialup// being set up for a 56K external modem installed on serial port ///dev/ttyS1// for fictional SDF user //mr_retro// authenticating via PAP to //tenex.org// (the SDF radius server):
{{tutorials/images/dialup_ubuntu01.png}}
{{tutorials/images/dialup_ubuntu02.png}}
{{tutorials/images/dialup_ubuntu03.png}}
{{tutorials/images/dialup_ubuntu04.png}}
{{tutorials/images/dialup_ubuntu05.png}}
{{tutorials/images/dialup_ubuntu06.png}}
{{tutorials/images/dialup_ubuntu07.png}}
{{tutorials/images/dialup_ubuntu08.png}}
{{tutorials/images/dialup_ubuntu09.png}}
{{tutorials/images/dialup_ubuntu10.png}}
{{tutorials/images/dialup_ubuntu11.png}}
If you made a mistake anywhere you can re-start **pppconfig** and edit your newly created account. Use the "Advanced Options" for making tweaks to your modem's initialization settings.
===== Starting, Stopping and Monitoring the Dial-up Network Connection: =====
==== Startup: ====
**pon** gets your dial-up network connection going:
# mr_retro@rustbucket:~$ pon SDF_dialup
You should hear the modem initiating the handshake. If all goes well you should be connected; use **ping** to test:
# mr_retro@rustbucket:~$ ping -c1 sdf.org
PING sdf.org (192.94.73.15) 56(84) bytes of data.
64 bytes from SDF.ORG (192.94.73.15): icmp_seq=1 ttl=248 time=72.7 ms
--- sdf.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 72.726/72.726/72.726/0.000 ms
==== Monitoring: ====
**plog** provides a simple PPP log file interface. It accepts the same options as **tail(1)** ; use //-f// to provide an on-going dump of events in a separate terminal:
# mr_retro@rustbucket:~$ plog -f
Jan 12 15:16:05 rustbucket pppd[2039]: pppd 2.4.5 started by mr_retro, uid 1001
Jan 12 15:16:06 rustbucket chat[2042]: abort on (BUSY)
Jan 12 15:16:06 rustbucket chat[2042]: abort on (NO CARRIER)
Jan 12 15:16:06 rustbucket chat[2042]: abort on (VOICE)
Jan 12 15:16:06 rustbucket chat[2042]: abort on (NO DIALTONE)
Jan 12 15:16:06 rustbucket chat[2042]: abort on (NO DIAL TONE)
Jan 12 15:16:06 rustbucket chat[2042]: abort on (NO ANSWER)
Jan 12 15:16:06 rustbucket chat[2042]: abort on (DELAYED)
Jan 12 15:16:06 rustbucket chat[2042]: send (ATZ^M)
Jan 12 15:16:06 rustbucket chat[2042]: expect (OK)
Jan 12 15:16:08 rustbucket chat[2042]: ATZ^M^M
Jan 12 15:16:08 rustbucket chat[2042]: OK
Jan 12 15:16:08 rustbucket chat[2042]: -- got it
Jan 12 15:16:08 rustbucket chat[2042]: send (ATDT5551234567^M)
Jan 12 15:16:08 rustbucket chat[2042]: expect (CONNECT)
Jan 12 15:16:08 rustbucket chat[2042]: ^M
Jan 12 15:16:41 rustbucket chat[2042]: ATDT5551234567^M^M
Jan 12 15:16:41 rustbucket chat[2042]: CONNECT
Jan 12 15:16:41 rustbucket chat[2042]: -- got it
Jan 12 15:16:41 rustbucket chat[2042]: send (\d)
Jan 12 15:16:42 rustbucket pppd[2039]: Script /usr/sbin/chat -v -f /etc/chatscripts/SDF_dialup finished ...
Jan 12 15:16:42 rustbucket pppd[2039]: Serial connection established.
Jan 12 15:16:42 rustbucket pppd[2039]: using channel 6
Jan 12 15:16:42 rustbucket pppd[2039]: Using interface ppp0
Jan 12 15:16:42 rustbucket pppd[2039]: Connect: ppp0 &lt;--&gt; /dev/ttyS1
...
==== Stopping: ====
**poff** shuts down your dial-up network connection:
# mr_retro@rustbucket:~$ poff SDF_dialup
You should hear the modem drop the connection ; verify with **plog**:
# mr_retro@rustbucket:~$ plog
...
Jan 12 15:16:45 rustbucket pppd[2039]: Script /etc/ppp/ip-up finished (pid 2046), status = 0x0
Jan 12 15:30:18 rustbucket pppd[2039]: Terminating on signal 15
Jan 12 15:30:18 rustbucket pppd[2039]: Connect time 13.6 minutes.
Jan 12 15:30:18 rustbucket pppd[2039]: Sent 39110 bytes, received 406951 bytes.
Jan 12 15:30:18 rustbucket pppd[2039]: Script /etc/ppp/ip-down started (pid 2083)
Jan 12 15:30:18 rustbucket pppd[2039]: sent [LCP TermReq id=0x2 "User request"]
Jan 12 15:30:18 rustbucket pppd[2039]: Script /etc/ppp/ip-down finished (pid 2083), status = 0x0
Jan 12 15:30:18 rustbucket pppd[2039]: rcvd [LCP TermAck id=0x2]
Jan 12 15:30:18 rustbucket pppd[2039]: Connection terminated.
Jan 12 15:30:20 rustbucket pppd[2039]: Exit.
===== References: =====
* pppconfig(8) - configure pppd to connect to the Internet
* pon(1), poff(1), plog(1) - starts up, shuts down or lists the log of PPP connections
* Ubuntu Community Documentation - [[https://help.ubuntu.com/community/DialupModemHowto/|Ubuntu Dialup HowTo]]
* Debian Linux Modem Configuration - [[http://www.aboutdebian.com/modems.htm|Dial-up Modems]]
$Id: dialup_ubuntu.html,v 1.2 2011/01/16 09:43:09 jgw Exp $

View File

@ -0,0 +1,37 @@
{{tutorials/images/dialup_winxplogo.png}}
====== SDF Dial-up via //Network Connections Wizard// on Windows XP ======
===== Introduction: =====
Although many modems, especially internal WinModems, come with configuration software, using the native //Network Connections Setup Wizard// to configure a dial-up network connection is fairly straightforward and consistent irregardless of the modem hardware. This tutorial illustrates the steps needed for an SDF Dial-up account.
===== Prerequisites: =====
Verify that the modem is installed correctly and that any required modem driver(s) are also installed. If needed, click on //Settings&gt;Control Panel&gt;System// , then select //Hardware&gt;Device Manager// and locate //Modems&gt;your_modem//. Click //Action&gt;Properties//; your modem's multi-tab Properties window will appear. If all is well the Device Status (under the General tab) box will read "This device is working properly". If it is not, consult your modem documentation to understand why. You may need to tweak your modem's settings using other tabs on the Modem Properties window.
===== Basic Setup: =====
Click //Start&gt;Settings&gt;Control Panel&gt;Network Connections&gt;New Connection Wizard//. The "Welcome to the New Connection Wizard" window will appear. Click //Next//. The following illustrates the SDF Dial-up connection creation process for fictional SDF user //mr_retro// using a built-in Lucent WinModem on a computer running Windows XP:
{{tutorials/images/dialup_winxp01.png}} {{tutorials/images/dialup_winxp02.png}}
{{tutorials/images/dialup_winxp03.png}} {{tutorials/images/dialup_winxp04.png}}
{{tutorials/images/dialup_winxp05.png}} {{tutorials/images/dialup_winxp06.png}}
{{tutorials/images/dialup_winxp07.png}} {{tutorials/images/dialup_winxp08.png}}
Click on the newly created Desktop "SDF dialup" shortcut ; the following dialog box appears. If you made any mistakes during the account creation you can make some changes by clicking on //Properties//.
{{tutorials/images/dialup_winxp09.png}} {{tutorials/images/dialup_winxp10.png}}
If all is correct click "Dial" to initiate the connection.
Once connected, you can view the connection status and details by clicking on the Network Connection icon in the system tray (just to the left of the clock, lower right-hand corner):
{{tutorials/images/dialup_winxp11.png}} {{tutorials/images/dialup_winxp12.png}}
To shutdown the dial-up connection click "Disconnect" or simply power down the computer.
$Id: dialup_winxp.html,v 1.2 2011/01/16 09:43:09 jgw Exp $

View File

@ -0,0 +1,34 @@
11/3/70
DIRECTORY (V)
NAME format of directories
SYNOPSIS
DESCRIPTION A directory behaves exactly like an ordinary file, save
that no user may write into a directory. The fact that a
file is a directory is indicated by a bit in the flag word
of its i-node entry.
Directory entries are 8 words long. The first word is the
i-node of the file represented by the entry, if non-zero;
if zero, the entry is empty.
Words 1-4 represent the (8-character) file name, space
padded on the right. These words are not necessarily
cleared for empty slots.
By convention, the first entry in each directory is
for "dd", which is the "directory directory" that holds
all the users' home directories and the "system" directory.
The "system" directory contains "init" and "sh".
FILES
SEE ALSO file system format
DIAGNOSTICS
BUGS
OWNER ken, dmr

View File

@ -0,0 +1,31 @@
====== Donating to the SDF Public Access UNIX System ======
[[#howto|Jump straight to instructions for donating]]
To quote the [[http://sdf.lonestar.org/index.cgi?faq?BASICS|SDF FAQ]]
> The Super Dimension Fortress is a networked community of free software authors, teachers, students, researchers, hobbyists, enthusiasts and the blind. It is operated as a federally recognised non-profit 501(c)7 and is supported by its members.Their mission is to provide remotely accessible computing facilities for the advancement of public education, cultural enrichment, scientific research, and recreation. Members can interact electronically with one another regardless of their location using passive or interactive forums.
To learn more about SDF, its history, and its mission, you can read
* [[http://sdf.lonestar.org/index.cgi?faq|The SDF FAQ]]
* [[http://en.wikipedia.org/wiki/SDF_Public_Access_Unix_Network|SDF's Wikipedia Entry]]
The best way to learn about SDF would be to [[http://sdf.lonestar.org/index.cgi?access|join yourself]]!
Unlike [[http://en.wikipedia.org/wiki/Public_Broadcasting_Service|American Public Broadcasting]], [[http://en.wikipedia.org/wiki/Mozilla_Firefox|The Mozilla Foundation]], and other popular non-profits, there are currently no large corporate sponsors of SDF. This means that it depends entirely on support from individuals like you.
SDF's 501(c)7 status means that donations to it are //not// tax-deductible.
----
You can donate to SDF
* Via PayPal (for donations of $5.00 or more):
* By Mail:\\ Send a check, money order, or cash ([[http://en.wikipedia.org/wiki/United_States_dollar|USD($)]], [[http://en.wikipedia.org/wiki/Canadian_dollar|CAD($)]], [[http://en.wikipedia.org/wiki/Euro|EUR(€)]], [[http://en.wikipedia.org/wiki/Pound_sterling|GBP(£)]], [[http://en.wikipedia.org/wiki/Australian_dollar|AUD($)]], [[http://en.wikipedia.org/wiki/Renminbi|RMB(¥)]], or [[http://en.wikipedia.org/wiki/Japanese_yen|JPY(¥)]]) to
SDF Public Access UNIX
PO BOX 17355
SEATTLE WA 98127 USA
* Via the donation button at the bottom of the main page: http://sdf.org
$Id: donations.html,v 1.9 2014/09/11 09:06:17 grobe0ba Exp $

View File

@ -0,0 +1,11 @@
====== Directory Tree ======
===== Dotfiles currently unavailable - contact sysadmin =====
tutorials/dotfiles\\ |-- [[tutorials/dotfiles/.abookrc_yargo|.abookrc_yargo]]\\ |-- [[tutorials/dotfiles/.bash_logout_jwodder|.bash_logout_jwodder]]\\ |-- [[tutorials/dotfiles/.bashrc_jwodder|.bashrc_jwodder]]\\ |-- [[tutorials/dotfiles/.bbkill_jbaber|.bbkill_jbaber]]\\ |-- [[tutorials/dotfiles/.bboardrc_jbaber|.bboardrc_jbaber]]\\ |-- [[tutorials/dotfiles/.elinks_jbaber/|.elinks_jbaber]]\\ | `-- [[tutorials/dotfiles/.elinks_jbaber/elinks.conf|elinks.conf]]\\ |-- [[tutorials/dotfiles/.exrc_jbaber|.exrc_jbaber]]\\ |-- [[tutorials/dotfiles/.exrc_yargo|.exrc_yargo]]\\ |-- [[tutorials/dotfiles/.fetchmailrc_yargo|.fetchmailrc_yargo]]\\ |-- [[tutorials/dotfiles/.forward_mackie|.forward_mackie]]\\ |-- [[tutorials/dotfiles/.forward_yargo|.forward_yargo]]\\ |-- [[tutorials/dotfiles/.gopherrc_yargo|.gopherrc_yargo]]\\ |-- [[tutorials/dotfiles/.ispell_english_jbaber|.ispell_english_jbaber]]\\ |-- [[tutorials/dotfiles/.mailcap_jwodder|.mailcap_jwodder]]\\ |-- [[tutorials/dotfiles/.mailcap_mackie|.mailcap_mackie]]\\ |-- [[tutorials/dotfiles/.mailcap_yargo|.mailcap_yargo]]\\ |-- [[tutorials/dotfiles/.mime.types_jwodder|.mime.types_jwodder]]\\ |-- [[tutorials/dotfiles/.mutt_jbaber/|.mutt_jbaber]]\\ | |-- [[tutorials/dotfiles/.mutt_jbaber/colors1|colors1]]\\ | |-- [[tutorials/dotfiles/.mutt_jbaber/colors2|colors2]]\\ | |-- [[tutorials/dotfiles/.mutt_jbaber/colors3|colors3]]\\ | |-- [[tutorials/dotfiles/.mutt_jbaber/colors4|colors4]]\\ | `-- [[tutorials/dotfiles/.mutt_jbaber/mailcap|mailcap]]\\ |-- [[tutorials/dotfiles/.mutt_jwodder/|.mutt_jwodder]]\\ | |-- [[tutorials/dotfiles/.mutt_jwodder/gmail|gmail]]\\ | |-- [[tutorials/dotfiles/.mutt_jwodder/gpg|gpg]]\\ | |-- [[tutorials/dotfiles/.mutt_jwodder/keys|keys]]\\ | |-- [[tutorials/dotfiles/.mutt_jwodder/muttrc|muttrc]]\\ | `-- [[tutorials/dotfiles/.mutt_jwodder/sdf|sdf]]\\ |-- [[tutorials/dotfiles/.mutt_mackie/|.mutt_mackie]]\\ | `-- [[tutorials/dotfiles/.mutt_mackie/gpg|gpg]]\\ |-- [[tutorials/dotfiles/.muttrc_jbaber|.muttrc_jbaber]]\\ |-- [[tutorials/dotfiles/.muttrc_mackie|.muttrc_mackie]]\\ |-- [[tutorials/dotfiles/.muttrc_yargo|.muttrc_yargo]]\\ |-- [[tutorials/dotfiles/.nailrc_jgw|.nailrc_jgw]]\\ |-- [[tutorials/dotfiles/.nethackrc_jwodder|.nethackrc_jwodder]]\\ |-- [[tutorials/dotfiles/.nexrc_yargo|.nexrc_yargo]]\\ |-- [[tutorials/dotfiles/.nn_init_jwodder|.nn_init_jwodder]]\\ |-- [[tutorials/dotfiles/.osh.login_jneitzel|.osh.login_jneitzel]]\\ |-- [[tutorials/dotfiles/.oshrc_jneitzel|.oshrc_jneitzel]]\\ |-- [[tutorials/dotfiles/.pinerc_dyera|.pinerc_dyera]]\\ |-- [[tutorials/dotfiles/.plan_jbaber|.plan_jbaber]]\\ |-- [[tutorials/dotfiles/.procmailrc_mackie|.procmailrc_mackie]]\\ |-- [[tutorials/dotfiles/.procmailrc_slugmax|.procmailrc_slugmax]]\\ |-- [[tutorials/dotfiles/.procmailrc_yargo|.procmailrc_yargo]]\\ |-- [[tutorials/dotfiles/.profile_jbaber|.profile_jbaber]]\\ |-- [[tutorials/dotfiles/.profile_jwodder|.profile_jwodder]]\\ |-- [[tutorials/dotfiles/.profile_xbeastx|.profile_xbeastx]]\\ |-- [[tutorials/dotfiles/.profile_yargo|.profile_yargo]]\\ |-- [[tutorials/dotfiles/.screenrc_jbaber|.screenrc_jbaber]]\\ |-- [[tutorials/dotfiles/.screenrc_jgw|.screenrc_jgw]]\\ |-- [[tutorials/dotfiles/.screenrc_jwodder|.screenrc_jwodder]]\\ |-- [[tutorials/dotfiles/.slrn_jwodder/|.slrn_jwodder]]\\ | |-- [[tutorials/dotfiles/.slrn_jwodder/scorefile|scorefile]]\\ | `-- [[tutorials/dotfiles/.slrn_jwodder/slrnhelp|slrnhelp]]\\ |-- [[tutorials/dotfiles/.slrnrc_jwodder|.slrnrc_jwodder]]\\ |-- [[tutorials/dotfiles/.snownews_jbaber/|.snownews_jbaber]]\\ | |-- [[tutorials/dotfiles/.snownews_jbaber/browser|browser]]\\ | |-- [[tutorials/dotfiles/.snownews_jbaber/colors|colors]]\\ | |-- [[tutorials/dotfiles/.snownews_jbaber/html_entities|html_entities]]\\ | `-- [[tutorials/dotfiles/.snownews_jbaber/keybindings|keybindings]]\\ |-- [[tutorials/dotfiles/.subversion_config_jwodder|.subversion_config_jwodder]]\\ |-- [[tutorials/dotfiles/.tcshrc_jgw|.tcshrc_jgw]]\\ |-- [[tutorials/dotfiles/.vimrc_jwodder|.vimrc_jwodder]]\\ |-- [[tutorials/dotfiles/README|README]]\\ `-- [[tutorials/dotfiles/index.html|index.html]]\\ \\
6 directories, 61 files \\ \\
----
tree v1.5.0 (c) 1996 - 2004 by Steve Baker and Thomas Moore \\ HTML output hacked and copyleft (c) 1998 by Francesc Rocher \\ Charsets / OS/2 support (c) 2001 by Kyosuke Tokoro

7
dump/dsl.html.docuwiki Normal file
View File

@ -0,0 +1,7 @@
=== Configuration and Use of SDF's DSL INTERNET Service ===
* A Brief Introduction to DSL
* An Overview of the Equipment
* A Basic Configuration
* A Local Area Network
* [[#dns|DNS Servers]]\\ ===== [[|DNS Servers]] =====[[http://www.opendns.com/|opendns.com]]\\ \\ \\ [[https://www.lifewire.com/free-and-public-dns-servers-2626062|here]]\\ $Id: dsl.html,v 1.6 2019/11/15 18:37:39 thegiant Exp $

View File

@ -0,0 +1,254 @@
====== E-Mail, Advanced Topics ======
This tutorial discusses advanced topics concerning e-mail on SDF: spam filtering, automatic processing, forwarding. It is probably only useful for ARPA members.
==== Contents ====
- [[#intro|Introduction, and what this is //not//]]
- [[#forward|Forwarding E-Mail]]
- [[#fetch|Fetching E-Mail]]
- [[#spam|Fighting Spam]]
- [[#whitelist|Personal White List Against Spam]]
- [[#dnsbl|Using Procmail With a DNSBL]]
- [[#ssh-smtp|Use SDF SMTP Server Remotely via SSH]]
----
===== [[|Introduction, and what you //will not// find here]] =====
Here we discuss advanced topics for e-mail processing on SDF, mainly automatic processing of incoming messages with "procmail", and forwarding issues. As "procmail" is only available to ARPA members, the contents of this tutorial will be mostly useless to user members. \\ For basic info about e-mail (addresses, reader programs, file size, etc), please read the corresponding [[http://sdf.lonestar.org/index.cgi?faq?EMAIL|FAQ]] entry - and if you still have problems with basic sending and receiving of messages via SDF, this tutorial is most probably not for you!
===== [[|Forwarding E-Mail]] =====
The "sendmail" system allows for automatic forwarding of incoming mail to other addresses or even programs (filters).\\ The file "$HOME/.forward" may contain the following types of lines:
somebody@somewhere.comexternal e-mail address, where a copy of each mail will be sent|"filterprogram"will pipe the incoming messages through "/bin/sh" with the argument "filterprogram"
However, if you want to do more than forwarding to one address, use of "procmail" is highly recommended! In fact, it is best to set up [[#nospam|nospam -e]], which will generate a .forward file with a line calling procmail, and then to modify the resulting ".procmailrc".
===== [[|Fetching E-Mail]] =====
Use "fetchmail" to collect messages from accounts you might have elsewhere. The messages are given to "procmail" (see [[#forward|Forwarding E-Mail]] above) for further processing.
==== [[|Sample ".fetchmailrc"]] ====
poll pop.provider.net
proto pop3
user "john.doe"
pass "secret"
is "jdoe" here
mda "/path/to/procmail -f- ~/.procmailrc"
ssl;
===== [[|Fighting Spam]] =====
To fight unwanted bulk e-mail (spam), there are several possibilities available on SDF:
- As a general remark, think before you publish or tell somebody your e-mail address! And try to make clear to people that you don't want your address on a visible list of 500 recipients from somebody's address book; one should use Bcc: for sending to a lot of people in parallel, not To:!
- SDF also supports plus-addressing; you can use this to join mailing lists and do filters. This can be used by adding +something before the @ in your email address.
- The [[http://sdf.lonestar.org/index.cgi?faq?EMAIL?07|FAQ]] has more information about [[#nospam|nospam]], available on SDF.
- The automatic mail processor "procmail" (see "man procmail" for more information) allows to filter incoming mail following user defined rules; in particular, you can generate a [[#whitelist|white list]] of sender addresses you know as good, and put messages from other addresses into a special folder which you browse through now and then, to check for good messages and adding the corresponding addresses to your white list.
==== [[|nospam]] ====
"nospam" is a script which can set up .forward and .procmailrc files so that certain e-mails will be stored in "bulk folders". \\ "nospam -i" gives some additional information, and "nospam -e" will enable this filtering. We will suppose that this has been done also for the following discussion of [[#whitelist|white lists]].
===== [[|Personal White List Against Spam]] =====
//White lists// contain e-mail addresses which are always to be accepted as good. It is easy to implement this with "procmail": Supposing that "nospam -e" has been executed, so that basic procmail processing is set up, one can add the following fragment to ".procmailrc".
//Note:// For this to be working, the following //must// have been set up:
* a ".forward" file which pipes incoming e-mail through "procmail"
* a standard ".procmailrc" file, where this fragment is attached or inserted
The easiest method to install these files is by launching "nospam -e" as mentioned [[#nospam|above]], then adding the fragment to the generated ".procmailrc". \\ (Of course, it is possible to deactivate or delete all the initial procmailrc lines generated by nospam, which move messages with attachments to the bulk folder, if such messages should pass through the whitelist filter.)
# procmail spamfilter using whitelist (2006 Yargo Bonetti)
# :: use at your own risk and any way you want! ::
# whitelist: file containing one valid e-mail address per line
# (only generic xxx@yyy.zz form, without "Name.." &lt;*&gt; parts)
WHITELIST=$MAILDIR/.whitelist
# spamfilter
FROM=`formail -c -x 'From:'|sed -e 's/.*&lt;\(.*@[^&gt;]*\)&gt;.*/\1/'`
:0 hb:
* ! ? grep -i -F -e "$FROM" $WHITELIST &gt;/dev/null
$MAILDIR/quarantine
This will compare the address in the From: field of incoming messages to the ones saved in the file $MAILDIR/.whitelist (of course, name and location can be changed), and when an address is //not found// in this file, the message will be saved in the folder $MAILDIR/quarantine (which can be modified as well) and not show up in the normal Inbox (and not be processed further). Now and then, one can look through the quarantine folder for "good messages", and add the corresponding addresses to the .whitelist file.
If you want to use the mail directories proposed by nospam, you may prepend the above noted fragment by
MAILDIR=$HOME/mail
which will result in storing the "possibly bad" messages in "~/mail/quarantine" and expect the whitelist in "~/mail/.whitelist".
A sample .whitelist may look like this:
my.friend@his.domain.com
president@whitehouse.gov
myself@gmail.com
All messages not coming from these three addresses would end up in the "quarantine" folder defined in the .procmailrc fragment.
===== [[|Using Procmail With a DNSBL]] =====
DNSBL stands for "DNS blacklist", and it is essentially a collection of IP addresses known to send out spam and other bad stuff. Two popular DNSBLs are [[http://www.spamcop.net|SpamCop]] and [[http://www.spamhaus.org|Spamhaus]]. Typically the mail server will check the source of incoming mail with the DNSBL before even accepting the message. SDF does not do this, but using Procmail to check a DNSBL at the user level is easy. In this tutorial we will use Spamhaus.
(Thank you [[http://www.benya.com/procmail/#dnsbl|Benya]] for the original instructions.)
First make sure that "~/.forward" is set-up to forward incoming mail to Procmail. Then we'll edit "~/.procmailrc". The beginning of this file should declare basic variables such as "SHELL=/bin/sh", "LOGFILE=$HOME/.procmaillog", "ORGMAIL", "DEFAULT", and "MAILDIR". "ORGMAIL" and "DEFAULT" should point to your inbox, and "MAILDIR" should point to the directory that contains your saved mail.
Next Procmail should extract the IP address from which the message was sent. This is done using "formail" to get the headers, "grep" to find the correct line, and "sed" to find the actual IP address, which is then saved as "SENDERIP".
SENDERIP = `formail -c -XReceived | grep "by sdf.lonestar.org" | \
grep -v "from sdf.lonestar.org" | \
sed "s/^Received: from .*\[\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)\].*by sdf.lonestar.org.*$/\1/"`
Then we'll begin the actual Procmail recipe, which will only be executed after checking to make sure that the "SENDERIP" variable exists and is in the correct format. Anything written to the "LOG" variable will be inserted into the log file. (New lines must be explicitly stated.)
:0
* SENDERIP ?? ^^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*^^
{
LOG = "The sender's IP address is "
LOG = $SENDERIP
LOG = "
"
The next step is to reverse the IP address because Spamhaus wants it that way. Procmail will then use "host" to determine the IP address that [reversed IP address].zen.spamhaus.org resolves to.
SENDER_REVERSED = `expr "$SENDERIP" | \
sed "s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\4.\3.\2.\1/"`
KNOWNOFFENDER = `host "$SENDER_REVERSED".zen.spamhaus.org | \
sed "s/^.*\(127\.0\.0\.[0-9]*\)$/\1/"`
If Spamhaus returns an IP address between 127.0.0.0 and 127.0.0.9, then we know that this particular email is of dubious origin. In that case we can put it in the folder "$MAILDIR/Spam". Otherwise, the message will get written to your inbox by default.
:0
* KNOWNOFFENDER ?? ^^127.0.0.[0-9]*^^
{
LOG = "This sender is a known source of spam.
"
:0:
Spam
}
LOG = "This sender is not a known source of spam.
"
}
This completes the Procmail recipe.
\\
===== [[|Use SDF SMTP Server Remotely via SSH]] =====
==== Introduction: ====
Using SSH's port-forwarding capabilities, MetaARPA members can create an encrypted tunnel which makes the SDF SMTP mail server appear local, avoiding need for authentication or additional encryption.
**Prerequisites:**
* SDF MetaARPA membership
* SSH plus suitable MUA (email program)
* public key authentication (optional)
==== Tunnel Construction: ====
Port-forwarding can occur on ports 53, 110, 143, 443, and 993 on most SDF hosts.
> **ex:**\\ Use port //443// on SDF host //"otaku"//, tunnel local port //2525// to port //25// on SDF host //"mx"// (SMTP server); restrict\\ ssh to IPv4, no remote commands, run in background after connecting:
% **ssh -4 -fN -p 443 -L 2525:mx:25 sdf_user@otaku.sdf.org**
Note if public key authentication isn't setup a password prompt occurs.
==== Tunnel Test: ====
//telnet(1)// can be used; type //"quit"// to exit session:
> % **telnet localhost 2525**
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 sdf.lonestar.org ESMTP Sendmail 8.14.5/8.14.3; Tue 13 Dec 2011 07:45:59 GMT
**quit**
221 2.0.0 sdf.lonestar.org closing connection
Connection closed by foreign host.
==== Tunnel Usage: ====
Configure MUA to use //"127.0.0.1"// (localhost), port //2525// for out-going messages. Also ensure the //From:// and //ReplyTo:// addresses are routeable. Handling of rejected email is MUA-dependent - some do queuing, others write to //$HOME/dead.letter// or ///dev/null//:
> **ex:**\\ Configure and test the //Heirloom Mailx// MUA for user //"frog"// on localhost //"mud.bog"//\\ to use //"localhost:2525"// for SMTP (off-site email):
# **//$HOME/.nailrc//**"
set smtp="localhost:2525"
set from="You &lt;someone@sdf.org&gt;"
set replyto="You &lt;someone@sdf.org&gt;" "
% **hmail -v someone@sdf.org**
Subject: tunneled SMTP test
test 123
.
Resolving host localhost . . . done.
Connecting to 127.0.0.1:2525 . . . connected.
220 sdf.lonestar.org ESMTP Sendmail 8.14.5/8.14.3; Tue, 13 Dec 2011 08:21:22 GMT
&gt;&gt;&gt; HELO mud.bog
250 sdf.lonestar.org Hello IDENT:root@otaku.sdf.org [192.94.73.6], pleased to meet you
&gt;&gt;&gt; MAIL FROM:
250 2.1.0 ... Sender ok
&gt;&gt;&gt; RCPT TO:
250 2.1.5 ... Recipient ok
&gt;&gt;&gt; DATA
354 Enter mail, end with "." on a line by itself
&gt;&gt;&gt; .
250 2.0.0 pBD8LM7d000515 Message accepted for delivery
&gt;&gt;&gt; QUIT
221 2.0.0 sdf.lonestar.org closing connection
==== Tunnel Teardown: ====
The SSH tunnel can be torn down by identifying the appropriate PID (process ID) and sending it a //kill// signal, via the //kill(1)// command or similar tool. The following illustrates the teardown process using //sockstat(1)// to determine the PID on the //NetBSD// operating system:
> % **sockstat -np 2525**
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
frog ssh 24362 7 tcp 127.0.0.1.2525 *.*
% **kill -HUP 24362**
Killed by signal 1.
==== Tunnel Maintenance: ====
Network connections can fail for various reasons; a keep-alive script can help:\\ (script contributed by SDF user //nullogic// - thanks!)
> "
#!/bin/bash
# sdftun.sh: Keep alive script for local ssh tunnel from home to SDF SMTP
SSH_USER=
SSH_HOST='faeroes.freeshell.org'
SSH_PORT=443
SSH_ARGS='-N -f -L'
TAG_HOST=mx
TAG_PORT=25
LIS_PORT=8080
LOG_FILE=~/l0g/sdftun.log
SLEEP="30m"
while [ 1 ]; do
SSH_PID=`ps aux | sed -n -e /sed/d -e /ssh\ \-N/p | wc -m`
if [ $SSH_PID -eq 0 ]; then
ssh $SSH_ARGS $LIS_PORT:$TAG_HOST:$TAG_PORT $SSH_USER@$SSH_HOST \
-p$SSH_PORT &amp;&gt;/dev/null
DATE_TIME=`date '+%y.%m.%d %T'`
echo "$DATE_TIME SSH Tunnel restarted."&gt;&gt;$LOG_FILE
fi
sleep $SLEEP
done
"
Writing the PID to a file at the time of tunnel creation can simplify the ID process.
**References:**
* Setting up [[http://sdf.org/?tutorials/SSH-SDF#public_key|Public Key Authentication]]
* OpenSSH FAQ: How do I use [[http://openssh.com/faq.html#2.11|Port Forwarding?]]
----
$Id: e-mail-advanced.html,v 1.17 2012/01/06 21:53:01 jgw Exp ruscorp $

View File

@ -0,0 +1,146 @@
====== E-Mail, Basics ======
This tutorial covers the basics of accessing E-mail on SDF. Topics include command-line and remote access. Configuration of mail retrieval programs ("fetchmail", "getmail") and Mail User Agents (such as Mozilla Thunderbird) will also be covered.
==== Contents ====
- [[#intro|Introduction, and what this is //not//]]
- [[#reading|Reading E-mail on SDF]]
- [[#fetch|Fetching E-Mail with "fetchmail" or "getmail"]]
- [[#webmail|Accessing SDF E-mail via Webmail]]
- [[#guimua|Configuring Graphical Mail User Agents]]
- [[#ios|Configuring Mail in iOS (as a MetaARPA member)]]
----
===== [[|Introduction, and what you //will not// find here]] =====
For basic info about e-mail (addresses, reader programs, file size, etc), please read the corresponding [[http://sdf.lonestar.org/index.cgi?faq?EMAIL|FAQ]] entry. Continue reading for more information about using E-mail services at SDF.
If you want to use a SDF's SMTP server to send mail, you must either log in and use one of the clients as described in [[http://sdf.org?tutorials/e-mail-beginners|the previous tutorial]], or register at an appropriate [[http://sdf.lonestar.org/index.cgi?faq?MEMBERS?01|membership level]] (VPM, VHOST, or MetaARPA) and [[http://sdf.org?tutorials/smtpauth|connect using SMTP AUTH]].
===== [[|Reading E-Mail on SDF]] =====
Multiple mail clients are available to be used from the shell, including "pine" and "mutt".
===== [[|Fetching E-Mail with "fetchmail", "getmail" or "offlineimap"]] =====
==== [[|Sample ".fetchmailrc"]] ====
You can use "fetchmail" to retrieve messages from your SDF account. The "fetchmail" example below is configured to use POP3 to retrieve E-mail. Note that this configuration does not use SSL. Also note that you will need to provide your user names and the path to procmail. You may omit the "pass" line to be prompted for your password. "fetchmail" can be run in //daemon// mode to retrieve mail at a desired interval: "fetchmail -d 900".
poll wm.sdf.org
proto pop3
user "sdf.username"
pass "secret"
is "local.username" here
mda "/path/to/procmail -f- ~/.procmailrc";
==== [[|Sample ".getmail/sdf"]] ====
"wm.sdf.org" supports IMAPs in addition to POP3. This configuration //will// use SSL. A IMAP configuration (sans SSL) is commented out below. Use "getmail" to collect messages. Note that you will have to provide local and remote user names and you will be prompted for your password. Also note that this configuration uses procmail as a delivery agent.
[destination]
type=MDA_external
path=/usr/bin/procmail
arguments=("-dlocal.username",)
[options]
read_all=False
delete=False
[retriever]
type=SimpleIMAPSSLRetriever
#type=SimpleIMAPRetriever
server=wm.sdf.org
username=remote.username
#password=
port=993
#port=143
You could alternatively configure, for instance, a Maildir destination if you would prefer not to use "procmail":
[destination]
type = Maildir
path = ~/Maildir/
==== [[|Sample ".offlineimaprc"]] ====
Another option to retrive E-mail is "offlineimap". The example below uses it to retrive messages with IMAP, using SSL for encryption, and storing them in Maildir format. The first option "accounts" contain a comma separated list of accounts to sync, "acc1" and "acc2" are given as an example, they are not needed if you are only syncing the sdf account. You may also need to adjust the value of "cert_fingerprint" from time to time.
accounts = acc1,acc2,sdf
[Account sdf]
localrepository = sdf-local
remoterepository = sdf-remote
[Repository sdf-local]
type = Maildir
localfolders = ~/Maildir
restoreatime = no
[Repository sdf-remote]
type = IMAP
ssl = yes
cert_fingerprint = 204b2c6188ce0d38fa1eb3e5db6e88af4e05f868
remotehost = mx.sdf.org
remoteport = 993
remoteuser = isf
===== [[|Accessing SDF E-mail via Webmail ]] =====
General users visit [[https://wm.sdf.org|wm.sdf.org]], MetaARPA members visit [[https://ma.sdf.org|ma.sdf.org]] if you've forwarded your mail to the MetaArray.
===== [[|Configuring Graphical Mail User Agents]] =====
==== Mozilla Thunderbird Configuration ====
//Server Settings// Server Type: IMAP Mail Server \\ Server Name: mx.sdf.org \\ Port: 993 \\ User Name: remote.username \\
//Security Settings// Connection security: SSL/TLS \\ Use secure authentication: (unchecked) \\
==== Apple Mail ====
Mail » Preferences » Accounts \\ Click +
Enter your name and SDF E-mail address, then click "Continue".
//Incoming Mail Server// Account Type: IMAP \\ Description: SDF \\ Incoming Mail Server: mx.sdf.org \\ User Name: remote.username \\ Password: remote.password \\ Click "Continue"
Use your ISP's SMTP server for outgoing mail - unless you opt for an SDF membership level that allows SMTP, in which case see the [[http://sdf.org?tutorials/smtpauth|smtpauth tutorial]]. \\ Click "Continue"
You should now see an account summary page. Verify the summary and click "Create". \\ You can now return to the Accounts preferences, select "Advanced", and if necessary add:\\ IMAP Path Prefix: INBOX \\
==== Outlook 365 for Windows 10 ====
This one's not as obvious as you'd think. You'll need to close Outlook to begin with, and run this command. Click Start and then type:
outlook.exe /manageprofiles
then click on __E__mail Accounts... » New... » Manual setup or additional server type » Next » POP or IMAP » then fill in the form:
Your Name: Filbert Exampleton\\ Email Address: efilbert@sdf.org\\ Account Type: IMAP\\ Incoming mail server: mx.sdf.org\\ Outgoing mail server: fill this in with a valid SMTP\\ User Name: efilbert\\ Password: ednaedison123\\
then click More Settings... » Outgoing Server » My outgoing server (SMTP) requires authentication » Log on using » fill in the fields witn your smtp » OK » next
Outlook will perform a connection test, and after it passes, you can exit the wizard and configuration program. When you start Outlook back up, the SDF mail account should appear. What a friggin headache.
==== [[|Configuring Mail in iOS (as a MetaARPA member)]] ====
This can likely be done as an ARPA member, refer to system help or "bboard" for more information.
* Open **Settings** and select **Mail, Contacts, and Calendars**
* Select **Add Account**, then **Other**
* Select **Add Mail Account** and fill in the relevant information.
Automatic setup will fail. Once prompted, enter the following server information:
* Incoming Mail Server
* Host Name: "wm.sdf.org"
* User Name: "your sdf username"
* Password: "your sdf password"
$Id: e-mail-basics.html,v 1.19 2019/09/09 14:45:09 jawsh Exp $

View File

@ -0,0 +1 @@
**E-mail Beginners at a UNIX prompt**\\ \\ If you are new to UNIX you might like this tutorial to help you start sending and receiving E-mail at SDF. You should be a verified member before you can start using E-mail at SDF. \\ \\ Assuming you have already logged into and started using SDF a little, you should be comfortable with the command line by now. All you need to start sending and receiving E-mail is your E-mail Address and an E-mail Client. \\ \\ By default your E-mail Address is your SDF username, and you can choose the domain you would like to use from the list of SDF domain names. \\ \\ So if your username is "coffee" you can try sending yourself a mail with your existing E-mail account to: \\ \\ coffee@freeshell.org \\ \\ If you do not have an existing E-mail account you may wish to have another SDF member send you a test mail, sometimes E-mail boxes do not work properly until a test mail has been sent. \\ \\ Now log into SDF and type the command "alpine". This will open up a terminal based E-mail client where you can send and receive mail. All of the commands to operate alpine are listed on the bottom of the terminal, and generally speaking you just have to tap a key to operate. \\ \\ It is pretty self explanatory. \\ \\ The first time you open alpine you might have to answer a few questions, but generally if you just tap enter a couple times after opening alpine you will be in your E-mail inbox. At that point you can use the up and down arrow keys to navigate through emails and press enter on the one you would like to read. After reading the mail you can reply by tapping 'r'. To send the mail you will have to hold down the Ctrl key and tap 'x'. \\ \\ All controls which require holding down the Ctrl key and tapping another key will be signified with the '^' symbol in the command list. So if you see **^R** that means you should hold down Ctrl and tap 'r' to do that command. \\ \\ To return to the message index (your inbox) you will see the command list states '&lt;'. Thus you simply type a '&lt;' by holding down the shift key and tapping the '&lt;' key. \\ \\ There are many other methods of sending and receiving mail at SDF, and they are all quite easy to learn and self explanatory. You can experiment with 'mutt' (another terminal based mail client) by typing the command 'mutt' at the terminal, and you can read further E-mail tutorials for setting up visual mail clients on your local computer. \\ \\ Continue to [[http://sdf.org?tutorials/e-mail-basics|E-Mail Basics]]\\ \\ You can also view the [[http://sdf.lonestar.org/index.cgi?faq?EMAIL|E-mail FAQ]].

View File

@ -0,0 +1,39 @@
====== E-Mail Blacklist Issues ======
Because SDF is a public unix, there are many users, and many emails being sent.
Sometimes, some users can get SDF into trouble with their actions, unintentional or not. When this happens, you may not be able to send emails to people at some other Internet Service Providers. You may get emails with subject //Returned mail: see transcript for details// including error message like the following after sending mail to these correspondees:
* (reason: 550 5.7.1 Unfortunately, messages from [205.166.94.20] weren't sent. Please contact your Internet se...ail.live.com/mail/troubleshooting.aspx#errors.
* 421 4.7.0 [TSS04] Messages from 205.166.94.20 temporarily deferred due to user complaints - 4.16.55.1; see https://help.yahoo.com/kb/postmaster/SLN3434.html.. Deferred: 421 4.7.0 [TSS04] Messages from 205.166.94.20 temporarily deferred due to user complaints - 4.16.55.1; see https://help.yahoo.com/kb/postmaster/SLN3434.html
* The following addresses had permanent fatal errors... (reason: 554 resimta-ch2-19v.sys.comcast.net resimta-ch2-19v.sys.comcast.net 205.166.94.20 found on one or more DNSBLs, see http://postmaster.comcast.net/smtp-error-codes.php#BL001000)
If this happens, aside from contacting //membership// on [[http://sdf.org/?tutorials/bboard-tutorial|bboard]] //REQUESTS//, you can also try to get SDF off the blacklist for your emails to your correspondee.
Fill out forms for the following ISPs. //you may need to create an account of your own on the target ISP so you will also be a customer//. You should go ahead and represent yourself as a representative of SDF.
Stuff to know:
* SDF server mail IP = **205.166.94.20**
* SDF mail server IP = **mx.sdf.org**
* SDF mail reverse DNS = **mx.sdf.org**
* SDF mail contact, //you// and/or membership@sdf.org
===== List of Forms and Related pages for major ISPs that may block SDF mail =====
* yahoo uses spamhaus, apparently, so you can use yahoo's request page, and also Spamhaus
* yahoo: here's a guide on [[https://www.rackaid.com/blog/how-to-remove-your-email-server-from-yahoos-blacklist/|how to fill out Yahoo's bulk email sender form]] (even if you are just a regular emailing schlub). [[http://help.yahoo.com/l/us/yahoo/mail/postmaster/bulkv2.html|Yahoo! Bulk Email Sender Form]]
* another customer contact form [[https://io.help.yahoo.com/contact/index?page=contactform&locale=en_US&token=Zh/BBVqXzLHlIbokbUqVWTUbuuQeXGkGnZzhKR2JQ4O6mMQdy9JSWdtWFXvjthcYCRj9bUIFfycOfG+4GOHPHoOGa8HwDO2+0kYRtTcdR8O13Mvs9cOruJ0TlC3hh4bCEtPlZ0yk7fvp1MFjGnAOWw==&selectedChannel=email-icon&isVip=false|https://io.help.yahoo.com/contact/index?page=contactform&amp;locale=en_US...]]
* spamhaus https://www.spamhaus.org/lookup/
* outlook https://support.microsoft.com/en-us/supportrequestform/8ad563e3-288e-2a61-8122-3ba03d6b8d75
* comcast https://abuse.vadesecure.com/
Other items to check out:
* for outlook [[https://sendersupport.olc.protection.outlook.com/snds/JMRP.aspx?wa=wsignin1.0|sender support link]]
* [[http://mailspike.org/iplookup.html|mailspike.org]] maybe related to Comcast
* [[https://support.proofpoint.com/dnsbl-lookup.cgi?ip=205.166.94.20|Proofpoint]] - they fix stuff for some ISPs, maybe Apple?
* https://support.google.com/mail/troubleshooter/2696779?hl=en - Google Gmail blacklist removal request
* https://talosintelligence.com/reputation_center/lookup?search=205.166.94.20 - Talos Intelligience Reputation Look up. Requires a "CISCO" login to dispute reputation.
$Id: e-mail-blacklist-issues.html,v 1.10 2020/06/25 17:20:07 peteyboy Exp $

View File

@ -0,0 +1,160 @@
====== Using ECL (Embeddable Common-Lisp) on SDF ======
==== Contents: ====
* [[#what|What is ECL?]]
* [[#compare|ECL vs CLISP]]
* [[#basics|ECL Basics]]
* [[#oneliners|ECL one-liners]]
* [[#asdf|ASDF]]
* [[#customize|Customizations]]
* [[#refs|References]]
===== What is ECL? =====
ECL stands for //Embeddable Common-Lisp// and is a free open source ANSI Common-Lisp implementation. Its distinguishing attributes are maintaining a small-footprint, and being embeddable with existing C/C++ applications. ECL is LGPL licensed and hosted at [[http://ecls.sourceforge.net/|ecls.sourceforge.net]].
ECL-11.1.1 is currently available to MetaARPA members on most SDF hosts.
===== ECL vs CLISP =====
There are currently two Common-Lisp implementations available on SDF; ECL and CLISP. Both are largely compliant with the ANSI Common-Lisp standard. Each supports various object systems, debugging, bytecode compiling, unicode, sockets, streams, etc. CLISP comes with built-in readline support; ECL doesn't, though it can be added; see the [[#asdf|ASDF]] section. In addition to being smaller and faster than CLISP, ECL can be embedded in C/C++ programs, allow embedded C/C++ code in Lisp programs, and produce stand-alone ELF executables. ECL is also very well documented.
===== ECL Basics =====
By default ECL starts up in interactive mode. Log into SDF host //miku// and type "'ecl'"; you should see something like below:
ECL (Embeddable Common-Lisp) 11.1.1
Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya
Copyright (C) 1993 Giuseppe Attardi
Copyright (C) 2000 Juan J. Garcia-Ripoll
ECL is free software, and you are welcome to redistribute it
under certain conditions; see file 'Copyright' for details.
Type :h for Help.
Top level.
&gt;
The default ECL prompt is "&gt;". Enter Common-Lisp commands in the usual way:
&gt; (+ 1 2 3)
6
&gt; (* 4 5)
20
&gt; (format t "hello SDF~&amp;")
hello SDF
NIL
&gt;
In-line help is available ; type :h for options. The debugger can be entered using "(break)" ; once entered typed :h to see options. To exit the ECL interactive session type ":exit" .
===== ECL one-liners =====
To use ECL as a script executor (ie. CGI) the //-shell// and/or //-eval// options can be used. The //-norc// is often a good addition so as to avoid unnecessary loading of modules, etc.
ex: hello.lsp
% echo '(format t "~&amp;Hello SDF~&amp;")' &gt; hello.lsp
% ecl -norc -script hello.lsp
Hello SDF
It's also possible to use ECL to execute simple Common-Lisp one-liners at the command line (note that //princ// is needed for screen output):
% ecl -norc -shell /dev/null -eval "(princ (* 1 2 3))"
6
A nicer way to accomplish the same is to create a small shell script:
#!/bin/sh
# lispit - executes a lisp expression and dumps it to stdout
LSP_EXPR=${@}
if [ "$#" -eq 0 ]; then
echo "lispit - executes a lisp expression"
echo " usage: lispit '(lisp_expression)'"
echo ""
exit 1
fi
ecl -norc -shell /dev/null -eval "(princ ${LSP_EXPR} )"
echo ""
exit 0
Example run:
% lispit '(mapcar (lambda (x) (expt x 2)) `(1 2 3 4 5))'
(1 4 9 16 25)
===== ASDF / enabling readline =====
ASDF (//Another System Definition Facility//) is an extensible build facility for Common-Lisp software. ECL comes with ASDF bundled in, however on SDF, users must setup their own ASDF repository under their $HOME directory.
The following outlines the process, using the //ecl-readline// module (adds GNU readline support to ECL) as example:
1) Create the user-level ASDF repository:
% mkdir -p $HOME/LISP/ASDF
2) Create the ASDF config directory and config file*:
% cd $HOME
% mkdir -p .config/common-lisp/source-registry.conf.d
% vi .config/common-lisp/source-registry.conf.d/asdf.conf
# ../asdf.conf
;;additional directory for ASDF to search (no recursion):
(:directory "/LISP/ASDF/")
*note: you can call the conf file anything you want.
3) Download ecl-readline module and copy select files to $HOME/LISP/ASDF:
% cd /tmp
% snarf http://www.common-lisp.net/project/ecl-readline/releases/ecl-readline-0.4.1.tar.gz
% tar xzf ecl-readline-0.4.1.tar.gz
% cd ecl-readline-0.4.1/
% cp ecl-*.* $HOME/LISP/ASDF/
4) Create the ECL startup file:
# $HOME/.eclrc
(require 'asdf)
(asdf:operate 'asdf:load-op 'ecl-readline)
(ecl-readline::enable)
The next time you startup ECL it will compile the ecl-readline module and launch an interactive session. With ecl-readline enabled the default ECL prompt is "//CL-USER[n]&gt;//" and you should then be able to use Emacs-style command editing and history recall. If you don't like the provided prompt you can change it by editing the //ecl-readline.lisp// file.
===== Customizations =====
Additional modifications can be made to the ECL startup file, such as user-defined functions and tweaks to various modules. Below is a more nuanced example which reduces the verbosity at startup, modifies ecl-readline's history file location, and adds an external SHELL function similar to that found in CLISP:
# $HOME/.eclrc
(require 'asdf)
(setf ASDF:*ASDF-VERBOSE* nil) ; quiets ASDF output some
(setf *load-verbose* nil) ; quiets the LOAD process some
(asdf:operate 'asdf:load-op 'ecl-readline)
(ecl-readline::enable :history-file "/var/tmp/.ecl-history")
;;
;; customizations
;; GNU clisp-like SHELL cmd
(defun shell (&amp;optional (shell_cmd "$SHELL"))
"Args: (&amp;optional shell_cmd)
SHELL calls the EXT:SYSTEM function. Executes SHELL_CMD if given, otherwise
User sub-shell is spawned. SHELL_CMD be string or symbol, 256 characters max."
(ext:system shell_cmd))
===== References: =====
* //ecl(1)// and //ecl-config(1)// manpages
* http://ecls.sourceforge.net/
* [[http://common-lisp.net/project/asdf/|http://common-lisp.net/project/asdf]]
* [[http://common-lisp.net/project/ecl-readline/|http://common-lisp.net/project/ecl-readline]]
* [[http://www.cliki.net/Getting%20Started|Getting Started with Common-Lisp]]
----
$Id: ecl_tutorial.html,v 1.4 2011/12/12 18:10:28 jgw Exp $

55
dump/ed.html.docuwiki Normal file
View File

@ -0,0 +1,55 @@
====== ed Cheat Sheet ======
ed is a small, powerful, line-oriented, command-line-interfaced text editor. All editors frustrate, but ed often amazes while others disappoint.
[[http://www.gnu.org/fun/jokes/ed.msg.html|ed, man! !man ed]] — ed is the standard text editor.
"man ed" for more information.
Start ed from your shell command line:
"ed //file//"
Edit file by entering ed commands with the following syntax:
"[//range//][//command//]"
//range// specifies the line or block of consecutive lines (syntax: "//from-line//,//to-line//") to which //command// is applied. Default range is the current line except where noted below with a parenthesis preceding the command syntax. Lines are specified as follows:
| //n// | line //n// | "." | current | "$" | last | "'"//c// | mark //c// |
| "-"[//n//] | up //n// (default: 1) | "+"[//n//] | down //n// (default: 1) | "," | 1,$ | ";" | .,$ |
| "?//re//?" | previous regexp match |||| "///re///" | next regexp match |||
===== Input commands =====
| "a" | Append after. | "c" | Change range. | "i" | Insert before. | "." | End input mode. |
===== Edit commands =====
| "d" | Delete. | "s///re/////s///[g|//n//][p]" | Substitute. |
| "m[//line//]" | Move after //line//. | "t[//line//]" | Copy after //line//. |
| "(.,+)j" | Join lines. | "u" | Undo. |
| "(1,$)g///re/////cmds//" | Perform //cmds// for all matching lines. | "(1,$)v///re/////cmds//" | Perform //cmds// for all non-matching lines. |
===== File commands =====
| "e [//file//<sup>*</sup>]" | Edit //file//. | "E [//file//<sup>*</sup>]" | Edit, discarding changes. |
| "($)r [//file//]" | Read and append. | "f [//file//]" | Set/display file name. |
| "(1,$)w [//file//<sup>*</sup>]" | Write. | "(1,$)W [//file//<sup>*</sup>]" | Append to //file//. |
| "(1,$)wq [//file//<sup>*</sup>]" | Write and quit. |
| <sup>*</sup> | In place of //file//, specify ""!"//shell-command//" to read/write text to //shell-command// standard output/input. |
===== Display commands =====
| "p" | List lines. | "l" | … with unprintables. | "n" | … with numbers. |
| "(+)z[//lines//]" | Scroll. | "(+)//null//" | "p" |
===== Other commands =====
| "k//c//" | Mark line. | "($)=" | Display line number. | "h" | Last error text. |
| "!//shell-command//" | Execute //shell-command//. | "q" | Quit. | "Q" | Quit, discarding changes. |
----
$Id: ed.html,v 1.5 2007/10/09 00:27:11 papa Exp $

View File

@ -0,0 +1,190 @@
====== Emacs Cheatsheet ======
[[#sec1|Basic Movement and Editing Commands]][[#sec2|Kill &amp; Yank (Cut/Copy and Paste)]][[#sec3|Search &amp; Replace]][[#sec4|Emacs Modes]][[#sec5|Buffers]][[#sec6|Windows]][[#sec7|Dired Mode]][[#sec8|Shell Modes]][[#sec9|Getting Help]][[#sec10|w3m mode]][[#sec11|Sample .emacs]]
===== Basic Movement and Editing Commands =====
| C-x C-f | Find file and load into buffer (Emacs prompts for filename) |
| C-x C-s | Save the current buffer |
| C-x C-w | Save the current buffer under a different name (Emacs prompts for the new name) |
| C-x C-c | Quit Emacs, prompting if you have not saved any buffers |
| Arrow keys or C-f, C-b, C-n, C-p | Right (forward), left (back), down (next), up (previous), respectively |
| C-k | Delete from cursor to end of line |
| C-a | Go to start of line |
| C-e | Go to end of line |
| C-v | Go down a page |
| M-v | Go up a page |
| M-f | Go to next word |
| M-b | Go back one word |
| M-a | Go to previous sentence |
| M-b | Go to next sentence |
| C-/ | Undo |
| C-_ | Undo (alias for C-/) |
| C-x u | Undo (alias for C-/) |
| C-g | Abort the current command |
| C-l | Redraw and center screen at cursor |
| M-&lt; | Go to start of buffer |
| M-&gt; | Go to end of buffer |
| C-d | Delete next character |
| M-d | Delete next word |
| M-| | Execute shell command on region |
| Backspace | Delete previous character |
===== Kill &amp; Yank (Cut/Copy and Paste) =====
| C-space | Set the mark |
| C-w | Cut (kill) |
| M-w | Copy (kill) |
| C-y | Paste (yank) |
| M-y | Paste (yank) next saved selection |
| C-x h | Set point to start of buffer and mark to end of buffer (select the entire buffer) |
| C-x C-x | Swap point and mark |
===== Search &amp; Replace =====
| C-s | Incremental search forward |
| C-r | Incremental search backward |
| C-M-s | Regexp search forward |
| C-M-r | Regexp search backward |
| M-% | Search and replace |
| M-x query-replace-regexp | Search and replace with regexps |
| C-g | Abort a search |
| C-w | During a search, highlight the word around the cursor |
| Up, down arrow keys or M-p, M-n | Access search string history |
===== Emacs Modes =====
| M-x modename | Toggle the given major or minor mode |
| C-h m | Display help on the current major mode, including any special key bindings in effect |
| M-q | Used in text-mode to reformat a paragraph of text manually |
| M-x global-font-lock-mode | Toggle syntax highlighting |
===== Buffers =====
| C-x b | Switch to another buffer |
| C-x C-b | Display buffer list |
| C-x k | Kill current buffer (Emacs prompts for confirmation) |
| M-x iswitchb-mode | Enable iswitch mode, for smart buffer name completion with C-x b |
===== Windows =====
| C-x 0 | Close this window |
| C-x 1 | Close all other visible windows |
| C-x 2 | Split horizontally |
| C-x 3 | Split vertically |
| C-x o | Switch to other window |
| C-M-v | Scroll other window |
===== Dired Mode =====
| M-x dired | Load dired mode (Emacs prompts for directory name) |
| C-x C-f | Dired mode loaded when a directory is specified as load file |
| Left, right arrow keys or p, n | Previous and next file, respectively |
| Enter | Visit this file in this window |
| o | Visit this file in a new window |
| g | Refresh directory view |
| m | Mark file |
| u | Un-mark file |
| d | Mark a file for later deletion |
| x | Delete all files marked for deletion (Emacs prompts for confirmation) |
| D | Delete this file right now (Emacs prompts for confirmation) |
| C | Copy this file, or copy currently marked files (Emacs prompts for destination) |
| R | Rename/move this file, or rename/move currently marked files (Emacs prompts for destination) |
| M | Chmod this file, or chmod currently marked files (Emacs prompts for new permissions) |
| O | Chown this file, or chown currently marked files (Emacs prompts for new owner) |
| G | Chgrp this file, or chgrp currently marked files (Emacs prompts for new group) |
| + | Create directory (Emacs prompts for directory name) |
| ! | Execute shell command on this file, or currently marked files (Emacs prompts for command) |
===== Shell Modes =====
| M-x shell | Shell mode, use M-p and M-n for command history |
| M-x eshell | Cross-platform Emacs Lisp shell emulator, use arrow keys for command history |
| M-x ansi-term | Full terminal emulator, suitable for full-screen applications. |
===== Getting Help =====
| C-h t | Emacs tutorial |
| C-h a | Apropos (Emacs prompts for keyword or regexp) |
| C-h i | Load info browser |
| C-h m | Display help on current mode |
| C-h f | Display help on function (Emacs prompts for function) |
| C-h k | Display help on key (Emacs prompts for key) |
| M-x man | Display a man page in a new buffer (Emacs prompts for man page) |
===== w3m mode =====
| M-x w3m | Start browsing web with emacs-w3m. |
| q | Close all emacs-w3m windows, without deleting buffers. |
| Q | Exit browsing web. All emacs-w3m buffers will be deleted. |
| RET | Display the page pointed to by the link under point. |
| C-c C-c | Submit the form at point. |
| R | Reload the current page. |
| r | Redisplay the current page. |
| TAB | Move the point to the next anchor. |
| M-TAB | Move the point to the previous anchor. |
| B | Move back to the previous page in the history. |
| N | Move forward to the next page in the history. |
| U | Visit the web page. |
| H | Go to the Home page. |
| M-d | Download the URL. |
| d | Download the URL under point. |
| \ | Display the html source of the current page. |
| SPC | Scroll up the current window, or go to the next page. |
| b | Scroll down the current window, or go to the previous page. |
| &gt; | Scroll to the left. |
| &lt; | Scroll to the right. |
| . | Shift to the left. |
| , | Shift to the right. |
| M-l | Recenter horizontally. |
| j | Next line. |
| k | Previous line. |
| l | Forward char. |
| h | Backward char. |
| s | Display the history of pages you have visited in the session. |
| S | Prompt for a search query and submit it to google. |
| v | Display the bookmarks list. |
| a | Add a url of the current page to a new bookmark. |
| M-a | Add the url under point to a new bookmark. |
===== Sample .emacs =====
;; Sample ~/.emacs file
;;
;; Un-comment what you want to enable and re-start Emacs
;;
;;Load iswitch mode
;;(require 'iswitchb)
;;Make text mode the default for new buffers
;;(setq default-major-mode 'text-mode)
;;Turn on refill-mode whenever text mode is entered
;;(add-hook 'text-mode-hook
;; '(lambda () (refill-mode 1)))
;;Enable syntax highlighting when it's allowed
;;(when (fboundp 'global-font-lock-mode)
;; (global-font-lock-mode t))
;;Fix the backspace key
;;(normal-erase-is-backspace-mode 1)
;;Use cperl-mode for editing Perl code, it is better than perl-mode
;;(defalias 'perl-mode 'cperl-mode)
;;Don't blink my cursor, please
;;(blink-cursor-mode nil)
;;Display the current time in the modeline
;;(display-time-mode t)
;;Start the emacs server
;;
;;When this is running, programs calling emacsclient open a buffer
;;in the already running emacs. Useful in mutt or pine for composing
;;mail in Emacs. Type C-x # to exit client buffer and send the text
;;back to the application that called it.
;;(server-start)
$Id: emacs-cheatsheet.html,v 1.4 2013/01/18 11:00:13 nullogic Exp $

View File

@ -0,0 +1,255 @@
====== Emacs Tutorial ======
[[#sec1|Getting Started]][[#sec2|Basic Commands]][[#sec3|Getting Help]][[#sec4|Extended Commands and Command Completion]][[#sec5|Kill &amp; Yank (Cut/Copy and Paste)]][[#sec6|Search &amp; Replace]][[#sec7|Emacs Modes]][[#sec8|Buffers]][[#sec9|Windows]][[#sec10|Dired Mode]][[#sec11|Shell Modes]][[#sec12|Emacs Startup and Configuration]][[#sec13|Browsing the Web in Emacs with w3m]][[#sec14|Where to Go From Here]]
===== Getting Started =====
Emacs is an extensible, customizable, full-screen text editor. You can learn enough to be productive in Emacs in 30 minutes, but there is enough to learn about Emacs to keep you busy for years. The goal of this tutorial is to show you enough so that you are comfortable using Emacs as a work environment, not just as a text editor. This document refers to GNU Emacs version 24 (the version installed on SDF).
Start by typing "emacs" at the shell prompt, read the splash screen and hit any key to clear it. You'll be in a so-called //scratch buffer//. A //buffer// is a place in Emacs that usually contains the text of a file for editing (but can contain other text, like error messages, command output or directory contents). Anyway, the scratch buffer is just that - a place to scratch notes or otherwise put temporary snippets of text you don't care to save. When you exit Emacs, the contents of the scratch buffer are discarded.
You will see a white or grey line at the bottom of the Emacs window, with some information displayed like the name of the buffer or file you are viewing, the line number your cursor is on, and whether or not the current buffer has been modified (indicated by two asterisks to the left of the buffer name). This is called the //modeline//. Like everything else in Emacs, what is displayed in the modeline is configurable, but the defaults should work fine for most people.
Just below the modeline is a blank line called the //echo area// or //minibuffer//. The minibuffer is used when Emacs has to gather data from the user, like which filename to edit, or when Emacs has to display information to the user, like error messages. You will also see Emacs command sequences echoed here as you type them.
===== Basic Commands =====
Emacs is a non-modal editor, meaning when you have a file loaded into a buffer, you can type text and it will appear directly in the buffer. You don't need to be in a special insert mode as in vi. That also means cursor movement and other text manipulation commands are not mapped to single alphabetic characters as in vi. Commands in Emacs are typically entered with a two- or three-key sequence, either Control- or Alt- followed by a one- or two-key sequence. The Control key in the Emacs documentation is denoted by "C" and Alt by "M" (Emacs documentation refers to the Alt key as Meta, hence the "M". The Esc key on most keyboards acts as an Alt or Meta key as well). For example, to quit Emacs, you type "C-x C-c", meaning you hold down the Control key, hit the "x" key and release it, then hit the "c" key and release it. To move up a screenfull of text, you type "M-v", meaning hold down the Alt key and type "v". With that in mind, here are a few useful key sequences:
| C-x C-f | Find file and load into buffer (Emacs prompts for filename) |
| C-x C-s | Save the current buffer |
| C-x C-w | Save the current buffer under a different name (Emacs prompts for the new name) |
| C-x C-c | Quit Emacs, prompting if you have not saved any buffers |
| Arrow keys or C-f, C-b, C-n, C-p | Right (forward), left (back), down (next), up (previous), respectively |
| C-k | Delete from cursor to end of line |
| C-a | Go to start of line |
| C-e | Go to end of line |
| C-v | Go down a page |
| M-v | Go up a page |
| C-/ | Undo |
| C-_ | Undo (alias for C-/) |
| C-x u | Undo (alias for C-/) |
| C-g | Abort the current command |
| C-l | Redraw and center screen at cursor |
| M-&lt; | Go to start of buffer |
| M-&gt; | Go to end of buffer |
| Backspace | Delete previous character |
===== Getting Help =====
GNU Emacs has excellent help facilities. Most of them are accessed with the prefix "C-h". The Emacs tutorial is an interactive introduction you can work through fairly quickly to learn the most common key bindings. "C-h i" accesses the GNU hypertext info browser from within Emacs, displaying system info pages (including the Emacs manual itself). Here are some of the help-related key bindings:
| C-h t | Emacs tutorial |
| C-h i | Load info browser |
| C-h m | Display help on current mode |
| C-h f | Display help on function (Emacs prompts for function) |
| C-h k | Display help on key (Emacs prompts for key) |
| M-x man | Display a man page in a new buffer (Emacs prompts for man page) |
===== Extended Commands and Command Completion =====
Emacs has the concept of //extended commands//, which consist of "M-x" followed by the name of the command. As an example of a useful extended command, sometimes the backspace key gets mapped to C-h (I find this happens sometimes under remote screen sessions, you'll know this is the case if you hit the backspace key twice and the emacs help buffer pops up, just hit "C-g" to clear the help window). To get the backspace key to act as it should (i.e., it deletes the previous character), you enter "M-x normal-erase-is-backspace-mode". That's a lot to type, so you can take advantage of Emacs' //command-completion// by typing a partial command and hitting the "Tab" key one or more times. In this case, you type "M-x normal-e" and hit "Tab", and Emacs will complete the command for you. You can then just hit "Enter" to execute the command. If you don't type enough of the command to make it unique, Emacs will display a list of alternatives for you to choose from. For example, if you type "M-x normal-" and hit the "Tab" key, Emacs will pop up a buffer named *Completion* with with two alternatives for you to choose from: normal-mode and mormal-erase-is-backspace-mode. Just type a bit more of the command you want and hit tab again to narrow the completion list or to complete the command if it is the only one left.
===== Kill &amp; Yank (Cut/Copy and Paste) =====
Most Emacs commands operate on the region defined by the //point//, which is the location of the cursor at any given time, and the //mark//, which is set with the command "C-space". To copy or cut a region of text, move the cursor to the start of the text area you are interested in and type "C-space". You will see "Mark set" in the echo area. Now move the cursor to the end of the text region (which moves the point) and type "M-w" for copy or "C-w" for cut (both called killing text). The text you copy or cut is stored by Emacs in the //kill-ring//, which is a circular buffer that stores the text snippets you kill in a last-in-first-out order. To paste the most recently stored text, move the cursor to where the text should be inserted, and type "C-y". The "y" stands for yank, what you'll see paste referred to in the Emacs help documentation (remember Emacs pre-dated modern windowing systems and other full-screen editors, so the terms cut and paste were not in use yet). After a yank ("C-y") command, you can replace the inserted text with earlier kills in turn by typing "M-y" one or more times. Each time you press "M-y" the next block of killed text is popped off of the kill ring and inserted into your buffer, replacing the last insert at the same time.
Here are the commands we discussed above, and a few other useful ones:
| C-space | Set the mark |
| C-w | Cut (kill) |
| M-w | Copy (kill) |
| C-y | Paste (yank) |
| M-y | Paste (yank) next saved selection |
| C-x h | Set point to start of buffer and mark to end of buffer (select the entire buffer) |
| C-x C-x | Go back to the last mark that was set |
===== Search &amp; Replace =====
Emacs has a nice search mode called //incremental search//. To use it, type "C-s". The text "I-search:" will appear in the echo area. Now start typing a search string. As you type, Emacs will search for your string in real-time (starting at point), highlighting any matches it finds. You can backspace and re-type text, and the search will continue to change with the text you type. When you find a match, you can hit "C-s" to search again and jump to the next match, or you can just hit "Enter" to exit the search mode and leave the cursor at the last match. "C-g" will abort the search and put your cursor back where you started. Searches will re-start at the top of a buffer if they hit the bottom. You can search backwards in a similar fashion with "C-r".
To replace text that matches a search pattern, type "M-%". You'll see "Query replace:" in the echo area. Type a search string, and hit "Enter". The echo area will now display "Query replace &lt;search string&gt; with:". Type the replacement string, and hit "Enter" again. Emacs will search through your buffer, looking for the search string. When it finds it, it will display "Query replacing &lt;search string&gt; with &lt;replacement string&gt;: (? for help)". Type "y" to replace this match and move onto the next, or "n" to skip this match. Type "!" to replace this occurrence of the search string and all other occurrences in your buffer without prompting. As usual, you can type "C-g" to abort a search/replace operation.
All searches in Emacs are case-insensitive by default, unless you type at least one capital letter in your search string - in that case, the search becomes case-sensitive.
One nice feature you'll notice is that Emacs remembers the search and replacement strings you've used, so if you type "M-%" again, the last search/replace operation can be repeated by just hitting the "Enter" key. Prior search and replacement strings can be accessed with up- or down-arrow keys or "M-p" and "M-n" (for previous- and next-, respectively) - this is like the history mechanism in the Bash shell.
Another nice tip during searches is that "C-w" will highlight the word around the cursor, then successive words each time it's pressed during a search (so the highlighted area will grow with each press of "C-w"). You can search again by typing "C-s", this time the search string is whatever was highlighted.
Here are the search and replace commands we discussed:
| C-s | Search forward |
| C-r | Search backward |
| M-% | Search and replace |
| C-g | Abort a search |
| C-w | During a search, highlight the word around the cursor |
| Up, down arrow keys or M-p, M-n | Access search string history |
===== Emacs Modes =====
Emacs buffers are associated with one so-called //major mode// and one or more //minor modes//. Major modes typically denote a type of file, and are associated with special command sequences and syntax highlighting just for that file type. Minor modes change the behavior of an associated major mode in small ways. For example, the major mode for editing text is called text-mode, while the one for editing HTML is called html-mode. Both text and html modes have a minor mode called refill-mode that automatically formats paragraphs of text as you type (similar to the behavior you expect from a word processor). You can switch modes by just typing "M-x modename", so "M-x html-mode" would switch you into html-mode. Emacs can usually figure out the mode to use by the file extension, so if you visit (load with "C-x C-f") a file ending in .html or .htm, html-mode will be selected for you, and if you visit a file ending in .txt, text mode will be selected.
As an example, say you want to create a new text document. You type "C-x C-f foo.txt" and Emacs creates an empty buffer for you named "foo.txt". Notice the modeline displays "(Text)" to indicate the major mode. Now type "M-x refi" and hit the Tab key. Emacs will complete "refill-mode". Hit enter, now the modeline displays "(Text Refill)" to indicate the major and minor modes in effect. Experiment with refill mode by typing some text and watch as Emacs wraps the lines for you. Now go back and add or delete some text and notice how the paragraph re-formats itself. Modes toggle on and off, so a second "M-x refill-mode" will turn refilling off. Type some text and notice Emacs no longer wraps lines or formats paragraphs for you. The mode for buffers not associated with any special file type is called fundamental-mode. This is the mode your scratch buffer is put in at startup.
There are lots of Emacs major modes, many of which are useful for programmers. There is c-mode, perl-mode, and c++-mode, for example. Each mode has its own key bindings and syntax highlighting rules. You can see the details of the currently selected major mode by typing "C-h m". To enable syntax highlighting on a source-code file, you can type "M-x global-font-lock-mode" (on some operating systems, packaged versions of Emacs will enable font lock [syntax highlighting] for you automatically).
As an example of special key bindings, in html-mode, the key sequence "C-c C-c h" will insert a properly formatted hyperlink into the text, prompting you for the URL first. In other modes this key sequence will have no effect.
Here are some of the most useful mode commands:
| M-x modename | Toggle the given major or minor mode |
| C-h m | Display help on the current major mode, including any special key bindings in effect |
| M-q | Used in text-mode to reformat a paragraph of text manually |
| M-x global-font-lock-mode | Toggle syntax highlighting |
===== Buffers =====
When you visit a file with "C-x C-f", Emacs loads the file into a new buffer created just for that file. Existing buffers are not destroyed, but persist and can be switched to with "C-x b". Emacs will prompt you for a buffer name to switch to; tab-completion works here as it does in other places. One tip that I wish I had known when I first started using Emacs is to use a special mode called //iswitch mode// to help manage buffers. Since it's not uncommon to have dozens of buffers in an Emacs editing session, you can easily forget buffer names. With iswitch mode enabled, a "C-x b" displays a list of buffers in the echo area that changes in real-time as you type characters. You don't even have to type the first few letters of a buffer name, any substring of a buffer name will do. To enable iswitch mode, type the extended command "M-x iswitchb-mode" (we'll see later how to permanently enable modes like this in a startup file). To see a list of all buffers, type "C-x C-b". The buffer list will appear in a new window. Here is a list of some useful buffer commands:
| C-x b | Switch to another buffer |
| C-x C-b | Display buffer list |
| C-x k | Kill current buffer (Emacs prompts for confirmation) |
| M-x iswitchb-mode | Enable iswitch mode, for smart buffer name completion with C-x b |
===== Windows =====
The Emacs screen area can be divided into multiple //windows//. Each window contains one buffer, so the contents of a window can change depending on the buffer it contains. The most common way to create new windows is to split the screen into two regions with "C-x 2" or "C-x 3". The first splits the screen in half horizontally, the second splits it vertically. Any Emacs window can be split multiple times, so if you have a large display, you could have lots of windows open. You can cycle through visible windows with "C-x o" (think of the "o" as meaning "other window"). When you do have another window open, it's sometimes useful to scroll the other window without leaving your current one. You can do this with "C-M-v". This is particularly useful for when Emacs pops up a completion or help buffer in a new window that you would like to scroll through.
You can close a window with "C-x 0" or "C-x 1". The first closes the window you are currently in, the second closes all the other windows, but leaves the window you are currently in open for you. Closing a window does not destroy the buffer it contains, so you can think of a window as a view into a buffer (in fact you can have multiple windows visiting different parts of the same buffer). Here is a list of the most useful window commands:
| C-x 0 | Close this window |
| C-x 1 | Close all other visible windows |
| C-x 2 | Split horizontally |
| C-x 3 | Split vertically |
| C-x o | Switch to other window |
| C-M-v | Scroll other window |
===== Dired Mode =====
If you type the name of a directory after a "C-x C-f" command, Emacs will display the directory contents in a new buffer. By default, Emacs displays the file name, permissions, owner/group, size and timestamp of each file on a line by itself. You can visit a file by just moving the cursor to it and hitting "Enter". Dired mode is unlike other modes in that single keys are used to effect commands. Here is a list of the most useful dired commands:
| Left, right arrow keys or p, n | Previous and next file, respectively |
| Enter | Visit this file in this window |
| o | Visit this file in a new window |
| g | Refresh directory view |
| m | Mark file |
| u | Un-mark file |
| d | Mark a file for later deletion |
| x | Delete all files marked for deletion (Emacs prompts for confirmation) |
| D | Delete this file right now (Emacs prompts for confirmation) |
| C | Copy this file, or copy currently marked files (Emacs prompts for destination) |
| R | Rename/move this file, or rename/move currently marked files (Emacs prompts for destination) |
| M | Chmod this file, or chmod currently marked files (Emacs prompts for new permissions) |
| O | Chown this file, or chown currently marked files (Emacs prompts for new owner) |
| G | Chgrp this file, or chgrp currently marked files (Emacs prompts for new group) |
| + | Create directory (Emacs prompts for directory name) |
| ! | Execute shell command on this file, or currently marked files (Emacs prompts for command) |
===== Shell Modes =====
It is possible to run a shell from within Emacs; there are a few different ways to do so. The easiest way is to type "M-x shell". This creates a a buffer called *shell* with a shell prompt. Shell commands you type are sent to a system shell and the output displayed in the shell buffer. One thing you'll notice in shell mode is that the arrow keys move you around the buffer - they don't access command history as they do in most shells. To access command history, use "M-p" and "M-n" for previous and next, respectively.
One of the drawbacks of shell-mode is that it is not suitable for full-screen applications (like less, lynx, mutt or pine), to run these inside of Emacs, you need to use a terminal mode. Type "M-x ansi-term", and specify which shell you would like to run (your default will be the shell you are using, e.g. "/usr/pkg/bin/bash").
On platforms without an underlying shell (e.g., Windows), Emacs has a terminal emulator written entirely in Emacs Lisp. To enter it, type "M-x eshell". While not suitable for full-screen applications, it does emulate a limited subset of shell features rather nicely. In this shell mode, the arrow keys work as you would expect, and most shell builtins and shell aliases work as well. Some external commands such as grep work, although input/output redirection is not yet implemented.
Here are the commands we discussed above:
| M-x shell | Shell mode, use M-p and M-n for command history |
| M-x eshell | Emacs Lisp shell emulator, use arrow keys for command history |
| M-x ansi-term | Full terminal emulator, suitable for full-screen applications. |
===== Emacs Startup and Configuration =====
When Emacs starts it will load a file named ".emacs" in your home directory and execute the commands found in it. This file is written in Emacs Lisp, but you can use it without knowing any Lisp, by copying other people's sample files. It is mainly useful for making certain extended commands a permanent part of your Emacs experience, so you don't have to type them every time you start Emacs. In the example below, comment lines start with one or more semi-colons, so you would delete the semi-colons to enable the given feature.
;; Sample ~/.emacs file
;;
;; Un-comment what you want to enable and re-start Emacs
;;
;;Load iswitch mode
;;(require 'iswitchb)
;;Make text mode the default for new buffers
;;(setq default-major-mode 'text-mode)
;;Turn on refill-mode whenever text mode is entered
;;(add-hook 'text-mode-hook
;; '(lambda () (refill-mode 1)))
;;Enable syntax highlighting when it's allowed
;;(when (fboundp 'global-font-lock-mode)
;; (global-font-lock-mode t))
;;Fix the backspace key
;;(normal-erase-is-backspace-mode 1)
;;Use cperl-mode for editing Perl code, it is better than perl-mode
;;(defalias 'perl-mode 'cperl-mode)
;;Don't blink my cursor, please
;;(blink-cursor-mode nil)
;;Display the current time in the modeline
;;(display-time-mode t)
;;Start the emacs server
;;
;;When this is running, programs calling emacsclient open a buffer
;;in the already running emacs. Useful in mutt or pine for composing
;;mail in Emacs. Type C-x # to exit client buffer and send the text
;;back to the application that called it.
;;(server-start)
The above example gives you a good idea of what can be done in a ".emacs" file, for more in-depth configuration Emacs has a customization mode that can be accessed with the extended command "M-x customize". Running it will put you in a curses-style application where you can choose from customization menus and have your changes written to your ".emacs" file automatically.
===== Browsing the Web in Emacs with w3m =====
[[http://sourceforge.net/projects/w3m/files/|Emacs w3m mode]] will use the excellent [[http://w3m.sourceforge.net|w3m]] text-mode browser and allow you to surf the web in an Emacs buffer. To get started, add the following to your ".emacs" file:
(require 'w3m-load)
Then restart emacs, or place the cursor at the end of each line in turn and press "C-x e". Then you can open a new w3m buffer with "M-x w3m". The basic key bindings are as follows (note that these are taken from the w3m-mode help page, which can be accessed at any time in a new window with "C-h m"):
| M-x w3m | Start browsing web with emacs-w3m. |
| q | Close all emacs-w3m windows, without deleting buffers. |
| Q | Exit browsing web. All emacs-w3m buffers will be deleted. |
| RET | Display the page pointed to by the link under point. |
| C-c C-c | Submit the form at point. |
| R | Reload the current page. |
| r | Redisplay the current page. |
| TAB | Move the point to the next anchor. |
| M-TAB | Move the point to the previous anchor. |
| B | Move back to the previous page in the history. |
| N | Move forward to the next page in the history. |
| U | Visit the web page. |
| H | Go to the Home page. |
| M-d | Download the URL. |
| d | Download the URL under point. |
| \ | Display the html source of the current page. |
| SPC | Scroll up the current window, or go to the next page. |
| b | Scroll down the current window, or go to the previous page. |
| &gt; | Scroll to the left. |
| &lt; | Scroll to the right. |
| . | Shift to the left. |
| , | Shift to the right. |
| M-l | Recenter horizontally. |
| j | Next line. |
| k | Previous line. |
| l | Forward char. |
| h | Backward char. |
| s | Display the history of pages you have visited in the session. |
| S | Prompt for a search query and submit it to google. |
| v | Display the bookmarks list. |
| a | Add a url of the current page to a new bookmark. |
| M-a | Add the url under point to a new bookmark. |
There are many more features in w3m-mode, the mode help text details them all with keybindings. To end your session and close all w3m buffers, just press "Q" and answer "y" when prompted.
===== Where to Go From Here =====
Below are some links to resources and useful Emacs Lisp packages. Many Linux and BSD-based operating systems have packages for most of these, so check there before you attempt to install by hand:
* [[http://www.gnu.org/software/emacs/tour/|Emacs Tour]]: Guided tour of GNU Emacs with lots of screenshots.
* [[http://mwolson.org/projects/EmacsMuse.html|Muse]]: A publishing and authoring environment that converts simple text markup into HTML, PDF, Texinfo, Docbook, LaTeX, Blosxom blog entries and more. This tutorial was written using muse-mode.
* [[http://www.emacswiki.org/cgi-bin/wiki|Emacs Wiki]]: Loads of tips and howtos. $Id: emacs-tutorial.html,v 1.17 2015/04/30 11:30:50 slugmax Exp $

View File

@ -0,0 +1 @@
$Id$

View File

@ -0,0 +1,50 @@
====== Accessing your SDF Email ======
//**under construction**//
//There are several ways to get and send email at SDF, but the different options depend on your membership(s) here. This guide is intended to describe the options simply and clearly, by membership level//
===== Membership Levels and Email Access =====
Here are the membership levels that matter for email (see [[http://sdf.org/?join|SDF join page]] for more details):
* User
* Pre-validated User: This is before you are "validated" by either sending a nominal amount of money to SDF(enter "validate" at shell) or by finding a MetaARPA member to validate you
* Validated User/ARPA
* VPM/VHOST*
* MetaARPA
*VHOST includes VPM
The differences of the above accounts, besides the cost, is that VPM, VHOST and MetaARPA are annual memberships, so require continuing support of SDF, while User and ARPA are lifetime memberships, and only require payment once.
===== Ways to Get and Send Email at SDF =====
By default your E-mail Address is your SDF username, which by default works with a couple of domain names (you can also choose the domain you would like to use from the list of SDF domain names).
So if your username is "coffee" you can try sending yourself a mail with your existing E-mail account to:
//coffee@sdf.lonestar.org// or //coffee@freeshell.org//. Then you can try to read it.
Ways to read and send your SDF mail include the following:
==== Email Programs from Shell //(Memberships: User or ARPA or MetaARPA)// ====
You can always access your SDF mail account through any of several email programs installed on the server. All of these emails access your "mail spool", where your email is put by the mail server.
* //mutt// is available even to **Pre-validated Users**. Just type "mutt" at the command prompt. Here's a mutt tutorial
* Other programs, including //pine, alpine, mailx and rmail// are available to any **Validated User or ARPA or MetaARPA**. //Pine and Alpine// are related programs (Pine is older, Alpine is newer) that are both frequently considered to be the easiest shell email programs to use, with on-screen help and a menu interface. Enter "pine" or "alpine" respectively to run either of these. You can find more info on how to use them at [[http://sdf.org/?tutorials/e-mail-beginners|E-mail Beginners]].(For users at the **User** level, to learn about your limited allowed space and the significance of the mail spool, see the [[|difference between using mutt and alpine for Users vs ARPA]])==== Webmail //(Memberships: Validated User or ARPA or MetaARPA)// ====There are two webmail interfaces:
* The old SquirrelMail, accessible for Validated Users or above, accessible from the "webmail" link at the top of the [[/|SDF home page]]
* Roundcube, a slicker experience, accessible by MetaARPA users from the link on the [[http://ma.sdf.org|metaaaray home page]]==== Client Email: POP3 and IMAP //(Memberships: User or ARPA or VPM or VHOST or MetaARPA)// ====This section and the next include a small distinction. While **User or ARPA can read mail on their own machines or devices**, these memberships **don't allow you to send email** from your account **through SDF**.**You can, however, use your ISP to send mail from your SDF account**//read//=== Reading Incoming email in your computer or device client if you are User or ARPA or VPM or VHOST or MetaARPA ===There are two ways to read your incoming email using a client mail program. You can choose either, except if you are using virtual mailboxes with a VPM membership, in which case your only option is POP3:
* **POP3** fetches a copy of your mail from the mail spool to your local machine, and optionally deletes it from the spool. POP3 works with most any email program, and you can keep the messages on the server to be able to access mail equally from multiple machine/mail programs. However if you are accessing a POP3 server from multiple machines, having to deal with synchronizing and multiple copies and deleting mail from the server can be a problem;
* **IMAP** accesses mail on the server and lets you organize it into folders on the server. IMAP keeps your mail centrally located and organized so it is all equally accessible from multiple mail programs and devices at the same time.=== Setting up to read mail with POP3 ===(from the [[http://sdf.org/?faq?EMAIL?03|POP3/IMAP email faq]])The mail server to connect to for POP3 is "wm.sdf.org"The rest of the POP3 settings should be:
* Your security should be set to None
* Your Port should be 110
* Your user name depends on the account:
* for your main User/ARPA/metaARPA account, it should be the same as your login name, example: "user1234"
* If you are accessing mail for a //VPM// account, your username should be the full email address with your VPM/VHOST domain name, ex: "user5678@vhost1234.org"
* your password should be either your account password (for your main User/ARPA/metaARPA account), or the password you set for the VPM email address using "mkvpm"=== Setting up to read mail with IMAP ===The rest of the IMAP settings should be:
* Your security should be set to None
* Your Port should be 110
* Your user name depends on the account:
* for your main User/ARPA/metaARPA account, it should be the same as your login === Sending Mail from your client if you are User or ARPA ======= Sending Mail from your client through SDF//(Memberships: VPM/VHOST or MetaARPA)// ======== Advanced Mail Topics ==== $Id: email_at_sdf.html,v 1.1 2017/03/19 04:41:59 peteyboy Exp peteyboy $

View File

@ -0,0 +1,91 @@
===== Mounting an encrypted partition with EncFS =====
----
==== Introduction ====
[[http://www.arg0.net/encfs|EncFS]] is the simplest way to manage an encrypted group of files and folders. It provides an encrypted filesystem in user-space using the [[http://fuse.sourceforge.net/|FUSE]] library so it doesn't need root access to work. This means that all users can manage their encrypted partitions independently.
==== How it works ====
The idea behind EncFS is to create a directory where the encrypted information is saved. This directory is then mounted (using FUSE) in a user-defined mountpoint, where the contents of the encrypted directory are accessible as decrypted data. The translation between these two parts is the work of EncFS.
This is designed to protect against off-line attacks, that is, the contents of the encrypted folder are safe(er) while the directory is unmounted. While it is mounted, anyone with enough permissions over the mountpoint can still access the information of the files. Furthermore, since the encryption works on a file-by-file basis, some metadata will remain visible even while unmounted. Things like the number of files, their permissions, sizes and approximate filename size will be accessible to anyone with appropriate permissions over the encrypted folder.
Read the [[#tips_and_tricks|Tips and Tricks]] section for a few of suggestions on how to ameliorate some of these problems.
==== Set-up ====
The set up of the encrypted folder is very easy. First of all you need to run
$ man encfs
and read ahead. After that, we need to create both, the encrypted folder and the mount point. We call **~/.crypt** the encrypted folder (so it is hidden) and **~/crypt** the mountpoint.
$ mkdir ~/.crypt ~/crypt
Now we just need to run
$ encfs ~/.crypt ~/crypt
which mounts **~/.crypt** on **~/crypt**. Anything we write to **~/crypt/** will be encrypted and saved into **~/.crypt/**. When we unmount the filesystem, the **~/crypt** folder is left empty and everything is only saved encrypted in **~/.crypt**. When we need to re-gain access to our files, we can run the last command line to remount the encrypted directory, showing its decoded contents at the mount point.
The first time we run this command we will be asked for some configuration details for the **~/.crypt** directory. The dialog looks like this:
$ encfs ~/.crypt ~/crypt
Creating new encrypted volume.
Please choose from one of the following options:
enter "x" for expert configuration mode,
enter "p" for pre-configured paranoia mode,
anything else, or an empty line will select standard mode.
?&gt;
Choosing the standard mode should be good enough for most cases but if you would like extra security, choose **p** for the paranoia mode (be aware that paranoia mode can make more difficult to make backups of the data. See Section [[#tips_and_tricks|Tips and Tricks]] for further details). After this, we will be prompted to enter a password twice, to confirm it and reduce the chances of a typo.
EncFS allows us to automatically unmount the filesystem if it is idle for a certain period of time by giving the command line option **--idle=X** where **X** is the number of minutes before unmounting.
To check that everything is working fine, we can run the **mount** command, which output should look like this:
$ mount
...
...
encfs on /path/to/crypt type fuse.encfs (rw,nosuid,nodev,default_permissions,user=your_username)
$
To unmount the filesystem leaving only the encrypted contents, we just need to do
$ fusermount -u ~/crypt
Make sure to do this before logging out, otherwise the information could be left unprotected.
==== [[|Tips and Tricks]] ====
As mentioned before, this method is intended for protection against off-line attacks. If you would like to avoid ever having the information on the clear on the remote server, and if you have access to EncFS at your local machine, you have at least two possibilities; one is to keep a local encrypted folder and make backups of that encrypted data to your sdf account, or you can use sshFS in conjunction with EncFS to write your encrypted data directly.
=== Backups ===
Since the encryption is done file-by-file, we can easily make backups of the encrypted data without the need to mount the filesystem, so for instance, we can leave the backup to a cron job without compromising the safety of the files. Make sure to include the file **~/.crypt/.encfs6.xml** in the backup. This file saves the encryption configuration, and you will need it to decode the information later on. See the tutorial on [[http://sdf.org/?tutorials/rsync-backup|rsync]] for more information on how to make a backup.
The paranoia mode has a feature named "External IV Chaining", which ties the filename (possibly including the absolute path) with the data for its encryption, so a file that has been moved or renamed will fail to decode properly. Make sure that, if you are doing backups of encrypted files, you will either have this option disabled or have a way to restore the whole path and filenames of the encrypted data.
=== sshFS+EncFS ===
Using this method will allow you to write to a local **~/crypt** directory which automatically, locally encrypts and securely transfers the information to a remote folder **~/.crypt-remote**, so the un-encrypted files are never accessible at the remote location and there is no need to make explicit backups.
We achieve this by doing the following:
* Create a **~/.crypt-remote/** directory on the remote machine
local.machine:~$ ssh username@remote.machine mkdir .crypt-remote
* Mount that directory using sshFS on your local machine as **~/.crypt/**
local.machine:~$ sshfs -o idmap=user username@remote.machine:./.crypt-remote ~/.crypt
The option **-o idmap=user** will map your local user name to the user name on the remote machine, that is, files on the remote system that are from the user username, appear to be from the user that you are logged in as on the local system (see the tutorial on [[http://sdf.org/?tutorials/sshfs|sshFS]] if you need).
* Use EncFS locally to mount **~/.crypt** at **~/crypt**
local.machine:~$ encfs ~/.crypt ~/crypt
* To unmount you then need to do the following
local.machine:~$ fusermount -u ~/crypt
local.machine:~$ fusermount -u ~/.crypt
* You now can remount the **~/.crypt-remote** directory on your local machine, or in the remote one, as needed.
**Beware that this can yield to irrecoverable data loss!** If there are connectivity problems, the partially transmitted files will not contain usable information, so you shouldn't use this method with files for which you do not have an extra copy. You will need to gauge carefully which solution offers the best relation between confidentiality and data integrity, and which works better for your particular needs.
$Id: encfs_tutorial.html,v 1.2 2013/09/26 10:10:53 olvar Exp $

View File

@ -0,0 +1,63 @@
====== Adding custom error pages to your SDF website ======
----
===== Contents =====
* [[#intro|Introduction]]
* [[#why|Why create a custom error page?]]
* [[#how|How to implement your custom error page]]
\\
===== [[|Introduction]] =====
The HTTP protocol, which is used to retrieve documents (usually web pages) from the internet for display in a web browser, provides a number of [[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes| standard error codes]] to indicate conditions or status relative to the process. The most widely known of these is the notorious code 404 - "File not found." This error may occur for a number of reasons, but most commonly it indicates a broken link. Perhaps there is a typographical error in your html, or maybe the document was moved to a new location without the needed changes made to the referring link. What happens at this point is that the web browser asking for the missing document receives a special error message web page instead. This page is usually provided by the server, but may in some instances be generated by the browser. The error page may be rather generic, or it may be customized for the originating site.
===== Why create a custom error page? =====
Good question! Generally, the error pages provided by the server are adequate. On that basis, changing them isn't really required. However, such messages also tend to be dull and often rather cryptic. So, you might decide to create customized error messages for a variety of reasons. \\ For example:
* You may wish to create an error page which retains the look and feel of your own site. This may increase the comfort level of your viewers, since they won't necessarily feel like they have suddenly been whisked away from what they were viewing into some mysterious la-la land they'll have to crawl back from. Here is an example: [[http://www.google.com/qrstuvwxyz|Google's 404 page]]
* Since the error may have been caused by a fault in your site, you might want to direct the viewer to contact you about it, so that you can fix the problem.
* You may want to provide the viewer with additional information designed to help them resolve the issue themselves. This is useful if the problem is caused not by your site but by some mistake the user made in entering the URL, for example: [[http://www.microsoft.com/qrstuvwxyz|Here]] is an example of that.
* And let's face it - most error pages are pretty dull. The 404 page in particular can be frustrating. So much so, in fact, that people have even written spiteful [[http://www.ovff.org/pegasus/songs/404-not-found.html|songs]] about it!
===== [[|How to implement your custom error page]] =====
Now that you've decided you want to create a custom error page, you probably want to know how to do it. In fact, on SDF this turns out to be fairly easy. There are two basic steps involved:
- Create the custom error pages that you want displayed.
- Create (or modify) the file ".htaccess" in the root of your html directory structure.
Creating the custom error page itself is just like creating any other web page. Thus, it is somewhat beyond the scope of this article, as really you can do what you like. But if you are short of ideas, check out [[http://www.lightecho.net/404page/404_fame.html|this]] site.
The key to making your custom error page work is in correctly informing the Apache web server that you have created a custom document and precisely indicating where that document is located. This is accomplished through an entry in the ".htaccess" file.
For the purposes of this discussion, we'll assume you already have your website set up. The root folder of your html directory structure is where you need to create ".htaccess," or modify it if it already exists. If you are logged into an SDF shell account, you can generally get to this folder by entering this command:
"cd ~/html"
If you are using SDF's vhost services, you need to change to the directory for the website you are updating - it's probably a subdirectory of the html directory. Once in the folder, you can create or edit the file by entering:
"pico .htaccess"
Of course, while pico is the editor I like to use, you have your choice of several others and should feel free to use the one you like. You can also create or edit the file on your own system and upload it to SDF just as you would any other web document.
With the Apache web server, as used on SDF, ".htaccess" provides "a way to make configuration changes on a per-directory basis." The complete use of this file is way beyond the scope of this article, but more information is available [[http://httpd.apache.org/docs/1.3/howto/htaccess.html|here]].
In our scenario, you are probably creating a new file, so you'll be starting with a blank slate. You will need to create one line for each error page that you define. To indicate to the server that you want to use your own code 404 message, you'll need to add a line that is similar to this one:
"ErrorDocument 404 /404.html"
"ErrorDocument" indicates that you are defining your own, "404" is the error code you are taking responsibility for, and "/404.html" is the name and location of your custom error document. Please note that the "/" in front of the file name is necessary on SDF for the relative path to work. And if you place the document in a subdirectory off your html root, you need to indcate that path in ".htaccess", If you are creating custom pages for additional codes, simply add the appropriate lines in ".htaccess"
After making your changes, it may be a good idea to reset the permissions on your website by entering the command:
"mkhomepg -p"
And that is pretty much all there is to it!
----
$Id: errorpage.html,v 1.5 2017/05/25 02:25:27 bradmac Exp $

View File

@ -0,0 +1,20 @@
====== Spreading the Word ======
So you've been with SDF for three minutes, three years, or three decades and feel its something you'd like to share with others? Here are some materials to help you do that.
==== Physical propoganda materials ====
* [[tutorials/images/propoganda/sdf_flyer.pdf|Flyer]] (especially good for college campuses)
* Business Cards
* [[tutorials/images/propoganda/business_cards/sdf_business_card_ecelis03_print.pdf|Design 1]]
* [[tutorials/images/propoganda/business_cards/sdf_business_card_ecelis05_print.pdf|Design 2]]
* [[tutorials/images/propoganda/business_cards/sdf-card-02.png|Design 3]]
* [[http://sdf.org/store/|Patches, stickers, buttons, hoodies, T-shirts, and more]]
==== Links to share ====
* [[http://sdf.lonestar.org/index.cgi?faq|The SDF FAQ]]
* [[http://en.wikipedia.org/wiki/SDF_Public_Access_Unix_Network|SDF's Wikipedia Entry]]
* [[http://sdf.lonestar.org/index.cgi?access|Signup page]]
$Id: evangelism.html,v 1.2 2011/05/13 11:19:09 jbaber Exp $

View File

@ -0,0 +1,37 @@
====== Here is a test for the title format. ======
==== Here is a test for the header format. ====
Here is a test for the tutorial body format.
\\ Here is a test for a note/warning/tip.
\\ Here is a test for the code format.
\\ Here is a test for the reference format.
^ ^ Table Header 1 ^ Table Header 2 ^
^ Table Header 3 | TABLE DATA | TABLE DATA |
^ Table Header 4 | TABLE DATA | TABLE DATA |
^ Table Header 5 | TABLE DATA | TABLE DATA |
Section 1Section 1.1Section 1.2Section 1.3Section 2Section 2.1Section 3Section 3.1Section 3.2Section 4Section 4.1Section 4.2
[[http://www.example.com|Example link]]\\ {{http://sdf.org/tutorials/images/example.png?128x128|Example}}\\ \\
Book:
Author's last name, first initial. (Publication date). Book title. Additional information. City of publication: Publishing company.
Encyclopedia &amp; Dictionary:
Author's last name, first initial. (Date). Title of Article. Title of Encyclopedia (Volume, pages). City of publication: Publishing company.
Magazine &amp; Newspaper Articles:
Author's last name, first initial. (Publication date). Article title. Periodical title, volume number(issue number if available), inclusive pages.
Online periodical:
Author's name. (Date of publication). Title of article. Title of Periodical, volume number, Retrieved month day, year, from full URL
Online document:
Author's name. (Date of publication). Title of work. Retrieved month day, year, from full URL
$Id: example.html,v 1.2 2012/01/08 23:53:51 maroon Exp $

View File

@ -0,0 +1,170 @@
====== Tutorial: Example Source code ======
\\
&lt;head&gt;
&lt;style type="text/css"&gt;
.title{
background-color:#ffffff;
font-size:30px;
color:#2a2a2a;
}
.header{
background-color:#ffffff;
font-size:20px;
color:#2a2a2a;
}
.body{
background-color:#ffffff;
font-size:15px;
color:#2a2a2a;
}
.reference{
border: 1px dotted #000;
text-align: left;
padding: 5px;
padding: 15px 30px 15px;
background:#CCC url('http://sdf.org/tutorials/images/ref.png') 5px 5px no-repeat;
color: #000;
margin: 10px 5px;
}
.link { text-decoration:none }
.superscript{
font-size:10px;
vertical-align:top;
}
.subscript{
font-size:10px;
vertical-align:bottom;
}
.note{
border: 1px dotted #000;
text-align: left;
padding: 5px;
padding: 15px 30px 15px;
background: #DC143C url('http://sdf.org/tutorials/images/note.png') 5px 5px no-repeat;
color: #FFF;
margin: 10px 5px;
}
.code{
border: 1px dotted #000;
text-align: left;
padding: 5px;
padding: 15px 30px 15px;
background:#2F4F4F url('http://sdf.org/tutorials/images/code.png') 5px 5px no-repeat;
color: #00FF00;
margin: 10px 5px;
font-family: monospace;
}
table.table {
border-width: 0px;
border-spacing: 0px;
border-style: none;
border-collapse: collapse;
background-color: #1E90FF;
}
table.table th {
border-width: 1px;
padding: 1px;
border-style: inset;
border-color: white;
background-color: #A0522D;
-moz-border-radius: ;
padding: 10;
}
table.table td {
border-width: 1px;
padding: 1px;
border-style: inset;
border-color: white;
background-color: #FFEBCD;
-moz-border-radius: ;
padding: 5;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;h1 class="title"&gt;Here is a test for the title format.&lt;/h1&gt;
&lt;h3 class="header"&gt;Here is a test for the header format.&lt;/h3&gt;
&lt;p class="body"&gt;Here is a test for the tutorial body format.&lt;/p&gt;
&lt;p class="note"&gt;&lt;br&gt;Here is a test for a note/warning/tip.&lt;/p&gt;
&lt;p class="code"&gt;&lt;br&gt;Here is a test for the code format.&lt;/p&gt;
&lt;p class="reference"&gt;&lt;br&gt;Here is a test for the reference format.&lt;/p&gt;
&lt;table class="table"&gt;
&lt;tr&gt;&lt;th&gt; &lt;/th&gt;
&lt;th&gt;Table Header 1&lt;/th&gt;
&lt;th&gt;Table Header 2&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Table Header 3&lt;/th&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Table Header 4&lt;/th&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Table Header 5&lt;/th&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;dl&gt;
&lt;dt&gt;Section 1&lt;/dt&gt;
&lt;dd&gt;Section 1.1&lt;/dd&gt;
&lt;dd&gt;Section 1.2&lt;/dd&gt;
&lt;dd&gt;Section 1.3&lt;/dd&gt;
&lt;dt&gt;Section 2&lt;/dt&gt;
&lt;dd&gt;Section 2.1&lt;/dd&gt;
&lt;dt&gt;Section 3&lt;/dt&gt;
&lt;dd&gt;Section 3.1&lt;/dd&gt;
&lt;dd&gt;Section 3.2&lt;/dd&gt;
&lt;dt&gt;Section 4&lt;/dt&gt;
&lt;dd&gt;Section 4.1&lt;/dd&gt;
&lt;dd&gt;Section 4.2&lt;/dd&gt;
&lt;/dl&gt;
&lt;a class="link" href="http://www.example.com"&gt;Example link&lt;/a&gt;
&lt;br&gt;
&lt;img src="http://sdf.org/tutorials/images/example.png" alt="Example" height="128" width="128"/&gt;&lt;br&gt;
&lt;br&gt;
&lt;pre class="reference"&gt;
Book:
Author's last name, first initial. (Publication date). Book title. Additional information. City of publication: Publishing company.
Encyclopedia &amp; Dictionary:
Author's last name, first initial. (Date). Title of Article. Title of Encyclopedia (Volume, pages). City of publication: Publishing company.
Magazine &amp; Newspaper Articles:
Author's last name, first initial. (Publication date). Article title. Periodical title, volume number(issue number if available), inclusive pages.
Online periodical:
Author's name. (Date of publication). Title of article. Title of Periodical, volume number, Retrieved month day, year, from full URL
Online document:
Author's name. (Date of publication). Title of work. Retrieved month day, year, from full URL
&lt;/pre&gt;
$Id$

View File

@ -0,0 +1,213 @@
====== Basic File and Shell Operations ======
In this tutorial, we'll briefly explain some basic file and shell operations using the following commands:
===== Commands =====
- touch -- create a file
- pwd -- print working directory
- ls -- list files in current directory
- cp -- copy a file
- mv -- move a file
- rm -- remove a file
- file -- examine type of file
- less -- read a file
- mkdir -- create a directory
- cd -- change directory
- rmdir -- remove a directory
- clear -- clear screen
Please note that the above commands each have a man-page that will describe in more detail the full possibilities of each command. In this tutorial, we'll simply give a short overview, enough to get things done on the command line. For more information on man-pages, see the [[http://sdf.lonestar.org/index.cgi?tutorials/findinghelp|//Finding Help From Within the Shell//]] tutorial.
==== First some notes about: ====
* Command options
* File naming
==== 1. Command options ====
All of the commands above and many commands you'll discover and use in the shell can be modified with the use of //options//. See the man-pages for details about the available options for each command. //Options// normally come in the form of //ls -l//, that is, you type the command, space over once, type a dash and the letter for the option you need to use.
Something unique for the SDF server, the SDF server now offers both commands with BSD style options and commands with GNU style options. For example, //ls// provides users with a command providing BSD style options. The command //gls//, which is prefixed with a "g" designates the //ls// command providing GNU style options. This is very noteworthy because most users are more aquainted with binaries with GNU style options. The most popular commands are: //gls --color=always// and //gdiff//.
==== 2. File naming ====
It's good form to name a file or directory without empty spaces in the name. A file such as //my journal.txt// may be more cumbersome to handle than a file called //my_journal.txt//. This is because the shell wants to see the above //my journal.txt// as two separate files: one that is called //my// and another that is called //journal.txt//. If you happen upon a file with empty spaces in its name, you can use the following methods to manipulate it:
- Use single or double quotes around the file:
* "rm "my file.txt"" or
* "cp 'my file.txt' my_file.txt", for example.
- Use a backslash where there's an empty space:
* "mv my\ file.txt my_file.txt" or
* "cd backups/text\ pages/".
- Use Tab-Completion: many shells support tab completion. This means if you type the first two or three characters of a file name and press your Tab button, unless you have multiple files with similar beginning names, your shell may be able to finish the word completion for you. Note: if you're not in the same directory as the file you want to tab complete, you'll need to provide the path, which tab-completion can help with also.
Also, when naming a file using two or more words, the safest choices you have to use are the underscore, the dash, and the period. Examples are:
//my_file.txt//\\ //my-file.txt//\\ //my.file.txt//
Or, you can keep it as one word:
//myfile.txt//
Using other symbols, like the ampersand, may cause problems because some of these symbols may mean other things to the shell. As always, for more information you should read the man-pages for the shell of your choice.
==== Commands ====
Note: in the examples below, the percent sign is used to denote the command prompt and is not meant to be typed.
==== touch and pwd : create a file and print the working directory ====
To create a file without invoking a text editor or another program, one simply has to //touch// it. For example, to create a file called //orange.txt//, at the command prompt type:
"% touch orange.txt"
Nothing much to that! To see the file you created you have the ability to list the file(s) and directories in the current working directory. First, let's see which directory we are in. By default, upon creating a ssh link or a telnet link to your shell account, you will be in your home directory. To confirm this, at the command prompt you can type:
"% pwd"
If your user name is georgette, you may get something like this:
"/udd/g/georgette"
Or if you're on your home computer, perhaps you'll see something like this:
"/home/georgette"
==== ls : list files in current directory ====
Now to list the files in your current directory, type:
"% ls"
If you followed the tutorial and created the //orange.txt// file with the //touch// command, you should see this file in what the //ls// command yields. Next, try //ls// with the various options below and see the difference in the kinds of information each option provides:
"% ls -l"\\ "% ls -hl"\\ "% ls -a"\\ "% ls -al"\\ "% ls -ahl"\\
==== cp : copy a file ====
Copying a file is likewise very easy. The copy command serves two important functions: to make a simple backup of the file in question and to also rename a file while keeping the original.
Say you want to backup your //orange.txt// file to a sub-directory (more about creating directories in a moment) called //backups//. To do so, you would type the following:
"% cp orange.txt backups/"
The forward slash at the end of the word //backups// means that this is a directory.
To use the //cp// command to change the name of the file without destroying the original you would type the following:
"% cp orange.txt papaya.txt"
where //papaya.txt// is the new name of the file.
And to copy the original //orange.txt// file to the backup directory and to change the name at the same time, you would type:
"% cp orange.txt backups/papaya.txt"
==== mv : move or rename a file ====
The //mv// command works similarly to the //cp// command but with one vital difference. Moving a file means destroying the original file name. Thus the following command:
"% mv orange.txt papaya.txt"
essentially replaces the //orange.txt// with the new //papaya.txt// file.
You can keep the file name the same with the //mv// command by moving the file to a separate directory. To do so, type the following:
"% mv orange.txt backups/"
This would move the //orange.txt// file to the backups directory. To move the file to the backups directory and to rename it then, you'd type:
"% mv orange.txt backups/papaya.txt"
==== rm : remove a file ====
Removing a file is also very simple. The command to do so is //rm//. To completely remove and destroy a file simply type:
"% rm orange.txt"
=== short note on interactive use ===
The commands for copying, moving and removing files if carelessly used may wreak a bit of havoc for you. For these commands, you may want to invoke the interactive option by typing:
"% cp -i orange.txt backups/orange.txt"\\ "% mv -i orange.txt papaya.txt"\\ "% rm -i orange.txt"
When the interactive option is called, you'll be prompted to answer yes or no to each file you are asking to be removed. For //cp -i// and //mv -i//, you'll be prompted if and only if the file you are copying to or moving will overwrite another file.
==== file : examine type of file ====
The //file// command is useful to determine what type of file a file is. In unix-like operating systems, a file's name is fairly flexible and the file extension, e.g. the .txt appendage, is not always necessary. So if someone sent you a file and you wanted to be certain what type of file it was before you opened it, use the //file// command like so:
"% file name_of_file"
The results for a text file would be something like this:
"name_of_file: ASCII text"
Say someone sent you an image file called //something.something// in the PNG format and you wanted to be certain it was actually a PNG file, simply type:
"% file something.something"
If the file is truly a PNG file, you should see something similar to this:
"something.something: PNG image data, 922 x 691, 8-bit/color RGBA, non-interlaced"
==== less : read a file ====
The //less// command is a type of pager available to view and browse through text files without altering or opening the file in a text editor. You're encouraged to read the man-page for this command because it possesses many useful attributes such as searching through text for key words or strings. Invoke it with the name of the file you want to view:
"% less orange.txt"
If there is more text in the file than can fit on your computer screen, press the space-bar to scroll down page by page. Oftentimes, your Page Up and Page Down buttons on your keyboard will work and the arrow keys normally allow you to go up and down through the file line by line.
==== mkdir : create a directory ====
You create a directory by using the //mkdir// command. To create the backups directory we used in earlier examples, type:
"% mkdir backups"
==== cd : change directory ====
The //cd// command is used to change directories. If we are in our home directory and want to go to the newly created //backups// sub-directory, we'd simply type:
"% cd backups"
To go back simply type:
"% cd"
Typing //cd// all by itself will always take you back to your home directory which is useful if you're deep in another branch of the directory tree. If you just want to go back up a level, type:
"% cd .."
And of course, you can always type the full path to the directory you want to change to:
"% cd /usr/bin"
To switch back to the previous working directory, type:
"% cd -"
==== rmdir : remove a directory ====
And to remove an empty directory, you use the the //rmdir// command.
"% rmdir backups"
The //rmdir// will only work if the directory you want to remove is empty of files. If a directory contains files in it and you are sure you want to remove said directory along with all the files in it, you actually have to go back to the //rm// command and type:
"% rm -r name_of_directory"
The //-r// is a command option telling the //rm// or remove command to delete the directory and all contents including subdirectories. It stands for //recursive//. Be very careful about using this command! In fact, a better way to run this command is by typing:
"% rm -ir"
This invokes the interactive use of the remove command which prompts you to answer yes or no to each file and directory to be possibly removed. Again, read the man-pages for more details.
==== clear : clear screen ====
Finally, to clear the screen type the following at the prompt:
"% clear"
----
$Id: file_operations.html,v 1.11 2009/11/28 10:39:54 rogerx Exp $

View File

@ -0,0 +1,127 @@
11/3/70
FILE SYSTEM (V)
NAME format of file system
SYNOPSIS
DESCRIPTION The RB09 fixed head disk has 8,000 64-word
blocks on each of its two surfaces. Unix uses
the second surface (physical blocks 8,000 to
15,999) and numbers them from logical block 0 to
logical block 7,999. The following discussion
refers to logical blocks.
The Unix filesystem is divided into 8,000 blocks
of 64 words per block. Block 0 is the "sysdata"
block. The first word points to the first block
of the free-storage map. Each block in the free-
storage map is structured as follows: the first
word is the block number of the next block in the free-storage
map, or zero if this is the end of the free-
storage map. The next nine words hold free block
numbers, or zero (no block number).
Block 1 on the filesystem is unused. (?)
I-numbers begin at 1, and the storage for i-
nodes begins at
block 2. Blocks 2 to 711 contain the i-nodes,
with five consecutive i-nodes per block. Certain
i-nodes are reserved for special files, directo-
ries and devices:
1 The core file written by "sys save" or a
bad system call 2 The "dd" directory direc-
tory 3 The "system" directory
6 The "ttyin" special file
7 The "keyboard" (graphic-2) special file 8
The "pptin" (paper tape reader) special file
10 The "ttyout" special file 11 The "dis-
play" (graphic-2) special file 12 The
"pptout" (paper tape punch) special file
There is only one file system which is always
mounted;
it resides on the RB disk. This device is also
used for swapping. The swap areas are at the
high blocks on this device: blocks 6,400 to
7,999. These blocks do not appear in the free list.
Each i-node represents one file. The format of
an i-node is as follows, where the left column
represents
the offset in words from the beginning of the i-
node:
0 flags (see below)
1 first indirect block or contents block
... 7 seventh indirect block or
contents block
8 user ID of owner
9 link count
10 size in words
11 unique value assigned at creation
The flags are as follows:
400000 i-node is allocated
200000 large file
?????? allocated bit (always on)
000040 special file
000020 directory
000010 read, owner
000004 write, owner
000002 read, non-owner
000001 write, non-owner
The allocated bit (flag ??????) is believed even
if the i-node map says the i-node is free; thus
corruption of the map may cause i-nodes to be-
come unallocatable, but will not cause active
nodes to be reused.
Word number n of a file is accessed as follows:
n is
divided by 64 to find its logical block number
(say b) in
the file. If the file is small (flag 200000 is
0), then b must be less than 7, and the physical
block number corresponding to b is the bth entry
in the address portion of the i-node.
If the file is large, b is divided by 64 to
yield a number
which must be less than 8 (or the file is too
large for
UNIX to handle). The corresponding slot in the
i-node
address portion gives the physical block number
of an
indirect block. The residue mod 64 gives a word
offset
in the indirect block, and the word found there
is the physical address of the block correspond-
ing to b.
If block b in a file exists, it is not necessary
that all
blocks less than b exist. A zero block number
either in the
address words of the i-node or in an indirect
block
indicates that the corresponding block has never
been
allocated. Such a missing block reads as if it
contained
all zero words.
FILES
SEE ALSO format of directories
DIAGNOSTICS
BUGS
OWNER

View File

@ -0,0 +1,93 @@
====== File Transfer Tutorial ======
This tutorial discusses various ways to get data from and to a local (external) machine into and out of SDF.
==== Contents ====
- [[#intro|Introduction]]
- [[#ftp|FTP]] - File Transfer Protocol
- [[#scp|scp and sftp]] - secure copying and ftp
- [[#ssh|ssh and tar]] - securely copying directories
- [[#pub|Gopher and HTTP]] - using the internet for download
- [[#term|Terminal]] - direct copying via the terminal
- [[#email|E-mail]] - for small files only
- [[#gloss|Glossary]] - explications of terms
----
==== To Do ====
* x/y/zmodem transfers
* kermit transfers
----
===== [[|Introduction]] =====
To transport data between SDF and your local (or any other external) machine, there are various ways. Their availability depends on your member level on SDF (see the [[http://sdf.org/index.cgi?faq?MEMBERS|FAQ, MEMBER section]] for more information), the external system, and their connection.
===== [[|FTP - File Transfer Protocol]] =====
[[http://en.wikipedia.org/wiki/File_Transfer_Protocol|FTP (File Transfer Protocol)]] on SDF is available only for **downloading** public files. This is for security reasons. For upload and download of private files, [[#scp|scp and sftp]] must be used. \\ Note: ARPA membership allows for up-&amp;download via FTP; however, it is better to use scp or sftp if possible, as FTP is unencrypted, and your passwords also have to travel in the clear.
For download, point your FTP program to sdf.org and do anonymous FTP to read data (username "anonymous", password "//yourlogin//@sdf.org", or another of your e-mail addresses).
===== [[|scp and sftp]] - secure copying and ftp =====
scp and sftp are secure ways to transfer data between computers, based on ssh (secure shell). If you've only worked with ftp before, you'll be surprised at the ease and benefits to using scp.
Let's say you're logged into sdf and you want to transfer some pictures from your home machine (named foo in this example) to your sdf home directory. You would want to use the following command:
"scp *.jpg me@sdf.org :/your/remote/home/"
Let's break that down
scpThe command itself.*.jpgThe files you want to transfer.me@sdf.orgYour username @ the server you wish to connect to.:/your/remote/home/The directory you'd like to upload it.
Unless you've installed ssh authorization keys, you'll be prompted for your username and password. Afterwhich, you should have output similar to this:
[me@local Pictures]# scp *.jpg me@sdf.org:~/your/remote/home
IMG_016.jpg 100% 1802KB 45.7KB/s 00:39
IMG_017.jpg 100% 1253KB 46.1KB/s 00:40
IMG_018.jpg 100% 1243KB 48.6KB/s 00:25
IMG_020.jpg 100% 1131KB 45.9KB/s 00:39
[foo@local Pictures]#
On SDF, you need to have ARPA membership to be able to use them. Check the manpages of scp and ssh for more information and options to use.
On Windows machines, you can use the [[#putty|PuTTY programs]].
===== [[|ssh and tar]] - securely copying directories =====
The tar archiving tool can be used with ssh to quickly duplicate whole directory trees:
"tar cf - //target_dir// | ssh me@freeshell.org " tar xf - -C ~///path/// ""
Note: this trick requires compatible versions of tar on the local and remote systems
===== [[|Gopher and HTTP - using the internet for download]] =====
To get data out of SDF on a local machine, you can of course publish them on your gopher- or web-site. Please check the [[http://sdf.org/index.cgi?faq?GOPHER|FAQ, GOPHER section]] and the [[http://sdf.org/index.cgi?tutorials/building_a_website| website tutorial]] for information how to set up these sites.
Please note that HTTP traffic is bandwidth limited depending on your membership level; if you go over the quota, your site will be temporarily blocked!
To prevent access by everybody, see the FAQ entry about [[http://sdf.org/index.cgi?faq?WEB?04|password protection]] of websites.
===== [[|Terminal - direct copying via the terminal]] =====
For transferring small amount of text data (scripts, tables, source code snippets), think about copy/paste directly in the terminal! If you are [[http://sdf.org/index.cgi?faq?MEMBERS?01|MetaARPA]], then you can use "screen" and its built-in copy facility to transfer data between different screens.
To append text input in the terminal to a file on SDF, you can open the file on SDF in your favourite [[http://sdf.org/index.cgi?faq?BASICS?09|text editor]]. Or simply use the command "cat &gt;&gt;//file//", send the data to the terminal (via the paste function), and finish with a single line containing only ^D (CTRL-D) - to do that in the terminal, hit RETURN, CTRL-D, RETURN; this will close the standard input the "cat" was reading from.
===== [[|E-mail - for small files only]] =====
If you have to transfer binary data and cannot use scp (because you're not [[http://sdf.org/index.cgi?faq?MEMBERS?01|ARPA]], which is a pity), then you may need to use file transfer via e-mail. For this, you attach the data you want to get into SDF to a message which you send to your address on SDF (//yourlogin//@sdf.org). On SDF, you read the message and save the attachment where you need the data (e.g, in your home directory, from where you can move them using "mv").
This may not work for large attachments, as the e-mail system (everywhere!) was not intended for file transfer. If you have to regularly transfer large files, you should seriously consider becoming ARPA!
===== [[|Glossary]] =====
ARPA and MetaARPAThese are additional [[http://sdf.org/index.cgi?faq?MEMBERS?01|membership]] levels on SDF which allow for more commands and provide more space and the good feeling of supporting [[http://sdf.org|SDF]]!downloadto get data //from SDF// to your local machine; imagine SDF sitting somewhere uphill so that everybody can see it - then you get the data //down// from SDF[[http://www.chiark.greenend.org.uk/~sgtatham/putty|PuTTY]]This is a software suite for Windows machines for ssh and scp connections.[[http://sdf.org|SDF]]Super Dimensional Fortress - if you don't know what that is, then why are you reading this..? //wink//terminalThe equipment used to connect to a computer in text mode (for a more accurate definition see the corresponding [[http://en.wikipedia.org/wiki/Computer_terminal|Wikipedia entry]]), or in a narrower context the window which gives access to a SDF in text mode. If you are using Windows, it may be a telnet window (or better use PuTTY for secure access via ssh - that's even possible without being ARPA), or on a Linux machine an xterm window.uploadto get data //to SDF// from your local machine; see //download//
----
$Id: filetransfer.html,v 1.17 2020/01/01 22:27:19 niro Exp $

View File

@ -0,0 +1,112 @@
====== Finding Help From Within the Shell ======
Note: Please look [[#sdfspecific|further down]] about help facilities specific to SDF, like the FAQ!
While the UNIX shell may seem a bit daunting and cold with cryptic two-letter commands, dozens of command line switches, and no animated paper clips to show you the way, there are several different ways of getting help from the system.
----
===== [[|Using Manpages]] =====
==== The Definitive Guide to RTFMing ====
The easiest and most comprehensive way of getting help is reading the manpage. You've probably heard RTFM (Read The Fscking Manual) somewhere throughout your computer use, well, this is that Manual. Manpages are the standard form of documentation for every UNIX. Learn to use them. Learn to love them.
Where can you find them? It's pretty simple. Think of a command. (ls, rm, chmod, kill, grep) or a program (vi, mutt, snarf, majordomo) So go ahead, type
"% man //command//"
command being the name of the command you want to learn about. As you can see, manpages are broken down into sections. We'll use mkdir as an example.
"% man mkdir"
MKDIR(1) NetBSD General Commands Manual
MKDIR(1)
NAME
mkdir - make directories
SYNOPSIS
mkdir [-p] [-m mode] directory_name ...
DESCRIPTION
mkdir creates the directories named as operands, in the order specified,
using mode rwxrwxrwx (0777) as modified by the current umask(2).
The options are as follows:
-m Set the file permission bits of the final created directory to
the specified mode. The mode argument can be in any of the for-
mats specified to the chmod(1) utility. If a symbolic mode is
specified, the operation characters ``+'' and ``-'' are inter-
preted relative to an initial mode of ``a=rwx''.
-p Create intermediate directories as required. If this option is
not specified, the full path prefix of each operand must already
exist. Intermediate directories are created with permission bits
of rwxrwxrwx (0777) as modified by the current umask, plus write
and search permission for the owner. Do not consider it an error
if the argument directory already exists.
The user must have write permission in the parent directory.
EXIT STATUS
mkdir exits 0 if successful, and &gt;0 if an error occurred.
SEE ALSO
chmod(1), rmdir(1), mkdir(2), umask(2)
STANDARDS
The mkdir utility is expected to be IEEE Std 1003.2 (``POSIX.2'') compat-
ible.
NetBSD 2.0.2 January 25, 1994 NetBSD
2.0.2
For our "mkdir" command, the man page displayed has six sections: NAME, SYNOPSIS, DESCRIPTION, EXIT STATUS, SEE ALSO, and STANDARDS. The NAME section simply shows the name of the command and a terse description of its function. The SYNOPSIS gives a brief outline of the command syntax, so you can see what the command you enter should look like. Items in square brackets [ ] are optional. The DESCRIPTION section provides a detailed description of how the command works, including information on the various options or modes of the command. The EXIT STATUS section describes what status codes are generated by the command when it completes (successfully or unsuccessfully). These codes can be read by programs (such as a shell script) to determine how to react to the command's result. SEE ALSO provides cross referencing information for related commands or others which may be helpful. And finally, the STANDARDS section lists information on which standards this particular command complies with.
The manual is divided up into nine sections:
- User commands.
- System calls and error numbers.
- Functions in the C libraries.
- Device drivers.
- File formats.
- Games and other diversions.
- Miscellaneous information.
- System maintenance and operation commands.
- Kernal developers.
In some cases, the same topic will appear on more than one section of the manual. For example, there is a chmod user command and a chmod() system call. How would you find the appropriate manpage? You can tell man which section you'd like to look under. If you wanted to find the user command you would type:
"% man 1 chmod"
This would display the manpage for the user command chmod. References to the specific sections are traditionally placed in parenthesis after the command name like so: chmod(1)
Well, this is all fine and good if you know the name of the command, but what if you can't remember the name? 'man -k' can be used to search for keywords in the command descriptions. So, if you want to find a mail program you would type:
"% man -k editor"
A list of commands with the keyword "editor" in their descriptions will be presented on the screen.
===== The GNU Info system =====
For programs of the [[http://www.gnu.org|GNU Project]], you may also use the "info" command. If you know the name of a program, give it as an argument (like with "man"). \\ In fact, you can use "info" as an alias to "man", because the info reader will simply display the man page if it cannot find an info entry (but you cannot specify the manpage section).
However, navigation is different in the standard info reader, as it is based on the "emacs" text editor. \\ Quick key help (for more, consult "info info"):
SPACE, BACKSPACEpage forward, backwardTABplace cursor onto next menu item or link (info files are hyperlinked)RETURNjump to the place where the link the cursor is sitting on points tol (the letter ell)get back to the spot from where last jump startedu n pup, next, previous node (info files are hierarchically structured)qquit the info reader
With most terminals, you can also move around using the cursor keys (arrows).
===== SDF specific help =====
There are also a number of tools at SDF that you can use to get more help. Type the following commands at a shell prompt.
helpThe SDF help system.faqA collection of frequently asked questions. Type 'g ' to enter a topic, 'l' to list the questions in the topic, and 't ' to read the FAQ. The FAQ is also available [[http://sdf.lonestar.org/index.cgi?faq|on the SDF website]].helpdeskIf you cannot find your answer in the man pages, help, faq, or googling post a question to the helpdesk and a friendly member of the community will answer your question. Any member with ARPA status can login as an attendent to answer questions. Please note: in helpdesk you should only post questions directly related to SDF's systems, but not about general UNIX, programming or gardening - these belong to the bboard!bboardTo enter the SDF Bulletin Board System (BBOARD), type bboard at the command line. Help on using BBOARD may be found by typing h and ? at the bboard Command: prompt or at the [[http://sdf.org/?tutorials/bboard-tutorial|BBOARD tutorial]]. If you have a general question about using the SDF system, post in HELPDESK. If you have a question that requires intervention from an admin (e.g., software requests or membership queries), post in REQUESTS.comCom and bboard are meeting places for the SDF community. You could also pose your question there. Bboard and faq have the same interface. See [[http://sdf.lonestar.org/index.cgi?tutorials/comnotirc|COM is not IRC]] for how to use com.
And of course there are the online tutorials that you are reading right now! The top level page is http://sdf.lonestar.org/index.cgi?tutorials.
----
$Id: findinghelp.html,v 1.11 2016/12/07 20:17:49 jandal Exp $

197
dump/footnode.html.docuwiki Normal file
View File

@ -0,0 +1,197 @@
[[|... unix.]][[node4.html#tex2html4|<sup>3.1</sup>]]Gnu stands for Gnu's Not Unix, but I say it is.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
[[|... file.]][[node5.html#tex2html6|<sup>4.1</sup>]]The link count is intimately related to the structure of the unix file system. There's no need to worry about it for now.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
[[|... myself.]][[node6.html#tex2html13|<sup>5.1</sup>]]I infer from the book's title that Eric Raymond would agree with me that ``unix'' is a functional description of a class of operating systems, not a particular implementation.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
[[|... immediately.]][[node7.html#tex2html18|<sup>6.1</sup>]]``Immediately'' is a relative term. Lag might prevent "com" from reacting instantly, but it will react without you pressing any other keys.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
[[|..."com".]][[node7.html#tex2html19|<sup>6.2</sup>]]Some people keep track of the longest time a new user has required to exit from "com". I have heard that the record is over 23 minutes.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
[[|... networking]][[node9.html#tex2html21|<sup>8.1</sup>]]Lookup //socket//, //connect//, //listen//, &amp; //accept// in the man.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

268
dump/format.html.docuwiki Normal file
View File

@ -0,0 +1,268 @@
====== Creating and editing tutorials ======
[[#Introduction|Introduction]][[#Creating a New Tutorial|Creating a New Tutorial]][[#Editing or modifying a tutorial|Editing or modifying a tutorial]][[#Tips|HTML format guidelines]][[#Template|Template]][[#Title|Title]][[#Header|Header]][[#Body|Body]][[#Note|Note]][[#Code|Code]][[#Reference|Reference]][[#Tables|Tables]][[#List|List]][[#Links|Links]][[#Using images|Using images]][[#Using references|Using references]][[#Example|Example]]
[[|Introduction]]
This tutorial has been introduced to help members to more easily contribute to \\ the [[http://sdf.org/?tutorials|SDF Tutorials]] project. The SDF Tutorials utilize simple RCS Revision Control System. \\ The only downside is initially finding the folder location and reading the lengthy \\ README.TXT. By using this tutorial, you should be able to get started much quicker! \\ Please note, this tutorial is not meant to replace the main README.TXT and reading the main \\ README.TXT will provide a better understanding. More in-depth instructions for editing SDF \\ Tutorials can be found within the [[/tutorials/README.TXT|README.TXT]] (which can also be found on the shell at \\ /sys/html/tutorials/README.TXT).\\
==== [[|Creating a New Tutorial]] ====
Change your current directory to the tutorials directory.
\\ cd /sys/html/tutorials
Create an empty html file with a name of your choosing.
\\ touch new_filename.html
Change the permissions on the file so everyone can read it.
\\ chmod a+r filename.html
Check the file in and unlock it so everyone can edit it.
\\ ci -u new_filename.html
\\ Check to make sure file permissions are retained by RCS on check-out (co).\\ If they are not, and the permissions only show user readable still, \\ then chmod a+r RCS/filename.html,v directly so that the file can be read by readers of the webpage.\\ Next, edit the main index.html page to include the newly created file.\\
==== [[|Editing or modifying a tutorial]] ====
Change your current directory to the tutorials directory.
\\ cd /sys/html/tutorials
Check out the file and lock it while you make your edits
\\ co -l filename.html
Edit the file using a text editor(i.e. vi, pico, nano)
\\ nano filename.html
Check the file in and unlock it so everyone can edit it.
\\ ci -u new_filename.html
==== [[|HTML format guidelines]] ====
Whether after issuing the co command or simply editing a file within /sys/html/tutorials, \\ modifications can be viewed in real time with a browser over the internet. But remember, \\ changes will only be saved if you use co/ci properly! The tutorial server script generates \\ the page header and footer, so you only need to supply the content of the tutorial you plan to \\ post and the RCS $Id$ tag. You can use the following as a template:\\
\\
&lt;html&gt;
&lt;head&gt;
&lt;style type="text/css"&gt;
.title{
background-color:#ffffff;
font-size:30px;
color:#2a2a2a;
}
.header{
background-color:#ffffff;
font-size:20px;
color:#2a2a2a;
}
.body{
background-color:#ffffff;
font-size:15px;
color:#2a2a2a;
}
.reference{
border: 1px dotted #000;
text-align: left;
padding: 5px;
padding: 15px 30px 15px;
background:#CCC url('http://sdf.org/tutorials/images/ref.png') 5px 5px no-repeat;
color: #000;
margin: 10px 5px;
}
.link { text-decoration:none }
.superscript{
font-size:10px;
vertical-align:top;
}
.subscript{
font-size:10px;
vertical-align:bottom;
}
.note{
border: 1px dotted #000;
text-align: left;
padding: 5px;
padding: 15px 30px 15px;
background: #DC143C url('http://sdf.org/tutorials/images/note.png') 5px 5px no-repeat;
color: #FFF;
margin: 10px 5px;
}
.code{
border: 1px dotted #000;
text-align: left;
padding: 5px;
padding: 15px 30px 15px;
background:#2F4F4F url('http://sdf.org/tutorials/images/code.png') 5px 5px no-repeat;
color: #00FF00;
margin: 10px 5px;
font-family: monospace;
}
table.table {
border-width: 0px;
border-spacing: 0px;
border-style: none;
border-collapse: collapse;
background-color: #1E90FF;
}
table.table th {
border-width: 1px;
padding: 1px;
border-style: inset;
border-color: white;
background-color: #A0522D;
-moz-border-radius: ;
padding: 10;
}
table.table td {
border-width: 1px;
padding: 1px;
border-style: inset;
border-color: white;
background-color: #FFEBCD;
-moz-border-radius: ;
padding: 5;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
YOUR CODE HERE\\
&lt;br/&gt;\\
&lt;cite&gt;$Id$&lt;/cite&gt;\\
&lt;/body&gt;&lt;/html&gt;
\\
This is how to to define a comment\\
\\ &lt;!-- This is a comment --&gt;
This is the code to define a tutorial title\\
\\ \\ &lt;h1 class="title"&gt;Here is a test for the title format.&lt;/h1&gt;
This is the code to define a tutorial header\\
\\ \\ &lt;h3 class="header"&gt;Here is a test for the header format.&lt;/h3&gt;
This is the code to define a tutorial body.\\
\\ \\ &lt;p class="body"&gt;Here is a test for the tutorial body format.&lt;/p&gt;
This is the code to define a tutorial note section.\\
\\ \\ &lt;p class="note"&gt;&lt;br&gt;Here is a test for a note/warning/tip.&lt;/p&gt;
This is the code to define a tutorial code section.\\
\\ \\ &lt;p class="code"&gt;&lt;br&gt;Here is a test for the code format.&lt;/p&gt;
This is the code to define a tutorial reference section.\\
\\ \\ &lt;p class="reference"&gt;&lt;br&gt;Here is a test for the reference format.&lt;/p&gt;
This is the code to define a table.\\
\\
&lt;table class="table"&gt;
&lt;tr&gt;
&lt;th&gt;Table Header 0&lt;/th&gt;
&lt;th&gt;Table Header 1&lt;/th&gt;
&lt;th&gt;Table Header 2&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;!-- This is column 1 --&gt;
&lt;th&gt;Table DATA&lt;/th&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;!-- This is column 2 --&gt;
&lt;th&gt;Table DATA&lt;/th&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;!-- This is column 3 --&gt;
&lt;th&gt;Table DATA&lt;/th&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;td&gt;TABLE DATA&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
This is the code to define a list. You have have two levels: the title of a section(dt) and the subsection(dd).
\\
&lt;dl&gt;
&lt;dt&gt;Section 1&lt;/dt&gt;
&lt;dd&gt;Section 1.1&lt;/dd&gt;
&lt;dd&gt;Section 1.2&lt;/dd&gt;
&lt;dd&gt;Section 1.3&lt;/dd&gt;
&lt;dt&gt;Section 2&lt;/dt&gt;
&lt;dd&gt;Section 2.1&lt;/dd&gt;
&lt;dt&gt;Section 3&lt;/dt&gt;
&lt;dd&gt;Section 3.1&lt;/dd&gt;
&lt;dd&gt;Section 3.2&lt;/dd&gt;
&lt;dt&gt;Section 4&lt;/dt&gt;
&lt;dd&gt;Section 4.1&lt;/dd&gt;
&lt;dd&gt;Section 4.2&lt;/dd&gt;
&lt;/dl&gt;
This is the code to define a link.
\\
&lt;a class="link" href="http://www.example.com"&gt;Example link&lt;/a&gt;
\\
==== Using images ====
No hotlinking of files from other sites: images must be uploaded to the /sys/html/tutorials/images folderWhen using images tags must be clearly defined.\\ Incorrect\\
\\ &lt;img src="tutorials/images/example.png"/&gt;\\
Correct\\
\\ &lt;img src="http://sdf.org/tutorials/images/example.png" alt="Example" height="128" width="128"/&gt;\\
\\
==== Using references ====
Book:
Author's last name, first initial. (Publication date). Book title. Additional information. City of publication: Publishing company.
Encyclopedia &amp; Dictionary:
Author's last name, first initial. (Date). Title of Article. Title of Encyclopedia (Volume, pages). City of publication: Publishing company.
Magazine &amp; Newspaper Articles:
Author's last name, first initial. (Publication date). Article title. Periodical title, volume number(issue number if available), inclusive pages.
Online periodical:
Author's name. (Date of publication). Title of article. Title of Periodical, volume number, Retrieved month day, year, from full URL
Online document:
Author's name. (Date of publication). Title of work. Retrieved month day, year, from full URL
\\
==== Example ====
Here is the [[http://sdf.org/?tutorials/example|example]] and [[http://sdf.org/?tutorials/example_source|source]] of a typical tutorial.
$Id: format.html,v 1.17 2014/09/11 09:30:24 grobe0ba Exp $

View File

@ -0,0 +1,30 @@
===== INTERNET Game Server List and Game Information for SDF.ORG =====
There are several multiplayer games that you can play on SDF via the shell and clients run on your computer
==== xscrabble - scrabble over X11 ====
* any SDF server
* info: [[http://sdf.lonestar.org/index.cgi?tutorials/xscrabble|xscrabble]]==== minecraft - blocky 3D craft work ====
* minecraft.sdf.org
* requires Mojang client ==== Counter Strike Source - Terrorist/Counter Terrorist simulator ====
* cs.sdf.org
* requires Steam client ==== Garry's Mod - Half Life 2 in a craft work world ====
* gm.sdf.org
* requires Steam client ==== freeciv - Free Civilization ====
* freeciv.sdf.org port 5555
* clients and info: [[http://freeciv.wikia.com/wiki/Main_Page|Freeciv Wiki]]==== SDF Mud (ResortMUD) ====
* mud.sdf.org port 4000
* info: [[https://wm.sdf.org/mud|wm.sdf.org/mud]]
* Clients on SDF:
* Type 'mud' at the shell
* TinyFugue: type 'tf mud.sdf.org 4000'
* Other Clients:
* Windows: [[http://www.gammon.com.au/mushclient/mushclient.htm|MUSHclient]]
* Windows (non-free): [[http://www.zuggsoft.com/index.php?p=cmud|CMUD]]
* MacOS: [[http://www.riverdark.net/atlantis|Atlantis MU]]==== tetrinet - Up to 6 player tetris ====
* server: tetrinet.sdf.org
* clients: http://en.tetrinet.no/tetrinet-clients-download-1.php, //tetrinet// at the shell
* stats: http://tetrinet.sdf.org==== BZFlag - Battle Zone Capture The Flag ====
* sdf.org port 5154
* clients and info: http://bzflag.org$Id: games_server_list.html,v 1.10 2012/12/24 03:53:28 hobbsc Exp $

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,327 @@
====== GNU Social on SDF ======
[[http://gnu.io/social|GNU social]] is a social media platform[[[#fn-microblog|note]]] implementing the [[http://www.w3.org/community/ostatus/|OStatus]] protocol stack. It works in much the same way as Twitter or Facebook or Google+; you may:
* publish text notices (like Twitter's "tweets" or Facebook's "status updates"), optionally with file attachments (images, sounds, documents, and so-on);
* favor other users' notices ("like", or "+1" on other services);
* follow ("subscribe","friend") the activity of other users, hashtags, and search terms;
* join groups to receive topical notices and broadcast your own notices to interested parties;
* repeat ("retweet","share") others' notices so that your friends, associates, and followers will see them;
* and, of course, comment on notices and participate in public discourse.
GNU social differs from the most popular social media platforms in a fundamental way: rather than having all communication hosted on a single corporation's private network, GNU social is an open-source software platform running on a distributed system of [[#how-it-works|federated servers]] operated by a diverse array of groups and individuals. Unlike Facebook or Google+ or Twitter, this social network has no central authority, no owner — //anyone// can operate a server in the Fediverse: the service providers and users that make-up the network on which GNU social operates.
The SDF hosts a public GNU social node[[[#fn-node|note]]] which may be reached at https://gs.sdf.org. An SDF membership is no longer required to join this node; simply direct your browser to https://gs.sdf.org/main/register to create a new account — and bring your friends!
This tutorial is intended to help you get started with the SDF GNU social web interface, and to a lesser extent with GNU social in general. The software version at the time of writing this is 1.2.0-beta3.
===== Contents =====
* [[#enable|Creating Your SDF GNU social Account]]
* [[#setup|Setting-Up Your Account]]
* [[#get-started|Getting Started: Timelines]]
* [[#home-timeline|Your Home Timeline]]
* [[#public-timeline|The Public Timeline]]
* [[#network-timeline|The Network Timeline]]
* [[#notices|Interacting With Notices]]
* [[#notice-actions|Notice Actions]]
* [[#favoring|Favor]]
* [[#replying|Reply]]
* [[#repeating|Repeat]]
* [[#deleting|Delete]]
* [[#context-and-origin|Context and Origin]]
* [[#context|Viewing Notices in Context]]
* [[#origin|Viewing a Notice's Original]]
* [[#writing-notices|Writing Notices]]
* [[#mentions|Mentions (using '@')]]
* [[#tags|Tags (using '#')]]
* [[#group-addressing|Group Addressing (using '!')]]
* [[#following|Following Users]]
* [[#follow-offsite|From Their Profile Page]]
* [[#follow-onsite|From Your Profile Page]]
* [[#finding-people|Finding People To Follow]]
* [[#groups|Groups]]
* [[#joining-groups|Joining Groups]]
* [[#finding-groups|Finding Groups]]
* [[#webfinger|Webfinger And Your Account ID]]
* [[#how-it-works|Understanding GNU Social]]
* [[#relationships|The Fediverse Is Defined By Relationships]]
* [[#federation-problem|The "Federation Problem"]]
* [[#best-course|The Best Course]]
===== Creating Your SDF GNU social Account =====
In the past, SDF GNU social was only open to SDF members, but this is no longer the case. To create an account, you or any of your friends may visit https://gs.sdf.org/main/register and fill-out the registration form.
===== Setting-Up Your Account =====
After logging into your account for the first time, you should click the 'SETTINGS' link at the top of the page; this will present you with a form for filling-out your profile information. It's pretty standard stuff: full name, bio, website, and so-on. Fill these things in as usual, but take note of the last two settings on the page.
==== Subscription Policy and Private Posts ====
By default, anyone can subscribe to your activity, and when you post notices they will be publicly visible — this is akin to how things work on Twitter. You can opt instead to do things in a more Facebook-like fashion, where you must approve subscriptions, and your posts will be private, visible only by those subscribers you have approved. This latter scenario is good if you want to use open social networking to keep in touch with family and friends, but have no interest in participating in the global social media cacophony. These settings can be changed at any time.
There are additional links on the left side of the page for changing your password, uploading an avatar image, and so-on. These things are self-explanatory.
===== Getting Started: Timelines =====
After you've set-up your account and saved all of your changes, you'll probably want to see some stuff that people are posting. To view user activity, you need to select a timeline to look at. Links to all of the timelines are provided in the left-hand navigation pane.
==== Your HOME Timeline ====
"https://gs.sdf.org/{username}/all"
Your Home timeline is where you will see all of the activity from people you're [[#following|following]] and the [[#groups|groups]] you've joined, as well as notices containing [[#tags|tags]] that you're watching, and [[#mentions|mentions]] of you.
If you are reading this as a brand-new user, you will have noticed that your Home timeline is empty. This is because you are not following anyone, you are not a member of any groups, you are not watching any tags, and no one is talking about you. Don't worry! It'll be full of stuff in no time.
==== The PUBLIC Timeline ====
"https://gs.sdf.org/main/public"
The Public timeline is where you will see all of the latest public activity from your fellow SDF GNU social users. There will also be some notices from non-SDF users [[[#who-is-local|how would you notice this?]]], but they'll only appear in this timeline because an SDF user has interacted with the federated notice in some way, either by [[#favoring|favoring]], [[#replying|replying]], or [[#repeating|repeating]] it, or being [[#mentions|mentioned]] in it.
==== The NETWORK Timeline ====
"https://gs.sdf.org/main/all"
The Network timeline is the busiest place on SDF GNU social. It's a feed of **all** the public activity that's coming into the node, from SDF users as well as remote users.
\\
----
I'm going to put a fork in the road, here. You can keep reading straight through to learn about [[#notice-interaction|interacting with notices]]; you might instead want to [[#writing-notices|write a notice]] to announce your arrival at the party; or, you may want to know about [[#following|follwing users]] or [[#groups|joining groups]] to start growin' your social network; if you're of a more conceptual bent, though, now might be a good time to read the [[#how-it-works|Understanding GNU social]] section, to get the lay of the land, so to speak.
----
===== Interacting With Notices =====
Notices that you see when browsing around SDF GNU social can be interacted with in a variety of ways; most of them will be familiar to you if you're already using another microblogging service, although they probably work a little bit differently than what you're used to.
==== Notice Actions ====
Below every notice, you will see three (or four) icons, with which you can perform the following actions:
=== Favor ===
//Favoring// a notice is akin to "liking" or "+1'ing" a notice on other services. It adds the notice to your list of favorites, which you can access by clicking the Favorites link in the navigation pane (or by pointing your browser to "https://gs.sdf.org/{username}/favorites"). This also sends a notice to the node of the notice's author to let it know that you have favored it, and when other people view the notice, they will be able to see that you favored it as well.
=== Reply ===
//Replying// to a notice is as obvious as it sounds. You will be presented with a text box in which to [[#writing-notices|write a reply]] which will be posted to the SDF GNU social server, which, in turn, will send a copy to the notice author's server so that they can see it, as well as all of your followers.
=== Repeat ===
//Repeating// a notice copies it to your feed so that it will appear in the [[#home-timeline|Home timelines]] of all of your followers and in the Public Timeline of your server with a little note attached to it saying that you repeated it.
=== Delete ===
On notices that you post, you will also see an icon for deleting them. This will, obviously, delete your notice. But, **it may not necessarily delete it on other servers that it's been sent to!** So, before you post something you might regret, think twice.
==== Context and Origin ====
Below each post, you'll also see a hyperlink around the time that it was posted, and a link that either says '[permalink]', or something like 'from quitter.se'. These two links allow you to view the notice in context, or view the original notice. Here's why that's useful:
=== Viewing Notices In Context ===
If you click on the time of the notice's posting, you'll be taken to a //Conversation// view, where you can see the conversational context in which a notice/reply was posted. This conversation is reconstructed from notices that are present in the local database (this may make more sense after reading the [[#how-it-works|Understanding GNU Social]] section). Because SDF GNU social is a small node, this will sometimes produce badly fragmented conversations as only a small part of the conversation has been delivered to our node (see [[#federation-problem|The "Federation Problem"]]).
=== Viewing A Notice's Original ===
The second link, which will say '[permalink]' for notices posted by SDF users or "from some.server" for notices received from outside SDF, will take you to the unique web address for that notice. If the notice originated outside of SDF, then you will be taken to its author's server. There are a couple of reasons why you might want to do this: if the conversation view on SDF GNU social seems to be missing a lot of notices, you can go to the notice's home server and see the (hypothetically more complete) conversation view there; or, sometimes a message will be truncated as it passes from one Fediverse node to another, and you will need to view the notice on its originating node to see the entire message. This latter scenario typically won't happen on SDF, because our notice-length limit is 1000 characters, and most folks' notices are much shorter than that.
===== Writing Notices =====
To compose a new notice, you can just click in the box at the top of the GNU social interface that says "Update your status...", and a notice composition form will appear — unless you have Javascript disabled or are using a text-only browser; in either of those cases you can direct your browser to "https://gs.sdf.org/notice/new" and compose your notice on the form provided by that page.
Notices are plain text; no bolds, italics, font-sizes/faces, or anything like that. YOU CAN ALWAYS SHOUT-CAPS FOR EMPHASIS! Or use *bold-stars* and ~itildes~ and whatever other plain-text conventions you're happy with if you need to.
Any URLs you type in your notice will be automatically hyperlinked when you post it.
The 'at' character ("@"), 'hash' ("#"), and 'bang' ("!") all have special functions when they appear at the beginning of a word; let's go over those functions now:
==== Mentions (using '@') ====
This will be familiar to Twitter users. Prepending an at symbol (@) to a user's nickname will mention the user. This means that your notice will appear in that user's Home timeline, and they will recieve a notification that they've been mentioned.
=== User Name Collisions ===
In the Fediverse, two or more users on different servers can have the same nickname, and this can cause minor headaches when you're trying to mention someone. For example, there might be a user named Zorba on "quitter.se", and a different user named Zorba on "micro.fragdev.com". You might follow the Zorba on FragDev and want to mention him in a notice, so you write "@Zorba" in your message — but when you post it you see that it's gone to Zorba at Quitter.se instead. Why? Because at some point your node received a notice from zorba@quitter.se and put him into the remote user database, and when the server looked in the table of user nicknames to find out who "Zorba" is, it simply took the first Zorba it came across, which happened to be the wrong one.
This won't happen with the nicknames of your fellow SDF users — the server looks for local nicknames first, and all of the SDF users have unique names — but it //can// happen with users on other servers. To be completely sure that your mention hits the right user, you can use their [[#webfinger|webfinger address]] when mentioning them. So, in the previous example, instead of simply writing "@Zorba", you would use "@zorba@micro.fragdev.com"
==== Tags (using '#') ====
Ah, hashtags. Who isn't tired of hearing that word?
They work on GNU social much the same as elsewhere: you prepend a "hash" ("#") to a word, and the notice becomes "tagged" with that keyword so that people who are following that tag will see your notice in their Home Timeline.
Tags in GNU social are case-insensitive, so you can write #tubers, #Tubers, #TUBERS, or #tUbErS in your notice, and they'll all be treated as #tubers. The up-side of this is that people who appreciate clarity can write multi-word hashtags in camel-case (#ThePenIsMightier) while remaining in the loop with their shift-key-averse fellows who aren't bothered by possible ambiguity in their tags (#thepenismightier).
==== Group Addressing (using '!') ====
The "bang" ("!") is used in GNU social to address groups.
If you are a member of a group, when you type the group's name prepended with a bang in a notice (eg "!cheeseafficionados"), that notice will arrive in the timelines of all the group's members, all over the fediverse.
=== Group Name Collisions ===
This again? Yep, it's the same issue as with federated user nicknames: groups on different nodes can have the same name, so when you mention !DeloreanFans, your notice might not get to the group you wanted it to.
Unfortunately, there's no easy solution for this problem, because groups don't have webfinger addresses! If your node has a group with the same name as a remote group that you're a member of, or want to be a member of ...I'm not sure there's anything you can do about that.
===== Following Users =====
There are two ways to follow a user: from //their// profile page, or from //yours//.
==== From Their Profile Page ====
Click on a user's avatar or nickname to be taken to their profile page. Once there, look for a button that says "Subscribe" or "Remote Follow". Clicking the button will open a dialog that asks for your //account ID//. You can use the URL of your SDF GNU social profile page, which looks like this: "https://gs.sdf.org///nickname//", or you can use your webfinger ID, which looks like this: //nickname//@gs.sdf.org.
After you submit your ID, you will be redirected to a page asking you to confirm the follow. Once you've confirmed, you will start receiving notices from the user you've just followed in your timeline.
==== From Your Profile Page ====
If you already have another user's account ID — either a webfinger address, such as "bob@status.hoohaw.org", or a URL such as "http://status.hoohaw.org/bob" — you can begin following them by going to your profile page and clicking the "+ Remote" button underneath the "Following" section on the right-hand side of the screen. This will open a dialog asking for the account ID of the user you wish to follow. Fill in the box, submit it, confirm on the page you're redirected to, and that's it!
==== Finding Users To Follow ====
Yes, it's all well and good to know how to follow people — but how do you find people to follow? The SDF GNU social instance is new, and there are only a handful of semi-regular users right now, so the Public timeline sometimes seems a bit dead. The Network timeline is a bit busier, and it has activity from remote users, so it's a bit better. Sometimes, though, the best place to look for interesting new people is //somewhere else//.
* The [[https://gnu.io/social|GNU social website]] links to some of the largest public servers: https://gnu.io/social/try/
* [[http://www.skilledtests.com/wiki|Erkan Yimlaz's wiki]] has a much longer list of public and private servers, both large and small: http://www.skilledtests.com/wiki/List_of_Independent_GNU_social_Instances
* And [[http://gstools.org|GSTools]] has a list of servers here: http://gstools.org/servers
Visit some sites, have a scroll through their Network/Public timelines, and subscribe to some interesting people!
===== Groups =====
Groups in the Fediverse are more-or-less automated message repeaters. When a user mentions a group in a notice, the notice is sent to the node that hosts the group, and that node then sends a copy of the notice to all the nodes of its members. Groups are good for the Fediverse: they make sure that items of interest reach people who want to see them, and they establish relationships between nodes.
==== Joining Groups ====
Joining groups is done in much the same way as [[#following|following users]]. You may either:
* visit the group's page and click the "Join" button, or
* visit your profile page and click the "+Remote" button under the GROUPS section in the right-hand pane, then enter the URL of the group's page into the dialog.
There is an !SDF group, and it's as good as any for trying this out. The group's page is [[https://gs.sdf.org/group/sdf|"https://gs.sdf.org/group/sdf"]].
==== Finding Groups ====
All of the groups hosted on SDF GNU social can easily be browsed by clicking the GROUPS link in the PUBLIC section of the navigation pane, or by directing your browser to [[https://wm.sdf.org/gs/groups|"https://wm.sdf.org/gs/groups"]].
Other nodes have group directories as well, which you can usually access by visiting "{nodeURL}/groups" (ex: "https://quitter.se/groups"). Most group directory pages will have a search dialog in case you're looking for a specific topic.
Hopping from site to site and browsing/searching their group directories can be a bit of a pain, though. Another resource to try is [[http://federation.skilledtests.com|Erkan Yimlaz's wiki]], which contains a user-editable list of federated groups from all over the fediverse: [[http://federation.skilledtests.com/List_of_federated_GNU_social_groups.html|"http://federation.skilledtests.com/List_of_federated_GNU_social_groups.html"]]. Finally, you could try [[http://gstools.org|GSTools]], which has a search tool for groups as well as users.
===== Your Account ID =====
There are two forms of account ID that you can put on your business card or email signature or home page or wherever else people put things like "@zippyThePinhead on Twitter!". You can either use the URL of your GNU social profile page:
"https://gs.sdf.org///nickname//"
Or, the GNU social server provides a [[https://webfinger.net/|WebFinger]] ID for you, which looks like an email address:
"//nickname//@gs.sdf.org"
The WebFinger ID is used in GNU social for mentioning users on other nodes. There's more information on that up in the section on [[#mentions|mentions]].
===== WebFinger =====
If you already know what [[https://webfinger.net/|WebFinger]] is, and you have it set up on your domain, here is an XRD template for linking your WebFinger address to your SDF GNU social account:
"&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"&gt;
&lt;Subject&gt;acct://you@yourdomain.com//&lt;/Subject&gt;
&lt;Alias&gt;acct://nickname//@gs.sdf.org&lt;/Alias&gt;
&lt;Alias&gt;https://gs.sdf.org/user///userIDnumber//&lt;/Alias&gt;
&lt;Link rel="http://webfinger.net/rel/profile-page"
type="text/html"
href="https://gs.sdf.org/user///userIDnumber//"/&gt;
&lt;Link rel="http://schemas.google.com/g/2010#updates-from"
type="application/atom+xml"
href="https://gs.sdf.org/api/statuses/user_timeline///userIDnumber//.atom"/&gt;
&lt;Link rel="http://gmpg.org/xfn/11"
type="text/html"
href="https://gs.sdf.org/user///userIDnumber//"/&gt;
&lt;Link rel="describedby"
type="application/rdf+xml"
href="https://gs.sdf.org///nickname///foaf"/&gt;
&lt;Link rel="http://salmon-protocol.org/ns/salmon-replies"
href="https://gs.sdf.org/main/salmon/user///userIDnumber//"/&gt;
&lt;Link rel="http://salmon-protocol.org/ns/salmon-mention"
href="https://gs.sdf.org/main/salmon/user///userIDnumber//"/&gt;
&lt;Link rel="http://ostatus.org/schema/1.0/subscribe"
template="https://gs.sdf.org/main/ostatussub?profile={uri}"/&gt;
&lt;/XRD&gt;
"
You'll need to replace "nickname" with your nickname, and "userIDnumber" with your user ID number on SDF GNU social. Wait, what? My user ID //number//? Yes. If you visit your profile page, in the right-hand column, under STATISTICS, you'll see that your User ID is given as a number. That's the number you need to use in your WebFinger link relations.
----
===== Understanding GNU social =====
While GNU social allows you to do most of the same things you can do on other social media sites, there are some fundamental differences between the way things work on the federated OStatus network that GNU social uses ("The Fediverse") and the way they work on the closed virtual networks of, say, Facebook or Twitter.
On Twitter/Facebook/Google+/&amp;c.:
* All users connect to the same service provider
* Everyone's messages and relationships are stored in a big, central repository
* Finding people and messages is easy because everyone, everything is in the same database
* Everyone can interact with everyone because, again, everyone's using the same service provider
In the Fediverse:
* There are hundreds of independent service providers, each with hugely variable numbers of users
* Everyone's notices and relationships are //distributed// across sites, with varying degrees of redundancy
* Finding people and messages across the Fediverse can be difficult because the data is spread across many sites, and there are (currently) no inter-site searching/indexing services
* Users can only interact with notices that have been delivered to their node
To some extent, each GNU social node is an island, a small Twitter or Facebook unto itself: you and the other users of SDF GNU social are visible to each other in the site directory, and the directory may be browsed or searched; when you post a public notice, everyone on SDF GNU social will see it in the Public Timeline, and all of those notices may be searched, replied to, repeated, and favored.
But SDF GNU social is also part of a world-wide network of servers using the OStatus protocol to enable their users to follow each other, join groups, and send notices between their nodes. OStatus provides inter-node communication, but it does //not// make the Fediverse into a sort-of distributed SuperTwitter — unfortunately, I think a lot of new users expect it to. Hopefully this brief explanation of how OStatus //federation// works will help you to understand how and why GNU social behaves the way it does.
==== The Fediverse is Defined by Relationships ====
On the federated network, user activity passes between nodes, but **only where relationships exist**. For example:
If "archibald@server01" is //following// "lucinda@server02", copies of all of Lucinda's notices will be sent to server01 and stored there so that Archibald can read them. Archibald's fellow users on server01 benefit from this as well, because having Lucinda's notices stored in server01's database means that they will come-up in searches; if they include tags that users on server01 are following, then those users will see them in their Home Timelines; and all of Lucinda's notices can be repeated, favored, and replied-to by the users of server01.
If Archibald replies to one of Lucinda's notices, his //reply// will be sent to server02 so that Lucinda can read and interact with it (as well as everyone else at server02), **but**, if no one on server02 is //following// Archibald, none of his other notices will be sent to server02, //because there's no relationship that requires them//. Remember, just because Archibald is following Lucy, that doesn't mean she's following him back!
==== The "Federation Problem" ====
The consequence of this only-as-needed activity sharing between nodes is that sometimes you will see notices in conversations that are obviously replies, but you won't see the notice being replied-to, because that notice was never delivered to your node. You might click on a notice's [[#context-and-origin|permalink]], which will take you to the server on which it was posted, and from there you should be able to read more of the conversation — but the conversation may still be incomplete, because the node you're now reading from may not have received all of the notices from all of the conversation's participants either!
Furthermore, because all of your activity in the Fediverse is mediated through your home node, you cannot reply-to, favour, or repeat notices that you read while visiting other nodes. They //have to have been delivered to your node// in order for you to be able to interact with them.
This frustrating set of limitations is increasingly referred to as "The Federation Problem". The good news is, the GNU social developers //are// trying to come-up with solutions to the federation problem. The bad news is, they're not quite there yet.
==== The Best Course ====
The best things you can do as a user to improve the Fediverse are:
* [[#following|Follow]] remote users that you think are interesting,
* [[#repeating|Repeat]] notices that you think more people should see,
* And [[#groups|join]] federated groups.
All of these actions improve the quality and quantity of content on each federated node by making sure that the notices you care about are distributed to more nodes, where more people can read //and interact// with them.
----
===== Notes =====
- [[#fn-microblog-b|<sup>↑</sup>]] GNU social might look like a simple microblogging platform, but it really is a general-purpose social networking platform for any kind of media you can imagine. Some nodes are very limited in the kinds of media they support, while others support the publication and subscription various structured data items such as bookmarks, event notifications, polls, and questions, in addition to microblogs with media attachments.
- [[#fn-node-b|<sup>↑</sup>]]//"Node"// is in vogue at the time of this writing; in the past, //"instance"// was the preferred term, and you'll still see this used by folks who've been around for a while.
- [[#who-is-local-b|<sup>↑</sup>]]How would you notice this? If you look at the destnation of the hyperlink on a user's name, it'll point to their home server. Anything other than "https://gs.sdf.org/..." is a user from another site.
$Id: gnu_social.html,v 1.12 2016/01/27 10:16:31 laemeur Exp $

292
dump/gopher.html.docuwiki Normal file
View File

@ -0,0 +1,292 @@
====== Gopher ======
Contents
- [[#what|What is Gopher]]
- [[#create|Creating your gopherspace]]
- [[#view|Viewing gopherspaces]]
- [[#publish|Publishing content]]
- [[#phlog|Gopher log]]
- [[#moles|Dynamic content (moles)]]
===== What is Gopher? =====
//From: http://en.wikipedia.org/wiki/Gopher_(protocol)//
> The Gopher protocol is a TCP/IP Application layer protocol designed for distributing, searching, and retrieving documents over the Internet [...]. The protocol offers some features not natively supported by the Web and imposes a much stronger hierarchy on information stored on it.
You can find more info here:
* [[http://freeshell.org/index.cgi?faq?GOPHER|FAQ &gt; GOPHER]]
* http://www.scn.org/~bkarger/gopher-manifesto
* http://gopher.floodgap.com/overbite/relevance.html
===== Creating your Gopherspace =====
The command mkgopher can be used to create and manage your gopherspace.
When you run mkgopher, you will be given a command prompt. You can issue the HELP command here to get a list of the available commands:
HOWTO - Tips on managing your GOPHERSPACE
setup - First step, create your GOPHERSPACE
chmod - Set/Restore file permissions
title - Title your site
describe - Create a site description
mkdir {directory} - Create a directory
rmdir {directory} - Delete a directory
edit {filename} - Publish a document
upload {filename} - Transfer a file via ZMODEM to SDF
ls - List the current directory
cd {directory} - Change directory
pwd - Present working directory
gopher - Browse your site
quit
The setup command will create a directory in your $HOME called gopher (This directory is a link to /ftp/pub/users/$USER/ ). On it, you can put all the files you want to be available in your Gopherspace.
Once you create your Gopherspace, the files you publish will be available at [[gopher://sdf.org:70/1/users/| gopher://sdf.org:70/1/users/$USER/ ]]\\ (note: currently, the directory listing at gopher://sdf.org:70/1/users/ doesn't appear to list all user directories. You may have to directly navigate to gopher://sdf.org:70/1/users/$USER/ in order to view your files.
===== Viewing Gopherspace =====
There are many ways to view gopherspace. The easiest for new users is one of the following:
==== SDF Gopher Command ====
You can issue the gopher command, either from the SDF shell or from within the mkgopher command prompt. This gives a very basic browser to explore gopherspace.
==== Use Lynx ====
[[http://lynx.invisible-island.net/|Lynx]] is the //text// web browser. \\ In addition to web browsing, Lynx is also capable of browsing gopherspace. \\ From the SDF shell, you can issue the command:
$ lynx gopher://sdf.org/
and Lynx will start up at sdf.org's gopher root menu.
==== Floodgap Gopher Proxy ====
Floodgap.com provides a public gopher proxy that you can view in your web browser at https://gopher.floodgap.com/gopher/gw. \\ For more information, see the proxy info page: https://gopher.floodgap.com/gopher/
===== Publishing Content =====
You can use mkgopher to publish documents, create directories, etc. You can also manage your Gopherspace manually. If you decide to do so, remember that the server will not display your content if it is not already visible to everyone. That is, files need to world-readable (chmod o+r $HOME/gopher/yourfile), directories need also to be world executable (chmod o+rx $HOME/gopher/yourdir), etc. **The gopher server ([[gopher://gophernicus.org/1/software/gophernicus/|Gophernicus]]) will serve executable files under /cgi-bin and also gophermaps which have executable permission as gopher CGIs or "moles" (see below). In the case of gophermaps, this is likely to result in errors, so make sure your gophermaps do not have execute permission (chmod -x $HOME/gopher/yourdir/gophermap).**
The usual 'mkgopher -p' command has not yet been updated to reflect Gophernicus' permissions requirements. So you may need to reset your permissions for all files and directories in your gopher directory as noted above. The following two commands will revert all files to world-readable but non-executable, and all directories to world-readable but executable.
" "
find ~/gopher/ -type f -print0 | xargs -0 chmod 644
find ~/gopher/ -type d -print0 | xargs -0 chmod 755
You may need to manually add execute permissions to any dynamic gophermaps or files under /cgi-bin after runnig these two commands.
==== Gophermap ====
**Note:** You can view the sample gophermap that comes with Gophernicus here: [[http://slugmax.tx0.org/README.Gophermap|README.Gophermap]]
Say that you have file1.txt, file2.pdf, file3.rtf and dir in your Gopherspace (dir is a directory). That is,
$ ls -lF
drwxr-x--- 2 $USER nobody 512 Dec 2 10:15 dir/
-rw-r----- 1 $USER nobody 6 Dec 2 10:14 file1.txt
-rw-r----- 1 $USER nobody 6 Dec 2 10:14 file2.pdf
-rw-r----- 1 $USER nobody 6 Dec 2 10:14 file3.rtf
When you visit it, if there is no file named gophermap (yes, this file has no extension) you'll see a list of the files and the directory, like this:
,,, Gopher Menu
Gopher Menu
(DIR) dir
(FILE) file1.txt
(FILE) file2.pdf
(FILE) file3.rtf
If there is a gophermap file, the server will parse it and will present the content as you specified in gophermap.
The gophermap syntax is:
XSome text here&lt;TAB&gt;/path/to/content&lt;TAB&gt;example.org&lt;TAB&gt;N
where the first character (X in the example) is an itemtype (more below), Some text here is the text that you want to be displayed, &lt;TAB&gt; is a tab character, /path/to/content is the location of the content, example.org is the server where the content is located and the last character (N in the example) is the server port (usually it's 70). Content after the second &lt;TAB&gt; is optional if you are linking to content in your Gopherspace.
The itemtype is one of these characters:
^ Itemtype ^ Content ^
| 0 | Text file |
| 1 | Directory |
| 2 | CSO name server |
| 3 | Error |
| 4 | Mac HQX filer |
| 5 | PC binary |
| 6 | UNIX uuencoded file |
| 7 | Search server |
| 8 | Telnet Session |
| 9 | Binary File |
| c | Calendar (not in 2.06) |
| e | Event (not in 2.06) |
| g | GIF image |
| h | HTML, Hypertext Markup Language |
| i | "inline" text type |
| s | Sound |
| I | Image (other than GIF) |
| M | MIME multipart/mixed message |
| T | TN3270 Session/ |
=== Gophermap example ===
OK, let's say that you want to display a welcome message, a description for file1.txt, file2.pdfand dir, a link to an external server, a link to an http URL. Your gophermap should be like this:
Welcome to my Gopherspace!
0My text file file1.txt
9My pdf file file2.pdf
1My dir dir
0Why is Gopher Still Relevant? /gopher/relevance.txt gopher.floodgap.com 70
hAn http link URL:http://sdf.org/
Remember the gophermap syntax? Then be careful about tab characters. In the example above, there are some &lt;TAB&gt;s. For instance, the third line is
0My text file&lt;TAB&gt;file1.txt
while the seventh is
0Why is Gopher Still Relevant?&lt;TAB&gt;/gopher/relevance.txt&lt;TAB&gt;gopher.floodgap.com&lt;TAB&gt;70
How come the pdf file has an itemtype 9? Well, not every kind of file has its own itemtype, so you can use one that makes more sense.
Even if you don't need a blank line as the second line of your document, you can find this useful as there is a known Lynx bug that makes it display the second line together with the first (you can find a patch for this here: gopher://sdf.org/0/users/bulibuta/openbsd/patches/lynx-gopher-newline.patch).
This is (more or less) the output you'll see if you use a gophermap like the one in the example above:
,,, Gopher Menu
Gopher Menu
Welcome to my Gopherspace!
(FILE) My text file
(BIN) My pdf file
(DIR) My dir
(FILE) Why is Gopher Still Relevant?
(HTML) An http link
===== Gopher log =====
A gopher log (glog or phlog) is similar to a blog, but on gopherspace. You can create your phlog and add it to the [[http://phlogosphere.org/|phlogosphere]].
Maintaining a glog consists basically (but not necessarily) in creating an entry (in your log directory) and modifying your phlog gophermap so that the new entry is displayed with its creation date. There's a script that you can run on SDF called mkgopherentry (located in /sys/sdf/bin/mkgopherentry) that will allow you to do exactly that. It will also extract the first paragraph from the entry and will add it on the gophermap with a Continued... link that will point to the full post. Creating an entry is as simple as:
"mkgopherentry title textfile"
where the 2 arguments are self-explaining.
Say that you have two entries in your diary. If you use mkgopherentry, they will appear like:
--This is my second post!--
Tuesday, December 01th, 2009
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Cras eros turpis, tristique semper aliquet sit amet,
hendrerit vel enim. Integer pulvinar leo in dolor posuere
blandit.
Continued...
--First post--
Monday, November 30th, 2009
First entry in my gopher log at SDF.
Continued...
//NOTE:// You can use the 'phlog' command to add your phlog/glog to the gopher.club phlog listing, and you can then update the listing after you create a post by running the following command: "touch ~ftp/pub/users/$LOGNAME"
==== Other glog/phlog software ====
There are some software authored by SDF members that you could find useful if you want to maintain a gopher log.
germgopher://sdf.org/1/users/wt/soft/my/germ/slermgopher://sdf.org/0/users/slugmax/about-slerm.txt\\ gopher://sdf.org/9/users/slugmax/code/slerm-1.8.tgz\\ http://slugmax.tx0.org/slerm-1.8.tgzgloggopher://sdf.org/0/users/yargo/scripts/glog.shmkphloggopher://sdf.org/1/users/octotep/scripts/mkphlog/phlogitgopher://sdf.org/0/users/slugmax/code/phlogit.txttirphgopher://sdf.org/1/users/papa/tirphugogopher://sdf.org/1/users/chr/scripts/ugo/
You can find more resources in the Glogging/Phlogging section at gopher://sdf.org/1/users/wt/soft/gopher.
===== Dynamic content (gopher CGIs or moles) =====
The server used by SDF (Gophernicus) is able to serve moles. Moles are executable files under /cgi-bin that are processed by the server as CGIs. This means that you can write a script, that the server will execute and it will present the data that your mole dumps to standard output. With moles you don't have to declare a content type header. Moles get arguments from the address used to access the document and can be accessed with whatever itemtype makes sense for the kind of output the mole generates.
You can code moles with the language(s) you are comfortable and can use on SDF. Below we will see some examples using shell scripts.
==== Mole examples ====
Remember that your moles need to be executable (and readable) by everyone, and under /cgi-bin. So you will have to do: "chmod 755 YOURSCRIPT.cgi"
=== fortune.cgi ===
The following example will generate a random fortune:
#!/bin/sh
/usr/pkg/games/fortune
Easy enough, isn't it? As it is raw text, you can access it using am itemtype = 0, that is: gopher://sdf.org/0/users/YOUR-USERNAME/cgi-bin/fortune.cgi
Did you notice that fortune was called with a full path? OK, that's because the server's path is PATH=/sbin:/bin:/usr/sbin:/usr/bin. That means that if you call a program without a path, the server will search in /sbin, /bin, /usr/sbin and /usr/bin. There's no /usr/pkg/games, or other path in the server's $PATH (eventually, you can add a path of your choice with, e.g., "PATH=$PATH:/usr/pkg/games").
=== ls.cgi ===
The following example will generate a list of files on a specified directory. It will be possible to sort the content alphabetically or by modification time, based on how you access the script.
#!/bin/sh
directory=/ftp/pub/users/YOUR-USERNAME
rel_dir=/users/YOUR-USERNAME
server=sdf.org
port=70
# The internal field separator is set to be a newline
IFS='
'
if [ -n "$1" -a "$1" = 'date' ] ; then
ls_arg=t
fi
for i in $(ls -l${ls_arg} $directory) ; do
content=$(echo "$i" | awk '{ print $9}')
date=$(echo "$i" | awk '{ print $6,$7,$8}')
if [ -z "$content" ] ; then
continue
fi
if [ -d $directory/$i ] ; then
itemtype=1
else
itemtype=0
fi
echo "$itemtype$content ($date) $rel_dir $server $port"
done
Note that the echo... line is\\ " echo "$itemtype$content ($date)&lt;TAB&gt;$rel_dir&lt;TAB&gt;$server&lt;TAB&gt;$port" "
If you go to gopher://sdf.org/1/users/YOUR-USERNAME/cgi-bin/ls.cgi , you will see a list of your files sorted alphabetically. If you access your mole as gopher://sdf.org/1/users/YOUR-USERNAME/cgi-bin/ls.cgi?date , then you'll see your files/directories sorted by modification time.
=== figlet.cgi ===
You can add some interactivity by using the itemtype 7. This itemtype is intended to make it possible to type some characters in a search field in your browser. However, you can use it to make it possible to pass arguments to your scripts. The following example will use some text you digit in the search field and will pass it through the program figlet.
#!/bin/sh
IFS='
'
for line in $(/usr/pkg/bin/figlet "$@") ; do
echo "i$line" # This is itemtype=i + text
done
When you access the script via gopher://sdf.org/7/users/YOUR-USERNAME/cgi-bin/figlet.cgi , your browser will ask you to input some text (the way it ask depends on the browser), then it will show your text as figlet transforms it.
The i in the echo... line is important here. Indeed, the document is been accessed with an itemtype 7 (but the same applies for itemtype 1), so the document should be structured similarly to gophermaps. It's not a gophermap, though. That's why you need to explicitily state the line should be displayed as simple (or inline) text.
==== Caveat ====
Besides what was said in the last paragraph of the figlet.cgi example, there's also another thing to stress. In that example (as with anything that will be served as a virtual directory or with an itemtype 1 or 7), content won't be displayed if you access your script via floodgap proxy (and maybe others). In this case you will need to format the output of your script. Luckily this is very easy. For instance, in the figlet.cgi example you will need to modify the echo ... line this way:\\ " echo "i$i&lt;TAB&gt;&lt;TAB&gt;error.host&lt;TAB&gt;1" "\\ where &lt;TAB&gt; is a tab character (you should already know this!)C and error.host and 1 are, respectively, a fake server and port number (you could also have written fake instead of error.host and 300 instead of 1).
$Id: gopher.html,v 1.24 2020/01/01 22:37:47 niro Exp $

View File

@ -0,0 +1,19 @@
=== SDF Green Computing Initiative ===
=== Summary ===
This initiative is a voluntary project involving SDF users who wish to\\ explore alternative methods of home computing. It involves developing and\\ employing hardware and software in combination with the SDF services to\\ promote reduced power consumption and waste reduction by using surplus equipment.
* [[#steps|5 Steps]] - To a Greener You
* [[#laptop|Going 100% Laptop]] - Charge up, Unplug, Deplete
* [[#thinclient|Thin Client Computing]] - WYSE or DIY
* [[#thumb|Gumstix/Thumbnail Systems]] - Solid State Computing
* More .. === [[|5 Steps - To a Greener You]] ===
* //STEP 1:// Paint your computer green
* //STEP 2:// Take a digital photo, it lasts longer
* //STEP 3:// Paint yourself green
* //STEP 4:// Smirk at yourself in the mirror until it looks cool
* //STEP 5:// Take a digital photo, upload to google (It lasts longer) === [[|Going 100% Laptop - Charge up, Unplug, Deplete]] ===
* ... === [[|Thin Client Computing - WYSE or DIY]] ===
* ... === [[|Gumstix/Thumbnail Systems - Solid State Computing]] ===
* ... $Id: greencomputing.html,v 1.5 2007/12/26 17:58:13 smj Exp $

View File

@ -0,0 +1,39 @@
====== Greylisting on SDF... ======
==== Definitions ====
**tuple:** a single record combination of sender_IP(SMTP client), envelope_from(MAIL FROM:), and envelope_to(RCPT TO:).
==== Described ====
In short, it works like this. All incoming mail delivery attempts are told to "try again later; can't take delivery now". That in itself is not new, and all email transport systems know to expect those responses any time from any place, for any number of different reasons.
The positive benefit of Greylisting is that spam mail might not bother with a second delivery attempt.
Legitimate mail will try again, after a delay determined by them, they will (or should) attempt delivery again. When they do, if it is after the greylist period set by SDF (3 minutes at this writing), SDF will accept the message and whitelist the tuple (not indefinitely) so that the same tuple won't be delayed on near-future attempts.
MTA IPs may also be whitelisted at the system level
==== Do I want to use it? ====
If your email address is not receiving very much spam, greylisting has no opportunity to be useful. Recommended practice is to leave it disabled until you want it because you receive too much spam.
==== SDF specific implementation ====
Type/run unquoted "greylist --help" \\ results shown are not instantaneous, but updated every 2+ minutes or so. \\ greylist -gv will show the earliest time when the message will be accepted; and the three fields of the tuple. \\ greylist -wv will show the time when whitelisted entries will expire.
For VPM and VHOST accounts, you can use `mkvpm gry ' to toggle greylisting on and off.
When the very first delivery is attempted, SDF issues a response ... \\ (host mx.sdf.org[192.94.73.18] said: 451 4.7.1 Connection deferred. (in reply to RCPT TO command))
Initial period during which a second delivery attempt will also be rejected: 3 minutes.
When the message is received by SDF, a header line (X-Greylist:) will be added which notes the delay time since first delivery attempt.
==== Additional Information: ====
http://www.greylisting.org/\\ [[http://sdf.lonestar.org/index.cgi?faq?EMAIL?07|SDF FAQ EMAIL 07]]
----
$Id: greylisting.html,v 1.9 2012/05/07 04:42:45 smj Exp $

102
dump/hostkeys.html.docuwiki Normal file
View File

@ -0,0 +1,102 @@
====== SDF SSH Hostkeys ======
**Note: Last edited 10MAR2018 by voidn**\\ **Note: Any MetaARPA member can edit this page. Take that into consideration.**
===== Servers: =====
==== The Main Cluster ====
^ Host ^ Redirect ^
| tty.sdf.org | (Round Robin) |
| sdf.org | |
| faeroes.sdf.org | |
| otaku.sdf.org | faeroes.sdf.org |
| ukato.sdf.org | Unresponsive |
| norge.sdf.org | |
| bjork.sdf.org | |
| miku.sdf.org | bjork.sdf.org |
"
ED25519 key fingerprint is SHA256:ZjwbO7AU8rHJExYrmZS2LqGZ7WfdoELfMrF54W92PYA.
+--[ED25519 256]--+
| ... |
| .oo o |
| .=.* |
| . .* B |
| = o O S. |
|+ + o.o*E=. |
| o o O.++ o |
| o X = +.. o |
| + + +.. . |
+----[SHA256]-----+
~ -&gt; ssh-keyscan tty.sdf.org
# tty.sdf.org:22 SSH-2.0-OpenSSH_7.1
tty.sdf.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1BBSaTBrKjpyDmIPt1t9oPvZpIxzm8D2kB/eLUoqXP9Eoicb3niMP8kWv1vhZQPGiQQ/q6sg+c92Bkk0ZiJTW9JdMJuaIfk+VDjGUV1US432mzq4581CFk/Q0HeHehrrAoqCKTcnp65/9UlnP3ljnyS1J0JE40YtjLIXfAeoJJKfKvrMhc1nOqn7NEMcmN8gY5ELr5R5ZUml0CsmurMDeIoeP9Ukf0PAc6uznv7JpL5GY+Eee8xXd8ehClZUY9kkvm6a6LIzPXtG5KXIYbGQkMrcDqWAdYOb2whfOICRbRLu16T8r30NjdHRjDq2kAH7upip4FqWGj96k+8ZmjA3f
# tty.sdf.org:22 SSH-2.0-OpenSSH_7.1
# tty.sdf.org:22 SSH-2.0-OpenSSH_7.1
tty.sdf.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJJk3a190w/1TZkzVKORvz/kwyKmFY144lVeDFm80p17
"
==== ARPA ====
^ Host ^ Redirect ^
| arpa.sdf.org | (ARPA Round Robin) |
Note: Currently just points at The Main Cluster
==== MetaARPA ====
^ Host ^ Redirect ^
| meta.sdf.org | (MetaARPA Round Robin) |
| iceland.sdf.org | |
| sverige.sdf.org | iceland.sdf.org |
"
ED25519 key fingerprint is SHA256:ZjwbO7AU8rHJExYrmZS2LqGZ7WfdoELfMrF54W92PYA.
+--[ED25519 256]--+
| ... |
| .oo o |
| .=.* |
| . .* B |
| = o O S. |
|+ + o.o*E=. |
| o o O.++ o |
| o X = +.. o |
| + + +.. . |
+----[SHA256]-----+
~ -&gt; ssh-keyscan meta.sdf.org
# meta.sdf.org:22 SSH-2.0-OpenSSH_7.1
meta.sdf.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1BBSaTBrKjpyDmIPt1t9oPvZpIxzm8D2kB/eLUoqXP9Eoicb3niMP8kWv1vhZQPGiQQ/q6sg+c92Bkk0ZiJTW9JdMJuaIfk+VDjGUV1US432mzq4581CFk/Q0HeHehrrAoqCKTcnp65/9UlnP3ljnyS1J0JE40YtjLIXfAeoJJKfKvrMhc1nOqn7NEMcmN8gY5ELr5R5ZUml0CsmurMDeIoeP9Ukf0PAc6uznv7JpL5GY+Eee8xXd8ehClZUY9kkvm6a6LIzPXtG5KXIYbGQkMrcDqWAdYOb2whfOICRbRLu16T8r30NjdHRjDq2kAH7upip4FqWGj96k+8ZmjA3f
# meta.sdf.org:22 SSH-2.0-OpenSSH_7.1
# meta.sdf.org:22 SSH-2.0-OpenSSH_7.1
meta.sdf.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJJk3a190w/1TZkzVKORvz/kwyKmFY144lVeDFm80p17
"
==== MetaArray ====
^ Host ^ Redirect ^
| ma.sdf.org | |
"
Host key fingerprint is SHA256:y5Jlsy7a6mkXtg1SmiDzpQ+yPi803WI6XB8/LtE3nKQ
+--[ED25519 256]--+
| |
| |
| |
|o . . . . |
| +.+.+. S . |
|.o+=+++E O |
|oo=ooo*== . |
|.* o=+=. |
|..=+=++oo |
+----[SHA256]-----+
~ -&gt; ssh-keyscan ma.sdf.org
# ma.sdf.org:22 SSH-2.0-OpenSSH_7.3
ma.sdf.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFnvCWbDAaabapuFHvCl+J20d9gyCrNfR7XNw0KL4b/O
# ma.sdf.org:22 SSH-2.0-OpenSSH_7.3
ma.sdf.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDI7XSc6kLOWbiaXaOT3wzHqmmmFNLcJ3Q3THMRY6eYv1WDnKf+NoOW15uFocVsjVYPHPsJ/2LM6TWL9M6dOc3ankY9D/4IXug6cpugbCfy6xJKCWN66WrIImAfGvFiXJjzOOryaa5ZFldbifZmIUa/Bx3tZJpNE1jZjlulGpQQoDGHK8gdrzQFNAWt+0flZFU/KA4DWAIl89hXccuXLkcpLXoGlIbqsigwXD33WAv1ttoUOdC/QjMO1nb764G5oMLCusBbLFLJsvTNZ1PzsYX2ivignh5GSXSiqm/77zr8ok+DPBTDx7LTyN2koikSwV+hev6+y5JsFUzGdqFYbV2x
# ma.sdf.org:22 SSH-2.0-OpenSSH_7.3
"

118
dump/htaccess.html.docuwiki Normal file
View File

@ -0,0 +1,118 @@
====== .htaccess recipes ======
Contents
- [[#intro|Introduction]]
- [[#recipes|Recipes]]
- [[#redir-error|Redirect to a custom error page]]
- [[#deny-dir|Deny directory listing]]
- [[#addtype|Add (or force) MIME-type]]
- [[#no-ext|Access files without specifying the extension
* [[#add-ext|I want to access files without extension, but my (cgi|pl|php) is not found]]]]
- [[#remove-handler|Serve .pl .php .cgi etc. as plain text files]]
- [[#download|Force a download with a specific filename]]
- [[#charset|Specify a default character encoding]]
- [[#password|Password protect your directories]]
- [[#forcessl|Force visitors to use SSL/HTTPS]]
===== Introduction =====
.htaccess is the default file used by the [[http://httpd.apache.org/|Apache HTTP server]] (and others) in order to allow dynamic configuration. It's a plain text file that uses the same syntax present in the main configuration files (e.g., httpd.conf). It can contain a subset of Apache directives. The size of this subset depends on wheter the directives can be overridden or not (and this is present in the server configuration). In the Apache documentation you can see if a directive can be placed in a .htaccess file by checking that in the Context: line appears .htaccess. For instace, it's possible for the [[http://httpd.apache.org/docs/2.2/mod/core.html#forcetype|ForceType]] directive, but it's not for the [[http://httpd.apache.org/docs/2.2/mod/core.html#errorlog|ErrorLog]] directive. file.
The configuration directives placed in a .htaccess file will take effect immediately when a document, located in the directory where the .htaccess file is located and all subdirectories, is accessed. The server will also search for .htaccess files in all the parent directories. If there is a conflicting configuration directive, the server will apply the one that is in the .htaccess file closer to the requested resource. For instance, suppose that X and Y are two generic options. If you have "Options +X -Y" in $HOME/html/.htaccess and "Options -X" in $HOME/html/files/test/.htaccess, when you access a file in http://YOURUSERNAME.freeshell.org/files/test/ (and all subdirectories, unless you have another .htaccess file that reverts the configuration) options X and Y will be disabled, but if you access a file in http://YOURUSERNAME.freeshell.org/files/ (and above) option X will be enabled and option Y disabled.
Remember that .htaccess files must be readable by the server, so you can "chmod 640 .htaccess" in order to give it the correct permissions. It's, however, a good practice to run "mkhomepg -p" in your SDF shell everytime you play with files in your html directory.
Additional information about .htaccess files can be found in:
* [[http://httpd.apache.org/docs/2.2/howto/htaccess.html|Apache Tutorial: .htaccess files]]
* [[http://wiki.apache.org/httpd/Htaccess|Httpd Wiki &gt; Htaccess]]
* [[http://www.htaccess-guide.com/|htaccess-guide.com]]
OK, let's see some recipes. The URL http://YOURUSERNAME.freeshell.org/ will be used in the examples, so modify it to suit your needs and remember that your .htaccess file will be placed in $HOME/html/ or in directories under it. Examples solve a specific issue, but they can give you an idea on how to deal with something more generic (i.e., an example could be referred to .pl files, but with a search of the mentioned directives you could generalise it). If you need some help, jump on com or post your request on bboard.
===== Recipes =====
==== Redirect to a custom error page ====
Do you want your visitors see your custom error pages when something goes wrong (e.g., a page not found error)? There's already a tutorial about it: http://sdf.org/index.cgi?tutorials/errorpage
==== Deny directory listing ====
If you type http://YOURUSERNAME.freeshell.org/pics/ you will see a list of the files present in pics. Probably you don't want this (if you don't want that other people see your private stuff, don't put it on-line, or, at least, [[http://freeshell.org/index.cgi?faq?WEB?04|password protect them]]). Add this to your .htaccess file:
" Options -Indexes "
==== Add (or force) MIME-type ====
The server could not be aware of all kind of files out there, so will have some troubles trying to figure out what to do with an unknown extension. You can tell the server what to do with unknown file types. Say you have a [[http://en.wikipedia.org/wiki/Cabinet_(file_format)|.cab]] file. Apache will communicate to your user agent the correct information about the file with:
" AddType application/vnd.ms-cab-compressed .cab "
AddType is the directive, application/vnd.ms-cab-compressed is the MIME-type present in the Content-Type: entry in the HTTP headers sent by Apache, and .cab is the extension.
Even if the server knows what's the MIME-type of a specific file extension, you could prefer it to use another one. Let's say that you want .html files to be served as application/xhtml+xml (because you are hardcore). Try this:
" AddType application/xhtml+xml .html "
You can look for common MIME-type on [[http://en.wikipedia.org/wiki/Internet_media_type#List_of_common_media_types|wikipedia]] or read a full list on [[http://www.iana.org/assignments/media-types/|IANA's website]].
==== Access files without specifying the extension ====
It could be desiderable to avoid specifying extensions for your html pages. Why? Suppose you've always used http://YOURUSERNAME.freeshell.org/contact.php in your .sig and, at some point, you decide that you want to use perl, so that the new address is http://YOURUSERNAME.freeshell.org/contact.pl. Unless you take other actions (redirection) people that go to the old address will find a 404 page. It would be better to use http://YOURUSERNAME.freeshell.org/contact so that you can go crazy and rewrite your site with all known languages as frequently as you want.
You can use URIs without extensions with:
" Options +MultiViews "
=== I want to access files without extension, but my (cgi|pl|php) is not found ===
Suppose that you have a cgi file called script.cgi and that, **once you enable MultiViews** (see above), when you access http://YOURUSERNAME.freeshell.org/script you get a 404 page. It's likely that the server have some problems in determining the MIME-type. In this case, put in your .htaccess file:
" AddType application/x-httpd-cgi .cgi "
If you have perl and/or php files, add (modify the extension as needed):
" AddType application/x-httpd-php .php AddType application/x-httpd-perl .pl "
==== Serve .pl .php .cgi etc. as plain text files ====
If you want the server to execute your files, in order to be able to read the code of some specific files, you can remove the handlers. Let's say that the code you want to read is located in $HOME/html/code/. Now, you can put in $HOME/html/code/.htaccess the following bits:
" RemoveHandler .pl .php .cgi "
==== Force a download with a specific filename ====
Let's say that you have a pdf file with an unintuitive name aaa222.pdf. You might want to force a download when people access the file and, in doing so, specify a default file name for the file that will be saved. This will do the job:
" &lt;Files x.cab&gt; Header set Content-Disposition "attachment; filename=Thesis.pdf" &lt;/Files&gt; "
==== Specify a default character encoding ====
If you want all your html documents to be served with UTF-8 as the default encoding (or charset):
" AddCharset UTF-8 .html "
UTF-8 was used as an example, but you can use whatever encoding is appropriate. Note also that in the example only files with extension html will have a default encoding. If you want to extend that behaviour to other file extensions, add them on the same line. For instance, "AddCharset UTF-8 .html .htm .txt".
This can also be useful if you want that only pages written in a specific language are served with a default encoding, while the others use the encoding sent normally by the server. So, suppose that you're usin [[http://www.w3.org/International/questions/qa-when-lang-neg|language negotiation]] and have resources in two languages, english (with extension en.html) and chinese (with extension cn.html). With the following line:
" AddCharset UTF-8 .cn "
only .cn.html files will have UTF-8 as the default encoding. (The order of the language in the extension is not relevant, i.e., the files could have been html.en and html.cn; also, the leading dot in the extension in the .htaccess file is optional).
==== Password protect your directories ====
This is a FAQ: http://sdf.org/index.cgi?faq?WEB?04
==== [[|Force visitors to use SSL/HTTPS]] ====
As SDF expands its support of [[https://letsencrypt.org/|Let's Encrypt]], offering free SSL certificates, you may wish to require all visitors of your site to use HTTPS. (This also may improve your search engine ranking, and many Web browsers will soon flag non-SSL sites as "Not Secure.") Adding this to the .htaccess file in your site's root directory will redirect your non-HTTPS visitors accordingly:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
If this suddenly renders your whole site inaccessible, be sure the permissions on the .htaccess file itself are suitable (chmod 644, or run "mkhomepg -p") -- the default umask will not allow the Web server itself to read your .htaccess file.
$Id: htaccess.html,v 1.3 2018/07/30 15:30:01 dave Exp $

3
dump/index.html.docuwiki Normal file
View File

@ -0,0 +1,3 @@
=== Self Service YSF Reflector Registry: ===
=== https://register.ysfreflector.de ===

View File

@ -0,0 +1,24 @@
====== IRC Channels on SDF ======
List of IRC channels currently defined on irc.sdf.org. You can see the current channel list by connecting to server irc.sdf.org and entering the IRC command "/list".
^ Channel ^ Remarks ^
^ #Arduino | |
^ #RaspberryPi | |
^ #anonradio | Welcome to #anonradio | run cmus &amp;&amp; :add http://anonradio.net:8000/anonradio.m3u &amp;&amp; relax |
^ #artrev | NSA. can't hack Art, join us! |
^ #bashy2 | Contribute at https://notabug.org/mlaine/bashy2 |
^ #bashy2-debug | |
^ #bots | A place for testing bots. This doesn't mean you should connect/quit spam. |
^ #gopher | Discuss gopher, gopher holes, phlogs, etc on SDF |
^ #helpdesk | Welcome to #helpdesk | Questions? This is the place | If no one is active, we'll be back soon. This means wait more than 2 mins. | Forgot your passwd? See http://sdf.org/?faq?BASICS?12 |
^ #hopm | |
^ #hurtdesk | Have you tried turning it On and Off again? | Noob: blah blah blah? Leet: Did you RTFM? Noob: [yes/No]. Leet: Then why are you asking me? |
^ #irpg | http://irpg.demu.red because MA php fails... | /msg irpg_bot REGISTER &lt;char name&gt; &lt;password&gt; &lt;char class&gt; | /msg irpg_bot ALIGN &lt;good|neutral|evil&gt; |
^ #mature | Welcome to #mature | +18 only please &amp; thanks |
^ #minecraft | [CraftBukkit 1.8.3] mc.sdf.org | [Info] http://sdf.org/mc | [Dynamic Map] http://mc.sdf.org |
^ #pcom | |
^ #sdf | Welcome to #sdf | http://xkcd.com/1782/ | /j #anonradio | /j #gopher |
^ #vim | Vim, the great editor for coders and prose writers! |
$Id: irc-channels.html,v 1.9 2018/03/09 22:53:28 cat Exp $

View File

@ -0,0 +1,21 @@
===== SDF IRC server policy: =====
==== Purpose ====
The purpose of the SDF IRC server is to provide a live 'helpdesk style' support to the SDF membership and to visiting non-members. It may also be used as a friendly and respectful environment for recreational communication among the SDF membership and visiting non-members.
==== Acceptable Use ====
The SDF IRC server is to be used in accordance with state and local laws. It may not be used for abusive or illegal behavior including, but not limited to, the distribution of pornography, distribution of pirated data, channel flooding or other harassment, for arranging the sale or distribution of illegal or controlled substances.
==== Policy ====
Administration of the SDF IRC server is performed by SDF Members and policy may change to reflect the situation. Members and visiting non-members engaging in behavior that violates acceptable use may be banned for up to 1 day without warning. Continual abuse of the SDF IRC server may result in loss of a member's privilege and can lead to permanent blacklisting.
==== Privacy ====
The SDF IRC server is a public chat service. All connections, conversations and details of exchange should be considered logged and available to law enforcement upon subpoena, and to general public by any channel user.
----
$Id: irc-policy.html,v 1.3 2010/09/13 15:38:29 nullogic Exp $

View File

@ -0,0 +1,22 @@
====== IRC Channel Auto-Connection with Irssi ======
This tutorial explains how to configure the [[http://irssi.org/|Irssi ("the client of the future")]] IRC client to automatically connect to one or more channels when run.
- Invoke Irssi from the shell: $ irssi
- After Irssi starts, enter the following commands:
/network add sdf
/server add -auto -network sdf irc.sdf.org
/channel add -auto #sdf sdf
(You may add other channels[[#fn1|<sup>1</sup>]]. Channel "#helpdesk" is added automatically.)
- Quit Irssi: /quit
- Invoke Irssi again: $ irssi (Irssi runs and automatically connects to the channels you defined in 2.)
- Select the channel you want to see first when Irssi starts by cycling through the channel windows ("Ctrl-n", "Ctrl-p").
- Save the Irssi channel window configuration: /layout save
If you experience trouble, it may help to reset your Irssi configuration by deleting or renaming the file "~/.irssi/config".
===== Notes =====
- See [[http://sdf.org/?tutorials/irc-channels|IRC Channels on SDF]].
$Id: irssi-auto.html,v 1.3 2015/04/11 18:27:05 papa Exp $

114
dump/jabber.html.docuwiki Normal file
View File

@ -0,0 +1,114 @@
====== Jabber on SDF ======
Jabber is the former name for the Extensible Messaging and Presence Protocol (XMPP), which is a set of open XML [[http://xmpp.org/tech/|technologies]] for presence and real-time communication developed by the [[http://xmpp.org/about/jabber.shtml|Jabber]] open-source community in 1999, formalized by the [[http://www.ietf.org|IETF]] in 2002-2004, continuously extended through the standards process of the [[http://xmpp.org/xsf|XMPP Standards Foundation]], and implemented in a wide variety of [[http://xmpp.org/software|software]], devices, and Internet services. Jabber service on SDF is run on [[http://www.process-one.net/en/ejabberd|ejabberd]].
Jabber is popularly used as a decentralized instant messaging service. This means that you can create an account on one server such as SDF and talk to users from any other Jabber service. It is also possible to use a transport to communicate with users on other types of instant messaging services as well.
==== Connection Settings for SDF's Jabber Server ====
Server: **jabber.sdf.org**\\ Port: **5222**\\ SSL: **enabled**
SDF's Jabber server uses a self-signed SSL certificate, so you will see a warning about this. It is safe to accept this certificate.
===== Jabber Clients =====
Available on SDF:
* [[http://developer.pidgin.im/wiki/Using%20Finch|finch]] (Unix shell)
Others:
* iChat (Mac OS X)
* [[http://pidgin.im|Pidgin]] (Unix/Windows)
* [[http://adium.im|Adium]] (Mac OS X)
* [[http://www.bitlbee.org|Bitlbee]]
Some clients for mobile can be found [[http://sdf.org/?tutorials/mobile|here]]
==== Account Registration in SDF's Jabber server ====
This is not needed if you are going to connect to a Jabber/XMMP server than SDF's Jabber server.
In contrast with other Jabber servers, accounts in SDF's Jabber server are created from the shell with the 'maint' utility.
- Log in to the password server by running the **maint** program.
- Type **o** to select optional features and social networking
- Type **j** to set your Jabber password.
- Quit from maint utility and wait one minute.
After one minute you will be able to connect to SDF's Jabber server using your prefered Jabber client.
==== Connecting with Finch from Unix shell ====
This steps are valid to connect to SDF's Jabber server or any other Jabber/XMMP server like GTalk.
To move around Finch's fields and buttons use the **TAB** key. You can learn more about using Finch [[http://developer.pidgin.im/wiki/Using%20Finch|here]].
* Press **ALT** **+ a **and select **Accounts**
* Select **Add** button to open New Account dialog box
* Choose **XMPP** as the protocol
* Fill the appropiate field with you desired **Username**
* Fill the **Domain** with: jabber.sdf.org
* **Save**
* Now you just can select your newly created account from the Accounts list to get connected to SDF's jabber server.
==== Connecting with Pidgin from Unix/Windows ====
* Go to **Accounts-&gt;Manage Accounts**.
* Click on **Add** button.
* Select **XMPP** as **Protocol**.
* Fill the appropiate field with your desired **Username**.
* Fill the **Domain** field with: jabber.sdf.org
* **Click on Save** button.
After finishing this steps, Pidgin will try to connect to the jabber server and will ask for your password (the one you have set up with the **maint** utility), also you will be warned about the self signed certificate, it is safe to accept it.
==== Add buddies in Finch ====
- Select a group in the buddy list.
- Press **F11** to bring out the context menu
- Select **"Add Buddy"**.
==== Using bitlbee ====
Read bitlbee's documentation for how to get the server up and running. Then, to add SDF's jabber account:
- Go to the &amp;bitlbee channel in the server and register your user
- Run the following command in that channel: **account add account_name user@jabber.sdf.org [passwd]**
- Run: **account account_name on**
Read the help of bitlbee's commands and add your contacts there.
==== Conferences ====
Jabber allows you to talk to several users at once in conferences. These are similar to com rooms or IRC channels. The SDF jabber server has a "helpdesk" conference already set up and you are free to create new conferences too.
==== To join an existing conference using Pidgin ====
* Go to **Buddies**-&gt;**Join a Chat...**.
* Select your jabber.sdf.org account in the **Account** drop-down
* Click on the **Room List** button
* Make sure the server to query is: conference.jabber.sdf.org
* Click on the **Find Rooms** button
* The Room List window will show all existing conferences along with the number of users in each. Select the one you want (helpdesk, for example) and click on the **Join** button.
By default you will not be notified of activity in conference windows the same way you are when someone talks in a one-to-one chat window. You can change this by going to **Tools**-&gt;**Plugins**, selecting to configure **Message Notification** and checking **Chat Windows** in the "Notify For" section.
==== To create a new conference using Pidgin ====
* Go to **Buddies**-&gt;**Add Chat...**.
* Select your jabber.sdf.org account and enter the desired room in the **Room** field.
* Click the **Add** button
* The new conference will have appeared in your buddy list. Double click on it to join it.
* You will be prompted to configure your new room. Do so if you wish, or accept defaults.
* Invite other users to join your conference through **Conversation**-&gt;**Invite...** or have them look in the Room List as described above.
==== Looking for Jabber users ====
The easiest way to find other SDF Jabber users is to visit the conferences as described above. If you know that somebody uses the SDF jabber server you can add them to your contact list directly by using the address: //username//@jabber.sdf.org where //username// is their SDF user name.
You can also use your SDF account to chat with people who have accounts on other Jabber servers. Note that some people might call it `XMPP' instead of `Jabber'. One of the largest Jabber servers is Google Talk: you can chat to GMail/Google Talk users this way without needing a Google account. The Jabber address of those users is the same as their email address.
Created on Apr 18th by vosi &amp; ecelis
$Id: jabber.html,v 1.13 2019/12/02 16:13:22 thegiant Exp $

102
dump/jekyll.html.docuwiki Normal file
View File

@ -0,0 +1,102 @@
====== Blogging with Jekyll ======
----
===== Contents =====
* [[#introduction|Introduction]]
* [[#advantages|Advantages to using Jekyll]]
* [[#gettingstarted|Getting started]]
* [[#liquid|Using the Liquid templating language]]
* [[#output|Output markup]]
* [[#tag|Tag markup]]
* [[#templates|Creating templates]]
* [[#defaulttemplate|Default template]]
* [[#posttemplate|Post template]]
* [[#othertemplates|Other templates]]
* [[#index|Creating the index page]]
* [[#post|Writing a post]]
* [[#build|Building the site]]
===== [[|Introduction]] =====
From the [[http://wiki.github.com/mojombo/jekyll|Jekyll wiki]]:
> Jekyll is a simple, blog aware, static site generator. It takes a template directory (representing the raw form of a website), runs it through Textile or Markdown and Liquid converters, and spits out a complete, static website suitable for serving with Apache or your favorite web server.
Jekyll is installed on SDF, making it a particularly useful tool for MOTD users but also for any user wishing to host a weblog on his SDF webspace.
==== [[|Advantages to using Jekyll]] ====
* **No databases required.** Jekyll converts marked up text files to HTML files.
* **No dynamic pages.** With Jekyll your site will be composed solely of static HTML files. No CGI is necessary, reducing the load on SDF servers.
* **Ease and simplicity of use.** Using Jekyll does not require any programming knowledge, and the learning curve is very shallow. At the same time, the user does not sacrifice any control to wizards and GUIs.
===== [[|Getting started]] =====
Create a source directory with the following structure:
* **"_config.yml"** This is the configuration file. Any settings put in here could also be declared as arguments after the "jekyll" command, but that would be a little messy. A complete explanation of options can be found [[http://wiki.github.com/mojombo/jekyll/configuration|here]].
* **"_layouts/"** This directory contains the layouts to be used throughout the site. The following files should be placed in this directory, and more layouts can be added later. They are not actual HTML files.
* **"default.html"** This is the layout that will be used by every page on the site. It will determine the overall look and layout.
* **"post.html"** This layout will be applied to the posts on the blog.
* **"_posts/"** This directory is home to all posts. Posts are named "YYYY-MM-DD-title-of-post.textile", assuming Textile formatting is used.
* **"index.html"** This is obviously the index file. Despite the file name extension, it requires a special layout so that it can be interpreted by the Liquid engine.
Inside the "_config.yml" file, set the destination value to the directory that should contain the generated site:
> " destination: /absolute/path/to/html "
MOTD users may wish to put instead:
> " destination: /absolute/path/to/html/motd "
Replace "/absolute/path/to" with the path to your home directory. Type "echo $HOME" in the shell if you're unsure.
===== [[|Using the Liquid templating engine]] =====
Liquid is a templating engine with which all files ending in ".html" will be processed. These files can have normal HTML that will be interpreted literally. Liquid only cares about text in between "{{" and " }}" and in between "{%" and "%}". The former denotes output markup, meaning that whatever is placed within the brackets can produce text. The latter denotes tag markup, which does not produce text but is used for comments, conditional statements, and loops.
==== [[|Output markup]] ====
Output markup is fairly simple. The basic format is "{{ variable | filter }}". The variables are typically built into Jekyll, so one usually doesn't have to worry about declaring them. "site " is a variable that stores site-wide information in sub-variables. For example, "site.posts" is a list of all the site's posts. Each post has its own "post" variable, which includes information such as "post.title", "post.url", and "post.date" Another important variable is "content", which is used in templates to denote where the content will be inserted. A complete list of template data can be found [[http://wiki.github.com/mojombo/jekyll/template-data|here]]. Filters are used to manipulate theoutput of variables. When a filter is not specified ("{{ variable }}"), the variable is simply printed. Liquid has a bunch of built-in filters that can be found, along with a whole summary of using Liquid, [[http://wiki.github.com/tobi/liquid/liquid-for-designers|here]]. Jekyll also has some of its own filters, such as "number_of_words" and "array_to_sentence_string", which turns an array variable into a list of words seperated by commas and an "and." The complete list can be found [[http://wiki.github.com/mojombo/jekyll/liquid-extensions| here]], along with Jekyll's extra tags.
==== [[|Tag markup]] ====
The most basic tag is "{% comment %}" / "{% endcomment %} ". Anything in between those tags is ignored. Conditional statements are possible with "{% if condition %}" / "{% endif %}". For loops are especially useful with Jekyll. Use them with "{% for item in array %}" / "{% endfor %}".
===== [[|Creating templates]] =====
Let's actually get started with the blog. The first thing we need are the templates.
==== [[|Default template]] ====
Remember that the templates are stored in the "_layouts/" folder and that the default template is named "default.html". Here we can put all of the HTML headers once and be done with them. This includes any meta information, a link to a stylesheet, a link to a feed, etc. For the title, we can use "&lt;title&gt;{{ page.title }}&lt;/title&gt;". This way the title for every page will automatically get inserted. Once all of the headers are done, we can add some layout that will get used on every page. Finally, "{{ content }}" must go where dynamic content of the site will be inserted.
==== [[|Post template]] ====
"post.html" determines the layout for post pages. Here we first encounter YAML front matter. YAML stands for "YAML Ain't a Markup Language," Any YAML content is placed between "---" and "---" (each on their own line) at the beginning of a document. In this front matter we can set variables in the format, "variable: value". The only variable we need to set for the post template is "layout: default". This tells Jekyll to insert this template into "{{ content }}" in the default layout. We'll also want to add a "{{ content }}" to the post template. This is where the actual post will get inserted. We also might want to add somethings like "{{ page.title }}" and "{{ page.date | date: "%A %d %B %Y" }}", which will format the post's date as "Weekday Day Month Year".
==== [[|Other templates]] ====
Finally, once getting the hang of creating template, one can add new ones, such as "static.html" for static pages without a date.
===== [[|Creating the index page]] =====
The web site will of course need an index page, "index.html". As usual, this will get interpreted by Liquid. But first we'll need to add the front matter. The layout should probably be default again. If any of the layouts use "{{ page.title }}", we can define the title of the home page now with "title: This Is My Title". After the YAML front matter, we'll probably want a list of the posts. This can be done with a for loop: "{% for post in site.posts %}". Format the HTML content inside the loop in any way, maybe using "{{ post.date }}" and "{{ post.title }}".
===== [[|Writing a post]] =====
We have some different choices for the markup language for the posts, but we'll use Textile because it works just fine. Remember to name the file "YYYY-MM-DD-title-of-post.textile" and to put it in the "_posts/" directory. Again we'll start with the front matter. This time, we'll want "layout: post", so that the output of the post will get inserted at "{{ content }}" in the post template. If "{{ page.title }}" was used anywhere else, the title must be declared now. Whatever comes after the YAML content must be in the Textile format, which is very easy to learn. A good reference can be found [[http://redcloth.org/hobix.com/textile/|here]].
One thing to watch out for is that any newline is interpreted as a new paragraph, so don't hit "return" unless you mean it.
===== [[|Building the site]] =====
Once we have our templates, index, and posts done, we can finally build the site. To do so, use the command "jekyll" in your source directory to generate the static HTML site, followed by "mkhomepg -p" to set the proper permissions on any newly-created files.
Congratulations, you now have a Jekyll-powered blog. All of this may have seemed complicated, but once you get the hang of it, maintaining your new site will be a breeze!
----
$Id: jekyll.html,v 1.5 2010/07/24 14:30:14 nerfling Exp $

731
dump/kbman.html.docuwiki Normal file
View File

@ -0,0 +1,731 @@
===== Users' Reference to B =====
\\ //Ken Thompson \\ //
=== ABSTRACT ===
B is a computer language intended for recursive, primarily non-numeric applications typified by system programming. B has a small, unrestrictive syntax that is easy to compile. Because of the unusual freedom of expression and a rich set of operators, B programs are often quite compact. \\ \\ This manual contains a concise definition of the language, sample programs, and instructions for using the PDP-11 version of B. \\ \\
----
[ //This is a rendition, after scanning, OCR, and editing, of an internal Bell Labs Technical Memorandum dated January 7, 1972. It is Ken's original manual for the B language on the PDP-11. An [[kbman.pdf|image]] of the original document is available in PDF, but it is big: just under 1MB. //
Nearby is [[bintro.html|CSTR #8]], which is a report by Steve Johnson and Brian Kernighan describing the B implementation on Honeywell equipment.
The language being described was really the same, but it's interesting to look at the differences in description and environment. To describe the BNF syntax, Ken used a variant that depends on super- and subscripts to say "how many", which in the original were stacked above each other when they occurred simultaneously. This doesn't look too awful in the HTML rendering, but was probably better in the original.
The other thing that is observable is the degree to which the GCOS version had to struggle to work in that environment. Its library description is full of odd concepts like "the AFT" the *SRC file, and other peculiarities.
--DMR, July 1997 ]
----
=== Introduction ===
\\ \\ B is a computer language directly descendant from BCPL [1,2]. B 1s running at Murray Hill on the DEC PDP-11 computer under the UNIX-11 time sharing system [3,4]. B is good for recursive, non-numeric, machine independent applications, such as system and language work. \\ \\ B, compared to BCPL, is syntactically rich in expressions and syntactically poor in statements. A look at the examples in section 9 of this document will give a flavor of the language. \\ \\ B was designed and implemented by D. M. Ritchie and the author.
=== Syntax ===
\\ \\ The syntactic notation in this manual is basically BNF with the following exceptions:
1. The metacharacters "&lt;" and "&gt;" are removed. Literals are underlined [in typewriter font here -- DMR] to differentiate them from syntactic variables. 2. The metacharacter "|" is removed. Each syntactic alternative is placed on a separate line. 3. The metacharacters "{" and "}" denote syntactic grouping. 4. A syntactic group followed by numerical sub- and superscripts denote repetition of the group as follows: "
{..}<sub>m</sub> m,m+1,...
{..}<sub>m</sub><sup>n</sup> m,m+1,...,n
"
=== Canonical Syntax ===
\\ \\ The syntax given in this section defines all the legal constructions in B without specifying the association rules. These are given later along with the semantic description of each construction.
"
//program //::=
{definition}<sub>0</sub>
definition ::=
name {"["// //{constant}<sub>0</sub><sup>1</sup> "]"////}<sub>0</sub><sup>1</sup> {ival {","// ival//}<sub>0</sub>}<sub>0</sub><sup>1</sup> ";"//
name //"("// //{name {","// name//}<sub>0</sub>}<sub>0</sub><sup>1</sup> )// statement
ival //::=
constant
name
statement ::=
"auto"// name //{constant}<sub>0</sub><sup>1</sup> {","// name //{constant}<sub>0</sub><sup>1</sup>}<sub>0</sub> ";"// statement
//"extrn"// name //{","// name//}<sub>0</sub> ";"// statement
name //":"// statement
"case" constant //":"// statement
//"{"// //{statement}<sub>0</sub> "}"//
//"if ("// rvalue //")"// statement //{"else"// statement//}<sub>0</sub><sup>1</sup>
"while ("// rvalue //")"// statement
//"switch"// rvalue statement
//"goto"// rvalue //";"//
//"return"// //{"("// rvalue //")"////}<sub>0</sub><sup>1</sup> ";"//
//{rvalue}<sub>0</sub><sup>1</sup> ";"//
rvalue //::=
"("// rvalue //")"//
lvalue
constant
lvalue assign rvalue
inc-dec lvalue
lvalue inc-dec
unary rvalue
//"&amp;"// lvalue
rvalue binary rvalue
rvalue //"?"// rvalue //":"// rvalue
rvalue //"("// //{rvalue {","// rvalue//}<sub>0</sub> }<sub>0</sub><sup>1</sup> ")"//
assign //::=
= {binary}<sub>0</sub><sup>1</sup>
inc-dec ::=
"++"//
//"--"//
unary //::=
"-"//
//"!"//
binary //::=
"|"//
//"&amp;"//
//"=="//
//"!="//
//"&lt;"//
//"&lt;="//
//"&gt;"//
//"&gt;="//
//"&lt;&lt;"//
//"&gt;&gt;"//
//"-"//
//"+"//
//"%"//
//"*"//
//"/"//
lvalue //::=
name
"*"// rvalue
rvalue //"["// rvalue //"]"//
constant //::=
{digit}<sub>1</sub>
"'"// //{char}<sub>1</sub><sup>2</sup> "'"//
//"""// //{char}<sub>0</sub> """//
name //::=
alpha {alpha-digit}<sub>0</sub><sup>7</sup>
alpha-digit ::=
alpha
digit
"
=== Comments and Character Sets ===
\\ \\ Comments are delimited as in PL/I by /* and */. \\ \\ In general, B requires tokens to be separated by blanks, comments or newlines, however the compiler infers separators surrounding any of the characters "(){}[],;?:" or surrounding any maximal sequence of the characters "+-*/&lt;&gt;&amp;|!". \\ \\ The character set used in B is ANSCII. \\ \\ The syntactic variable 'alpha' is not defined. It represents the characters "A" to "Z", "a" to "z", "_", and backspace. \\ \\ The syntactic variable 'digit' is not defined. It represents the characters "0", "1", "2", ... "9". \\ \\ The syntactic variable 'char' is not defined. It is essentially any character in the set plus the escape character "*" followed by another character to represent characters not easily represented in the set. The following escape sequences are currently defined:
"
"*0"// null
//"*e"// end-of-file
//"*("// //"{"
"*)"// //"}"
"*t"// tab
//"**"// //"*"
"*'"// //"'"
"*""// //"""
"*n"// new line
//
"
All keywords in the language are only recognized in lower case. Keywords are reserved.
=== 3.0 values and Lvalues ===
\\ \\ An rvalue is a binary bit pattern of a fixed length. On the PDP-11 it is 16 bits. Objects are rvalues of different kinds such as integers, labels, vectors and functions. The actual kind of object represented is called the type of the rvalue. \\ \\ A B expression can be evaluated to yield an rvalue, but its type is undefined until the rvalue is used in some context. It is then assumed to represent an object of the required type. For example, in the following function call
"
(b? f:g[i] )(1, x&gt;1)
"
The expression (b?f:g[i]) is evaluated to yield an rvalue which is interpreted to be of type function. Whether f and g[i] are in fact functions is not checked. Similarly, b is assumed to be of type truth value, x to be type integer etc. \\ \\ There is no check to insure that here are no type mismatches. Similarly, there are no wanted, or unwanted, type conversions. \\ \\ An lvalue is a bit pattern representing a storage location containing an rvalue. An lvalue is a type in B. The unary operator * can be used to interpret an rvalue as an lvalue. Thus
"
*X
"
evaluates the expression x to yield an rvalue, which is then interpreted as an lvalue. If it is then used in an rvalue context, the application of "*" yields the rvalue therein stored. The operator "*" can be thought of as indirection. \\ \\ The unary operator "&amp;" can be used to interpret an lvalue as an rvalue. Thus
"
&amp;x
"
evaluates the expression x as an lvalue. The application of "&amp;" then yields the lvalue as an rvalue. The operator "&amp;" can therefore be thought of as the address function. \\ \\ The names lvalue and rvalue come from the assignment statement which requires an lvalue on the left and an rvalue on the right.
=== 4.0 Expression Evaluation ===
\\ \\ Binding of expressions (lvalues and rvalues) is in the same order as the sub-sections of this section except as noted. Thus expressions referred to as operands of "+" (section 4.4) are expressions defined in sections 4.1 to 4.3. The binding of operators at the same level (left to right, right to left) is specified in each sub-section.
=== 4.1 Primary Expressions ===
1. A name is an lvalue of one of three storage classes (automatic, external and internal). 2. A decimal constant is an rvalue. It consists of a digit between 1 and 9 followed by any number of digits between O and 9. The value of the constant should not exceed the maximum value that can be stored in an object. 4. An octal constant is the same as a decimal constant except that it begins with a zero. It is then interpreted in base 8. Note that 09 (base 8) is legal and equal to 011. A character constant is represented by "'" followed by one or two characters (possibly escaped) followed by another "'". It has an rvalue equal to the value of the characters packed and right adjusted. 5. A string is any number of characters between """ characters. The characters are packed into adjacent objects (lvalues sequential) and terminated with the character '*e'. The rvalue of the string is the lvalue of the object containing the first character. See section 8.0 for library functions used to manipulate strings in a machine independent fashion. 6. Any expression in () parentheses is a primary expression. Parentheses are used to alter order of binding. 7. A vector is a primary expression followed by any expression in [] brackets. The two expressions are evaluated to rvalues, added and the result is used as an lvalue. The primary expression can be thought of as a pointer to the base of a vector, while the bracketed expression can be thought of as the offset in the vector. Since E1[E2] is identical to *(E1+E2), and addition is commutative, the base of the vector and the offset in the vector can swap positions. 8. A function is a primary expression followed by any number of expressions in "()" parentheses separated by commas. The expressions In parentheses are evaluated (in an unspecified order) to rvalues and assigned to the function's parameters. The primary expression is evaluated to an rvalue (assumed to be type function). The function is then called. Each call is recursive at little cost in time or space. Primary expressions are bound left to right.
=== 4.2 Unary Operators ===
\\ \\
1. The rvalue (or indirection) prefix unary operator "*" is described in section 3.0. Its operand is evaluated to rvalue, and then used as an lvalue. In this manner, address arithmetic may be performed. 2. The lvalue (or address) prefix unary operator &amp; is also described in section 3.0. Note that &amp;*x is identically x, but *&amp;x is only x if x is an lvalue. 3. The operand of the negate prefix unary operator - is interpreted as an integer rvalue. The result is an rvalue with opposite sign. 4. The NOT prefix unary operator ! takes an integer rvalue operand. The result is zero if the operand is non-zero. The result is one if the operand is zero. 5. The increment "++" and decrement "--" unary operators may be used either in prefix or postfix form. Either form requires an lvalue operand. The rvalue stored in the lvalue is either incremented or decremented by one. The result is the rvalue either before or after the operation depending on postfix or prefix notation respectively. Thus if x currently contains the rvalue 5, then ++x and x++ both change x to 6. The value of ++x is 6 while x++ is 5. Similarly, --x and x-- store 4 in X. The former has rvalue result 4, the latter 5.
\\ \\ Unary operators are bound right to left. Thus -!x++ is bound -(!(x++)).
=== 4.3 Multiplicative Operators ===
\\ \\ The multiplicative binary operators "*", "/", and "%", expect rvalue integer operands. The result is also an integer.
1. The operator * denotes multiplication. 2. The operator "/" denotes division. The result is correct if the first operand is divisible by the second. If both operands are positive, the result is truncated toward zero. Otherwise the rounding is undefined, but never greater than one. 3. The operator "%" denotes modulo. If both operands are positive, the result is correct. It is undefined otherwise.
\\ \\ The multiplicative operators bind left to right.
=== 4.4 Additive Operators ===
\\ \\ The binary operators "+" and "-" are add and subtract. The additive operators bind left to right.
=== Shift Operators ===
\\ \\ The binary operators "&lt;&lt;" and "&gt;&gt;" are left and right shift respectively. The left rvalue operand is taken as a bit pattern. The right operand is taken as an integer shift count. The result is the bit pattern shifted by the shift count. Vacated bits are filled with zeros. The result is undefined if the shift count negative or larger than an object length. The shift operators bind left to right.
=== 4.6 Relational Operators ===
\\ \\ The relational operators "&lt;" (less than), "&lt;=" (less than or equal to), "&gt;" (greater than), and "&gt;=" ( greater than or equal to) take integer rvalue operands. The result is one if the operands are in the given relation to one another. The result is zero otherwise.
=== 4.7 Equality Operators ===
\\ \\ The equality operators "==" (equal to) and "!=" (not equal to) perform similarly to the relation operators.
=== 4.8 AND operator ===
\\ \\ The AND operator "&amp;" takes operands as bit patterns. The result is the bit pattern that is the bit-wise AND of the operands. The operator binds and evaluates left to right.
=== The OR operator ===
\\ \\ The OR operator ""| performs exactly as AND, but the result is the bit-wise inclusive OR of the operands. The OR operator also binds and evaluates left to right.
=== 4.10 Conditional Expression ===
\\ \\ Three rvalue expressions separated by "?" and ":" form a conditional expression. The first expression (to the left of the ?) is evaluated. If the result is non-zero, the second expression is evaluated and the third ignored. If the value is zero, the second expression is ignored and the third is evaluated. The result is either the evaluation of the second or third expression. \\ \\ Binding is right to left. Thus a?b:c?d:e is a?b:(c?d:e).
=== 4.11 Assignment Operators ===
\\ \\ There are 16 assignment operators in B. All have the form
"
lvalue op rvalue
"
The assignment operator = merely evaluates the rvalue and stores the result in the lvalue. The assignment operators "=|", "=&amp;", "===", "=|=", "=&lt;", "=&lt;=", "=&gt;", "=&gt;=", "=&lt;&lt;", "=&gt;&gt;", "=+", "=-", "=%", "=*", and "=/" perform a binary operation (see sections 4.3 to 4.9) between the rvalue stored in the assignment's lvalue and the assignment's rvalue. The result is then stored in the lvalue. The expression x=*10 is identical to x=x*10. Note that this is not x= *10. The result of an assignment is the rvalue. Assignments bind right to left, thus x=y=0 assigns zero to y, then x, and returns the rvalue zero.
=== 5.0 Statements ===
\\ \\ Statements define program execution. Each statement is executed by the computer in sequence. There are, of course, statements to conditionally or unconditionally alter normal sequencing.
=== 5.1 Compound Statement ===
\\ \\ A sequence of statements in "{}" braces is syntactically a single statement. This mechanism is provided so that where a single statement is expected, any number of statements can be placed.
=== 5.1 Conditional Statement ===
\\ \\ A conditional statement has two forms. The first:
"
if(rvalue) statement<sub>1</sub>
"
evaluates the rvalue and executes statement<sub>1</sub>, if the rvalue is non-zero. If the rvalue is zero, statement<sub>1</sub> is skipped. The second form:
"
if(rvalue) statement<sub>1</sub> else statement<sub>2</sub>
"
is defined as follows in terms of the first form:
"
if(x=(rvalue)) statement<sub>1</sub> if(!x) statement<sub>2</sub>
"
Thus, only one of the two statements is executed, depending on the value of rvalue. In the above example, x is not a real variable, but just a demonstration aid.
=== 5.3 While Statement ===
\\ \\ The while statement has the form:
"
while(rvalue) statement
"
The execution is described in terms of the conditional and goto statements as follows:
"
x: if(rvalue) { statement goto x; ]
"
Thus the statement is executed repeatedly while the rvalue is non-zero. Again, x is a demonstration aid.
=== 5.4 Switch Statement ===
\\ \\ The switch statement is the most complicated statement in B. The switch has the form:
"
switch rvalue statement<sub>1</sub>
"
Virtually always, statement<sub>1</sub> above is a compound statement. Each statement in statement<sub>1</sub> may be preceded by a case as follows:
"
case constant:
"
During execution, the rvalue is evaluated and compared to each case constant in undefined order. If a case constant is equal to the evaluated rvalue, control is passed to the statement following the case. If the rvalue matches none of the cases, statement<sub>1</sub> is skipped.
=== 5.5 Goto Statement ===
\\ \\ The goto statement is as follows:
"
goto rvalue ;
"
The rvalue is expected to be of type label. Control is then passed to the corresponding label. Goto's cannot be executed to labels outside the currently executing function level.
=== 5.6 Return Statement ===
\\ \\ The return statement is used in a function to return control to the caller of a function. The first form simply returns control.
"
return ;
"
The second form returns an rvalue for the execution of the function.
"
return ( rvalue ) ;
"
The caller of the function need not use the returned rvalue.
=== 3.7 Rvalue Statement ===
\\ \\ Any rvalue followed by a semicolon is a statement. The two most common rvalue statements are assignment and function call.
=== 5.8 Null Statement ===
\\ \\ A semicolon is a null statement causing no execution. It is used mainly to carry a label after the last executable statement in a compound statement. It sometimes has use to supply a null body to a while statement.
=== 6.0 Declarations ===
\\ \\ Declarations in B specify storage class of variables. Such declarations also, in some circumstances, specify initialization. \\ \\ There are three storage classes in B. Automatic storage is allocated for each function invocation. External storage is allocated before execution and is available to any and all functions. Internal storage is local to a function and is available only to that function, but is available to all invocations of that function.
=== 6.1 External Declaration ===
\\ \\ The external declaration has the form:
"
extrn name<sub>1</sub> , name<sub>2</sub> ... ;
"
The external declaration specifies that each of the named variables is of the external storage class. The declaration must occur before the first use of each of the variables. Each of the variables must also be externally defined.
=== 6/2 Automatic Declaration ===
\\ \\ The automatic declaration also constitutes a definition:
"
auto name<sub>1</sub> {constant}<sub>0</sub><sup>1</sup> , name<sub>2</sub> {constant]<sub>0</sub><sup>1</sup> ... ;
"
In absence of the constant, the automatic declaration defines the variable to be of class automatic. At the same time, storage is allocated for the variable. When an automatic declaration is followed by a constant, the automatic variable is also initialized to the base of an automatic vector of the size of the constant. The actual subscripts used to reference the vector range from zero to the value of the constant less one.
=== 6.3 Internal Declaration ===
\\ \\ The first reference to a variable not declared as external or automatic constitutes an internal declaration, All internal variables not defined as labels are flagged as undefined within a function. Labels are defined and initialized as follows:
"
name :
"
=== 7.0 External Definitions ===
\\ \\ A complete B program consists of a series of external definitions. Execution is started by the hidden sequence
"
main(); exit();
"
Thus, it is expected that one of the external definitions is a function definition of main. (Exit is a predefined library function. See section 8.0)
=== 7.1 Simple Definition ===
\\ \\ The simple external definition allocates an external object and optionally initializes it:
"
name {ival , ival ...}<sub>0</sub> ;
"
If the external object is defined with no initialization, it is initialized with zero. A single initialization with a constant initializes the external with the value of the constant. Initialization with a name initializes the external to the address of that name. Many such initializations may be accessed as a vector based at &amp;name.
=== 7.2 Vector Definitions ===
\\ \\ An external vector definition has the following form:
"
name [ {constant}<sub>0</sub><sup>1</sup> ] {ival , ival ...}<sub>0</sub> ;
"
The name is initialized with the lvalue of the base of an external vector. If the vector size is missing, zero is assumed. In either case, the vector is initialized with the list of initial values. Each initial value is either a constant or a name. A constant initial value initializes the vector element to the value of the constant. The name initializes the element to the address of the name. The actual size is the maximum of the given size and the number of initial values.
=== 7.3 Function Definitions ===
\\ \\ Function definitions have the following form:
"
name ( arguments ) statement
"
The name is initialized to the rvalue of the function. The arguments consist of a list of names separated by commas. Each name defines an automatic lvalue that is assigned the rvalue of the corresponding function call actual parameters. The statement (often compound) defines the execution of the function when invoked.
=== 8.0 Library Functions ===
\\ \\ There is a library of B functions maintained in the file /etc/libb.a. The following is a list of those functions currently in the library. See section II of [4] for complete descriptions of the functions marked with an *.
c = char(string, i);\\ The i-th character of the string is returned. error = chdir(string) ;\\ The path name represented by the string becomes the current directory. A negative number returned indicates an error. error = chmod(string, mode);\\ The file specified by the string has its mode changed to the mode argument. A negative number returned indicates an error. (*) error = chown(string, owner);\\ The file specified by the string has its owner changed to the owner argument. A negative number returned indicates an error. (*) error = close(file) ;\\ The open file specified by the file argument is closed. A negative number returned indicates an error. (*) file = creat(string, mode);\\ The file specified by the string is either truncated or created in the mode specified depending on its prior existence. In both cases, the file is opened for writing and a file descriptor is returned. A negative number returned indicates an error. (*) ctime(time, date);\\ The system time (60-ths of a second) represented in the two-word vector time is converted to a 16-character date in the 8-word vector date. The converted date has the following format: "Mmm dd hh:mm:ss". execl(string, arg0, arg1, ..., 0);\\ The current process is replaced by the execution of the file specified by string. The arg-i strings are passed as arguments. A return indicates an error. (*) execv(string, argv, count);\\ The current process is replaced by the execution of the file specified by string. The vector of strings of length count are passed as arguments. A return indicates an error. (*) exit( ) ;\\ The current process is terminated. (*) error = fork( ) ;\\ The current process splits into two. The child process is returned a zero. The parent process is returned the process ID of the child. A negative number returned indicates an error. (*) error = fstat(file, status);\\ The i-node of the open file designated by file is put in the 20-word vector status. A negative number returned indicates an error. (*) char = getchar( ) ; The next character form the standard input file is returned. The character `*e' is returned for an end-of-file. id = getuid();\\ The user-ID of the current process is returned. (*) error = gtty(file, ttystat);\\ The teletype modes of the open file designated by file is returned in the 3-word vector ttstat. A negative number returned indicates an error. (*) lchar(string, i, char);\\ The character char is stored in the i-th character of the string. error = link(string1, string2);\\ The pathname specified by string2 is created such that it is a link to the existing file specified by string1. A negative number returned indicates an error. (*) error = mkdir(string, mode);\\ The directory specified by the string is made to exist with the specified access mode. A negative number returned indicates an error. (*) file = open(string, mode);\\ The file specified by the string is opened for reading if mode is zero, for writing if mode is not zero. The open file designator is returned. A negative number returned indicates an error. (*) printf(format, argl, ...);\\ See section 9.3 below. printn(number, base);\\ See section 9.1 below. putchar(char) ;\\ The character char is written on the standard output file. nread = read(file, buffer, count);\\ Count bytes are read into the vector buffer from the open file designated by file. The actual number of bytes read are returned. A negative number returned indicates an error. (*) error = seek(filet offset, pointer);\\ The I/O pointer on the open file designated by file is set to the value of the designated pointer plus the offset. A pointer of zero designates the beginning of the file. A pointer of one designates the current I/O pointer. A pointer of two designates the end of the file. A negative number returned indicates an error. (*) error = setuid(id);\\ The user-ID of the current process is set to id. A negative number returned indicates an error. (*) error = stat(string, status);\\ The i-node of the file specified by the string is put in the 20-word vector status. A negative number returned indicates an error. (*) error = stty(file, ttystat);\\ The teletype modes of the open file designated by file is set from the 3-word vector ttystat. A negative number returned indicates an error. (*) time(timev);\\ The current system time is returned in the 2-word vector timev. (*) error = unlink(string);\\ The link specified by the string is removed. A negative number returned indicates an error. (*) error = wait( );\\ The current process is suspended until one of its child processes terminates. At that time, the child's process-ID is returned. A negative number returned indicates an error. (*) nwrite = write(file, buffer, count);\\ Count bytes are written out of the vector buffer on the open file designated by file. The actual number of bytes written are returned. A negative number returned indicates an error. (*)
\\ \\ Besides the functions available from the library, there is a predefined external vector named argv included with every program. The size of argv is argv[0]+1. The elements argv[1]...argv[argv[0]] are the parameter strings as passed by the system in the execution of the current process. (See shell in II of [4])
=== 9.0 Examples ===
\\ \\ The examples appear exactly as given to B.
=== 9.1 ===
\\ \\
"
/* The following function will print a non-negative number, n, to
the base b, where 2&lt;=b&lt;=10, This routine uses the fact that
in the ANSCII character set, the digits O to 9 have sequential
code values. */
printn(n,b) {
extrn putchar;
auto a;
if(a=n/b) /* assignment, not test for equality */
printn(a, b); /* recursive */
putchar(n%b + '0');
}
"
=== 9.2 ===
\\ \\
"
/* The following program will calculate the constant e-2 to about
4000 decimal digits, and print it 50 characters to the line in
groups of 5 characters. The method is simple output conversion
of the expansion
1/2! + 1/3! + ... = .111....
where the bases of the digits are 2, 3, 4, . . . */
main() {
extrn putchar, n, v;
auto i, c, col, a;
i = col = 0;
while(i&lt;n)
v[i++] = 1;
while(col&lt;2*n) {
a = n+1 ;
c = i = 0;
while (i&lt;n) {
c =+ v[i] *10;
v[i++] = c%a;
c =/ a--;
}
putchar(c+'0');
if(!(++col%5))
putchar(col%50?' ': '*n');
}
putchar('*n*n');
}
v[2000];
n 2000;
"
=== 9.3 ===
\\ \\
"
/* The following function is a general formatting, printing, and
conversion subroutine. The first argument is a format string.
Character sequences of the form `%x' are interpreted and cause
conversion of type 'x' of the next argument, other character
sequences are printed verbatim. Thus
printf("delta is %d*n", delta);
will convert the variable delta to decimal (%d) and print the
string with the converted form of delta in place of %d. The
conversions %d-decimal, %o-octal, *s-string and %c-character
are allowed.
This program calls upon the function `printn'. (see section
9.1) */
printf(fmt, x1,x2,x3,x4,x5,x6,x7,x8,x9) {
extrn printn, char, putchar;
auto adx, x, c, i, j;
i= 0; /* fmt index */
adx = &amp;x1; /* argument pointer */
loop :
while((c=char(fmt,i++) ) != `%') {
if(c == `*e')
return;
putchar(c);
}
x = *adx++;
switch c = char(fmt,i++) {
case `d': /* decimal */
case `o': /* octal */
if(x &lt; O) {
x = -x ;
putchar('-');
}
printn(x, c=='o'?8:1O);
goto loop;
case 'c' : /* char */
putchar(x);
goto loop;
case 's': /* string */
while(c=char(x, j++)) != '*e')
putchar(c);
goto loop;
}
putchar('%') ;
i--;
adx--;
goto loop;
}
"
=== 10.0 Usage ===
\\ \\ Currently on UNIX, there is no B command. The B compiler phases must be executed piecemeal. The first phase turns a B source program into an intermediate language.
"
/etc/bc source interm
"
The next phase turns the intermediate language into assembler source, at which time the intermediate language can be removed.
"
/etc/ba interm asource
rm interm
"
The next phase assembles the assembler source into the object file a.out. After this the a.out file can be renamed and the assembler source file can be removed.
"
as asource
mv a.out object
rm asource
"
The last phase loads the various object files with the necessary libraries in the desired order.
"
ld object /etc/brt1 -lb /etc/bilib /etc/brt2
"
Now a.out contains the completely bound and loaded program and can be executed.
"
a.out
"
A canned sequence of shell commands exists invoked as follows:
"
sh /usr/b/rc x
"
It will compile, convert, assemble and load the file x.b into the executable file a.out.
=== 12.0 Implementation and Debugging ===
\\ \\ A B program is implemented as a reverse Polish threaded code interpreter: The object code consists of a series of addresses of interpreter subroutines. Machine register 3 is dedicated as the interpreter program counter. Machine register 4 is dedicated as the interpreter display pointer. The display pointer points to the base of the current stack frame. The first word of each stack frame is a pointer to the previous stack frame (prior display pointer.) The second word in each frame is is the saved interpreter program counter (return point of the call creating the frame.) Automatic variables start at the third word of each frame. Machine register 5 is dedicated as the interpreter stack pointer. The machine stack pointer plays no role in the interpretation. An example source code segment, object code and interpreter subroutines follow:
"
automatic = external + 100.;
va; 4 / lvalue of first automatic on stack
x; .external / rvalue of external on stack
c; 100. / rvalue of constant on stack
b12 / binary operator #12 (+)
b1 / binary operator #1 (=)
...
va:
mov (r3)+,r0
add r4,rO / dp+offset of automatic
asr rO / lvalues are word addresses
mov r0,(r5)+
jmp *(r3)+ / linkage between subroutines
x:
mov *(r3)+,(r5)+
jmp *(r3)+
c:
mov (r3)+,(r5)+
jmp *(r3)+
b12:
add -(r5),-2(r5)
jmp *(r3)+
b1:
mov -(r5),r0 / rvalue
mov -(r5),r1 / lvalue
asl r1 / now byte address
mov r0,(r1) / actual assignment
mov r0,(r5)+ / = returns an lvalue
jmp *(r3)+
"
The above code as compared to the obvious 3 instruction directly executed equivalent gives the approximate 5:1 speed and 2:1 space penalties one pays in using B. \\ \\ The salient features for debugging are then:
1. Machine r4 is the display pointer and can be used to trace function calls and determine automatic variable values at each call. 2. Machine r3 is the current program counter and can be used to determine the current point of execution. All externals are globals with their variable names prefixed by `.'. Thus the debugger [4] can be used directly to give values of external variables. 4. All data lvalues are word addresses and therefore not directly examinable by the debugger. (See ` request in I of [4]) [I don't really know what this might refer to. It is probably some command in the very early Unix debugger -- DMR]
=== 13.0 Nasties ===
\\ \\ This section describes the 'glitches' found in all languages, but rarely reported.
1. The compiler makes sense of certain expressions with operators in ambiguous cases (e.g. a+++b) but not others even in unambiguous cases (e.g. a+++++b). 2. The B assembler /etc/ba does not correctly handle all possible combinations of intermediate language. The symptom is undefined symbols in the assembly of the output from /etc/ba. This is rare. 3. The B interpreter /etc/bilib is really a library of threaded code segment. The following code segments have not yet been written: "
b103 =&amp;
b104 ===
b105 =!=
b106 =&lt;=
b107 =&lt;
b110 =&gt;=
b111 =&gt;
b120 =/
"4. Initialization of external variables with addresses of other externals is not possible due to a loader deficiency. 5. Since externals are implemented as globals with names preceded by '.', the external names `byte', `endif', `even' and `globl' conflict with assembler pseudooperations and should be avoided.
=== Diagnostics ===
\\ \\ Diagnostics consist of two letters, an optional name, and a source line number. Due to the free format of the source, the number might be high. The following is a list of the diagnostics.
"
error name meaninq
$) -- {} imbalance
() -- () imbalance
*/ -- /* */ imbalance
[] -- [] imbalance
&gt;c -- case table overflow (fatal)
&gt;e -- expression stack overflow (fatal)
&gt;i -- label table overflow (fatal)
&gt;s -- symbol table overflow (fatal)
ex -- expression syntax
lv -- rvalue where lvalue expected
rd name name redeclaration
sx keyword statement syntax
un name undefined name
xx -- external syntax
"
[ signature line ]
=== References ===
\\ \\
1. Richards, M. The BCPL Reference Manual. Multics repository M0099. 2. Canaday, R.H. and Ritchie, D.M. Bell Laboratories BCPL. MM 69-1371/1373-7/12. 3. Ritchie, D.M. The UNIX Time Sharing System. MM 71-1273-4. 4. Thompson, K. and Ritchie, D.M. UNIX Programmer's Manual. Available by arrangement.
\\ \\ [//Two of these references--the one to Richards's early BCPL manual, and to the first edition of the UNIX Programmer's manual, are available under my main home page. The ultimate content of "The UNIX Time Sharing System evolved into the C.ACM paper, there (in further revised form) into the BSTJ paper available there as well.//] \\ \\ [[http://www.lucent.com/copyright.html| Copyright]] © 1996 Lucent Technologies Inc. All rights reserved.

19
dump/ln.html.docuwiki Normal file
View File

@ -0,0 +1,19 @@
11/3/70
LN (I)
NAME ln -- link to a file
SYNOPSIS ln name1 name2
DESCRIPTION ln adds another filename to the first filename
FILES
SEE ALSO
DIAGNOSTICS "twofiles" - please provide two filenames
"? file" - unable to make the link
BUGS
OWNER wkt

24
dump/ls.html.docuwiki Normal file
View File

@ -0,0 +1,24 @@
11/3/70
LS (I)
NAME ls -- list contents of directory
SYNOPSIS ls [ -l ]
DESCRIPTION ls lists the contents of the current directory under
control of one option:
l list in long format, giving i-number, mode, owner,
size in words, and name of each file. (see stat
for format of the mode). Numeric values are in octal.
FILES
SEE ALSO stat
DIAGNOSTICS No diagnostics
BUGS In a simulated environment, a filename larger than eight
characters will cause ls to exit prematurely.
OWNER wkt

View File

@ -0,0 +1,80 @@
==== Configuration Changes Needed When Using Maildir ====
If you forward your mail from the SDF cluster using a forward as described in the [[http://sdf.org/?tutorials/metaarray|MetaArray]] tutorial, you may have to update your mail client's configuration, as mbox format is used there. If you use procmail, for example, .procmailrc configuration will be slightly different. Lockfiles are not needed in recipes (the trailing ':' after the zero), and directories are used as destinations for mail. Some of the environment variables are different, as well:
ORGMAIL=/meta/mail/USERNAME
MAILDIR=/meta/LETTER/USERNAME/Maildir
PATH=/usr/pkg/bin:/usr/local/bin:/usr/bin:/bin
:0
.inbox/
The above will send all mail by default to the directory '~/Maildir/.inbox' (just replace USERNAME with your own user name and LETTER with the first letter of your user name).
Here is a .forward that works with procmail on the MetaArray:
"|exec /usr/pkg/bin/procmail -f-||exit 75 #USERNAME"
Again, replace USERNAME as appropriate.
If you use mutt, your .muttrc will need to be updated. Here is a minimal maildir config you can incorporate into an existing .muttrc. Note the two 'set spoolfile' lines - the commented one will tell mutt to pull from your system mail spool, however the next, uncommented one that references the '.inbox/' directory will work with the .procmailrc snippet, above. The '.Sent' and '.Drafts' folders are just standard folder names that are compatible with most IMAP implementations, but if you don't use IMAP they can be named anything.
#set spoolfile="/meta/mail/USERNAME"
set spoolfile="~/Maildir/.inbox/"
set folder="~/Maildir/"
set mbox_type = Maildir
set mask="!^\\.[^.]"
set record="+.Sent"
set postponed="+.Drafts"
mailboxes `echo -n "+ "; find ~/Maildir -maxdepth 1 -type d -name ".*" -printf "+'%f' "`
macro index c "&lt;change-folder&gt;?&lt;toggle-mailboxes&gt;" "open a different folder"
macro pager c "&lt;change-folder&gt;?&lt;toggle-mailboxes&gt;" "open a different folder"
macro index C "&lt;copy-message&gt;?&lt;toggle-mailboxes&gt;" "copy a message to a mailbox"
macro index M "&lt;save-message&gt;?&lt;toggle-mailboxes&gt;" "move a message to a mailbox"
The changes to the mailboxes command and c/C/M macros allow mutt to work with maildir folders, even if the folder names change at some point.
==== Converting Mbox to Maildir ====
If you want to convert your existing mbox-style mailboxes to maildir format, you can use 'mbox2maildir' to do so. The syntax for using it is as follows:
mbox2maildir [mbox file] [maildir directory]
The maildir directory will be created if it does not exist. As an example, let's say I have copied the mbox file for the gopher mailing list from iceland to ma, and copied it to ~/mail/gopher (where it is on iceland). I would then run the following:
mbox2maildir ~/mail/gopher ~/Maildir/.lists.gopher
Once run (no errors should be displayed), you can verify the contents of the new maildir directory:
slugmax@ma:~&gt; ls -la ~/Maildir/.lists.gopher/
total 40
drwx------ 5 slugmax arpa 4096 May 14 14:16 .
drwx------ 5 slugmax arpa 4096 May 14 14:16 ..
drwx------ 2 slugmax arpa 24576 May 14 14:16 cur
drwx------ 2 slugmax arpa 4096 May 14 14:16 new
drwx------ 2 slugmax arpa 4096 May 14 14:16 tmp
slugmax@ma:~&gt; ls -la ~/Maildir/.lists.gopher/cur/
total 3472
drwx------ 2 slugmax arpa 24576 May 14 14:16 .
drwx------ 5 slugmax arpa 4096 May 14 14:16 ..
-rw------- 1 slugmax arpa 3452 May 14 14:16 1337019395.6264.mbox:2,S
-rw------- 1 slugmax arpa 5131 May 14 14:16 1337019396.6264.mbox:2,S
-rw------- 1 slugmax arpa 4094 May 14 14:16 1337019397.6264.mbox:2,S
...
You can see that mbox2maildir has converted each message in the mbox file to its own file and placed each in the maildir-standard 'cur' sub-directory.
==== Converting Maildir to Mbox ====
As you might guess, converting maildir-format folders to mbox is done by the 'maildir2mbox' utility. It operates using environment variables, not command line options, so to be clear it might be best to specify them with the command:
MAILDIR=~/Maildir/.lists.gopher/ MAIL=~/mail/gopher MAILTMP=~/tmp/foo maildir2mbox
Note that the file specified by MAILTMP and the one specified by MAIL must be on the same filesystem. When this command is run, you should see the ~/mail/gopher mbox file in place:
slugmax@ma:~&gt; ls -l ~/mail/gopher
-rw------- 1 slugmax arpa 2680127 May 14 14:34 /meta/s/slugmax/mail/gopher
slugmax@ma:~&gt;
$Id: maildir.html,v 1.5 2019/07/23 01:30:22 slugmax Exp $

View File

@ -0,0 +1,123 @@
==== WAN IP Retrieval and Dynamic DNS (mdns) ====
There are myriad ways to automatically keep your **mdns** updated on SDF. Below are a couple:
The first script depends on passwordless SSH logons. Also, make sure the file permissions for your scripts are executable. For more info, see the SDF tutorial on [[http://sdf.lonestar.org/index.cgi?tutorials/permissions|File Permissions]].
=== Script 1 ===
Using the variables $SSH_CLIENT and $SSH_CONNECTION, after logging into a remote site (any remote site), you can learn your local WAN IP address by executing either of the following two commands:
"
echo $SSH_CLIENT
" "
echo $SSH_CONNECTION
"
We will take advantage of this simply by issuing a remote SSH command from our home computer.
First, somewhere in your SDF directory (ex: ~/bin), create a file called **ip** and put the following lines in this file:
"
#!/bin/sh
IP=$(echo $SSH_CLIENT | awk '{print $1}')
OLDIP=$(cat ~/bin/.ip)
if [ "$IP" != "$OLDIP" ] ;
then
echo "$IP" &gt; ~/bin/.ip
mdns "$IP"
fi
"
This will check your connecting IP against the local file ** .ip,** if the IP is the same it does nothing. If it has changed (or if the file .ip does not exist) it updates the mdns record and the **.ip** file.
Next, execute that remote script with a SSH command from your home computer using the following code (Example filename: **ipset**):
"
#!/bin/ksh
ssh me@remote.host '~/bin/ip' &gt;/dev/null
"
Standard output is directed to /dev/null because we will add this script to cron and it's not necessary to have the output mailed to you if cron is set up that way. If desired, redirect standard output to a logfile like so:
"
#!/bin/ksh
ssh me@remote.host '~/bin/ip' &gt;&gt;$HOME/logs/ip_update
"
Add the script to your home machine's cron and execute every 24 hours or so. Ex:
"
* */24 * * * $HOME/bin/ipset
"
=== Note ===
The script could again be modified to echo back your IP address. Name it **ipecho** or something like that. Here is the script:
"
IP=$(ssh me@remote.host 'echo $SSH_CLIENT' | awk '{print $1}')
echo $IP
"
=== Script 2 ===
=== CGI script, usable with VHOST membership ===
If you have a VHOST membership (or MetaARPA), you can use the following CGI script to set the IP via an HTTP request. The advantage is that you do not need to set up ssh keys for this; the disadvantage is that somebody sniffing on your traffic could update your mdns to some other address - so you should not use this script for security critical applications where you rely on authorized mdns setting (but feel free to improve the script as an exercise to include some authentication).
Copy the script into some accessible directory of your VHOSTed site, change the keyword as you like, and call the script with any browser or applications like wget with something like
"wget http://yourlogin.freeshell.org/setmdns.cgi?keyword"\\
where you set appropriate paths and replace the keyword according to your choice (it is currently set to 'setmdns'). Note also that on SDF-EU, the command to set the dynamic address is "zdns", not mdns.
If everything is ok, the script will respond with the output of the mdns command; otherwise, it will simply echo your query. All calls are logged, including the IP of the calling host and the submitted query string. The script keeps track of the IP and runs the mdns command only if the IP has changed since the last call.
It is based on the fact that your user id is the first part of the address for VHOSTed sites; as the HOME directory is normally not set for a CGI script, but needed for mdns, the script then gets this information by locally 'finger' the user id. This looks like a good way to find the home directory based on the user id. The script then changes to that directory and checks for the keyword in the query string, and if found, executes mdns with the IP of the calling client.
== CGI script ==
"
#!/bin/sh
# GPL 2007,2009 Yargo C Bonetti
# Use however you like, at your own risk!
OLDIP=./.oldip
DNSCOM=mdns
LOGF=./.setmdns.log
KEYWORD=setmdns
LOGNAME=${LOGNAME:-${HTTP_HOST%%.*}}
HOME=`finger $LOGNAME|awk '/^Directory:/{print $2}'`
export LOGNAME HOME
echo "`date -u +%c` $REMOTE_ADDR $QUERY_STRING" &gt;&gt;$LOGF
chmod 600 $LOGF
cat &lt;&amp;1 &gt;/dev/null ; then
if [ -d "$HOME" ] ; then
if [ "$REMOTE_ADDR" = "`cat $OLDIP`" ] ; then
echo "Keeping ip at $REMOTE_ADDR"
else
$DNSCOM $REMOTE_ADDR
echo $REMOTE_ADDR &gt;$OLDIP
fi
else echo "no $DNSCOM due to bad HOME=$HOME"
fi
else
echo $QUERY_STRING
fi
"\\ $Id: mdns-tutorial.html,v 1.19 2019/09/29 15:35:43 amrowsell Exp $

View File

@ -0,0 +1,190 @@
FIRST, create your own free shell account via SSH at: [[http://sdf.org?signup|http://sdf.org/?signup]]
Membership in SDF is comprised of the following three tiers: [[#users|USERS]], [[#arpa|ARPA]] and [[#meta|MetaARPA]].
[[#donate|Click here to join the membership, pay your dues or make a donation.]]
==== 1. USERS: Basic Membership Level ====
=== USERS (free) ===
* mutt, pop3, imap, icq, twitter, bsflite (aim), local irc
* [[http://sdf.org/index.cgi?games|games]], mud, lynx, gopher, [[http://www.twenex.org/|TOPS-20]]
* http://yourlogin.sdf.org
* traceroute, ping, whois, dig and more//- after account validation -//
* inbound ssh, ftp and sftp connections
* elm, pine, alpine, mailx and rmail
* [[http://wm.sdf.org|webmail]] interface
* bash, ksh, tcsh, rc and zsh
* ed, ex, vi, pico, nano and emacs
* shell, awk and sed based CGI
* USENET access (read/post), ClariNET access
* [[http://www.sdf.org/index.cgi?software|hundreds of shell/network utilities]]
=== INSTRUCTOR (free) ===
Allows staff, volunteer or adjunct at an accredited college or K-12 to self-manage a virtual UNIX classroom. A prospective instructor should provide SDF with details regarding their class (such as a syllabus or lesson plan). Students create their own accounts and are then validated by the instructor. The ATutor CMS is also available for classes. Further details are available in the [[http://www.sdf.org/index.cgi?faq|FAQ]].
=== STUDENT (free) ===
Allows an enrolled student at an accredited college or K-12 school to be validated by a qualifying 'INSTRUCTOR'. The account provides a student with 'USERS' benefits, as well as development tools of the 'ARPA' membership. The student can retain this access by joining the 'ARPA' membership or will be made 'USERS' after the semester.
=== DIALUP ($7-$10/month) ===
* 16,000 numbers in the U.S. and Canada
* 1200 to 56000 bps analog
* 64000 to 128000 bps ISDN
* direct terminal login or PPP
* [[http://sdf.org/?dialup|dues month to month or discounted for prepayment]]
* project site: [[http://tenex.org|TENEX.ORG]]
=== DSL ([[http://dsl.tenex.org/|request a quote]]) ===
* PPoE from 128kbps to 7000kbps
* DSLAM statistical information
* static IP addresses available
* no setup fee, no commitment
* outgoing SSL SMTP access
* dialup access (for emergency use)
* DSL modem shipped to you for $25
* project site: [[http://tenex.org|TENEX.ORG]]
==== 2. ARPA: Patron Lifetime Membership Level ====
=== ARPA ($36 one-time) ===
* lifetime membership for only $36
* all features of the 'users' account
* voting rights on system features and policies
* private 'arpa' member server
* outbound telnet, ssh, sftp, ftp, ytalk, irc, snarf, wget
* Basic VoIP access (internet only, no PSTN access)
* gcc, elisp, perl, php, python, ruby
* Twitter (ttytter), SDF VoIP (non-PSTN), Voicemail and conferencing
* UUCP mail and USENET / ClariNET newsfeed via dialup or TCP
* 50 domains to choose from for your URL
* full CGI access for php, perl, python, ruby
=== VOIP ($15 quarterly) ===
* Allows for calls into the global PSTN
* Flat unmetered service - no minutes, no overage
* Calls from the PSTN via SDF DID 1+206-299-2120
* Personal (360) or (425) DID for an add'l $9/quarter
=== DBA [MySQL database] ($30 annual) ===
* MySQL and sqlite database access
* php, perl, python, ruby accessible
* MySQL access on MetaArray with MetaARPA membership
=== DNS [Domain Name Service] ($20 annual) ===
* domain name service (Dynamic DNS)
* primary or secondary DNS
* direct access to your DNS records
* served across multiple networks
=== VPM [Mail Service] ($20 annual) ===
* allows for Virtual pop3 Mailboxes for your domain (or one of ours)
* manage your own alias and forwarding Addresses
* wildcard reception for your domain can be toggled
* [[http://www.greylisting.org/|greylisting]] can be toggled
* SMTP SSL AUTH outbound mail service
=== VHOST [Website Hosting] ($5-$20/month) ===
* hosting for 'yourdomain' + subdomains
* letsencrypt SSL certificate automatically issued and renewed
* private access log with daily &amp; monthly reports
* [[http://sdf1.org/vhosts/sdf-jp.org/|analog historical graphing &amp; reporting]]
* includes DNS &amp; VPM memberships
* DBA included in levels above basic
* REGIS included with annual dues
* [[http://sdf1.org/index.cgi?vhost|complete VHOST dues &amp; features]]
=== POINTER [Website Aliasing] ($30 annual) ===
* allows you to point to an additonal domain name to an existing VHOST membership domain
* DNS &amp; VPM memberships are included
=== MLIST [Mailing List] ($30 annual) ===
* 'majordomo' list up to 500 members
* mailing list archiving and digesting
* direct management of your list files
=== REGIS [Domain Registration] ($15 annual) ===
* registration for your domain name
* most TLDs (Top Level Domains) available - including .com, .net, .org, .tv, .uk, .info, .cc etc.
* DNS membership included
* free to VHOST members with annual dues
==== 3. MetaARPA: Sustaining Membership Level ====
=== MetaARPA ($9 quarterly) ===
* ARPA membership is required ([[http://sdf1.org/index.cgi?meta-waiver|waiver]])
* Access to private MetaARPA and MetaArray servers
* SSL encryption on personal web site
* Umetered personal website transfer quota
* cron jobs managed via 'mkcron', screen, OpenLISP
* SBCL - A Modern Common Lisp implementation
* Proxying via bouncers like irssi, psybnc
* ssh tunnel/forwarding with alt port
* Access to svn, git, rsync and java
* May write [[http://sdf1.org/index.cgi?tutorials|tutorials]] and system [[http://sdf1.org/index.cgi?software|software]]
* Dynamic domain name service (mdns.org)
* MOTD source code contrib access
* MySQL database on the [[http://sdf.org/?tutorials/metaarray|MetaArray]] with DBA membership
* SMTP SSL Auth for remote outgoing mail
* Google Reader alternative: tt-rss
* Ability to validate the account of any new user
* Access to SDF's [[https://nextcloud.com/|NextCloud]] instance.
* Access to SDF's [[https://git.sdf.org/|Gitea]] instance.
=== VPN ($4 month) ===
* SDF Virtual Private Network
* Encrypted OpenVPN or PPTP service
* Static IP assignment in 192.94.73.0 (US) and 178.63.35.0 (EU)
* Routing origin from both the US and EU
* External read/post access to the USENET server
* External SSL SMTP server access
* Flat rate, unmetered service
=== VPS ($7-$28 month or $60-$224 annual) ===
* SDF Virtual Private Server
* static IP assignment in 192.94.73.0
* Centos 7, Debian 9, NetBSD 8, FreeBSD 11, OpenBSD 6 and Plan9
* 5GB OS images are persistent and can be interchanged
* Additional disks available in 1GB, 3GB and 5GB increments
* Pre-build and communally managed pkgsrc for NetBSD
* [[http://sdf1.org/index.cgi?vps|complete VPS dues &amp; features]]
=== MOTD ($4-$8/month) ===
* a special blog/forum/gallery membership
* pre-installed phpbb, Movable Type and others
* MySQL database (DBA membership)
* project site: [[http://motd.org|MOTD.ORG]]
* [[http://sdf1.org/index.cgi?motd|complete MOTD dues &amp; features]]
==== Where to send donations &amp; membership dues: ====
=== POSTAL ADDRESS ===
SDF Public Access UNIX System\\ Post Office Box 17355\\ Seattle, WA 98127\\ United States
=== CREDIT CARD or PAYPAL payment of donations and dues ===
//Please be sure fill in the DESCRIPTION\\ with your LOGIN and MEMBERSHIP.//
Acceptable funds: Cheques, Money Orders, USD, CDN, EURO, UK, AUS, YUAN and YEN.
//Thank you for your support!//
$Id: membership.html,v 1.61 2020/06/13 20:53:00 smj Exp $

View File

@ -0,0 +1 @@
$Id: membership_tier_distinctions.html,v 1.1 2017/03/19 07:04:34 peteyboy Exp peteyboy $

View File

@ -0,0 +1,78 @@
===== The MetaArray =====
The MetaArray is a group of multicore, multiraid, high performance nodes which provide computational and data storage/hosting services for MetaARPA members. The current disk quota for each user is 800 GB and will likely increase with time.
* [[#aup|Acceptable Use Policy]]
* [[#starting|Getting Started]]
* [[#disks|Disk Layout]]
* [[#executables|Executables and Packages]]
* [[#services|Services and Features]]
* [[#personalwebsite|Personal Website Hosting]]
* [[#Nextcloud|SDF Nextcloud]]
* [[#sharex|Link SDF Nextcloud on ShareX]]
=== Acceptable Use Policy ===
Users of the MetaArray must agree to abide by the [[http://sdf.org/?tutorials/metaarray_aup|MetaArray Acceptable Use Policy]]
=== Getting Started ===
To enable your access to **ma.sdf.org**, run '//metaarray//' at the shell. This will first generate a random login password followed by a random database password sent via local e-mail if you have a DBA membership. To connect, use '//ssh ma.sdf.org//' (port 22 or 8080). Once you are connected, you can change your password with the 'passwd' command. If you ever forget your password, just run '//metaarray//' again from any of the regular nodes of the SDF cluster.
=== Disk Layout ===
The MetaArray Logical Volume spans multiple Volume Groups across multiple Physical Volumes which are organized as multiple disk drives organized in multiple hardware RAID level 5 groups. To the user, this all appears to be under one contiguous file system: ///meta//
The user directory structure is as follows:
* /meta/initial/user (home directory, considered private)
* /meta/www/initial/user (web directory, considered public served via http)
* /meta/log (person website access log)
* /meta/mail/user (user's mailbox - see the [[http://sdf.org/?tutorials/maildir|Maildir tutorial]])
=== Executables and Packages ===
Packages on the MetaArray are managed with **pkgsrc** and **yum**. Nearly any program or package can be installed by making a request on the regular nodes of the SDF cluster via the '//bboard//' REQUESTS.
The package directory structure is as follows:
* /bin, /usr/bin (yum repo destination directories)
* /usr/pkg/bin (pkgsrc destination directories)
* /usr/local/bin (MetaArray specific utilities)
=== Services and features ===
The MetaArray includes all features of the MetaARPA membership. However, some SDF specific utilities may not be available on the MetaArray because it is designed to be isolated from the SDF cluster. Some MetaArray specific services must be manually configured by the user.
* screen, tmux Terminal managers
* mkcron Use '//crontab -e//' to edit your crontab
* mkhomepg Use '//mkhomepg -t//' on the SDF Cluster to toggle website hosting
'mkhomepg' on the MetaArray will set secure perms for /meta/www
* setvmail Put '**$LOGNAME@ma.sdf.org**' in your .forward on the SDF Cluster
Your default email address is **$LOGNAME@SDF.ORG**
* webmail Be sure to forward your mail, login via https://ma.sdf.org
* IMAP imap(143) and imaps(993) address is ma.sdf.org
* X11 Connect with either ssh -X or ssh -Y to ma.sdf.org
* Port forwarding (via SSH)
* startsql MySQL database (with DBA membership)
=== Personal Website Hosting ===
To host your personal website on the MetaArray, please do the following:
* run 'mkhomepg' on the MetaArray. This creates the $HOME/html symlink and sets initial permissions.
* upload your site to $HOME/html on the MetaArray.
* run 'mkhomepg' again on the MetaArray. This sets proper permissions on your content.
* run 'mkhomepg -t' on the SDF cluster to toggle your site to the MetaArray It may take up to 10 minutes for DNS to update locally; however your ISP DNS server may cache this data for up to 12 hours so you won't see the change immediately. Use the "host" command on the cluster to see if DNS has changed, and "lynx" on the cluster to verify that the site loads: then be patient as DNS changes propagate.* The DOCROOT for your directory defaults to no-read access, so you must have an index.html. Directory listings will work on subdirs within the DOCROOT. You can defeat this by running 'chmod g+r $HOME/html'* https through a self signed certificate is only available to personal URLs under *.sdf.org=== SDF Nextcloud ===SDF makes available an [[https://nextcloud.com/|Nextcloud]] instance at https://ma.sdf.org/nc/. To initialize your login, run the //metaarray// command on the cluster and check for instructions via e-mail.In order to connect to your instance from a client, the server should be set to **https://ma.sdf.org/nc/**. (the client will probably complain for the *.sdf.org SSL certificate, but that's fine)=== Using SDF Nextcloud on ShareX ===If you'd like to use SDF's Nextcloud as a destination for ShareX then follow the steps below:note: This tutorial was written for 10.1
* Configure ShareX Destination for SDF Nextcloud
* Open the ShareX application window
* Click on Destinations
* Click on Destination Settings
* Select on the left pane, Nextcloud (under File uploaders)
* Enter:
* Host: https://ma.sdf.org/nc
* Username: your sdf_nc login
* Password: your sdf_nc password
* Path: /foo Place a check next to:
* Create shareable URL (Optional)
* Ignore invalid SSL certificate (Required) Close the settings windowSelect from the menu Image Uploader - File Uploader - Nextcloud$Id: metaarray.html,v 1.38 2018/08/15 02:09:33 echosa Exp $

View File

@ -0,0 +1,24 @@
===== MetaArray Acceptable Use Policy =====
//This AUP is supplemental to the general SDF AUP//
=== Overview ===
The purpose of the MetaArray is to allow SDF MetaARPA members to store and serve large amounts of data on a reliable, high capacity remote network resource.
=== Disclaimer ===
While the MetaArray has layers of redundancy and an eventual mirror, users are encouraged to maintain their own back ups outside of the array. If a user cancels their membership or does not renew within two (2) months of their membership expiration, all data associated with that user will be removed from the MetaArray. SDF strives for high availability and safe guards against catastrophic hardware failure, //but cannot guarantee the persistence or integrity of the data on the MetaArray//.
=== Privacy ===
Ownership of the data stored on the MetaArray is considered to be the property of the respective user. Since this is a shared resource, users are encouraged to use archive encryption, SSL and other secure means of storing and accessing their data.
=== Acceptable Use ===
Users of the MetaArray are expected to abide by the general SDF AUP. While user data stored on the array is that of the respective user, certain types of data cannot be stored on the MetaArray.
This pertains to:
* Data which is copyrighted or proprietary in nature that of which the user holds no license to store, copy or distribute
* Data which is of an illegal nature SDF cannot be held responsible for the storage and distribution of such data.$Id: metaarray_aup.html,v 1.3 2013/03/25 16:04:57 smj Exp $

75
dump/mobile.html.docuwiki Normal file
View File

@ -0,0 +1,75 @@
====== Mobile Applications on SDF ======
There are a variety of mobile apps that work well in conjunction with SDF and can enhance your experience here. We will highlight open source/free software for the most part, only adding 'pay' software on request or when there is no other useful alternative.
===== Multi-Platform =====
Linphone - Open source VOIP/SIP client
* [[http://www.xabber.com/|Homepage]]
* [[https://play.google.com/store/apps/details?id=com.xabber.android|Google Play Store]]
* [[https://itunes.apple.com/us/app/linphone/id360065638?mt=8|Apple App Store]]
* Tutorial
===== Android =====
JuiceSSH - SSH Client
* [[https://sonelli.com/|Homepage]]
* [[https://play.google.com/store/apps/details?id=com.sonelli.juicessh|Google Play Store]]
* Tutorial
Connectbot - Open source SSH/telnet client
* [[https://connectbot.org/|Homepage]]
* [[https://play.google.com/store/apps/details?id=org.connectbot&hl=en|Google Play Store]]
* Tutorial
K-9 Mail - Open source email client for advanced users
* [[https://github.com/k9mail/k-9/|Homepage]]
* [[https://play.google.com/store/apps/details?id=com.fsck.k9&hl=en|Google Play Store]]
* Tutorial
Xabber - Free Jabber/XMPP client
* [[http://www.xabber.com/|Homepage]]
* [[https://play.google.com/store/apps/details?id=com.xabber.android|Google Play Store]]
* Tutorial
Overbite - Open source Gopher browser
* [[http://gopher.floodgap.com/overbite/d?android|Homepage]]
* Google Play Store
* Tutorial
Tusky - Open source Mastodon client
* [[https://tusky.app|Homepage]]
* [[https://play.google.com/store/apps/details?id=com.keylesspalace.tusky|Google Play Store]]
* Tutorial
===== Blackberry =====
BBSSH - Free, open source SSH/telnet client
* [[https://bbssh.org/|Homepage]]
* Tutorial
===== Apple iOS =====
Monal - Free, open source Jabber/XMPP client
* [[https://monal.im/|Homepage]]
* [[https://apps.apple.com/us/app/monal-free-xmpp-chat/id317711500|Apple App Store]]
* Tutorial
Amaroq - Free, open source Mastodon client
* [[https://github.com/ReticentJohn/Amaroq|Homepage]]
* [[https://apps.apple.com/us/app/amaroq-for-mastodon/id1214116200|Apple App Store]]
* Tutorial
----
$Id: mobile.html,v 1.15 2019/12/02 16:53:28 thegiant Exp $

26
dump/msn.html.docuwiki Normal file
View File

@ -0,0 +1,26 @@
====== Connecting to MSN Instant Messaging Network from SDF ======
You can connect to MSN network using one of the varoius clients avilable in SDF...
===== centerim =====
[[http://www.centerim.org/index.php/Main_Page|centerim]], also known as cim is a fork of CenterICQ.
- Run **centerim** from the shell.
- The first time you will be greted with the configuration screen you can use your left arrow to **select Done** and press Enter
- With down arrow key move until msn's protocol **Login** option is selected and press Enter
- Fill in your msn **username** (i.e.: user@hotmail.com) and press Enter
- Select **Password** field and press Enter to fill in your password.
- With arrow keys select **Done** and press Enter
CenterIM will try to connect to the MSN nework, you can select your contacts using the arrow keys and press the Enter key to start a chat window. **CTRL+x** sends the message.
===== finch =====
* Press **ALT + a** and select **Accounts**.
* Select **Add** to open the **New Account** dialog box.
* Choose **MSN** from the Protocol select box.
* Fill the **Username** and **Password** fields.
* Using the **TAB** move to **Accept** and press **Enter** key.
After this, Finch will try to connect to MSN network.

View File

@ -0,0 +1,39 @@
====== Personal Responsibility on SDF's Multi-User Environment ======
As SDF's mission is to support the advancement of public education, cultural enrichment, scientific research and recreation, you are //encouraged// to be creative and bold in your use of the numerous resources available with your membership level. While you are getting to work on projects, just please keep an eye on your resource usage so that you do not adversely impact the enjoyment of this system by others. Bugs in your code or other errors can devour the CPU from time to time, and mistakes like these are part of the learning process, but conscious overuse of system resources will likely get your processes killed and, possibly, your account locked. Luckily you have your fellow users to alert you if you're accidentally exceeding a fair share of system resources.
The 'top' command is a great tool if you want to see what is causing system sluggishness, or if you just want to monitor your own system resource usage. A quick web search for "unix process monitoring tools" will give you a host of other tools as well.
If you observe system use that is bringing the system to its knees, please reach out to the user to let them know. Email is an obvious way to contact them, or try checking their SDF web or gopher site for other contact information. If that fails, make a post on [[http://sdf.org/?tutorials/bboard-tutorial|bboard]] describing the problem and others may be able to help.
Beyond simply monitoring your resource usage, you can set limits that will prevent a misfiring program from consuming excessive resources. This is especially important for MetaARPA members who have higher limits on system resource usage.
Most shells have a **ulimit** command which can be used to view or set limits. See "man 3 ulimit" or (in some shells) "ulimit --help". This shell command calls the C runtime library's ulimit() call which itself calls into the Unix system calls for getrlimit() and setrlimit().
"ulimit -a" will display all of your current limits:
user@fnord.sdf.org $ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 80133
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 80133
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
You can see from this display that the user has unlimited cpu time. To add a 1000 second limit to cpu time, issue the following command:
"ulimit -t 1000"
Note that, once set, you cannot increase the limit without killing the limited process and starting a new one. If you run this command directly from the shell, you will need to log out of the shell and back in again to reset it.
$Id: multiuser-responsibility.html,v 1.5 2020/02/28 02:10:14 cmccabe Exp $

29
dump/mutt.html.docuwiki Normal file
View File

@ -0,0 +1,29 @@
====== The Mutt Mail User Agent ======
Mutt is a UNIX mail user agent (aka mail client) that is available to all SDF users.
This is a brief tutorial on reading and sending mail with mutt. It does not cover some useful features, such as folders.
On SDF, it is already configured for sending and receiving mail with your SDF account.
To launch mutt, type mutt at the command line.
===== Reading mail =====
When you launch mutt without any options, you will see a list of messages in your inbox.
You can select a message by moving between them using 'j' and 'k', as in vi, or the arrow keys, or jumping to a message by entering its index number, as seen in the leftmost column, and pressing the return key.
To read a message, select it and press the return key. Press the space bar to see the next page of the message or '-' to see the previous page. To return to the previous screen, press 'i'.
You can perform a number of actions on the selected message, or the message you are currently reading. To reply to the message, press 'r'. (See the section below on sending mail.) To delete the message, press 'd'. The message will be marked for deletion, and mutt will ask if you want to purge deleted messages when you leave the folder it is in. If the message has attachments, you can view a list of them by pressing 'v', and save them by pressing 's'.
===== Sending mail =====
To send a message, you may press 'm' from within mutt to begin a new message or 'r' to reply to the selected message or the message you are reading. You will then be prompted for a recipient, followed by a subject. Mutt will then launch your $EDITOR, where you can write your message. When you are done, write the message out to the file (mutt will have provided a temporary filename) and quit your editor. Mutt will then take you to the Compose screen, where you can change the subject, recipients, etc. if desired. If you want to re-edit part of your message, select it, and press 'e'. You can add an attachment by pressing 'a'. When you are ready to send your message, press 'y'. You will be returned to the previous screen and will see a notification "Mail sent."
===== Getting help =====
At the top of your terminal, mutt will show you a selection of common keybindings that you can use at the moment, with brief descriptions. To see a longer list of keybindings, with less brief descriptions, press '?'. To read the mutt manual, press the F1 key from within mutt, or view the file /usr/pkg/share/doc/mutt/manual.txt. You can also consult the mutt man page for information on command line options, environment variables, etc.
$Id: mutt.html,v 1.3 2017/03/20 21:19:45 jandal Exp $

21
dump/mv.html.docuwiki Normal file
View File

@ -0,0 +1,21 @@
11/3/70
MV (I)
NAME mv -- move or rename a file
SYNOPSIS mv name1 name2
DESCRIPTION mv changes the name of name with the rename
system call.
FILES
SEE ALSO
DIAGNOSTICS "twofiles" - please provide two filenames
"? file" - either unable to remove or cre-
ate a file
BUGS The second diagnostic is ambiguous.
OWNER wkt

69
dump/net.html.docuwiki Normal file
View File

@ -0,0 +1,69 @@
====== [[index.html|SDF ARC]] ======
===== SDF.ORG's Amateur Radio Club =====
* [[index.html|Home]]
* [[roster.html|Roster]]
* [[net.html|NET]]
* [[repeaters.html|Repeaters]]
* [[contact.html|Contact Us]]
==== EchoLink Net ====
SDFARC meets on ECHOLINK CONFERENCE *TECHLINK* (NODE 9229) EVERY MONDAY at 0000 UTC. When able, the net is also carried on DMR Brandmeister TG 31650 and Allstar Node 50110.
This is a directed social NET where a minimal checkin requires your **call sign**, **userid** and **location**. Points and a ranking are awarded at end of each NET and are published here on sdfarc.org.
* Stations with 10 consecutive weekly check ins are called in order of their ranking
* Stations using ECHOLINK are awarded 1 pt per check in
* Stations using ECHOLINK+RF are awarded 3 pts
* Stations that do not check in for 6 consecutive weeks get dropped from the call roster and lose accumulated points. \\ You can listen to the NETs in real time on [[http://anonradio.net|aNONradio.net]]. (//SDF's Streaming Audio Service//) Archives of these NETs are also available on [[http://anonradio.net|aNONradio.net]]==== Net Op Schedule ====
^ Date ^ Net Controller ^ *TECHLINK* Controller ^
| Monday, 11-May-2020, 00:00 UTC | Michael (VE7KI) | Matthew (NB0X) |
| Monday, 18-May-2020, 00:00 UTC | Michael (VE7KI) | Matthew (NB0X) |
| Monday, 25-May-2020, 00:00 UTC | Matthew (NB0X) | Wayne (AB9FJ) |
| Monday, 01-Jun-2020, 00:00 UTC | Matthew (NB0X) | Wayne (AB9FJ) |
| Monday, 08-Jun-2020, 00:00 UTC | Wayne (AB9FJ) | Michael (VE7KI) |
| Monday, 15-Jun-2020, 00:00 UTC | Wayne (AB9FJ) | Michael (VE7KI) |
| Monday, 22-Jun-2020, 00:00 UTC | Michael (VE7KI) | Matthew (NB0X) |
| Monday, 29-Jun-2020, 00:00 UTC | Michael (VE7KI) | Matthew (NB0X) |
| Monday, 06-Jul-2020, 00:00 UTC | Matthew (NB0X) | Wayne (AB9FJ) |
| Monday, 13-Jul-2020, 00:00 UTC | Matthew (NB0X) | Wayne (AB9FJ) |
| Monday, 20-Jul-2020, 00:00 UTC | Wayne (AB9FJ) | Michael (VE7KI) |
| Monday, 27-Jul-2020, 00:00 UTC | Wayne (AB9FJ) | Michael (VE7KI) |==== PREAMBLE ====
Hello and Welcome!
This is the SDF Amateur Radio Club weekly net. That's Sierra Delta
Foxtrot, the Super Dimension Fortress. If you are not familiar with
SDF, it's a Public Access Unix System. You can learn more by
directing your web browser to s-d-f dot o-r-g or s-d-f-a-r-c dot
o-r-g. I will pause now to allow for any emergency or priority
traffic.
[pause ~10 seconds]
I am [CALL], the Net Control Operator today; my name is [NAME], and I
am in [QTH]. My SDF username is [USER].
This net meets every Monday at Zero hour Zulu via Echolink Node 9229,
the *TECHLINK* Conference. I would like to thank Michael, VE7KI, for
allowing us to use this conference.
This is a directed net. That means that if you have something to say,
give your call, and wait for the NC to acknowledge you and give you
the floor. Our net is open to all radio amateurs and is not
restricted to members of the SDF Amateur Radio Club.
We like to have a question of the week to kickstart our discussions.
This week's question is: [question]
I will take several rounds of checkins. I will then go down the list
and everyone will have a chance to greet and make a comment or ask a
question.
If you would like to check in, please come with your callsign, name,
location, and your SDF username (if you have one).
[call for checkins]
OK, let's go back now and hear from everybody.
[call roll and take comments]
Do we have any new checkins or additional comments?
[repeat as necessary, until no more...]
This concludes this week's SDF Amateur Radio Club NET at NNNN hours
Zulu. If you would like to continue the conversation, please join our
afternet in the SDF DMR talkgroup (number 31650) or join us in com on
the SDF.
This is net control station [CALL], out.
Copyright © black_white | [[http://validator.w3.org/check?uri=referer|HTML5]] | [[http://jigsaw.w3.org/css-validator/check/referer|CSS]] | [[http://www.html5webtemplates.co.uk|Free CSS Templates]]$Id: net.html,v 1.37 2020/05/04 00:28:51 nonlinear Exp $

55
dump/node1.html.docuwiki Normal file
View File

@ -0,0 +1,55 @@
[[node2.html| {{../img/latex2html/next.png?37x24|next}}]] [[unx.html| {{../img/latex2html/up.png?26x24|up}}]] [[unx.html| {{../img/latex2html/prev.png?63x24|previous}}]] [[../|{{../img/latex2html/root.png|root}} ]]\\ ** Next:** [[node2.html|1. To Do]] ** Up:** [[unx.html|Introduction to Unix &amp;]] ** Previous:** [[unx.html|Introduction to Unix &amp;]]\\ \\ \\
===== [[| Contents]] =====
* [[node2.html|1. To Do]]
* [[node3.html|2. Introduction]]
* [[node3.html#SECTION00310000000000000000|2.1 What to read first]]\\
* [[node4.html|3. What is Unix?]]
* [[node4.html#SECTION00410000000000000000|3.1 Short Answer]]
* [[node4.html#SECTION00420000000000000000|3.2 Long Answer]]
* [[node4.html#SECTION00421000000000000000|3.2.1 My Opinion]]
* [[node4.html#SECTION00422000000000000000|3.2.2 Another Opinion]]\\
* [[node5.html|4. Some Basic Commands]]
* [[node5.html#SECTION00510000000000000000|4.1 The Command Line Shell]]
* [[node5.html#SECTION00520000000000000000|4.2 Listing Files]]
* [[node5.html#SECTION00530000000000000000|4.3 Moving Around the File System]]
* [[node5.html#SECTION00540000000000000000|4.4 The VI Cursor Commands]]
* [[node5.html#SECTION00550000000000000000|4.5 E-mail]]
* [[node5.html#SECTION00551000000000000000|4.5.1 mutt]]
* [[node5.html#SECTION00552000000000000000|4.5.2 Graphical E-mail Readers]]
* [[node5.html#SECTION00553000000000000000|4.5.3 My Own E-mail]]
* [[node5.html#SECTION00560000000000000000|4.6 Viewing Files]]
* [[node5.html#SECTION00570000000000000000|4.7 Surf the Web]]
* [[node5.html#SECTION00580000000000000000|4.8 Upload &amp; Download]]
* [[node5.html#SECTION00581000000000000000|4.8.1 FTP]]
* [[node5.html#SECTION00582000000000000000|4.8.2 scp]]
* [[node5.html#SECTION00583000000000000000|4.8.3 rcp]]
* [[node5.html#SECTION00584000000000000000|4.8.4 When FTP Doesn't Work]]
* [[node5.html#SECTION00590000000000000000|4.9 Editing Files]]\\
* [[node6.html|5. Learning More]]
* [[node6.html#SECTION00610000000000000000|5.1 The Man]]
* [[node6.html#SECTION00611000000000000000|5.1.1 The man is for real]]
* [[node6.html#SECTION00620000000000000000|5.2 Gnu info]]
* [[node6.html#SECTION00630000000000000000|5.3 Books]]
* [[node6.html#SECTION00640000000000000000|5.4 Folklore]]\\
* [[node7.html|6. Super Dimension Fortress]]
* [[node7.html#SECTION00710000000000000000|6.1 Getting Information on SDF]]
* [[node7.html#SECTION00720000000000000000|6.2 COM Mode]]
* [[node7.html#SECTION00721000000000000000|6.2.1 COM Commands Discussion]]
* [[node7.html#SECTION00722000000000000000|6.2.2 COM Session Example]]
* [[node7.html#SECTION00723000000000000000|6.2.3 What to Do if You Are Caught in the Newbie Loop]]
* [[node7.html#SECTION00724000000000000000|6.2.4 COM History]]
* [[node7.html#SECTION00730000000000000000|6.3 Bulletin Board]]\\
* [[node8.html|7. Programming]]
* [[node8.html#SECTION00810000000000000000|7.1 Language]]
* [[node8.html#SECTION00820000000000000000|7.2 Languages on SDF]]
* [[node8.html#SECTION00830000000000000000|7.3 Theory]]\\
* [[node9.html|8. Hacking]]
* [[node10.html|9. Meta]]
* [[node11.html|Bibliography]]
\\
----
Gene Michael Stover 2005-07-07

16
dump/node10.html.docuwiki Normal file
View File

@ -0,0 +1,16 @@
[[node11.html| {{../img/latex2html/next.png?37x24|next}}]] [[unx.html| {{../img/latex2html/up.png?26x24|up}}]] [[node9.html| {{../img/latex2html/prev.png?63x24|previous}}]] [[node1.html| {{../img/latex2html/contents.png?65x24|contents}}]] [[../|{{../img/latex2html/root.png|root}} ]]\\ ** Next:** [[node11.html|Bibliography]] ** Up:** [[unx.html|Introduction to Unix &amp;]] ** Previous:** [[node9.html|8. Hacking]]   ** [[node1.html|Contents]]**\\ \\
====== [[| 9. Meta]] ======
This document is available online in several formats:
* HTML is at "http://lisp-p.org/unx/".
* PostScript is "http://lisp-p.org/unx/unx.ps".
* DVI is "http://lisp-p.org/unx/unx.dvi".
There are no plans to make it available in Pointless Document Format (PDF).
\\
----
Gene Michael Stover 2005-07-07

Some files were not shown because too many files have changed in this diff Show More