Bakåt Framåt Innehåll

8. Internet

Det är på sätt och vis svårt att tänka sig Linux utan Internet. Linux skulle förmodligen aldrig ha uppstått, eller åtminstone inte fått den form, omfattning och spridning som den har idag utan Internet. Som Linux-användare är man - nästan oberoende av hur duktig man må vara - beroende av hjälp och stöd av den i dag ytterst omfattande Linux-gemenskapen på Internet. Utveckligen av nya eller uppdaterade versioner av kärnan eller olika applikationer är rasande snabb. Utan Internet-koppling är det lätt hänt att allt detta går en förbi.

Förutom att användas för programmering av studenter torde Linux största spridning i dag vara som Internet-server. Det finns undersökningar som tyder på att Linux näst efter maskiner från SUN är den mest använda plattformen för Internet-tjänster. I USA finns det Internetleverantörer som helt förlitar sig på Linux.

I en komplett arbetsstation ingår därför att skapa en bra arbetsmiljö för att kunna använda Internet. Syftet med denna del är därför att beskriva hur man kopplar upp sin arbetsstation mot Internet, antingen i ett lokalt befintligt nätverk, eller via någon form av uppringd förbindelse. Det hela görs ur en användares synvinkel och inte ur administratörens. Här ges ingen omfattande beskrivning av hur man sätter upp och administerar olika Internet-tjänster, så som ftp-server, web-server, mailing-listor och dylikt. Jag hoppas kunna återvända med en egen bok dedicerad till nätverksbyggande och administerande med hjälp av Linux.

8.1 Var kommer Internet ifrån?

På sätt och vis kan man säga att datorteknologins utveckling och inte minst sättet att använda dem är kommunismens och Sovjetunionens förtjänst.

Den fjärde oktober 1957 skickade Sovjetunionen ut Sputnik i rymden. Mitt i det teknikglada femtiotalet hade Sovjetunionen tagit den tekniska ledningen. USA var chockat, särskilt skakade var de som ansvarade för USA:s militära teknologi. För att hänga med den tekniska utvecklingen skapade därför Försvarsdepartementet något som kom att kallas ARPA (fritt översatt till svenska: Byrån för Avancerade Forskningsprojekt). ARPA:s syfte var att söka efter vilda idéer.

Det är svårt att tänka sig någon enskild aktör som betytt mer för datorernas intåg i världen. ARPA satte igång att finansiera en hel rad universitet, institutioner, think-tanks och organisationer. Och det verkar, åtminstone så här i efterhand, som de fick tänka och agera tämligen fritt.

Här skapades en sällsam kombination: rejält med offentliga resurser, unga entusiastiska datahackers blandat med visionärer. För även om det verkliga syftet var militärt - att förbli starkare än Sovjetunionen - levde en annan vision nästan lika starkt: de ville använda datorerna för att förbättra människans förmåga att tänka och kommunicera. En del av dem ville till och med att så många som möjligt skulle få tillgång till dem.

1962 blev det riktigt allvarligt. Sovjetunionen tänkte placera ut kärnvapen på Kuba. USA måste planera för att överleva ett kärnvapenanfall.

Under hela femtiotalet hade den topphemliga think-tanken RAND arbetar med olika scenarier kring kärnvapenkrig. På RAND arbetade Paul Baran. Det lär inte vara någon slump att han just samma år som Kuba-krisen kommer fram till en lösning på en ytterst akut svårighet: hur ska de amerikanska myndigheterna kunna kommunicera med varandra efter en kärnvapenattack?

Man behövde kort sagt ett nätverk som kunde överleva massiva attacker. Barans lösning? Informationen måste bli ''intelligent'', den måste hitta fram till sitt mål själv och inte styras av någon central enhet. Varje del av nätet måste klara sig på egen hand och inte förlita sig till någon auktoritet högre upp i nätverkshierarkin.

I stället för en sol ett spindelnät. I detta spindelnät skulle informationen delas upp i små, lika stora paket. På varje paket skulle en adresslapp sitta. Varje dator skulle sedan fungera som en sorts brevsorteringscentral med kunskap om vilka vägar informationspaketet kunde skickas. Brast en länk, fanns det alltid någon annan kvar.

För att hindra de små paketen att komma fram räckte det således inte med att bomba centrum, hela spindelnätet måste rivas loss.

Just så här fungerar i stora drag Internet. Allt som ska skickas över nätet delas upp i små paket. I paketen finns ett huvud (header) som bär med sig en massa information som krävs för att paktetet ska komma fram. Till exempel en adress, ett så kallat ip-nummer. Med hjälp av en teknik som kallas routing, alltså rutt, kan en väg mellan två datorer dynamiskt letas upp, och paketet skickas. På sextiotalet fanns det emellertid ingenting i sinnevärlden som fungerade på det sättet.

Här fanns även en teknisk vinst att göra. Genom ett nätverk skulle de få stordatorerna som fanns i landet kunna utnyttjas effektivare. Gick datorn för fullt på ett ställe kunde kraften någon annan stans utnyttjas.

Dessutom. Genom att bryta upp informationen i små paket kunde man dela på ledningarna, ja skicka det med radio eller satellit om man så ville.

Paul Rands idéer kom att fångas upp av en av ledarna på ARPA, Licklider , som han lyckades övertala militären att finansiera forskningen kring så kallad packet-switching.

En morgon 2 september 1969 kopplades så det första lilla nätverket upp med en tio meter lång kabel mellan två datorer på universitetet UCLA. Genom ett oscilloskop kunde man uppfatta hur det första paketet överfördes från den ena till den andra datorn. ARPANET var fött.

Redan i slutet av året var fyra universitet ihopkopplade med varandra och året efter kopplades Harvard och MIT in. 1971 var 30 datorer ihopkopplade med varandra och 1972 slog metoden igenom internationellt genom ett stor konferens med deltagare från hela världen. Under sjuttiotalet utvecklades det så kallade TCP/IP-protokollet, som är det kommunikationsspråk som dagens Internet är uppbyggt kring.

För lustigt nog lade aldrig militären rabalder på den uppfinning man finansierat; en uppfinning som ju från början var tänkt som landets yttersta skydd mot ett kärnvapenanfall. I stället gjordes kunskapen tillgänglig för alla. Ja, man finansierade till och med spridningen av det i kommersiella system.

När dessutom allt fler universitet vill ha tillgång till ARPANET, där enbart ARPA-finansierade institutioner fick vara med, skapade regeringen ytterligare ett offentligt finansierat nät: NFSNET - ur vilket dagens Internet steg som fågeln Fenix; nästan 30 år efter Kuba-krisen.

Operativsystemet Unix kom också att få en viss, eller till och med stor betydelse, för spridningen av tcp/ip-protokollet och därmed Internet. I början av 1980-talet styckades gamla ärevördiga AT&T upp och fick även börja konkurrera på marknaden mer fritt. De kunde därmed också börja sälja sin gamla uppfinning från 1970-talet, nämligen Unix, mer fritt.

Men i samma veva bekostade ARPA utvecklingen av ett nytt, eller alternativt, Unix - som skulle användas i den offentliga förvaltningen, nämligen Barkeley Unix, eller BSD. Med BSD skickades också fritt tcp/ip. Under många år sålde SUN unix-datorer till uiversiteten med denna version på. Och internet spreds. SUN var förövrigt också en gång sponsrat av ARPA.

Det tog inte säsrskilt lång tid efter att Linus släppte ut Linux som några började arbeta intensivt för att också implementera tcp/ip på Linux. Ross Biro skapade den första versionen, känd som NET-1. Under 1993 tog Fred van Kempen över stafettpinen och utvecklade NET-2. Efter kraftfull debuggning, särskilt av Alan Cox, ändrades namnet till NET-3.

Linux nätverksimplementation är en av de modernaste som finns inom Unix och datavärlden i övrigt också. Den är skriven helt och hållet från grunden och inskränker sig inte enbart till tcp/ip, utan hantera i princip alla tankbara nätverksbehov, NIS, NFS, ethertalk, wfwg, mm.

8.2 En snabbkurs

Idealt sätt har du som läser detta redan ställts inför problemet att konfigurera Linux så att det fungerar med tcp/ip. Under installationen av RedHat ställdes ju ett antal frågor om ip-nummer, domännamn osv. Om dessa bara är ifyllda rätt så är det i praktiken dags att kasta sig direkt på fråga: vilka program ska jag använda?

Om du inte fyllde i detta under installationen, eller fyllde i fel. Lugn, förtvivla inte. Med RedHat följer en Kontroll-panel. I den kan man enkelt ställa in eller ändra på nätverksinställningarna.

Det alldra enklaste sättet att arbeta med Kontroll-panelen är att starta X som root, eller logga in som root vid xdms loginprompt. Det går i och för sig bra att starta Kontroll-panelen innifrån ditt vanliga användarkonto genom att använda su, men då måste du samtidigt lösa vissa problemsom gör det tillåtet för de applicationer du kör under root att få tillstånd att visa sig på din terminal. Välj själv.

Kontroll-panelen startas med kommandot:

control-panel

I den kontroll-panel som kommer upp väljer man "Network Configuration". Här kan man ställa in den så kallade loopback-adressen, ip-adresser för ethernetkort, en nameserver och skriva in ip-nummer och tillhörande domännamn, samt ställa in hostname.

Frågan är nu. Vad behöver du göra? Om du inte har ett ethernetkort så ska du inte fylla i något ip-numer för ett sådant heller. Det ända du behöver är den så kallade loppbackadressen, vilken är till för att de ska gå att tala med sig själv, amt fuller i ett ip-nummer för en nameserver. PPP konfigurerar sig själv när det kopplar upp sig.

Klicka alltså på "Add" under rubriken "Nameserver" ock skriv in ip-numret till den nameserver du fått angiven av din internetleverantör. Klicka på "Save Configurations Changes"

Ok, du har ett nytt ethernetkort. Då fyller du i det genom att klicka på "Add" under "Interfaces". Först frågas efter vilket "device name" ditt ethernet-kort har. Det är med ytterst stor sannolikhet eth0, det vill säga: första ehternetkortet.

Ta sedan reda på följande information av din systemadministratör:

ip-nummer, nätmask, nätverksnummer, broadcast-adress och eventuell Gateway. Fyll i och klicka på "Activate at boot".

Sedan fyller man i informationen i "Hosts". Där står förmodligen redan "127.0.0.1 localhost". Själva ska du skriva in ditt ip-nummer, din fullständiga domänadress och ditt hostnamn. Tex:

196.168.0.2     min-dator.hejsa.se      min-dator

Spara, och det hela är klart.

Under netcf högst upp till höger kan du också få fram en ruta där "hostaname" och "Fully qualified domainname" kan anges och ändras.

Jasså, du har ingen nätverksadministratör att fråga. Nåväl en ytterst kort beskrivning.

Ip-numret är ett unikt nummer som enbart dit dator ska ha. Det består av fyra gånger maximalt 3 siffror separerade med en punkt. Om ett ip-nummer avslutas med en "0" betyder det att det är en nätverksadress, alltså ingen reelt existerande dator. Tex,

196.168.0.0

är, utifrån exemplet ovan, ip-numret för nätverket hejsan.se. min-dator har identifikationsnumret "2" på detta nätverk, alltså ip-nummer 196.168.0.2.

Så här enkelt är det emellertid inte. Det finns olika typer av IP-nummer, där sättet att skriva dem avgör hur många datorer, eller ip-nummer, som kan tillhöra ett nätverk. Detta görs genom att man har skapat ett sätt att tala om villken position i ip-numret som avgör vad som är nätverksadressen. Chansen är närmast minimal att du har något annat än ett c-nätverk. I dessa är den sista uppsättningen siffror det som avgör nätverksnumret. För att tala om att det är ett c-nätverksnummer krävs något som kallas en Nätmask. För C-nätverk ser den ut så här:

255.255.255.0

Broadcast-adressen är ett sätt att kunna skicka medelanden till all på nätet befintliga datorer. Det behövs således en gemensam adress som alla lyssnar till och som inte används till något annat. I vårt exempel ser den ut så här:

196.168.0.255

Har du ingen systemadministartör att fråga, har du troligtvis ingen Gateway heller. Så stunta i den.

Fortfarande förvirrad. Gå vidare till avsnittet "Internet mer i detalj"

8.3 Internet - mer i detalj

Denna del kommer inte skrivas ännu, och förmodligen kommer den enbart publiceras i den tryckta versionen. Något kan emellertid sägas.

Om du har samlat ihop alla uppgifter ovan är det extremt enkelt att konfigurera ett nätverksinterface. Det görs med kommandona ifconfig och route. Låt oss ta två exempel.

Vi börjar med loppbackadressen. Den skapar vi på följande sätt:

ifconfig 127.0.0.1

samt

route add 127.0.0.1

och i file /etc/hosts lägger du till

127.0.0.1       localhost

Nu kan du börja köra Internet mot dig själv.

Har du ett ethernetkort du vill konfiguera gör du på ett liknande sätt. Ip-nummer har du antingen fått via din nätverksadministratör eller din internetleverantör. Använd inte ditt ip-nummer du fått för PPP. Har inge gett dig ett ip-nummer måste du använda något från den uppsättning så kallade privara ip.nummer som finns. Dessa är:

10.0.0.0-10.255.255.255
172.16.0.0-172.31.255.255
192.168.0.0-192.168.255.255

Vi börjar med interfacet:

ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast \ 192.168.0.255

Välj de nummer som passar dig. I rotingtabellen måste vi sedan lägga upp åtminstone en rutt till det nätverk vi är direkt anslutna till

route add -net 192.168.0.0

Eftersom noll står för nätverksadressn. Om du når Internet via PPP behöver inte fler ruttar läggas in. Om du däremot når internet via någon gatewy på ditt nät måste du lägga upp dess ip-adress som default route. Alltså alla ip-nummer som det inte finns någon specifierad rutt-adress för tar denna väg. Säg att den heter 192.168.0.253.

route add default gw 192.168.0.253

I /etc/hosts lägger du sedan in namnen som du vill koppla till ethernetskortets interface, tex:

196.168.1.2     myhost.your.domain myhost

Har du ingen namserver på det lokala nätverket måste du lägga upp namnet på alla lokalt befinltiga datorer i varje /etc/hosts-fil.

För att detta ska ta effekt varje gång man startar datorn, måste man söka igenom initscripten efter de ställen där dessa komandon utför. De finnas i /etc/rc.d/ och heter olika sker i olika versioner. Leta.

Dessutom måste då tala om för Linux hur namnuppslagen av ip-adresserna ska ske. Det gör man i /etc/host.conf. Där lägger du in:

order hosts,bind
multi on

Har du aldrig tillgång till någon nameserver, ta bort ordet "bind". I filen /etc/resolv.conf ska du lägga in namnet på de nameservers du använder. Tex:

domain mydomain.se
nameserver 196.168.1.2

Hjälp - jag kan inte ställa in mitt hostname, det ändras hela tiden. I /etc/HOSTNAME ligger ens namn på datorn. Sitter man på ett ethernetnätverk ska där ens fullt kvalificerade domännamn ligga. Tex:

myhost.your.domain

Detta namn ställs emellertid ofta in vid uppstart. Leta efter en rad som ser ut ungefär så här:

/bin/hostname name.domain

bland init-skripten.

8.4 ppp

Ett notoriskt problembarn återstår dock, nämligen PPP. PPP är ett protokoll för att över en seriell förbindelse kunna skicka och ta emot tcp/ip-paket. Det är idag det absolut vanligaste sättet att via modem eller ISDN koppla upp sig mot internet, temporärt eller permanent.

PPP går också att konfiguerar med Kontroll-panelen. Det är emellertid en högst osäker metod.

Vi börjar med en snabb-uppkoppling, genom att använda ett av mina fungerande script och utan att gå in på detaljerna. Prova gärna detta innan du fördjupar dig i PPPs detaljer.

Snabb väg till ppp

Vi börjar alltså direkt, utan några närmare fördjupningar. Skriv in följande i en editor, tex emacs:

#!/bin/sh

#
#       ppp-on
#
#       Set up a PPP link
#

LOCKDIR=/var/run/
DEVICE=cua1

PHONE=telet till ISP
USER=användarnamn
PASSWORD="password"

 if [ -f $LOCKDIR/LCK..$DEVICE ]
 then
    echo "PPP device is locked"
    exit 1
 fi



(
    stty 19200 -tostop

    if /usr/sbin/chat -v ABORT "NO CARRIER" ABORT BUSY "" ATZ OK ATDT$PHONE CONN

ECT "" ogin: $USER ssword: \\q$PASSWORD
    then
        /usr/sbin/pppd /dev/modem debug crtscts defaultroute noipdefault

        exit 0
    else
        echo "PPP call failed" 1>&2
        exit 1
    fi
) < /dev/$DEVICE > /dev/$DEVICE

Eller ladda hem den härifrån (ftp.mc.hik.se/pub/users/mia95anp/ppp-up)

"DEVICE" är din seriella port. Om den sitter på com1 är det cua0 (fast där sitter oftast musen) och är det com2 så skriver du cua1.


"PHONE" är telefonnumret till din internetleverantör.

"USER" det användarnam du fått av internetleverantören och "PASSWORD" är ditt lösenord. Skriv det gärna inanför citattecken efter lösenorden ofta innehåller tecken som Bash ogillar om de inte är citerade.

Om du har ett fast ip-nummer och vet om det kan du byta ut "noipdefault" mot "ip-nummer:". Glöm inte bort ":".

Döp scriptet till något lämligt, tex ppp-up och lägg det i /usr/sbin och gör det exekverbart. Tex

chmod 775 ppp-up

För att stänga av PPP bör du ha ett speciellt script för det. Tex:

#!/bin/sh

DEVICE=ppp0

#
# If the ppp0 pid file is present then the program is running. Stop it.

if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# If unsuccessful, ensure that the pid file is removed.
#
        if [ ! "$?" = "0" ]; then
                echo "removing stale $DEVICE pid file."
                rm -f /var/run/$DEVICE.pid
                exit 1
        fi
#
# Success. Terminate with proper status.
#
        echo "$DEVICE link terminated"
        exit 0
fi
#

Du kan hämta det här (ftp.mc.hik.se/pub/users/mia95anp/ppp-off). Döp det till tex ppp-off. Läg även det i /usr/sbin och gör det exekverbart på samma sätt som ovan.

Som root provar du nu att det funkar genom att skriva

ppp-on

eller

/etc/sbin/ppp-on

på kommandoraden. Misströsta inte om det inte funkar första gången. Det kan bero på att serieporten inte är initialiserad på rätt sätt. Gör det bara en gång till. Stänger av gör du med:

ppp-off

Hur ppp beter sig går att se i /var/log/messages. Om något krånglar kan man titta efter där och se vad som rapporetarats. Tex genom

less /var/log/messages

Tryck på mellanslagstangeneten för att ta dig fram fort.

Eller

tail /var/log/messages

så får du se vad som hände allra sist. Genom

tail -f /var/log/messages

går det att följa hela förloppet.

Funkar inte? Gå till delen om avancerad konfiguration.

Annars återstår att göra det möjligt även för andra än root att starta en ppp-uppkoppling. Detta är emellertid en säkerhetslucka. Risken finns att du öppnar din ppp-koppling så att även andra kan använda den. På en privat dator i hemmet, eller i ett mindre nätverk är detta inte så farligt. Men nu vet du om det.

För att andra ska kunna köra PPP måste man lösa ett problem. pppd, som programmet heter, måste nämligen köras som root. Även om man gör pppd exekverbar för andra användare än root så kommer det inte att funka. pppd körs då nämligen med repsektive användares identitet - och kommer inte att fungera.

Därför måste pppds rättigheter sättas till något som heter suid root. Det görs på följande sätt.

chmod 4775 pppd

Nu bör allt funka.

En säkerhetsdetalj till. I ppp-on står lösenordet i klartext. Detta är också ett säkerhetsproblem. Därför kan det vara värt att betrakta hur man kan sätta upp PPP på ett säkrare sätt. Det beskrivs i nästa avsnitt.

ppp - en lite längre väg

PPP är alltså en metod att upprätta en seriell förbindelse mellan två datororer över vilken det går att sända olika typer av datagram, alltså paket med data i som formats efter olika nätverksprotokoll. Vi är här enbart intresserade av tcp/ip - men det går att använda PPP även med andra protokoll.

PPP består egentligen av flera delar. Dels består PPP av vissa rutiner som Linux kärnan måste klara av att hantera, nämligen att packa in datagram för att sända över en seriell lina. Dels krävs en server, alltså ett program som sköter om själva förbindelsen, etablerar kontakt mellan två PPP-servrar och uppräthåller denna och håller reda på vad som händer på linjen. Detta sköts av /etc/pppd, som i sin tur är beroende av en rad konfigurationsfiler. För att överhuvud taget kunna uppräta en förbindelse krävs emellertid någon form av program som "ringer" upp och etablerar en förbindelse mellan datorerna. Det vanligast förekommande bihanget till pppd är programet chat.

För att få PPP att fungera måste vi således:

1) Se till att kärnan stödjer PPP

2) Ordna så att vi kan ringa upp den andra datorn med chat

3) Upprätta kontakt mellan de två ppp-servrarna

1) Det är ytterst troligt att kärnan redan stödjer PPP. Om den inte gör det måste du gå till avsnittet som beskriver hur man kompilerar om kärnan. I ett vanligt hemnätverk måste man då säga "yes" till tcp/ip stöd och stöd för PPP i configurationen. Firewall, IP-Forwarding och annat behövs inte.

För att lösa problem nummer två och tre behöver vi först titta översiktligt vilka filer och program som är inblandade, eftersom dessa båda moment hänger samman.

För att sätta upp PPP är följande filer inblandade:

/usr/sbin/pppd
/usr/sbin/chat
/usr/sbin/ppp-on
/usr/sbin/ppp-off
/etc/ppp/options
        /ip-up
        /ip-down        
$HOME/.ppprc
$HOME/.default.ppp

Vi ska nu använda dessa för att sätta upp en ppp förbindelse som inte bara funkar utan som är säkrare än den vi genomförde i snabbkursen. Vi kan nämligen utnytja både chats och pppds förmåga att läsa in sin argument från en fil i stället för direkt från kommandoraden.

Kort uttryck ska vi skriva ett skript som ringer upp internetlevarndetören, loggar in och startar pppd. Vi kallar detta script ppp-on. Till både pppd och chat kan man ge en rad olika argument som påverkar dess beteende. pppd läser vid uppstart filen /etc/option och $HOME/.ppprc och använder värdena där som sina argument. Chat kan startas med kommandoargumentet "-f" och läser då från en specificerad fil. Den stora poängen är att det är i denna fil som vårt lösenord måste finnas. Men denna fil kan skyddas på ett helt annat sätt än ppp-up i det tidigare exemplet. Det räcker med att den är läsbar för root, eller för användaren.

Låt oss börja med själva grundskriptet.

#!/bin/sh

#
#       usage: ppp-on [script [device [speed]]]
#
#       Set up a PPP link
#


LOCKDIR=/var/run/
SCRIPT=$HOME/.default.ppp
DEVICE=cua1
SPEED=19200

if [ -f $LOCKDIR/LCK..$DEVICE ]
then
    echo "PPP device is locked"
    exit 1
fi


(
    stty $SPEED -tostop

        if chat -f $SCRIPT
        then
                pppd /dev/$DEVICE $SPEED
                exit 0

        else
                echo "PPP call failed" 1>&2
        exit 1
    fi
) < /dev/$DEVICE > /dev/$DEVICE

I denna behöver förmodligen ingenting ändras. Använder du en annan serieport, ändra "DEVICE" till t.ex cua0 eller cua2, om du vill sätta högre hastighet ändra "SPEED" och om du lägger parametrarna till chat npgon annanstans än i din hemkatalog, ändra "SCRIPT". Filen måste givetvis vara exekverbart, det är ju ett script.

chmod 751 ppp-up

Vad ska då stå i scriptet? Där ska så ett antal saker som hjälper chat att ta kontakt med modemet, initialisera det och logga in på den andra datorn. chat arbetar med parvisa parametrar, som i korthet går ut att chat väntar sig ett visst beteende, en viss output och när den får denna output så skickar den en viss fördefinierad sträng. Typisk saker som kan krångla med chat är att modemet inte vill ställa in sig riktigt. Då måste man in i modemhandboken och leta reda på vilka AT-komandon modemet vill ha. Sedan kan själva loginförfarandet skilja sig mellan olika system. Prompten kan se olika ut, osv. Här krävs kort sagt lite ansträngning och gissning om det krånglar. Det är tyvärr omöjligt att täcka in alla möjligheter i en handbok som denna. En bra metod är att starta chat med argumenten "-vf", då loggar chat allt den gör till den logfil som finns angiven i /etc/syslog.conf, oftast /var/log/messages.

Dessutom. PPP har metoder för att autentisera sig själv. På Linux- coh Unix-system är det inte så vanligt, eftersom det är så smidigt att använda de vanliga loginnamnet och lösenordet. Men så vitt jag förstått använder tex telia PPPs inbyggda metod att autenticiera sig själv. På Linux kräver det lite extra arbete, bland annat chatfilen behöver inte längre innehållar användarnamn och lösenord.

Låt oss titta på tre olika exempel. Du väljer det som passar dig bäst, lägger det i filen ".default.ppp" och lägger det där det passar bäst. Skriver in de världen som gäller för dig, alltså telefonnumret till sin internetleverantör, ditt användarnamn och lösenordet. OCH gör sedan

chmod 600 .default.ppp

så att den blir hemlig för alla utom för dig (och root).

Exempel 1, enkel chat-fil

ABORT BUSY ABORT 'NO CARRIER' ABORT 'NO DIALTONE' '' ATZ OK
ATDT"telefonnummer"  CONNECT '' ogin: "användarnamn"  ssword: "lösenord"

Jag har enbart lagt in "-tecknen runt telefonnummer osv för att de ska vara enklare att hitta. Ersätt alltså "telefonnummer" med tex 5782902.

Kommandona i filen kommer läsas in av chat i vår huvudfil och användas för att ringa upp. Först kollar chat om genom några kommandon om det går att komma ut på linje. "ATZ" är ett vanligt förekommande AT-kommando för att ställa in modemets fabrikinställningar, använd något annat om du känner till det. chat ringer sedan upp och väntar på CONNETC-signal från modemet men skickar inget tillbaka. Väntar sedan på login-promten och skickar användarnamnet, väntar på lösenordsprompten och skickar lösenordet.

chat kan användas på en rad olika sätt. I PPP-HOWTO har Robert Hart skapat ett script som är bättre på att hantera fel.

Chat 2, avancerat script

                TIMEOUT         3                               \
          ABORT           '\nBUSY\r'                      \
          ABORT           '\nNO ANSWER\r'                 \
          ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
          ''              \rAT                            \
          'OK-+++\c-OK'   ATH0                            \
          TIMEOUT         30                              \
          OK              ATDT"telefonnummer"                  \

          CONNECT         ''                              \
          ogin:--ogin:    "användaramn"                     \

          assword:        "lösenord"

Byt som vanligt ut "telefonnummer", osv. Tecknet "\" i slutet av varje rad är till för att unvika radbrytning. Chat måste få alla sina kommandon på en enda rad. Filen ovan bildar således en obruten rad för chat.

Om din internetleverantör använder PAP eller CHAP för uppkoppling med PPP så behöver inte chat ange användarnamn och lösenord. Ta därför bort de två sista raderna i exemplet ovan. Mer om PAP och CHAP nedan.

Nästa steg innebär att vi konfiguerar vilka kommandon som ska skickas till pppd. Detta görs antingen i /etc/option eller $ HOME/.ppprc.

Som vanligt finns det en stor mängd kommandoradsargument till pppd. Du finner allihop i pppds manualsida.

Vi ska här lista några vanliga och användbara arument:


<tty name>pekar ut det interface som förbindelse ska upprättas igenom. Ominte detta anges antar pppd den tty som startar sessionen och lägger sigej i bakgrunden. tex serieport 2 cua2
<speed>anger hastigheten på förbindelsen, tex 19200
connecttanvänder ett script eller kommandon för att skapa en seriellförbindelse tex, pppd connect "chat -f $chatfil"
asyncmap <>talar om vilka tecken som inte på ett lyckosamt sätt kan skickasöver linjen. Normal är "0" värdet som ska anges.
crtsctstalar om att så kallad harware flow control ska användas.För modemförbindelse är detta i princip ett måstedärför att PPP använder alla 8 bitarna.
defaultrouteom denna specificeras innebär att det att pppd lägger uppppp-förbindelsen som maskinens default-route. Det vill säga denväg som alla tcp/ip-paket tar om ingen annan route finns specifiktangiven. Det normala, om inte datorn eller nätverket också har enannan förbindelse till internet.
lockanger att det skapas en UUCP-style lock-fil som hindrar andra frånatt fåt tillgång till den "device" som ppp använder.
modemanger att pppd måste kontrollera ett modem
mru <>sätter den Maximalt Mottagna Enheten (MRU), vilken anger förservern att den inte ska skicka paket större än det angivavärdet. Default är 1500, för långsamma linjer är 296att föredra.
mtu <>sätter den Maxiama Sändande Enheten till specificerat värde,se ovan.
noipedefaultanvänds för att markera att det är mottagaren(Internetleverantören) som ska ge ip-numren både får denlokala maskinen och servern. Krävs vid dynamiska i-nummer, och kanockså användas för att sätta pppd ursprungsbeteende urspel, nämligen att använda den locala maskinens ip-nummer som pppsip-nummer också. Vilket för de flesta maskiner är rentfelaktigt.
user <>anger den lokala datorns namn. Används vid autenticiering för attkunna ange ett användarnamn i stället för datorns namn.
<localip>:<remoteip>används för att ange ip-numret för antingen en avmaskinerna, eller båda. Om man tex känner till sitt ip-nummer (detär fast) kan det anges 196.168.0.2:. Glöm inte bort kolonet.
Då är det dags att skapa en option-fil.

Option 1 - enkel optionfil för dynamiska ip-nummer

noipdefault
lock                           
crtscts                
defaultroute      
mru 296              
mtu 296            
modem
debug

Åvanstående argument till pppd kommer således be den uppringda ppp-servern att bistå med ip-numer, skapa en lock-fil, lägga upp en default-route, vara medveten om ett modem och konrtollera det med Hårdvaru-flödeskontroll, sätta paketsroleken och skicka mycket information till log-filen. Lägg alltså detta antingen i /etc/ppp/options eller $HOME/.ppprc

Om man känner till sitt ip-nummer, eller t.o.m det ip-nummer som den uppringa servern har kan man ta bort "noipdefault" och i stället lägga till tex /använd dina egna ip-nummer):

196.168.0.2:

eller

196.168.0.2:196.168.0.253

eller

:196.168.0.253

Om du kör mot ett system som använder PAP behäver du förmodligen lägga till "name" till filen. Tex

name Anders

Ibland kan man behöva tvinga serverns att använda PAP eller CHAP. Då lägger du till något av följande:

+chap
+pap

Om man använder PAP eller CHAP krävs ytterligare en åtgärd. I /etc/ppp måste då finnas filerna pap-secrets eller chap-secrets. Här finns ett dilemma. PPP är skapat för kontakt mellan två datorer. PAP och CHAP förväntar sig därför namnen på datorer och inte användare. Chansen är emellertid tämligen stor att din internetleverantör inte bryr sig vad du om vad du kallar din dator. I stället får du ett användarnamn och ett kodord. "Name" i filen /etc/options är till för att lösa detta problem. Genom att använda denna kan man i pap-secret och chap-secret använda sitt användarnamn som client. I pap-secret kan man sedan använda ett så kallat wilde-card för serverns namn. Man accepterar vem som helst. I chap-secret måste man emellerid ange serverns namn. Här följer varsit exempel på en pap-secret repektive en chap-secret

pap-secret

# Secrets for authentication using PAP
# client        server          secret           IP addresses
Användarnamn            *       lösenord

chap-secret

# Secrets for authentication using CHAP
# client        server          secret            IP addresses
Användarnamn    Severnamn       lösenord

Dessa ska ju som namnet antyder vara hemliga. Se till att de är det.

chmod 600 pap-secret

För att andra ska kunna köra pppd om man inte är root måste man som sagt göra pppd suid root.

chmod 4775 pppd

Om du inte har fyllt i nameserver är det dags att gör det nu. Använd RedHats Kontroll-panel eller ändra direkt i filen /etc/resolv.config. Om det redan står en nameserver angiven där lägger du bara till ip-adressen till den nameserver du fått angiven av din internetleverantör. I den skall stå din internetleverantörs domännamn, tex hej.se:

domain hej.se
nameserver      196.168.0.1

Nu är det hög tid att pröva. Skriv

ppp-on

på kommandoraden. Då ska scriptet ringa upp och starta ppp-förbindelsen. Om det inte lyckas första gången försök igen. Går det inte alls: kolla i /var/log/messages vad som står där. Citera lösenordet. Läs manualsidorna för chat och ppps, läs PPP-HOWTO, ring din internetleverantör.

Om det funkar så avslutar du ppp genom att trycka <CNTR>-c.

Det är ju inge vidare sätt att avsluta ppp-förbindelsen. Därför bör man i själva verket starta ppp-on med ett "&" efter. Det betyder att den körs som ett bakgrunsjobb och du får tillbaka kommandopromten direkt. Alltså

ppp-on &

Då behövs ytterligare ett skript för att stänga av förbindlesen. Kopiera följande till filen ppp-off och gör den exekverbar:

#!/bin/sh

DEVICE=ppp0

#
# If the ppp0 pid file is present then the program is running. Stop it.

if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# If unsuccessful, ensure that the pid file is removed.
#
        if [ ! "$?" = "0" ]; then
                echo "removing stale $DEVICE pid file."
                rm -f /var/run/$DEVICE.pid
                exit 1
        fi
#
# Success. Terminate with proper status.
#
        echo "$DEVICE link terminated"
        exit 0
fi
#
# The link is not active
#
echo "$DEVICE link is not active"
exit 1

Själva är jag inte särkskilt förtjust i att behöva skriva &. Dessutom innebär att det att promten kommer tillbaka innan processen är färdig. Då vet man inte riktigt när förbindelsen är upprättad. Jag gillar inte heller att låsa upp ett terminalfönster för PPP. Hur göra?

Fråga mig inte varför, men om man i stället för att använda t.ex cua1 direkt använder en länk (som alltid brukar finnas) till cua1 från modem så får man tillbaka komandoprompten när förbindelsen är upprättad. Om du inte har någon /dev/modem så kan du lätt skapa den. Kom ihåg att länka modem till den serieport som ditt modem använder, tex.

cd /dev
ln -s cua1 modem

I ppp-on byter man alltså ut "cua1" mot "modem"

Det finns ytterligare några finesser hos pppd som man kan använda. En av de viktigaste är att pppd kan fås att köra externa script när PPP-förbindelsen kopplas upp och när den avslutas. Dessa script måste ligga i eller anropas från /etc/ppp/ip-up och /etc/ip-down. Dessa måste vara exekverbara och köras som program, det vill säga det måste stå "#!/bin/bash" eller något liknande högs upp i filen. De är dessutom veritabla säkerhetsrisker, eftersom de körs med roots rättigheter och bör därför enbar vara tillgängliga för root. Alltså

chmod 700 ip-up

PPP bär med sig en rad miljövariabler som kan användas innifrån ip-up-scriptet. Dessa är:

        $0 - Skriptets namnt (/etc/ppp/ip-up or /etc/ppp/ip-down)
          $1 - Namnet på nätverks- devicen (such as ppp0)

          $2 - Namnet på  tty device (such as /dev/cua0)
          $3 - Hastigheten (such as 38400)
          $4 - Den lokala ip-adressen.
         $5 - Serverns ip-adress
          $6 - Värdet på 'ipparam'-parametern

Låt oss repetera vilka filer vi använt och hur deras rättigerheter ska sättas.

I /usr/sbin:
-rwxr-xr-x   1 root     root        ppp-on (cmod 755)
-rwxr-x--x   1 root     root        ppp-off (chmod 755)
-rwsr-xr-x   1 root     root        pppd (chmod 4755)

I /etc/ppp
-rw-------   1 root     daemon      chap-secrets (chmod 600)
-rwx------   1 root     root        ip-down (chmod 700)
-rwx------   1 root     root        ip-up (chmod 700)
-rw-rw-r--   1 root     root        options (chmod 664)
-rw-------   1 root     daemon      pap-secrets (chmod 600)

I $HOME/
-rw-r--r--   1 peter    peter        .ppprc (chmod 644)
-rw-------   1 peter    peter        .default.ppp (chmod 600)

Jag har lagt upp ett litet paket med dessa olika filer på ftp.mc.hik.se/pub/users/mia95anp/ppp-paket.tar.gz

Packa upp det i din hemakatalog med

tar -xvzf ppp-paket.tar.gz

och välj och vraka.

8.5 Kolla om saker och ting funkar

Nu är det väl äntligen tid att sätta igång och surfa på nätet. Visst gör det. Men innan dess ska vi åtminstone först titta på några verktyg som är bra att känna till om det uppstår problem någon gång.

netstat

Med netstat kan man kontrollera hur ens nätverksförbindelser ser ut. "netstat" utan något argument ger en lång lista (om man är uppkopplad) på vilka förbindelser som är på väg att etableras och vilka som är etablerade. Detta är bra att ha till hands om man vill kontrollera att man inte avbryter tex en pågående mailöverföring genom att stänga av PPP. Med "-c" som tilläg uppdateras netstats information regelbundet. Man kan alltså i ett fönster hela tiden hålla koll på vad som händer på nätverket. Tex.

[peter@peter peter]$ netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address          Foreign Address        (State)       User

tcp        0      0 felix.abc.se:1068      sparky.signum.se:ftp   ESTABLISHED   peter      

udp        0      0 localhost:domain       *:*                    
udp        0      0 peter.antman.se:domain *:*                    
Active UNIX domain sockets
Proto RefCnt Flags      Type            State           Path

Här kan man alltså se att felix.abc.se (det vill säga min domänadress på Internet) har upprättat en ftp-förbindlse med sparky.signum.se.

Ett bra kommandoargument är "-r" som visar routinginformation. Med det kan man se om PPP-förbindelsen verkligen la upp en defautlroute:

[peter@peter peter]$ netstat -r
Kernel routing table
Destination     Gateway   Genmask         Flags Metric Ref Use   Iface

192.36.170.252  *          255.255.255.255 UH    0   0   0      ppp0
localnet        *          255.255.255.0  U    0    0   2       eth0
loopback        *            255.0.0.0       U    0    0      31 lo

default         192.36.170.252  0.0.0.0    UG    0    0   0     ppp0

Det ska finnas en "default-route" och den ska vara kopplad till PPP. Vi ser av åvanstående resultat att så är fallet.

ifconfig

ifconfig är egentligen ett verktyg för att konfiguerara nätverket. Man kan ge den olika argument. Tex för att konfiguerar nätverks-parametrarna hos ett ethernetkort. Men använt utan några argument visar den information om nätverket.

[peter@peter peter]$ ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0

          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:1355 errors:0 dropped:0 overruns:0
          TX packets:1355 errors:0 dropped:0 overruns:0

eth0      Link encap:10Mbps Ethernet  HWaddr 00:A0:24:8C:DA:92
          inet addr:196.168.1.2  Bcast:196.168.1.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:911 errors:0 dropped:0 overruns:0
          TX packets:507 errors:0 dropped:0 overruns:0
          Interrupt:10 Base address:0x310 

ppp0      Link encap:Point-Point Protocol  
          inet addr:192.36.170.204  P-t-P:192.36.170.252  Mask:255.255.255.0

          UP POINTOPOINT RUNNING  MTU:296  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0
          TX packets:13 errors:0 dropped:0 overruns:0

Vi ska inte gå in på alla detaljer. Men i mitt fall visar ifconfig att jag har tre aktiva nätverksinterface: loopback, ett ethernetkort och en ppp-förbindelse. Den visar också vilka ip-adresser som är kopplade till dessa interface, nätmask och broaadcast-adress. "HWaddr" som syns i fältet för eth0 är ethernetskortets unika adress.

Ping

Med ping kan man på ett snabbt sätt kontrollera om en viss ip-adress verkligen går att nå, samt se om förbindelsen är dålig. ping skickar iväg en rad små paket som den förväntar sig att få tillbaka. Den fortsätter tills man explicit stänger av ping med <CNTR> -c. Tex.

peter@peter peter]$ ping remote.domain
PING atle.abc.se (192.36.170.16): 56 data bytes
64 bytes from 192.36.170.16: icmp_seq=0 ttl=254 time=481.7 ms
64 bytes from 192.36.170.16: icmp_seq=0 ttl=254 time=551.7 ms (DUP!)

64 bytes from 192.36.170.16: icmp_seq=1 ttl=254 time=280.0 ms
64 bytes from 192.36.170.16: icmp_seq=1 ttl=254 time=341.7 ms (DUP!)


--- remote.domain ping statistics ---
2 packets transmitted, 2 packets received, +2 duplicates, 0% packet loss

round-trip min/avg/max = 280.0/413.7/551.7 ms

Om förbindelsen är seg står tex att 25 % av paketen förlorades. Det betyder att 25 procent av tcp/ip-paketen måste sändas om för att en förbindelse ska kunna fungera.

Om ping "låser sig" vid första paketet är det troligt att svaret när man stänger av ping är att 100 procent av paketen gick förlorade. Det innebär att datorn finns någonstans men att den för tillfället inte är nåbar.

Ibland kan det se ut så här:

[peter@peter peter]$ ping alice.gdc.chalmers.se
ping: unknown host alice.gdc.chalmers.se

Då har inte ping kunnat översätta domänadressen till en ip-adress. Chansen är då stor att datorn inte existerar. Det kan emellertid också vara så att även den name-server som vet om hur domännamnet ska omvandlas till ett ip-nummer av någon anledning inte går att nå. Datorn kanske brinner, eller någon ledning - vilket inte är ovanligt - är kanske avgrävd.

Traceroute

Ping är ett synnerligen basalt instrument. Med traceroute kan man dessutom se hur paketen färdas genom nätet. Det kan vara skojigt att ha för att se var någon adress egentligen hör hemma. Men man kan också undersöka var på vägen som en förbindelse tycks upphöra. Alltså var ett fel kan tänkas existera.

[peter@peter peter]$ traceroute lois-lane.mc.hik.se
traceroute to lois-lane.mc.hik.se (194.47.184.10), 30 hops max, 40 byte packets

 1  192.36.170.252 (192.36.170.252)  174.927 ms  176.01 ms  169.273 ms

 2  192.36.170.254 (192.36.170.254)  178.511 ms  166.906 ms  169.274 ms

 3  p2-sto.transpac.net (194.52.0.61)  188.523 ms  188.711 ms  179.261 ms

 4  kth-sto.transpac.net (194.52.1.61)  188.486 ms  227.476 ms  209.297 ms

 5  Stockholm-DGIX.sunet.se (194.68.128.19)  178.454 ms  187.941 ms  189.265 ms

 6  lower-gw.sunet.se (193.10.80.34)  218.512 ms  228.654 ms  209.269 ms

 7  liu34-gw.sunet.se (193.10.86.17)  188.463 ms  197.79 ms  179.263 ms

 8  lund34-gw.sunet.se (193.10.87.17)  198.483 ms  187.794 ms  189.258 ms

 9  Syd-gw.ldc.lu.se (130.235.128.3)  188.527 ms  197.659 ms  189.143 ms

10  hik-gw.hik.se (194.47.160.226)  208.523 ms  188.273 ms  209.239 ms

11  194.47.161.2 (194.47.161.2)  208.709 ms  208.229 ms  239.227 ms

12  194.47.190.2 (194.47.190.2)  208.437 ms  198.145 ms  209.233 ms

13  lois-lane.mc.hik.se (194.47.184.10)  228.656 ms  418.077 ms  219.225 ms

nskookup

Det sista verktyget i vår korta genomgång är nslookup. Det är ett extremt effektivt instrument om man vill ta reda på hur domännamn mappas till ip-adresser och tvärtom. I sin enklaste variant skriver man bara nslookup följt av den domänadress eller det ip-nummer man vill kontrollera:

[peter@peter peter]$ nslookup peter.antman.se
Server:  peter.antman.se
Address:  196.168.1.2

Name:    peter.antman.se
Address:  196.168.1.2

nslookup meddelar då vilken DNS-server den använt och vad den förfrågade domänadressen har för ip-nummer. nslookup kan emellertid användas interaktivs också. Om man bara skriven in nslookup kommer man in i ett radbaserat program där man kan skriva kommandon direkt till nslookup.

[peter@peter peter]$ nslookup
Default Server:  peter.antman.se
Address:  196.168.1.2

> eva.antman.se
Server:  peter.antman.se
Address:  196.168.1.2

Name:    eva.antman.se
Address:  196.168.1.1

> 

Här går att specificera en rad olika villkor. Ja, det går att ladda hem och betrakta en viss servers hela DNS-databas.

Säg att vi vill ha reda på lite mer om en viss domänadress. Om det är ett alisas, vilken mailserver den använder. Det kan man göra genom set type-kommandot. Till set går att använda flera parametrar. Tex

any
MX
A
SOA

Vi forstätter således skriva in kommandon direkt till nslookup

> set type=any
> eva.antman.se
Server:  peter.antman.se
Address:  196.168.1.2

eva.antman.se   preference = 10, mail exchanger = eva.antman.se
eva.antman.se   internet address = 196.168.1.1
antman.se       nameserver = peter.antman.se
peter.antman.se internet address = 196.168.1.2
> 

Här kan vi tillexempel se att eva.antman.se har en egen mailserver, men att peter.antman.se agerar nameserver åt eva.antman.se.

Säg att vi vill ta reda på lite mer om de datorer som en viss nameserver sköter. Då ställer vi den namservern i stället för vår egen som den som ska ge svar på våra frågor. Då vet vi att vi kan få auktoritativa svar. Tex

> server bure.abc.se
Default Server:  bure.abc.se
Address:  192.36.170.10

> set type=any
> bure.abc.se
Server:  bure.abc.se
Address:  192.36.170.10

bure.abc.se     CPU = Sun-SS2   OS = Solaris
bure.abc.se     internet address = 192.36.170.10
abc.se  nameserver = ns.abc.se
abc.se  nameserver = ns.transpac.net
ns.abc.se       internet address = 192.36.170.12
ns.transpac.net internet address = 194.52.1.10

För att komma ur nslookup skriver man exit.

Det går som sagt att ange A, NS och SOA-records också. Det lämnar jag till var och ens experimenterande.

8.6 Vilka program ska jag använda?

Så nu har vi äntligen en fungerande anslutning till Internet, eller kanske till ett lokalt intranet. Men vad ska vi använda kopplingen till? Vad kan man göra, vilka program finns och hur använder man dem? Det ska vi gå igenom här.

Låt mig bara än en gång påpeka. Denna bok lär inte ut hur man administerar och sätter upp en webserver, eller en mailhub, eller en ftp-service. Vi intresserar oss för hur verktygen fungerar ur användarens perspektiv. Om det innebär att vi måste åtgärda något server-sepcifik, då gör vi det, men utan att gå in i detalj på serverdemonerna själva.

Det finns både en uppsjö "tjänster" och en mängd program man kan använda sig av om man har en internetkoppling. Vi ska här ägna oss åt de allra vanligaste, och ur åtminstone mitt perspektiv, mest använda och nyttiga internet-tjänster.

Vi vill kunna sända epost på ett effektivt sätt, hitta e-postadress, logga in på andra datorer, hämta filer, läsa nyheter, surfa och prata med andra direkt. Därför ska vi i tur och ordning gå igenom:

mail

finger

telnet

rlogin

ftp

archie

www

talk

irc

usenet

8.7 Mail

Att kunna skicka epost utan problem är förmodligen det som de allra flesta upplever som viktigas med Internet. Ftp kan vara avstäng en dag, Webservern nere ett halvt dyngn. Det är inget bra, men det fungerar. Men ta ner eposten en kvart, och användarna kommer skrika hög. Mail är internets blodomlopp. Trist och vardagligt måhända, men livsnödvändigt. Om allt annat pajjar så måste ändå mailen fungera. Då går alltid det andra att ordna så småningom.

För den vanlige användaren ska mailen alltså fungera utan att man behöver fundera på vad som händer bakom kulissen. Man ska starta sitt mailprogram, skriva sina brev och skicka dem och få meddelanden när nya mail kommer.

För den som sätter upp sin Linux-burk på ett redan befintligt nätverk kommer det med all sannolikhet redan finnas rutiner för hur eposten ska hanteras. Jag ska senare ge ett exempel på en möjligt lösning. För de som sätter upp en eller ett par Linux-maskiner hemma eller i arbetslokalen, på föreningen eller någon annan stans och kopplar upp sig till Internet via en temporär uppringd förbindelse blir det emellertid lite knepigare. Man är tvunget att ta sig an även vissa uppgifter som egentligen borde skötas i bakgrunden; man måste konfigurera, bända och böja sitt system.

Den som snabbt vill komma igång och skicka epost kan förvisso använda den inbyggda mail-funktionen i Netscape. Då löser man en rad problem. Man hämtar och lämnar posten hos sin internetleverantör, och kan ställa in sin epostadress enkelt i Netscapes inställningar.

Det finns emellertid också nackdelar. Tänk om du inte får igång X-Windows och behöver hjälp, men den enda fungerande mailen du har är Netscape, som ju kräver just X. Dessutom går det att göra så mycket med mailen, sortera den automatisk, ha posten på flera ställen under flera epostprogram. Det fungerar inte särskilt bra under Netscape. Sedan finns ju det viktigaste skälet. Har man valt att installera Linux, då ska man väl också sköta sin epost på klassiskt Unixvis.

Här ställs vi inför flera problem. För det första är ju vår uppkoppling till Internet inte permanent, vi finns inte alltid tillgänglig. Det innebär att epost addreserad till oss inte kan vara adresserad till vår lokala maskin. I stället måste den gå till den postlåda vi har fått hos Internetleverantören

Detta ställer oss i sin tur inför ytterligare två problem. Hur ska vi hämta och skicka post? Hur ska vi lösa dilemmat att min epostadress hos internetlverenatören inte alls stämmer överens med den epostadress som min lokala maskin genererar (kom ihåg - inget Netscape, utan Unixvis)?. Alltså hur lösa att folk kan nå mig på:

anders.nilsson@hej.se

men när jag skickar epost från min Linux-maskin så står det att eposten är skickad från:

anders@tor.hej.se

eller ännu värre:

anders@portmaster-11.hej.se

För att lösa dessa problem måste vi ge oss in på ett av de allra svåraste programmen som finns att konfigurera, Sendmail. Vi ska försöka göra det på det "riktiga" sättet, men med en pragmatiskt inställning. Vi ska få det att funka. Det vi behöver lära oss för att få det att funka lär vi oss, det andra struntar vi i. Jag tänker alltså inte ge en uttömmande beskrivning av Sendmail. Vad värre är, jag kommer utgå från att det redan finns en fungerande Sendmail installerad och konfigurerad. Visserligen ska vi titta lite under huven på Sendmail, men utgångspunkten här är att du redan kan skicka epost till exempel från root till anders, eller vad du nu har för användarnamn.

Visst, jag förstår att ett och annan blir irriterad. Skälen är två. För det första besitter jag inte tillräcklig kunskap - ännu - om Sendmail, för att kunna ge en guidning över hur man från scratch skapar en fungerande Sendmail. Det är inte så många som klarar det. För det andra är - om igen - denna bok är baserad på RedHats distribution av Linux. Och i den ingår en redan fungerande Sendmail, som vi kan utgå ifrån och bända till efter våra behov.

Vad har vå då för behov? Jo, sendmail ska skicka vår epost. Och den ska då se till att det ser ut som om eposten har skickats inte från vår maskin, utan från vår internetleverantörs maskin. Vi måste också välja om vi ska låta vår egen maskin sköta arbetet med att skicka eposten direkt, alltså att den själv tar direkt kontakt med varje mailserver som sköter om de vi skickar epost till, eller om vi bara ska skyffla iväg vår epost till någon annan mailserver, som får sköta det tunga jobbet.

Skicka epost

Sendmail är det överlägset vanligaste programmet för att hantera epost under Unix-system. Sendmail skapades av Eric Allman i början av 1980-talet och var ett försök att skapa ett generellt verktyg som kunde "routa" epost mellan en massa olika mail-system, olika nätverksprotokoll och olika former av adresseringsregler. Kort sagt var Sendmail nödvändig både för att klara den dåvarande anarkin och den antagna framtida snabba tillväxten av nätverk baserade på tcp/ip.

Eric Allens lösning var att skapa en program som inte skulle behöva bekymra sig om saker som nätverksprotokoll, skrivande av epost och inte ens skickandet av epost. Med ett enda undantag sköter andra externa program om själva utbärandet av eposten. Undantaget är kontakt mellan olika mailservrar som talar smpt med varandra över ett tpi/ip-nät. Man kan säga att sendmail motsvarar ett postkontor, själva utbärandet av posten svarar lokala brevbärare för.

För att kunna arbeta effektivt använder man ett "eget språk" för att konfigurerar sendmail. Det är vid första åsynen - och många åsyner därefter - ett mycket svårgenomträngligt språk, med vad vi kan kalla symbolisk representation. Till den som provat på att skriva script eller program kan man säga att sendmails konfiguration innehåller en rad variabler som man fyller med något värde. Både definitionen av vad det är för form av variabel och vad den heter består av enbart en stor eller liten bokstav. Förutom det innehåller konfigurationen en rad omskrivningsregler där dessa variabler används. Dessa ser mest ut som svordomar eller brus. Eller vad sägs om följande:

# strip group: syntax (not inside angle brackets!) and trailing semicolon

R$*                     $: $1 <@>                       mark addresses

R$* < $* > $* <@>       $: $1 < $2 > $3                 unmark <addr>

R$* :: $* <@>           $: $1 :: $2                     unmark node::addr

R:include: $* <@>       $: :include: $1                 unmark :include:...

R$* : $* <@>            $: $2                           strip colon if marked

R$* <@>                 $: $1                           unmark

R$* ;                   $: $1                           strip trailing semi

Vi ska med ett undantag inte ägna oss åt omskrivningsregler. För att göra oss lite bekanta med vad det är vi ska komma att göra bör emellertid något sägas.

Sendmails konfigurationsfil

Det som följer nedan kan säker upplevas som söttande av många som tilltalats av min uttalade vilja att denna bok ska fungera som ett sätt att göra Linux mer användarvänligt. Sendmail är inte användarvänligt, och om du tror att du kommar tappa intresset för Linux om du läser följande, hoppa över det istället och gå direkt på de praktiska exemplen som beskriver några få åtgärder för att få sendmail att funka på en ensam dator kopplad till Internet via en ppp-förbindelse.

Sendmails konfiguration genomförs i filen /etc/sendmail.cf. Den avgör sendmails beteende, med några undantag, och innehåller också referenser till externa program eller filer som sendmail behöver använda. Låt oss titta på en enkel, påhittad och icke fungerande konfigurationsfil:

###############################################################
# Påhittad sendmail.cf fil
#
# 
# 
###############################################################


# Other names for the local host
Cwlocalhost printserver

# This is the name of the mail hub
DHhub.your.domain

# This is the name of the mail relay
DRmailhost

# Vår domänadress
DDyour.domain

# Our official canonical hostname.
Dj$w.$D

## Standard macros
# name used for error messages
DnMailer-Daemon


# Process messages in the background.
Odbackground

# Default permissions for files
OF0600

# Note, we do queue, in case hub and MX's are all down.
OQ/var/spool/mqueue

# Time to live in the queue
OT5d


###   Trusted users
T root daemon

S3 # Skriv om adress så att sendmail kan processa den
R$*<$+>$*       $2              basic RFC822 parsing

S0 # Vart ska det sändas
RS-                             $#local $: $1
RS-@$j                  $#local $: $1
R$-@$=w                 $#local $: $1
R$-@$+                $#smtp $@$R $:$1@$2



S20 # local users made to look like they are from the hub
R$-             $@ $1 @ $H      user => user@hub
R$-@$j           $@ $1 @ $H     user@FQDN => user@hub
R$-@$=w          $@ $1 @ $H      user@thishost => user@hub

##################################################
###   Local and Program Mailer specification   ###
##################################################

Msmtp, P=[IPC], F=mDFMuCX, S=20, R=0, A=IPC $h
Mlocal,         P=/usr/bin/procmail, F=lsDFMAw5:/|@ShPfn, S=20/30, R=20/40,

                T=DNS/RFC822/X-Unix,
                A=procmail -a $h -d $u
Mprog,          P=/bin/sh, F=lsDFMoeu, S=10/30, R=20/40, D=$z:/,
                T=X-Unix,
                A=sh -c $u

Det här ser, för den som aldrig sett en sendmail-konfigurationsfil, förstås extremt knepigt ut. Låt oss börja med det vi tidigare berörde, nämligen att i konfigurationsfilen anges värdet till en rad varabler. Titta på första raden:

# Other names for the local host

Cwlocalhost printserver

Den inleds med ett stor "C" följs utan mellanrum av ett litet "w" och sedan av ett par namn. "C" är här ett sätt för sendmail att tala om att vi definierar variabeln "w" till något, samt vilken typ av variabel "w" är. "C" står för "class". Det innebär att variabeln kan innehålla flera värden, eller namn.

Variabler, alltså "w" och andra, kan vara både stora och små bokstäver. Det som skiljer stora och små är att små egentligen är variabler som sendmail själv tar reda på och stora är sådana som enbart existerar om de definieras i sendmail.cf. Det hindrar inte att de små går att definiera om.

Sendmail försöker inledningsvis ta reda på vad datorn har för "hostname" och sätter "w" till det. Här möter vi emellertid ett problem direkt. Sendmail har nämligen tre sett att definiera variabler ( av vilka vi berör två här). Ett är det vi ser ovan, nämligen som en klass som kan hålla flera värden. Det andra sättet är att definera en variabel så att den bara kan hålla ett värde. Denna definition sker genom att sätta bokstaven stora "D" först i en rad. Varför denna skillnad? Man kan peka på två skäl. För det första är alfabetet inte oändligt, utan begränsat. Men det viktigaste är att alla de definitioner vi gör så småningom kommer att åberopas innifrån tex olika omskrivningsregler. Hur ska vi då veta hur vi ska använda en viss variabel. Jo, enkla definitioner och klass-definitioner åberopas på olika sätt. En enkel difinition åberopas genom att sätta "$" framför den aktuella variabeln, alltså en viss bokstav. Detta säger åt sendmail att byta ut tex "$w" mot datorns "hostname". En klassvariabel däremot åberopas genom att sätta dit både "$" och "=", alltså tex $=w. Detta säger åt sendmail att variabeln innehåller flera namn och att sendnmail i tur och ordning ska byta ut "$=w" mot dessa.

Det här kan ställa till med en del bekymmer, som i vårt exempel ovan. Sendmail lagrar alltså vårt officiella "hostname" i den enkla variabeln "w", vilken vi kan åberopa med "$w". Om vår dator dessutom heter flera saker så lagra vi dem i klassvariabeln "w", vilken vi oberopar med "$=w". Längre fram ska vi använda detta senare sätt.

Ser vi lite längre ner i exempelfilen finner vi följande två definitioner:

# Vår domänadress
DDyour.domain
# Vår officiella fullt kanoniserade domänadress.
Dj$w.$D

I den första ser vi två stora "D"n. Enligt den tidigare beskrivningen förstår vi då att det andra "D"-et är en variabel vi själva definierar. Det första "D"-et talar om just att vi vill definera D till "your.domain". Det säger också att detta är en enkel variabel, som bara innehåller ett namn.

Vi använder nu den i nästa steg. "j" är en intern variabel som sendmail normalt ska kunna bestämma värdet till själv. Ibland kan detta emellertid misslyckas. Ibland vill vi inte att den ska ta vårt officiella domännamn. Då kan vi definera den själv. I exemplet använder vi den internt definerade enkla variabeln "w" samt vår egendefinerade variabel "D". "w" är alltså inte samma "w" som vi definerade i exemplet ovan. Varför? Jo, därför att vi kallar på den på ett sådant sätt att sendmail vet att det inte är en klassvariabel, alltså "$w".

Säg att vårt "hostname" är "myhost". Vi har på raden ovan definerat vårt domännamn till "your.domain". Vi väljer nu att själva definera "j" genom raden "Dj$w.$D". Alltså, vi anger j till en enkel variabel som ska hämta sitt innehåll från de enkla variablerna "w" och "D". I vårt exempel ersätts dessa med (eller mer korrekt expanderas dessa) till "myhost.your.domain", vilket således blir "j"s värde.

Betraktar vi vår exempelfil mera och tittar lite längre ner ser vi rader som föregås av bokstaven "O". Tex:


# Process messages in the background.
Odbackground

"O" står för "options". Genom att ange O och ytterligare olika bokstäver anger vi en rad möjliga bettende för sendmail. I raden ovan talar vi till exempel om att vi vill att sendmail ska processa mail i bakgrunden. I raden:


# Note, we do queue, in case hub and MX's are all down.
OQ/var/spool/mqueue

Dessa är så kallade "options" som sätter olika former av beteenden, till exempel var vissa viktiga filer som sendmail måste använda ligger. Det finns en mängd möjliga "options". Vi kan inte gå in på dessa här, utan pekar bara på att de finns. Värdet till en option kan sättas lite olika, bereonde på vilken typ av option det är. Det kan vara en sträng, som i "background", eller en fil som i /var/spool/mqueue, eller en boolsk variabel som anger om någon viss option är sann eller falsk.

I sendmail.cf anger vi således en rad variabler och optioner, och talar om hur dessa ska se ut. I konfigurationsfilen måste vi också tala om för sendmail vilka verktyg den ska använda när den skickar mail och hur dessa verktyg ska bete sig. När sendmail till exempel tar emot ett mail och bestämmer sig för att detta mail ska till en lokal användare så måste den anropa ett annat program för att utföra själva operationen. Det programmet måste definieras i konfigurationsfilen. Det sker genom bokstaven "M" samt en angivelse av vilken typ av metod det är sendmail ska använda sig av. Tex:

Mlocal

anger att sendmail känner till en metod att skicka mail på som heter local och som kan anropas av sendmail. En mer fullständig definition kan se ut så här:

Mlocal,         P=/usr/bin/procmail, F=lsDFMAw5:/|@ShPfn, S=10, R=20/40,

                T=DNS/RFC822/X-Unix,
                A=procmail -a $h -d $u

I denna definition anges en massa information som sendmail behöver när den ska skicka epost lokalt. Definitionen talar till exempel om att den ska använda programmet procmail (P=), den anger en rad villkor, flaggor, som gäller för detta program (F=), den anger också speciella omskrivningsregler som ska tillämpas på sändarens (S=) och mottagarens (R=) adresser (vi återkommer till detta). En definition måste göras för varje metod att skicka eposten.

I vårt exempel har vi en metod att skicka över ett tcp/ip-nät när där sendmail själv sköter överföringen genom det så kallade smtp-protokoller, vi har en metod att leverera eposten lokalt och en metod att skicka breven direkt till ett program (vilket vi inte använder).

Även om vår konfigurationsfil inte fungerar som den ser u nut, är den ändå skapad för att tjäna som ett exempel. Vad är det då den ska göra? Jo. Den ska skicka all utgående post till en central mailserver, som sedan får ta hand om det tunga arbetet att vidareförmedla posten till alla ställen den ska till. Alltså i praktiken etablera en kontakt med varje mailserver (eller individuell dator på Internet) som vi skickar epost till. Denna centrala mailserver får också äran att ta emot all epost addreserad till oss. Vi hämtar den sedan med någon annan metod. Men för att det ska funka så måste den centrala mailserverns adress stämplas som avsändare. Om vi använde adressen till vår egen dator så skulle ju den sändande datorn försöka skicka mailen direkt till oss i ställe. Det får således inte stå t.ex anders@myhost.your.domain. I stället ska det står anders@hub.your.domain. För att lösa detta problem måste vi se till att sendmail skriver om avsändaradressen.

(Detta är inte riktigt sant. Utan att gå in på detaljerna så skulle det gå att ange den egna datorn - "hosten" - som sändare och ändå få all post skickad till den centrala mailservern genom att i DNS-tabellen ange ett MX-record för vår host som pekar på mailservern. Detta är emellertid överkurs. Dessutom kan det ur säkerhetssynpunkt vara bra att dölja de enskilda datorernas namn.)

Vi har dessutom ytterligare ett krav. Nämligen att lokal post, från till exempel anders till root, eller från användaren fru till anders, inte skickas till den centrala mailservern utan hanteras lokalt.

Det är således dags att titta på hur sendmail sköter omskrivning av adresser. Sendmails omskrivningsregler har tre huvudsakliga syften: att modifiera epost-adresser, att upptäcka fel i email-adresser och att välja en metod att skicka eposten.

Ett viktigt skäl till att de är så komplexa är att sendmail måste hantera en rad olika sätt att skriva adresser, särskilt olika epost-programs vanor eller ovanor att specificera epostadressen på olika sätt.

Omskrivningsregler sepcificeras som olika kluster av regler, som alla har olika roller. En sådan kluster deklarerars genom stora "S" följt av en siffra, tex:

S3

Varje enskild omskrivningsregel inom ett kluster sepcificeras sedan genom den inledande bokstaven "R", följt av en konditionssats som försöker matcha en viss adress, kallad LHR (Left Hand Rule). Denna följs av en omskrivningsregel, kallad RHR (Right Hand Rule), som skriver om adressen på ett visst sätt. Sist kan en kommentar göras som beskriver vad regeln gör. Mellan LHR och RHR och mellan RHL och kommentaren måste det vara en tab, alltså inget mellanslag.

Principen i en omskrivningsregel påminner om en om-så-sats. Om LHR är sann, det vill säga om tecknen i den vänstra regeln beskriver den epostadress sendmail vill kontrollera genomförs omskrivningen i RHL, det vill säga den högra regel. (Egentligen är det en while-do konstruktion, villket innebär att adressen kontrolleras ytterligare en gång mot LHR efter omskrivning. Detta kan emellertid kontrolleras genom att först i RHL ange antingen $:, vilket låter adressen gå vidare direkt till nästa regel, eller @:, vilket gör att sendmail hoppar över resten av hela regel-klustret.)

För att sendmail så effektivt som möjligt ska kunna genomföra denna matchning finns en rad symboler definierade som har olika mening. Låt oss titta på regelklustret S3 i vår ecempelfil:


S3 # Skriv om adress så att sendmail kan processa den
R$*<$+>$*       $2              basic RFC822 parsing

Vi ser då att LHR ser ut så här "$*<$+>$*". Vad i all sin dar betyder detta? Vi måste först veta vad t.ex "$*" eller "$+" betyder. $* står kort och gått för "träffa ingen eller flera tecken". $+ står för "träffa ett eller flera tecken". Ett tecken i sendmail står inte för en bokstav eller siffra utan för en hel stäng. Vi ska inte gå in på detaljerna. Men ungefär så här funkar det. Adressen anders@myhost.my.domain delas intern i sendmail upp i "anders" "@" "myhost" "my" "domain". Var och en av dessa citerade bitar är ett tecken - eller en token som Eric Allman kallar dem.


OperatorBeskrivning
$*Träffa ingen eller flera tecken
$+Träffa ett eller flera tecken
$-Träffa exakt ett tecken
$
Träffa exakt noll tecken
$=Träffa vad som helts i en klass-variabel
$~Träffa vad som helst som inte är i en klassvariabel

Raden "$*<$+>$*" betyder alltså att en adress som innehåller inget eller något samt tecknet "<", ett eller något tecken finns före tecknet ">" samt inget eller något finns efter tecknet ">". Knepigt. Vi tänker oss en mycket vanlig form av adress som många mailprogram skapar:

Anders Ingen <anders@myhost.my.domain>

$* < $+ >$*

Som vi ser träffar $* "Anders Ingen". "<" respektive ">" träffar sina motsvarigheter. $+ kräver att något eller mera finns och träffar därför anders@myhost.my.domain. Den sista $* träffar ingenting, men enligt sitt beteende spelar det ingen roll.

För att kunna göra omskrivningar har sendmail en förmåga att hålla reda på och numrerar träffarna i den vänstra regeln. Den hoppar över rent bokstavliga träffar, träffarna för < och > numreras därför inte. Den första träffen får däremot nummer 1, i vårt fall Anders Ingen, och den andra träffen får nummer 2, alltså anders@myhost.my.domain.

Nu kan vi i den högra omskrivningsregeln bestämma hur vi vill skriva om vår adress. Om vi ville ha Anders Ingen skulle vi ange träff nummer ett som $1. Det vill vi emellertid inte. Vi vill ha en epostadress som vi kan behandla senare, därför väljer vi träff nummer två, $2.

Vårt omskrivningskluster S3 producerar alltså av Anders Ingen <anders@myhost.my.domain> epostadressen anders@myhost.my.domain. Denna kan den senare använda.

Omskrivningsklustren kan inte skrivas hur som helst. Det går att ange egna, men en viss uppsättning omskrivningskluster måste alltid finnas. Sendmail har helt enkelt en metod att behandla adresser som måste följas.

Sendmail börjar alltid med att köra adressen genom S3. Där skrivs adresserna om på ett sådant sätt att sendmail kan behandla dem i andra regler. Alla adresser går sedan till regelkluster S0. Där avgörs två saker. Dels hur brevet ska skickas, alltså vilket transportmedel sendamil ska använda. Dels vilka extra omskrivningsregler som sendmail ska använda för just det transportsättet.

Samtidigt skickas adresserna genom någon av regelsklustren 1 eller 2. Sändarens adress skickas genom regelkluster 1. Beroende på vilken ytterligare regel som angavs i transportmedlet (S=) processas även den regeln. Mottagarens adress skickas genom regelkluster S2. Även där sker ytterligare behandling enligt den regel transportmedlen anger för mottagaradressen (R=). I de flesta konfigurationsfiler behövs varken S1 eller S2. Enbart transportmedlets omskrivningsregler används.

(I de senaste versionerna av sendmail V8 är det mer avancerat än så. S= och R= i transportmedlen kan ange en omskrivningsregel för det så kallade kuvertet och en omskrivningsregel för det så kallade "huvudet" (headern). Det skrivs då tex S=20/40.)

Till slut körs alla adresser genom regelkluster 4, där de återställs enligt vissa regler.

Det är vanligt att andra regler specificeras än dessa. Det handlar då ofta om regelrutiner som unytjas på många ställen, som en sorts subrutiner. Det är möjligt att i en RHL anropa en annan regel för viss omskrivning.

Nu återgår vi till exemplet. S3 har skrivit om vår adress. Nu körs adressen till S0 för att transportmetod ska bestämmas.

S0 # Vart ska det sändas
R$-                             $#local $: $1
R$-@$j                  $#local $: $1
R$-@$=w                 $#local $: $1
R$-@$+                $#smtp $@$R $:$1@$2

I S0 gäller speciella regler - ja, jag sa ju att sendmail är knepigt att förstå sig på. Det beror på att någon omskrivning inte görs den högra regeln. I stället avgörs transportmetod där. Samt skickas ett antal parametrar till det program som ska sköta om själva transporten.

I den högra regeln pekar "$#" utan stransportmetod. Där anges någon av de metoder som definierades med "M". "$@" i den högra regeln pekar ut vart posten ska skickas och "$:" anger vem den är till, alltså personen i fråga.

I de vänstra reglerna ser vi en metod vi tidigare berört. Nämligen att hämta in ett värde definierat någon annan stans för att användas i regeln. Låt oss titta på vad S0 gör. Först måste vi säga något om en begränsning. Vi utgår här från att användarnamnet bara består av ett ord, samt att vi bara har två metoder att skicka eposten. Allt som inte ska till någon lokal användare skickas till samma ställe, mailservern.

Först börjar vi med att filtrera ut alla lokala adresser. I S0 gäller att vid träff upphör sendmail att söka vidare. I första regeln filterar vi därför ut adresser som enbart innehåller ett användarnamn med "$-" och skickar den lokalt. Detta är emellertid inte nog. Vi vill också att adresser angivna med våra olika namn för maskinen, det fullt kvalificerade domännamnet, localhost, printserver osv, ska skickas lokalt. Genom att använda de fördefinierade variablerna kan vi göra detta.

I andra regeln söker vi till exempel efter adresser som innehåller ett användarnamn samt vårt full kvalificerade domännamn. Detta hittar vi i variabeln "j", därför "R$-@$j". $- träffar användarnamnen, @träffar @ i adressen och $j träffar vårt FQDN. Ingen annan adress ger svaret att LHR är sann.

Här ser vi också ett speciellt villkor för trensportmedlet "local". Vi behöver inte ange någon adress att sända till, alltså ingen "@:", eftersom leveransen sker på vår egen maskin. (Detta kräver att flaggan "l" är satt i transportmedlets F=angivelse.)

I tredje regeln testar vi i stället mot de andra namnen vi är kända under och skickar även dessa lokalt. Alla andra adresser ( som dock måste uppfylla regeln att ha något till vänster om @ och något till höger) skickas i stället till vår mailserver.

Eftersom alla brev som inte ska skickas lokalt ska skickas till samma centrala server behöver vi inte plocka ut adressen dit de ska skicka. Den kan i stället anges med vår redan fördefinierade variabel som innehåller namnen på mailservern, nämligen "R". Därav "$@$R" i den högra delen av fjärde regeln.

Däremot är vi tvungen att behålla hela adressen i användardelen, alltså "$:" därför att vår mailserver behöver detta för att kunna skicka brevet vidare. Den innehåller ju med stor sannolikhet inte den person vi försöker skicka till.

Säg att vi skickar ett mail till eric@barkeley.com. Varken regel 1 eller 2 eller 3 träffar denna adress. Däremot regel fyra träffar.

eric @ barkeley.com     =>      smtp    mailserver eric@barkeley.com    

$-    @   $+            =>      $#smtp  $@$R            $:$1@$2

Vi ser här att den vänstra regeln utvärderas till sann. Därför anges transportmetoden till smtp. Adressen brevet ska skickas till hämtas från variabeln R och innehåller namnet på vår centrala mailserver. Som användarnamn skickas hela epostadressen.

Nu har vi bara ett moment kvar. Vi satte ju upp som krav att all utgående post skulle stämplas med vår gemensamma domänadress. Namnet på vår lokala dator skulle gömmas. Om vi åter betraktar vår definnition av smtp ser vi att där anges en omskrivningsregel som ska tillämpas på sändaren.

Msmtp, P=[IPC], F=mDFMuCX, S=20, R=0, A=IPC $h

Vi ser att den anges till S20. Innan brevet går iväg kommer således avsändarens adress att skrivas om enligt regel-kluster 20. Hur såg den ut?


S20 # local users made to look like they are from the hub
R$-             $@ $1 @ $H      user => user@hub
R$-@$j           $@ $1 @ $H     user@FQDN => user@hub

R$-@$=w $@ $1 @ $H user@thishost => user@hub

Vi använder här samma teknik som i S0 för att ta ut alla olika former av lokala adresser, det vill säga avsändaradresser, som vi kan tänka oss (i exemplet). Alla dessa olika former ska skrivas om till en och samma form av adress. Den lokalal användaren följt av vår gemensamma domänadress. Denna domänadress har vi definierat i variabeln H. Vi hämtar således in den i den högra regeln genom att ange "$H".

Låt oss ta ett exempel. Säg att anders skickar ett brev. Epostprogrammet anger anders adress till:

anders@myhost.your.domain.

Men vi vill att när brevet väl skickas ska det i stället stå:

anders@your.domain

I S20 löser den andra regeln uppifrån detta problm. I den vänstrat regeln fångar $- upp anders, @ fångar upp @ och $j hämtar in vår fullt kvalificerade domännamn, i detta fallet myhost.your.domain. Vi får således en träff och går vidare till den högra omskrivningsregeln. Vi inleder den med "@:", vilket som vi minns innebär att resten av omskrivningsklustret hoppas över när väl omskrivningen gjorts. Vi vill sedan ha kvar anders, vilket vi löser genom att sätta in den första träffen "$1", sedan sätter vi ditt @ och hämtar in vårt gemensamma domännnamn genom variabeln $H.

Adressen är omskriven och både vår uppgift och vårt exempel är därmed klart.

Innan vi går vidare till praktisk tillämpning av våra nyvunna kunskaper måste emellertid något viktigt poängteras. Det är inte många som skriver en sendmail.cf-fil på egen hand från grunden. Att ändra direkt i sendmail.cf kan man göra om det är några få ändringar som ska genomföras. Annars låter man bli.

Fast hur ska man då skapa en anpassad konfigurationsfil? Eftersom sendmail är så svår att konfigurerar har det skapats ett hjälpmedel som hjälpter till att skapa en anpassad senmail.cf. Dessa återfinner man i /usr/lib/sendmail-cf/. Hjälpmedlet består av något som kan kallas en makromotor, m4. Denna utgår ifrån en fil där man anropar en rad andra filer, eller makron, som innehåller redan förskrivna delar av en sendmail.cf-fil.

I /usr/lib/sendmail-cf/cf/ ligger en rad redan färdigskrivna exempelmakron som man kan använda som grund för en egen konfiguration. Dessa heter något.mc. I RedHats distribution ligger till exempel en fil som heter redhat.mc och som är den mall som den befintliga sendmail.cf har skapats ur. (Det kan vara värt att påpeka att redhat.mc är lite lurig. I RedHats distribution har man nämligen skapat en anpassad form av en av de åberopade makrona, nämligen ostype/linux. Det har man gjort för att byta ut den lokala transportagenten till procmail, ange vägen till den till /usr/bin i stället för det brukliga /usr/local/bin.)

Genom att specificera sina krav i en fil med ändelsen mc kan man med hjälp av programmet m4 skapa en fil som heter detsamma som ursprungsfilen men med ändelsen cf. I det enklaste tillvägagångssättet gör man bara så här:

cd /usr/lib/sendmail-cf/cf
m4 foo.mc > foo.cf

Foo står här för filens namn. Sedan måste man kopiera denna nya konfigurationsfil över den gamla. Spara för guds skull den gamal.

cd /etc
cp sendmail.cf sendmail.cf.orig
cp /usr/lib/sendmail-cd/cf/foo.cf /etc/sendmail.cf

Du måste förstås vara root när du gör allt detta.

Ett problem kan uppstå. För att ovanstående enkla tillvägagångssätt ska funka måste följande rad finnas med i foo.mc:

include(`../m4/cf.m4')

Om den inte finns det måste man inkludera "cf.m4" i själva m4-kommandot:

m4 /usr/lib/sendmail-cf/m4/cf.m4 foo.mc > foo.cf

Anpassa sendmail till våra behov

Nu är det hög tid att anpassa sendmail efter våra behov. Tyvärr måste jag omedelbart komma med en brasklapp. Sendmail kan, som vi såg ovan, böjas och bändas nästan i det oändliga. Det finns till exempel 70 olika "options" man kan specificera. Dessutom är det tämligen lätt att tänka sig en hel rad olika former av lösningar som snabbt adderar upp till en massa bökande med konfigurationen.

Vi ska här i första hand inrikta oss på en lösning som passar en linux-dator kopplad till internet via en uppringd ppp-förbindelse.

Det viktigaste med en sådan typ av internetförbindelse är att den inte är permanent. Eftesom den inte är permanent kan vi inte använda den som vår mailserver, vi kan inte ta emot eposten själva. Det måste i stället ske någon annan stans. I nästa avsnitt ska vi gå igenom en metod att hämta posten. Men nu ska vi istället koncenterar oss på själva sändandet.

Även om vi inte är permanent uppkopplde går det alldeles utmärkt att skicka eposten direkt från vår egen dator när vi väl är uppkopllade. Vi behäver inte ens vara uppkopplade när vi skickar själva brevet. Om sendmail inte kan etablera kontakt med de ställen dit den vill skicka posten så köar den posten i stället, för att skicka det vid ett senare tillfälle. Själva sändandet är därför inget problem (däremot kan det vara lite långsamt - för om vi inte viddar vissa åtgärder kommer den försöka göra ett DNS-uppslag, och misslyckas med det).

Däremot är den ansändare som stämplas på brevet ett problem. Säg att du skickar iväg ett brev från din lokala dator utan att göra något åt sendmail. Det kommer då stå ungefär så här i brevet:

From: anders@myhost.your.domain

Om den du skickar till då väljer att svara på ditt brev genom att ange "repy" så skickas hans svar till din lokala dator. Har du tur så är du för tillfället uppkopplad, och du har konfigurerat sendmail och DNS så att sendmail verkligen kan ta emot brev. Du får ditt brev. Men om du inte är uppkopplad. Ja, med ytterligare lite tur köar den sendande sendmailen ditt brev och lyckas försöka någon annan gång och kommer fram då i stället. Har du otur så kommer brevet i retur till den som sänd,e med meddelandet att adressen är okänd. Det är kort sagt ingen säker, effektiv eller särskilt snäll metod (de maskiner som skickar till dig blir extra belastade).

Därför ska du se till att din avsändaradress pekar till din internetleverantör eller någon annan mailserver som är permanent ansluten till Internet. Det enklaste sättet att lösa detta är att använda en extra Header som heter Reply-to:. Denna går ofta att ange i mailprogrammet. Då kan då få det att stå tex:

Reply-to: anders@your.domain
From: anders@myhost.your.domain

Detta är emellertid inte ett särskilt bra alternativ. Den som svarar på ditt brev kommer få en fråga om han eller hon ska svara på Reply-to adressen i stället. Det är lätt att göra bort sig här. Dessutom finns det mailprogram som inte hanterar Reply-to. Du måste dessutom ändra i alla mailprogram du använder. Det allvarligaste problemet är emellertid - tycker jag - att det stör mailinglistor. Utan att noggrant studera From: och Reply-to: är det mycket lätt hänt att ett svar på ett inlägg hamnar på fel ställe. Många gånger försvinner möjligheten helt att svara direkt till listan. Ta följande exempel på ett brev från redhat-list:

Reply-to: redhat-list@redhat.com
From: anders@your.domain

Om Anders i vårt exempel i stället för att ordna till sendmail använt den enklare vägen är risken stor att vi i stället får följande:

Reply-to: anders@your.domain
From: anders@myhost.your.domain

Inget bra alls. Därför - mot sendmail.

Som tur var är det extremt enkelt att fixa till detta problem. Det ända som måste göras är att tala om för sendmail att maskera all utgående mail med ett visst namn. Detta görs genom att definiera variabeln "M" till den domänadress du vill vara känd under (och till vilken posten ska gå). Säg att vi vill att myhost.your.domain ska maskeras med your.domain. Leta redas på följande rad i sendmail.cf eller skriv dit den själv:

# who I masquerade as (null for no masquerading) (see also $=M)
DMyour.domain

Och skriv dit "your.domain", alltså inte bokstavligen - utan din egen domänadress) direkt efter "DM".

Detta går även att göra med hjälp av m4-makrot. Leta upp det makro som användes till att skapa din befintliga sendmail.cf-fil, tex redhat.mc. Kopiera den till ett annat namn, tex anders.mc och lägg in följande:

MASQUERADE_AS(`your.domain')

Och följ instruktionerna som jag redan beskrivit ovan för hur man genererar cf-filer med m4. Tänk också på att namnet måste anges med ett enkelt bakåtvänt citat-tecken till höger, och ett enkelt omvänt citattecken till vänster. Du hittar dessa dels på tangenten bredvis "?" dels bredvid "Ä".

Kopera den över /etc/senmail.cf, som du gjort en bakcup av. Så var det klart.

Nej, försesten. Sendmail läser enbart in sin konfiguration vid uppstart. Vi måste alltså starta om sendmail. Det går att göra på tre sätt. Antingen kan vi starta om hela datorn, vilket ju inte är så praktiskt. I stället kan vi döda sendmail med kill-komandot. För att göra det måste vi ta reda på två saker. Dels sendmails processnummer, dels vilka kommandon som vi måste ge till sendmail vi uppstart.

Ett sätt att göra detta är att dels använda kommandot ps-ax och leta reda på sendmails nummer. Sedan får vi leta runt i de olika /etc/rc.d/-filerna för att hitta var sendmail startas någonstans och vilka kommandon som anges. Ett annat är att leta reda på sendmails så kallade lock-fil, en fil med namnen .pid efters sig. Ett vanligt ställe som sendmail brukar placera den är /var/run/. Vi kollar vad det finns i i den:

cat /var/run/sendmail.pid
150
sendmail -bd -q1h

Tack för det. Vi fick både processnumret och vilka kommandon vi ska använda. Vi gör alltså så här:

kill 150
sendmail -bd -q1h

RedHat är det hela ännu enklare. Där är initieraingsprocessen nämligen skriven med en rad skript som kan anropas med argumentet stop och start. För att stanna och köra igång sendmail gör vi alltså följande:

/etc/rc.d/init.d/sendmail.init stop
 /etc/rc.d/init.d/sendmail.init start

Nu är vi klara - med denna uppgift. För visst har vi ännu ett problem. Chansen är tämligen stor att ditt användarnamn hos din internetleverantör skiljer sig rätt ordenligt från det användarnamn du vill använda lokalt. Ja, då kanske till och med kan få epost skickad till din internetleverantör med ditt fulla namn, tex anders.ingen@your.host.

Visst, du har full kontroll över din Linux-maskin. Det är fullt möjligt att lägga upp ett användarkonto på din lokala maskin som heter samma sak som det på din mailserver. Fast att döpa ett användarkonto till tex anders.inge är inte särskilt praktisk. Vi måste helt enkelt hitta en metod att också byta ut själva användarnamnet.

I de senaste verionerna av sendmail finns en (ännu experimentell) metod att göras detta, som är tämligen enkel, nämlige User Data Base. Problemet med den är att flera emailprogram, som tex Pine och exmh, inte skriver avsändaradressen på ett sätt som kan hanteras av User Data Base. Vi måste om vi tänker använda dess program därför tillföra ett litet hack.

Men låt oss börja med User Data Base. Udb är en mer komplex variant som kan ersätta aliasfilen. Vi har hittils inte berört alias över huvud taget. Denna är en fil som ligger i /etc där man kan ange alternativa användarnamn. Säga att jag faktiskt vill vara känd under hela mitt namn och att mailen kommer direkt till mig. Då är det möjligt att ange ett alias i /etc/alias. Tex

anders.ingen: anders

När sendmail processar inkommande brev kollar den i aliasfilen om den ska ersätta ett viss användarnamn med ett annat. Detta fungerar emellertid enbart för inkommande post. Udb är skapat för att funka både med utgående och ingående post. Den ska i framtiden också kunna innhålla mycket mer information om varje användare.

Om man specifierar udb som en "option" kommer sendmail automaiskt att slå upp användarnamnen både i alias och i den specificerade udb-databasen. Vi måste således lägga till denna information i sendmail.cf:

# list of locations of user database file (null means no lookup)
O UserDatabaseSpec=/etc/userdb.db

Kolla om du har den angiven någonstans redan. Eller skriv in exakt som det står ovan.

Nu måste vi också skapa en databas som sendmail kan använda. Denna har ett specielt format:

user-name:fieldname     alias

För tillfället finns bara två värden som går att använda för fieldname:

maildrop
mailname

Maildrop anger uttdelningsadressen för en viss användare. Vi kan således använda den som ett alias genom att skriva på följande sätt.

anders.ingen:maildrop           anders

Epost adresserad till anders.ingen kommer sändas till användarkontot anders.

Vi kan också göra det åt andra hållet.

anders:mailname anders.ingen

På så sätt får vi sendmail att konvertera sändarens adress, i detta fall från anders till anders.ingen. Det finns ingenting som hindrar att vi passar på att maskera även vår "host" här. Vi kan skriva;

anders:mailname anders.ingen@your.domain

På detta sätt har vi gjort den tidigare varianten för maskering onödig. Det finns givetvis både fördelar och nackdelar med denna metod. Fördelen är att man kan låta vissa användare pasera omaskerade. Finns de inte in databasen så påverkas de nämligen inte. Å andra sidan. Om man vill att alla ska maskeras är det förmodligen lämligare att göra det på vårt tidigare vis.

Alltså. Du skapar en fil som heter /etc/userdb och skriver in de namn du vill maskera enligt ovan redovisade mönster. Tex:

anders.ingen:maildrop           anders
anders:mailname         anders.ingen@your.host

Sedan måste denna texfil konverteras till en databasfil. Det gör man så här:

makemap btree /etc/userdb.db < /etc/userdb

Då skapas en databasfil med namnen userdb.db som sendmail använder för att slå upp namnen i.

(I de nyare versionerna av sendmail är det allt som behövs. I versioner tidigare än 8.7 måste man dessutom lägga till utterligare en egenskap: notstick. Vi ska inte gå in på detta mer i detalj. Men lägg in följande rad i ditt m4-makro och skapa en ny fil:

FEATURE(notsticky)

Så ordnar det sig.)

Om du använder till exempel elm eller Applix-mail är detta allt som behövs. Själv använder jag flitigt Pine och exmh, det är dessutom de mailprogram jag kommer beskriva lite mer i detalj längre fram. Därför måste vi fixa sendmail så att utbytet av namn fungerar även med dessa program.

Vi ska då använda två egenskaper hos sendmail. Dels att det är möjligt att på egen hand specificera en extern databas och att man inifrån omskrivningsregler kan göra uppslag i denna databas.

Vi måste därför börja med att specificera en databas. Vi använder den vi har och lägger till följande rad i sendmail:

# Define our usrdb file for Pine (and hopefully exmh) rewrites
Kuserdb btree -o /etc/userdb.db

Sedan måste vi skapa omskrivningsregler som hämtar information från vår databas och som fungerar med Pines pch exmhs sätt att skriva sändaradresser. Nu utnytjar vi det faktom att sendmail alltid skickar avsändaradresserna genom omskrivningskluster 1 och att detta kluster i princip aldrig finns fördefinierat. På lämpligt ställe ligger vi in denna omskrivningsregel. Egentligen spelar det ingen roll var vi lägger det, så länge vi inte placerar det mitt i något annat kluster. Ordningen spelar ingen roll för sendmail. Jag har lagt mitt efter S0.

###########################################################################

### Ruleset 1, rewrite sender header & envelope                         ###

###########################################################################

#Thanks to Bjart Kvarme <bjart.kvarme@usit.uio.no>. From FAQ
S1
R$- < @ $=w . > $*      $: $1 < @ $2 . > $3 ?? $1  username@localhost?

R$+ ?? $+               $: $1 ?? $(userdb $2 : mailname $: @ $)
R$+ ?? @                $@ $1                           Not found
R$+ ?? $+               $>3 $2                          Found, rewrite


#NOTE      ^^^^^^^^^^       ^^^^^^^^^^^^^^^^^^^^^^^^^
#          Use Tab Characters  Use Tab Characters in these regions
# to make three columns (the line with "mailname" only has 2 columns).

Skriv in det eller kopiera det. Tänk emellertid på att det måste vara en tab mellan de olika kolumnerna. I alla rader utom nummer två är det tre kolumner, och det ska följriktligen vara en tab mellan kolumn ett och två, och mellan kolumn två och tre.

Starta om sendmail. Heruka - visst funkar det.

Det finns som var och en förstår många fler varianter och tillägg som kan göras. Vi ska beröra några.

Det är till exempel möjligt att använda den centrala mailserverns som ett sorts relä eller gateway. På det sättet slipper ens egen maskin göra alla DNS-uppslag och brev-sändningar direkt till varje maskin. I stället skickar vi alla brev i klump till vår internetlevernatör, så får mailservern där sköta arbetet (tala med din internetleverantör innan du gör detta).

Den som läste den detaljerade beskrivningen av sendmail.cf minns att det var ungefär detta vi gjorde då. Det finns emellertid flera metoder. En kallas för "Smart Host", och den ska vi använda. Det smarta med denna metod är att den låter all lokal mail skickas lokalt men skickar iväg all mail till andra domäner till en central mailserver. Den smarta "hosten" definieras med "S". I definitionen måste man ange både vilken form av transpormedel vi använder och var mailen ska skickas. Enligt boken Sendmail är ursprunsgvärdet om det inte anges uucp, vilket vi ju inte vill ha. Därför anger vi smtp. Dessutom måste vi ange den maskin, inte det allmänna domännamnet, till vilken mailen ska skickas. Vi säger att denna maskin heter mailserver.your.domain. Då ska följande skrivas in i sendmail.cf:

# "Smart" relay host (may be null)
DSsmtp:mailserver.your.domain

Kolla så att du inte resan har en tom rad som börjar med DS. Om du har det, fyll i där.

Detta kan också anges i ett macro:

define(`SMART_HOST', smtp:mailserver.your.domain)

Ett dilemma om man både skickar mycket post lokalt och ut på nätet är att sendmail kan bli rätt upptagen med att kolla upp om en viss adress är tillgänglig. Om man inte är uppkopplad kan detta med lite otur innebära att lokal post blir lidande. Detta är förmodligen inget allvarligt problem för den vanliga hemma-användaren. Det kan vara värt att nämda dock, därför att det ofta föreslås i olika former av Linux-dokumentation. Men på ett delvis felaktigt sätt.

Genom optionen "c" kan man tala om för sendmail att den vid första försöket, alltså när eposten skickas, inte ska försöka kontakta "dyra" transportmedel. I stället köar sendmail dessa brev. När kön körs nästa gång skickas dessa brev emellertid iväg och står inte längre tillbaka. Det görs så hör:

# avoid connecting to "expensive" mailers on initial submission?

O HoldExpensive=True

Eller genom följande rad i m4-makrot:

define(confCON_EXPENSIVE, `True')

Vad man ofta missar är emellertid att man också måste markera vilka transportmedel som är dyra. Detta kan man avgöra själv. I vårt fall är det smtp-som räknas som dyr. Detta innebär emellertid att även smtp-post inom ett lokalt nätverk räknas som dyr. För att komma undan detta tvingas man i sådanat fall genom definitioner av flera smtp-tranportmedel och omskrivningar av regelkluster 0 se till att olika definierade smtp-transportmedel används i de olika fallen. Det för för långt för att diskutera detta här. För att markera ett transportmedel som "dyrt" måste dess flaggor i F= innehålla bokstaven "e". Detta är på intet sätt det normala. Så här det det till exempel ut i RedHats fördefinierade konfigurationsfil:

Msmtp, P=[IPC], F=mDFMuCX, S=20, R=0, A=IPC $h

Inget "e", och därmed har sendmail inte en aning om vilket transportmedel som är dyrt, och vilket som inte är det. Ska detta funka måste vi således lägga till "e" bland flaggorna:

Msmtp, P=[IPC], F=emDFMuCX, S=20, R=0, A=IPC $h

Det sista vi ska titta på är förmåga att ta emot egna brev. Denna är nämligen inte så självskriven. Beskrivningen är mest till för de som vill hacka lite extra, och är inte särskilt användbar när man bara har en PPP-koppling.

När sendmail kontaktas av en annan sendmail så talar den om för den andra sendmail vem den är. Den gör det på två sätt. Dels meddelar den sitt ip-nummer - det ip-nummer vars interface är kopplat till Internet. Den kontaktande maskinen slår sedan upp vad detta ip-nummer har för motsvarande kanoniserat domännamn. Dels talar den kontaktade sendmail om vad den heter. Så här kan du testa hur det ser ut:

[root@peter cf]# telnet myhost.your.domain 25
Trying 196.168.1.2...
Connected to myhost.your.domain.
Escape character is '^]'.
220 myhost.your.domain ESMTP Sendmail 8.7.4/8.7.3; Tue, 22 Oct 1996 14:07:13 +0200

Vi ser då att sendmail efter siffrorna 220 talar om var någonstans man har kommit. I det här fallet myhost.your.domain. Den sändande sendmail, den som har tagit kontakten gör sedan en kontroll med hjälp av denna uppgift för att öka säkerheten. Den kontrollerar den kanonofierade domänadresen som den fått via ip-adressen med den adress den fått i välkomstmeddelandet. Om dessa två inte stämmer överens. Ja, då blir det ingen förbindelse.

Därför är det viktigt att välkomstmeddelandet verkligen är korrekt. Sendmail använder den internt definierade variabeln "j" för detta. Den tar värdet från j och skriver ut den i välkomstmeddelande. Den är således nödvändigt att j verkligen innehåller den kanoniserade internet-adressen.

Finns det tillfällen den inte gör det? Ja, betänk följande. Du har ett mindre fast nätverk. Dessa ip-adresser är alltid befintliga, de kanske är privata dessutom och inte alls kända ute på internet. Eftersom dessa alltid är befinliga är din dator alltid känd under detta interna namn. Kanske i vårt fall min.hemliga.domän. Domännamnet som är gilltigt för hela Internet finns däremot bara när man är uppkopplad.

Chansen är därmed tämligen stor att sendmail kommer lägga in "min.hemliga.domän" i variabeln "j" och skriva ut den i sitt välkomstmeddelande. Det går då inte att skicka epost till din dator utifrån Internet.

Vi måste ta till ett fult knep. Vi kan nämligen definiera "j" själva, och gör då då här:

# my official domain name
# ... define this only if sendmail cannot automatically determine your domain

Djmyhost.your.domain

Det kan också göras i m4-makrot:



define(`confDOMAIN_NAME', `myhost.your.domain')dnl

Starta nu om sendmail.

Som avslutning ska jag visa på en möjligt m4-makro-fil som kan användas för att bekvämt skapa de beteenden vi ovan beskrivit. Det finns bara en sak den inte kan göra: lägga till

Kuserdb btree -o /etc/userdb.db

Så det får du göra för hand. Döp filen till något.mc och lägg den i /usr/lib/sendmail-cf/cf.

divert(-1)
include(`../m4/cf.m4')
OSTYPE(`linux')
undefine(`UUCP_RELAY')
undefine(`BITNET_RELAY')
define(confUSERDB_SPEC, /etc/userdb.db)
MASQUERADE_AS(`abc.se')
MAILER(local)
MAILER(smtp)
FEATURE(redirect)
FEATURE(always_add_domain)
FEATURE(use_cw_file)
LOCAL_RULE_1
R$- < @ $=w . > $*      $: $1 < @ $2 . > $3 ?? $1       username@localhost ?

R$+ ?? $+               $: $1 ?? $(userdb $2 : mailname $: @ $)
R$+ ?? @                $@ $1                           Not found
R$+ ?? $+               $>3 $2                          Found, rewrite

Om du vill ha några av de extra hacken, lägger du till de egenskaper du vill ha med dessa kommandon:

define(`SMART_HOST', smtp:mailserver.your.domain)
define(confCON_EXPENSIVE, `True')
define(`confDOMAIN_NAME', `myhost.your.domain')dnl

De fettade delarna byter du ut till dina egna värden.

Det är också möjligt att du behöver fila lite på filen /usr/lib/sendmail-cf/ostype/linux.m4. Särskilt om du vill ha procmail som local transportagent, vilket jag varmt rekommenderar. Så här ser den ut hos mig:

divert(-1)
VERSIONID(`@(#)linux.m4 8.2 (Berkeley) 8/21/93')
define(`LOCAL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl
define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl
define(`STATUS_FILE', `/var/log/sendmail.st')dnl

Kolla först i din egen fil. Spara en kopia och lägg in de rader du inte har. Kontrollera särskilt vägen till procmail och se efter om den stämmer med ditt system. Ja, om du har den över huvud taget existerar.

I /usr/lib/sendmail-cf/cf gör du sedan föjande:

m4 dinfil.mc > dinfil.cf

Gör en säkerhetskopia av sendmail.cf och kopiera den nya konfigurationen över den gamla. Starta om sendmail.

Det hela bör nu fungera smärtfritt.

Det kan nu vara dags att fundera på om man verkligen ska ha sendmail liggande som en egen serverdemon i bakgrunden hela tiden. Skälet till att den gör det är att den måste kunna ta emot inkommande trafik på port 25. Men om vi inte har någon inkommande trafik alls till sendmail. Ja, då kan vi lika gärna plocka ner demonen, och låta epostklienterna starta sendmail - när de behöver.

Användare av RedHat kan göra på två sätt Antingen gå in i Kontrollpanelen (som root) och ändra inställningarna i SysV - Runlevel editor. Eller så går man in i /etc/rc.d/rc3.d eller rc5.d beroende på vilken runlevel man kör på. Där tar man bort sendmails symboliska länk, tex.

rm S80sendnail

På andra Linux-varianter får man leta runt i rc1, rc.2, rc.local, rc.net med flera ställan tills man hittar platsen där senmail startar. Sedna sätter man kommentarmärken - # - framför varje rad som har med sendmail att göra.

Nu får man emellertid ett problem. Eftersom sendmail är avstängd så processar den inte kön med jämna mellanrum längre. Så om något brev fastnar - så sitter det fast. Därför måste det göras manuelt. Två kommandon är då bra att känna till:

mailq
sendmail -q

Med mailq kan man kontrollera om det ligger några osända brev i kön. Om det gör det kan man koppla upp sig och säga till sendmail att processa kön med sendmail -q.

Att ta emot mail

Nu är det till slut tid att också se till att vi kan få eposten hem till oss också. Som tur var är detta mycket enklare än att ordna till sendmail.

Man 99.9 procents säkerhet har du fått ett så kallat POP-konto hos din Internetlverantör. POP står för Post Office Protokoll är är en uppsättning regler för hur man ska kunna hämta sin post från en server. Vi kan tänka på det ungefär som en post-box. Du får med andra ord inte posten uttdelad till dörren utan måste gå och hämta den i post-boxen.

Med hjälp av POP och program som hanterar detta protokoll kan vi emellertid fixa så att "någon annan" sköter själva hämtandet.

Det finns flera olika program som kan sköta om detta. Själv har jag fastnat för ett som heter popclient, och det ska jag beskriva här.

Om du tänker använda popclient ska du se till att du har en version som är minst 3.0. Det beror på att de tidigare versionerna enbart kunde hantera kommandon på kommandoraden. Det innebar att om man körde popclient från ett script var man tvungen att lägga in lösenordet i skriptet - en säkerhetslucka. Så det ska vi undvika. I den nya versionen kan man i stället lägga en rad parametrar i en konfigurationsfil: $HOME/.poprc.

När man startar popclient så tar den kontakt med den server man specificerat, loggar in och hämtar alla brev och placerar dem i mail-spoolen för den användare som körde programmet. Det går, om man vill, att få popclient att placera posten i andra filer. Det är lätt, men överkurs.

Låt oss titta på en enkel $HOME/.poprc:


server pop.provider.net protocol pop3 username jsmith
 password secret1

De fettade orden är olika värden vi måste sätta in själv. De andra talar om för popclient vad vi satt in. Vi tänker oss att Anders Inge har ett popkonto på popservern pop.your.domain. Den klarar av POPs treje protokoll (det går att använda pop2 också). Han har användarnamnen anders och lösenordet javl/8}. Anders skapar då en .poprc med följande innehåll:

server pop.your.domain protocol pop3 username anders password javl/8}

Och han lägger den i sin personliga katalog. Det första han sedan gör är att skydda den så hårt det går.

chmod 600 .poprc

Sedan är det dags att starta popclient. Då måste vi ha reda på vilka ytterligare argument som går att ge popclient på kommandoraden. Här är några:

 

-F, --flush Endast POP3. Tar bort tidigare hämtade meddelanden innan vi hämtar nya.

-k, --keep Behåller hämtade meddelanden på pop-servern.

-K, --kill Tar bort hämtade meddelanden från popservern direkt.

-o folder Anger en alternativ fil att placera posten i.

-s, --silent Tyst, undertrycker alla meddelanden.

-v, --verbose Talar om vad som händer, men tar bort en del meningslös information.

Anders vill först kolla popclient så han vet att den funkar. Han vill därför att posten finns kvar hos mailservern. Han kopplar upp sin ppp-anslutning och skriver följande kommando:

popclient -vk
querying 196.168.0.1
+OK QUALCOMM Pop server derived from UCB (version 2.1.4-R3) at popserver starting.

> USER anders
+OK Password required for anders.
> PASS password
+OK anders has 8 message(s) (20415 octets).
> STAT

Och så vidare

Dessa brev hamnar i hans vanliga mail-katalog. Startar han till exempel Pine kan han läsa dem i Pines Inbox. Anders är glad och nästa gång byter han ut k mot F eller K.

Nu vill Anders emellertid inte behöva skriva popclient -vF på kommandodaren varenda gång. Det behöver han inte heller. I stället kan han lägga det i ett skript. Han döper skriptet till pop och lägger det i sin hemkatalog, och så gör han det exekverbart med

chmod 775 pop

Så här ser Anders fil ut:

#!/bin/sh
popclient -vF

Men eftersom Anders alltid arbetar i X-windows och är rätt förtjust i att kunna göra saker genom att klicka med musen bestämmar han sig för att lägga in ett litet kommando i root-menyn. Anders använder fönsterhanteraren fvwm2 och letar därför reda på konfigurationsfilen för den, nämligen /usr/X11/lib/X11/fvwm2/.fvwm2rc. Han öppnar den med sin favoriteditor och lägger på lämligt ställe till följande rad:

+              "Kolla Posten" Exec exec xterm -e /home/anders/pop &

(I fvwm tar man bara bort plustecknet.)

Nu kan han kolla posten väldigt enkelt. Men eftersom vi nu har ett skript så kan vi börja använda Linux posthämtning lite effektivare. Anders är med i en brev-lista som producerar massvis med post. Den vill han inte ha i sin vanliga postlåda eftersom det är så svårt att hitta den personliga posten. Han brukar dessutom ofta skicka en massa testmeddelanden till sig själv och skriver då Test i subject-raden. Det vore skönt att kunna sortera undan den posten också.

Det är fullt möjligt. Det finns flera olika sorteringsverktyg till Linux. Vi tar upp ett här, nämligen procmail - som vi ju redan berört.

Den stora poängen med procmail är att det går att skapa en sorts sorteringslista. Vi kan tänka oss hur vi själv sorterar vår post när vi kommer hem. Min personliga post läser jag direkt, tidningarna lägger jag i vardagsrummet och räkningarna hänger jag upp på anslagstavlan. Det här kan procmail sköta åt oss.

Procmail kan emellertid vara lite bökigt att förstå. Det arbetar med en syntax som inte alltid är den lättaste. Vi kan inte gå in i dess detaljer, utan känner bara lite på hur det funkar.

Anders börjar med att skapa filen .procmailrc i sin hemkatalog. Han läser sedan på i manualsidorna för procmail (man procmailrc) och konstaterar att procmail kräver tre saker för varje filtrering den ska göra. Man måste skapa ett så kallat recept. Ett recep inleds med symbolen ":0". I ursprunsbeteendet innebär detta att procmail skickar iväg varje brev som stämmer överens med vissa villkor till en specificerad brevlåda (i mailbox-format). Det går även att få procmail att tex bara skicka en kopia genom att sätta ett "c" efter ":0. Så här:

:0 c

Under denna rad måste komma ett filter, en villkorssats som om den är riktig utvärderas till sann. Dessa inleds alltid med "*" och följs av ord samt vissa speciella tecken som används för att sila bort vissa brev. På tredje raden ska stå vart posten ska skickas om villkoren är uppfyllda. Detta kan vara en brevlåda eller ett program.

Anders vill alltså sila undan brev från brevlistan. Han vill ha dem i /home/anders/mail/brevlista. Och han har listat ut att brevlistans namn alltid står i "headern" Resent-From. Han skriver därför sitt första recept i .procmailrc:

:0
* ^Resent-From:.redhat-list
mail/brevlista

Resent-From anger han alltså bokstavligen. Före lägger han till tecknet "^" för att tala om att det han ska träffa ligger på en ny rad, och efter lägger han in en liten punkt (".") för att undvika eventuella mellanslag.

Sedan gör han lika dant med alla brev som innehåller ordet Test i Subjec-raden:


:0
* ^Subject:.Test
mail/test

Det spelar ingen roll om ordet Test följs av andra ord, tex Test2. Procmail träffar rätt ändå.

Problemet är nu bara att detta visserligen funkar när han sänder epost till sig själv. Då får han nämligen posten via sendmail och sedan den lokala transportagenten, som i Anders fall är just procmail. Men när han hämtar brev med popclient, så placerar ju popclient hans brev i brevlådan direkt, den passerar aldrig sendmail eller procmail.

Därför måste Anders göra ett litet hack, där han utnytjar popclient möjlighet att placera posten i en fil i stället, samt använder Unix möjlighet att "pipa" utputen från ett program till ett annat. Om du inte förstår vad Anders gör, skriv det bara bokstavligt och lär dig mer om Unix och Bash sedan. Anders bygger ut sitt lilla pop-skript. Hans låter popclient placera posten i en temporär fil och låter sedan den filens innehåll köras in i procmail. För att lyckas med detta måste han först köra filen genom programet formail, som delar upp filen i enskilda brev. Han avslutar med att ta bort den temporära filen. Så här blev det:

#!/bin/sh
popclient -vFo /tmp/incoming_mail
if [ -s /tmp/incoming_mail ]; then 
        cat /tmp/incoming_mail | formail -I Status: -ds procmail
     rm /tmp/incoming_mail
fi

Eftersom Anders gärna vill känna sig säker på att han inte förlorar någon post lägger han in ett par rutiner som sparar den senast hämtade posten. Han ser till att han har backup av den senaste och näst senaste hämtningen och får då följande fil:

#!/bin/sh
popclient -vFo /tmp/incoming_mail
if [ -s /tmp/incoming_mail ]; then
        cat /tmp/incoming_mail | formail -I Status: -ds procmail
        if [ -s /tmp/incoming_mail.bak ]; then
                cat /tmp/incoming_mail.bak > /tmp/incoming_mail.bak2

      fi
        cat /tmp/incoming_mail > /tmp/incoming_mail.bak        
        rm /tmp/incoming_mail
fi

Nu är Anders nöjd. Och vi kan gå vidare och titta på vilka verktyg vi kan använda för att skriva och läsa vår post.

8.8 Epost-program

Dem mesta tiden när vi arbetar med epost varken ser eller bryr vi oss om sendmail eller popclient. Vårt gränssnitt mot skrivandet av epost är i stället någon form av program i vilken vi kan skriva, ändra, sparar, läsa och skicka epost.

Det finns en uppsjö epostprogram till Unix och Linux. Det ursprungliga epostprogrammet är extremt enkelt i sin effektivitet, /bin/mail. Det går verkligen att sköta sin epost med mail, men det är inget jag rekommenderar. I stället har dess främsta användningsområde snarast blivit att användas inifrån program. Du bör veta att möjligheten finns. Den ser ut så här:

[root@peter rc3.d]# mail -s hej anders < /dev/null

Som root skickar vi ett meddelande till peter med subjectraden hej. Innehållet i brevet hämtar vi från /dev/null i detta fallet. Alltså ett tomt brev. Men vi kunde lika gärna ha hämtat det från någon fil. Vi går sedan tillbaka till vår normala användaridentitet och ser att vi fått ett brev. Vi kollar det genom att skriva mail.

[root@peter rc3.d]# exit
exit
You have mail in /var/spool/mail/peter
[peter@peter peter]$ mail
Mail version 5.5-kw 5/30/95.  Type ? for help.
"/var/spool/mail/peter": 1 message 1 new
>N  1 peter.antman@abc.se   Wed Oct 23 09:46   9/339   "hej"

& 

Med + och - kan vi röra oss upp och ner i listan. Genom att trycka på return kan vi läsa ett mail. Med r följt av return svarar vi, med d tar vi bort det och med q slutar vi. När man skriver ett brev måste det avslutas med en ensam rad med en punkt.

& r
To: peter.antman@abc.se
Subject: Re: hej

Bara en koll
.

Det är emellertid lite svårt att motiver användning av mail när det finns så många andra bra epostprogram. Några av dessa är: Elm, Exmh, ishmail, MH, ML, Pine, SOMA, TkMail, Ultimate Mail Tool, XF-Mail. Vilket ska man då välja? Ja, det beror mycket på tycke och smak.

Enligt min mening bör man ha åtminstone ett epostprogram som går att använda både i konsollen och i X. Pine står då utom tävland. Skälet till detta är helt enkelt att det är bra att ha ett epostprogram som man kan och där ens post finns som man kan använda om olyckan är frame och X krachar. Eller om man behöver skriva mail genom att telneta in till ett Unix-konto.

Sedan bör man ha ett epost-program som är X-baserat. Det främsta skälet till det är att det underlättar vid skrivande av brev om man kan använda musen till att hoppa, ta bort, markera osv. Här är valet svårare. Jag har fallit för exmh.

Vi ska därför titta lite närmare på Pine och exmh.

Pine

Pine startar man genom att skriva pine på kommadoraden. Man kommer då direkt in i en meny.

  PINE 3.95 8bit   MAIN MENU                        Folder: INBOX  0 Messages   



       ?     HELP               -  Get help using Pine                   

                                                                         

       C     COMPOSE MESSAGE    -  Compose and send/post a message       

                                                                         

       I     FOLDER INDEX       -  View messages in current folder       

                                                                         

       L     FOLDER LIST        -  Select a folder OR news group to view 

                                                                         

       A     ADDRESS BOOK       -  Update address book                   

                                                                         

       S     SETUP              -  Configure or update Pine              

                                                                         

       Q     QUIT               -  Exit the Pine program                 





   Copyright 1989-1996.  PINE is a trademark of the University of Washington.

                             [No messages to View]
? Help                     P PrevCmd                  R RelNotes                

O OTHER CMDS L [ListFldrs] N NextCmd                  K KBLock                 

Vi kan här lära oss hur Pine fungerar. I princip styr man Pine enbart genom att trycka på olika bokstäver. Pine visar alltid upp vilka kommandon som är tillgängliga längst ner på den aktuella skärmen. Ett av de viktigaste kommandona där är O, som betyder andra kommandon. Många gånger visar Pine nämligen inte samtliga tillgänliga kommandon. Om man leter efter något speciellt kommando kan man alltid testa med O.

I inledningsmenyn får vi också upp ett antal alternativ. Vi kan antingen trycka på den bokstav som står framför det kommando vill vi ha utfört. Säg att vi vill titta på vilka brevlådor vi har då trycker vi på L, eller om vi vill skriva ett brev, då trycker vi på C.

I Pines aktiva fönster kan vi också flytta runt med pilarna. Den plats vi för tillfället är på blir svartmarkerad. Om vi då trycker på return, så utförs det kommanod vi stod på.

Vi ställer oss på raden " I FOLDER INDEX - View messages in current folder" och trycker på return. Då kommer vi till vår huvudbrevlåda och får kanske upp följande bild.

  PINE 3.95 8bit   FOLDER INDEX            Folder: INBOX  Message 1 of 18       


      1 Oct 15 Jonas Oberg         (2,148) Problem.                             

      2 Oct 14 Jonas Oberg         (1,978) RedHat 4.0?                          

  A   3 Oct 13 Patrik Bylund       (1,437) Danish-FAQ                           

      4 Oct 12 Mikael Holgersson   (1,700) Linux för nybörjare                  

  N   5 Oct 11 Peter Oestman       (1,536) Linux utan partion ?                 

      6 Oct 11 Peter Antman        (1,853) Svenska Linux - Svenska tecken       

  A   7 Oct 11 Michael Kalisz      (2,179) Aplixware??                          

      8 Oct  7 Mikael Holgersson   (1,528) Linux för nybörjare                  

      9 Oct  4 Peter Antman        (1,448) Svensk linux sida, sorry             

     10 Oct  4 Peter Antman        (2,296) Svensk linux-sida                    

     11 Oct  2 Jonas Wissting      (1,264) Spice                                

     12 Oct  2 Mathias Andersson   (1,305) Xwindows                             

     13 Oct  1 Jonas Wissting      (1,301) Wine                                 

     14 Sep 23 Anders Johansson    (2,169) Re: CL GP5446                        

     15 Sep 23 Anders Johansson    (4,167) Re: Vilken h rdvara                  

     16 Sep 23 Jonas Oberg         (1,460) EIDE?                                

     17 Sep 22 Jonas Wissting      (1,513) CL GP5446                            

     18 Sep 22 Gunilla Björklund   (2,542) Vilken hårdvara                      


                    [Folder "lugis" opened with 18 messages]

? Help       M Main Menu  P PrevMsg     - PrevPage    D Delete      R Reply     

O OTHER CMDS V [ViewMsg]  N NextMsg   Spc NextPage    U Undelete    F Forward  

Här kan vå således se vilka brev vi har i vår brevlåda, vem som skrivit dem och vad som står på Subject-raden. Vi kan också avläsa statusen på breven i kanten längs till höger. Ett N anger att brevet är oläst. Ett A att vi har svarat på brevet. Ett D att vi markerat att brevet ska slängas.

Vi kan i denna meny utföra en saker med våra brev. Det vi väljer kommer utföras på det brev vars rad är markerat med svart. Vi kan till exempel läsa brevet med kommandot V, slänga det med D eller svara på det med R. Vi kan även flytta det till en anna brevlåda med S eller exportera det till en fil med E.

Säg att vi vill spara ett brev i en fil. Vi markerar det brevet och trycker på E. I botten på fönstret kommer då en nya lista med kommandon upp:

EXPORT: (copy message) to file in home directory:                               

^G Help      ^T To Files TAB Complete                                           

^C Cancel   Ret Accept     

Vi kan skriva filnamnet direkt efter kolonet och trycka på return. Men vi kan också begära fram en lista på vilka filer som finns i den aktuella katalogen, och byta katalog genom att trycka på <CNTR>-T (^-tecknet står för cntr-tangenten.

..                           (parent dir)  
adr                                 (dir)  
axhome                              (dir)  
backup                              (dir)  
bin                                 (dir)  
evaback                             (dir)  
linux                               (dir)  
Mail                                (dir)  
mail                                (dir)  
nsmail                              (dir)  
PerlDoc-beta1g                      (dir)  
ppp                                 (dir)  
redhatgodies                        (dir)  
scripts                             (dir)  
temp                                (dir)  
test                                (dir)  
texter                              (dir)  
#.default-ppp1#                    373  B  
#.pinerc#                           10 KB  

? Get Help   E Exit Brwsr              -   Prev Pg  D Delete     C Copy       

             S [Select]   W Where is   Spc Next Pg  R Rename 

I listan vi får upp kan vi som vanligt ta oss fram med piltangenterna och return. Vill vi gå till en annan katalog markerar vi den och trycker på return. Vill vi gå bakåt i katalogträdet markerar vi katalogen "..". Hittar vi en fil vi vill spara i markerar vi den.

Här kan vi passa på att uppmärksamma en speciell egenhet hos Pine. Olika fönster har olika kommandon för att avsluta fönstret. Som vi ser avlutar vi listningen av katalogen med kommandot E. Däremot avslutar vi kommandot exportera, alltså fönstret vi var i innan, med <CNTR>-C. Pine själv avslutar vi med kommandot Q.

Vi ångrar oss och går tillbaka till vår listning av brevlådan genom att trycka E och sedan <CNTR>-C och bestämmer oss för att vi ska skriva ett brev. Vi trycker därför på C.

  PINE 3.95 8bit   COMPOSE MESSAGE                 Folder: lugis  18 Messages   


To      : 
Cc      : 
Newsgrps: 
Attchmnt: 
Subject : 
----- Message Text -----







^G Get Help  ^X Send      ^R Rich Hdr  ^Y PrvPg/Top ^K Cut Line  ^O Postpone  

^C Cancel    ^D Del Char  ^J Attach    ^V NxtPg/End ^U UnDel Line^T To AddrBk 

Genom att flytta på den svarta markeringen med piltangenterna kan vi skriva in adressen efter "To:" och ärendet efter "Subject: ". Under raden "----- Message Text -----" skriver vi in vårt meddelande. Nu kommer vi på att vi vill skicka med en fil till vår vän. Med pilarna går vi upp i huvudet och trycker på <CNTR>-J. Precis som när vi ville exportera ett brev kan vi här direkt skriva in namnet på filen, eller ge oss ut i katalogträdet och leta efter filen.

När vi är nöjd med brevet skickar vi det genom att trycka på <CNTR>-X.

Vill vi tallbaka till huvudmenyn trycker vi på M.

Vi ska här inte fördjupa oss mer i Pine. Det viktiga är att få upp känslan för hur Pine fungerar. Eftersom alla kommandon alltid finns lätt tillgängliga är det enkelt att lära sig mer själv.

Vi ska bara påpeka några finesser. Säg att du vill sortera breven i en viss brevlåda efter något visst kriterie. Tryck på $ så kommer en hel rad med olika alternativa sätt att sortera på. Ange vilket du vill ha och tryck på return. Eller säg att du vill markera en hel rad med meddelanden och sedan utföra något på dem, till exempel ta bort dem. Då använder du kommandona ; för att välja ut meddelande och A för att tala vilken form av åtgärd du vill ha utförd. Selcet-komandot är ytterst effektiv. Det är tex möjligt att ange ett viss numrerat intervall, ett datumintervall och en rad andra kriterier.

I Pine kan man också bygga upp en adressbok. Från ett brev kan man ta en adress genom kommandot T. I huvudmenyn går det med kommandot A att gå direkt till adressboken och skriva in adresser själv och när man skriver ett brev går det att hämta en adress från adressboken med kommantot <CNTR>-T.

Några ytterligare ord kan vara värt att säga om Pine. Pine är i högsta grad konfigurerbart och man kan förändra inställningarna direkt innifrån Pine genom komandot C i huvudmenyn. Konfigurationen sparars i filen .pinerc i din hemkatalog.

Pines brevlådor finnas alla i en underkatalog vid namn mail, alltså tex /home/anders/mail. Din huvudbrevlåda läser emellertid Pine direkt från mail-spoolen, tex /var/spool/mail/anders, coch lämnar kvar breven där. Pine sparar och läser brev i ett format som kallas mbox, vilket innebär att en brevlåda egentligen är en enda fil som innehåller samtliga brev i lådan.

Sist men inte minst är det möjligt att få Pine att automatiskt lägga in en signatur i alla brev man skickar. Denna signatur bör innehålla tex ens fulla namn, epostadress, eventuell webadress och kanske till och med telefonnummer, faxnummer och så vidare. För att få Pine att göra detta måste man skapa en fil i en editor där man skriver in och formger sin signatur. Filen ska heta .signature och ligga i hemkatalogen, $HOME/.signature.

exmh

Exmh är ett epostprogram med ett GIU-interface. Det är, för att tala svenska, ett program där man utför kommandon genom att klicka med musen. Exmh är på flera sätt lite speciellt. Dels är det egentligen inte ett program i vedertagen mening, utan ett skript. Det är skrivet i det allt mer populrär språket tcl/tk. Dels är exmh inte baserad på mailboxformatet utan på ett något annorlunda posthanderingsystem - som är ytterst komplex - nämligen MH (Mail Handeling System).

Tyvärr skapar båda dessa förhållanden vissa problem med exmh. Det är relativt minneshungrig och vid hantering av stora brevmängder är det långsammare än Pine, dels måste man lära sig och anpassa sitt system till annorlunda och delvis mer komplicerade metoder att hantera posten. Använder man enbart exmh innebär det där inget problem, allt sker bakom kulissen. Vill man emellertid även kunna läsa sin post med Pine när det kniper måste vissa kreativa lösningar tas till.

Jag har emellertid inte funnit något annat grafiskt epostprogram som är bättre än exmh. Det skulle möjligen vara ML. Nackdelen med ML är att det är skrivet för motif och motif kostar mycket pengar. Men för den som har motif eller har lust att utsätta sitt system för en statiskt länkad version tycker jag ML är värt att titta på. Vi håller oss till exmh.

I vår beskrivning av exmh ska vi utgå från en bild. Exmh ser ut så här när det startats.

När du startar exmh för första gången kommer din inbox att öppnas. Den lilla fyrkanten högst upp till höger där det står inbox är symbolen för denna brevlåda. Och den är märkt med någon färg, beroende på hur exmhs färger är inställda. Min är blå med en röd kant. Meddelanden i den aktuella postlådan radas sedan upp i det övre fönstret.

Det ser ju bra ut. Fast något har hänt. exmh har tagit alla sin brev ur mail-spoolen, tömt den och konverterat dem till sitt eget format och sedan placerat dem i sin egen katalog $HOME/Mail/inbox/. Om du inte vet om du vill använda exmh ännu utan bara provar. Se till att göra en kopia av den inbox i mail-spoolen innan du startar exmh. Tex:

cp /var/spoo/mail/anders /var/spool/mail/anders.bak

Ok, nu är det gjort. Nu ska vi se hur exmh fungerar. Vi börjar med att undersöka den övre halvan av exmh. Som sagt är de övre rektaglarna med namn i olika postlådor. Säg att du vill ha en poståda som du sparar extra bra brev i. Tryck på knappen "New" och ange tex namnen "Goodies". Ännu finns inget i den lådan. Kolla genom att trycka på rektangeln det står "Goodies" på. Gå tillbaka till "inbox".

Vad betyder då de andra knapparna? När exmh startade snodde den din mail-spoole. Det beror på att det i dess inställningar står att den vid uppstart ska inkorporera post från spoolen. Detta går att ändra, vi återkommer till det. Men man kan också inkorporera posten själv. Exmh har ingen metod att själv känna efter om det kommit mail post till spoolen. För att få in post i exmh måste alltid MH-kommandot inc användas. Knappen "inc" gör just detta. Om du trycker på den hämtar exmh den senaste posten från spoolen.

exmh har också en mycket effektivt sökverktyg. Du finner dessa under "Serch". Där väljer du någon sökmetod och får då upp en frågeruta. Där anger du vad du vill söka efter och trycker på "Next". Mitt i exmhs huvudfönster finns en liten avlång fyrkant där olika statusmeddelanden dyker upp. Hur sökresultatet gick ser du där. Desutom markeras tex alla brev i den aktuella foldern som innehöll det du sökte efter.

Nu kan vi använda nästa meny, "Moore..". Under Moore finns en rad bra att ha komandon. Vår sökning resulterade, säger vi, i att 10 meddelanden blev markerade i postlådan. Vi går in under Moore och väljer "LIST ONLY SELECTED MESSAGES". Vi får då se alla brev som innehöll det vi sökte och inga andra. Men hjälp - vart tog de andra meddelandena vägen? Tryck bara på postlådeknappen en eller ett par gånger så kommer de åter.

Under "Moore" kan vi också välja att sortera brevlåda efter olika kriterier, vi kan slänga en hel brevlåda eller inportera post (med inc) från andra mbox-filer än mail-spoolen.

Breven i den aktuella postlådan förses med olika färger beroende på om de är olästa, lästa, marakerade osv. Vi klickar nu på ett brev och ser att ett litet +-tecken läggs till vis brevets nummer samt att raden ändrar färg.

Dessutom dyker innehållet i brevet upp i exmhs nedre fönster. Där kan vi läsa brevet. Vi kan också betsämma om vi vill göra något speciellt med det. Vi börjar med att utnytja vår nya brevlåda "Goodies" och trycker därför på "Move". Sedan trycker vi med den högra musknappen på den poståda vi vill flytta meddelandet till.

De flesta knapparna är tämligen självbeskrivande. "Forward" viadreförmedlar brevet till någon vi anger. "Prev" tar oss till föregående brev i postlådan och "Next" tvärtom. "Delete" slänger brevet.

Här möter vi en av exmhs bökiga egenskaper. Brevet släng nänligen inte på riktigt. Säg att vi slängde brev nr 3 i inbox. Vi går till $HOME/Mail/inbox och ser hur där ser ut. Vi finner där en massa nummer. Varje nummer är en fil med ett brev. Men ett nummer föregås av ett komma ",3". Det är det slängda brevet. Vill vi ta bort det måste vi göra:

rm ,3

Det går att ta bort alla slängda brev genom kommadot:

rm ,*

Vill vi skriva ett brev trycker vi på "Send". Under knappen "Moore.." döjer sig en hel uppsättning kommandon. Baland annat kan man skiva ut brev, eller spara till en fil. De är emellertid tämligen självförklarande så vi lämnar dem.

Nu har vi "Reply" kvar. Reply är som det låter till för att svara på ett meddelande. Här måste du välja om du vill svara enbart till avsändaren eller till alla. Om du väljer enbart avsändaren kommer exmh att skicka brevet till den som står angiven i "From:" om det inte finns en "Reply-to:", då väljer exmh att skicka brevet till den i stället, utan att säga till.

Det där kan ställa till den del problem med tex mailinglistor. Det är inte helt ovanligt att Linux-användare inte orkat sätta upp sendmail så som vi beskrivit ovan utan i stället använder Reply-to för att ange sin riktiga adress. Detta tar emellertid i brevlistor över brevlistans adress. Så risken är stor att vi istället för att svara till brevlistan skickar brevet direkt till en enskild person. För att komma runt detta måste vi i stället använda "Reply all".

Vi gör det och upptäcker ännu en av exmh små betenden. Den citerar inte brevet vi svarar på och frågar inte om det heller. I stället får vi ett tomt brev (det set likadant ut om vi trycker på "Send", förutom att adress och ämne är ifyllt) som ser ut som bilden nedan:

Hur ska vi då göra för att få in den text vi vill kommentera i citerad form. exmh löser detta på flera sätt. Om vi trycker på "Insert@", så får vi hela texten inlagd i citerad form. Men vi kan också välja att bara lägga in valda delar. Genom att i ursprungsbrevet, alltså det som är synligt i den under delen i exmhs huvudfönster dra musen, med den vänstra knappen nedtryckt, över den text vi vill citera och sedan genom att klicka på "Moore" i vårt brevfönster och där välja "Cite selelection" så läggs det valda avsnittet in med citat.

Under "Moore.." kan vi välja en rad andra saker. Till exempel kan vi importera text från en fil, markera att vi vill använda "Quated Printable" i stället för MIME osv. Här kan vi ockå läggan in externa filer som ett attachment genom kommandona "Instert part" och "Instert external". Eftersom exhm klarar en rad kodningsformat lägger det de insatta attchmentet direkt i brevet. När man tar emot ett brev med en sådan attchment i exmh synns det som ett mörkt markerat parti i brevet. Genom att klicka på högra musknappen kan man sedan välja vad man vill göra med den bifogade filen. Tex spara den i en fil, avkoda den med MIME, eller om det är en application eller videofilm eller något liknande kan man välja att köra den genom en "octal stream".

Framför allt kan det vara värt att tänka på möjligheten "Save buffer", därför att exmh inte sparar utgående brev. Genom detta kommando kan vi spara breven.

Under knappen "Text" finns möjligheten att formatera brevet. Det görst med html-kod och i ett epostprogram som inte klarar html-kod syns koden i rå text, vilket inte är särsklit snygt. Under "Sign..." möter vi vår gamla signatur, som vi här kan använda. Dock genom att själva utföra komandot. Vi kan även använda en alternativ signatur-fil.

Ok, dags att skick brevet. Tryck på "Send". Men du kommer på att då inte vill sända det. Du vill spara det och fortsätta skriva sedan. Tryck på "Save&Quit" i stället och ytterligare en egenskap hos exmh visar sig. Den lägger då brevet i postlådan "drafts" -alltså utkast. Genom att gå till den postlådan, markera brevet och trycka på send får du upp brevfönstret och kan fortsätta skriva och så småningom skicka det.

Nu kan vi göra det mesta med exmh. Om vi vill förändra exmhs beteende går vi in under "Preferances" och få då en lång rad möjligheter att ändra inställningar. Vi kan ställa in utskriftskommandon, välja en extern editor och mycket, mycket mer.

Vi ska göra några sådana inställningar. Det första vi gör är att gå i under "Incorprate Mail" och markerar att vi ska göra Inc när vi startar programmet samt "Presort Inc feedback". Det finns flera sätt att inkorporerar påsten på, de är emellertid så knepiga att vi undviker att ge oss in i det.

För vi ska i stället ägna oss åt ett par andra besvärliga saker. För det första tycker jag inte om det sätt som exmh listar posten i postlådefönstret, nämligen med de första raderna ur varje brev. Jag tycker det blir svårare att läsa listan då.

Det finns en metod att lösa detta. Och den fungerar hyftsat. exmh använder som vi tidigare sa ett litet program som ingår i MH, nämligen inc, för att inkorporera psoten. För att lista posten, alltså skriva ut den på skärmen, använder den ett annat komando från MH: scan. Scan har det egenskapen att den går att konfigurerar. Scan är en sorts filter som utifrån en uppsättning regler visar upp delar av de brev som finns i en specificerad folder som man anger till scan.

exmh använder scans inbyggda egenskaper och listar däför posten på ett i mina ögon otillfredsställande sätt. Man kan emellertid ange en egen konfigurationsfil till scan, som är skrivet på ett oerhört tillkrånglat vis. Jag tänker inte gå in på de regler som styr skrivande av en sådan fil, utan i stället presentera ett sätt att ändra på scans beteende och hur man från exmh att använda detta bettende.

Lägg in det följande i en fil och kalla den tex för scan.default och lägg den i /etc:

%4(msg)%<(cur)+%| %>%<{replied}-%?{encrypted}E%| %>\
%02(mon{date})/%02(mday{date})%<{date} %|*%>\
%<(mymbox{from})%<{to}To:%14(friendly{to})%>%>%<(zero)%17\

(friendly{from})%>%<{subject}%{subject}                   \                                        

      %>

Lägg för det första märke till tecknet \ som avslutar varje rad. Det är där för att markera att hela denna samling av symboler ska läsas in av scan som en enda rad. Lägg också märke till det märkligt ensamma tecknet "%> i slutet av filen. Det har an alldeles speciell funktion. Om den i stället skulle sitta ihop med de andra tecknet får vi effekten att scan producerar ett mellanrum mellan varje listat brev. Vi får dubbelt radavstånd, kan man säga. Jag gillar det inte. Därför måste vi lägga till något som får scan att tro att den text den läser in är längre än vad den egentligen är. Därför slår vi in en rad mellanslag mellan "%>" och de andra tecknen. Här får man experimentera sig fram. Ibland kommer det ändå inte att funka. Till exempel om ett brev inte innehåller någon ämne.

För att få exmh att använda detta förändrade bettende hos scan går vi in i preferanserna och trycker på "HM Tweak". Där ser vi scan-programmet inskrivet högst upp. I den rutan skriver vi:

scan -form /etc/scan.default

Tyvärr tycks inte exmh använda denna variant när man inifrån exmh trycker på "Inc". Men det får man leva med. Eller också söka hitta ett bättre program.

Som jag inledningsvis skrev tycker jag man ska kunna ha både ett radbaserat och ett X-baserat program för att läsa sin post. Här är emellertid exmh lite elak. Den snor ju all post vi har. Dessutom funkar inte exmh särskilt väl med procmail, som vi ju lagt ner sådan tid på att konfigurerar.

Här kan vi emellertid ånyå använda det faktuom att exmh nytjar sig av små externa program för sina rutiner. Det är inte bara exmh själv som kan använda inc. Vi kan göra det också. Inc är som de flesta Unix-program högst konfigurerabart och tar en massa argument på kommandoraden.

Låt oss titta på hur man kan använda inc för att på egen hand inkorporera brev från en mbox-fil till en postlåda i mh-format (som ju exmh använder).

inc +redhat -file mail/RH -truncate

I detta kommando anger vi för inc att det ska inkorporera post i postlådan redhat. Inc vet att den ligger i $HOME/Mail/redhat, därför att Mail är mh-s sätt att markera var posten finns. Vi talar sedan om för inc att den ska hämta posten i en mbox-fil som leter RH och ligger i katalogen mail. Till sist ser vi till att inc tömmer den filen när den är klar (om vi lämnar kvar brev kommer den ta även de gamla breven nästan gång den inkorporerar.)

Det här sista ställer dock till problem för oss. Det innebär ju att posten ändå försvinner från mboxfilerna. Pine kan alltså inte läsa dem efter att inc varit där och hämtat dem.

Det är nu dags att återgå till procmail och . procmail.rc. Vi kan här använda procmails förmåga att inte bara sortera bort viss post utan att procmail också kan skicka kopior. Genom att sätta ett c efter :0 på första raden i ett recept uppnår vi denna effekt. Brevet försvinner alltså inte - en kopia skickas i stället till den angivna postlådan. Så här kan man skriva:

:0
* ^Resent-From:.redhat-list
{
        :0 c
        mail/RH

        :0
        mail/redhat
}

mail/in

Vi bestämmer oss för att all inkommande post ska finnas tillgänglig både för Pine och exmh. Vi vill trots det sortera undan brev från vår mailinglista. Den post som blir över läggs i mail-spoolen. Eftersom exmh tömmer den måste vi emellrtid rädda undan denna post så att även Pine kan läsa den. Det gör vi genom att skicka en kopia till en mbox-fil. I det här fallet filen in.

Låt oss titta på de övre receptet. Det inleds som vanligt och följs av en villkorssats. Sedan utnytjar vi möjligheten att använda måsvingar för att så att säga skapa en undervariant av en .procmailrc-fil. Alla brev som stämmer överens med det specificerade villkoret går in i denna subrution. Där behöver vi emellertid ingen villkorssats. Vi vet redan vilken post vi fått dit. Att göra på detta sätt är helt OK för procmail.

I det första underreceptet skickar vi bara en karbonkopia till filen RH (den vi använder för att sedan hämta in post till exmh) och sedan sortera vi slutgiltigt undan resten till filen redhat, där Pine sedan har tillgång till Posten.

I det sista receptet skickar vi en kopia av all överig post till filen in för Pines skulle. Sedan går alla brev till mail-spoolen där exmh hämtar dem.

Nu är det ju lite träligt att själv behöva hämta in all post som hamnar i RH. Eftersom detta inte är mail-spoolen sker det ju inte automatiskt. Det är således dags att använda inc från kommandoraden igen. Vi tar fram vårt lilla posthämtarskript pop och förbättrar det. I pop lägger vi in de externa inkoproreraringar vi vill ska ske. Det kan se ut då här:

#!/bin/sh
popclient -vFo /tmp/incoming_mail
if [ -s /tmp/incoming_mail ]; then
        
        cat /tmp/incoming_mail | formail -I Status: -ds procmail
        
        if [ -s /home/peter/mail/RH ]; then
                inc +redhat -file ~peter/mail/RH -truncate
     fi

        if [ -s /tmp/incoming_mail.bak ]; then
                cat /tmp/incoming_mail.bak > /tmp/incoming_mail.bak2

      fi
        cat /tmp/incoming_mail > /tmp/incoming_mail.bak        
        rm /tmp/incoming_mail

fi

Vi lägger alltså till en villkorssats som om den är sann (den kontrollerar om filen RH finns och om den ej är tom) utför vårt inc-kommando.

8.9 Finger

Finger är ett lite program med vars hjälp man kan ta reda på information om användare på andra maskiner om man känner till användarens epost-adress. Man kan också söka epostadresser med hjälp av finger.

Men använder finger genom att skriva finger följt av epostadressen på komandoraden.

[peter@peter peter]$ finger peter@peter.antman.se
[peter.antman.se]
Login: peter                            Name: Peter Antman
Directory: /home/peter                  Shell: /bin/bash
Office Phone: ++46-8-348494            Home Phone: ++46-8-372434
On since Wed Oct 23 09:12 (MET DST) on ttyp1 from :0.0
   55 seconds idle
Mail last read Wed Oct 23 13:52 1996 (MET DST)
Plan:
Jag planerar att skriva en bok om Linux pM-e svenska

Vi kan här ta reda på en massa spännande saker:

· vilket login namn personen har

· vilket skal han eller hon använder

· vad personen verkligen heter

· Telefonnumer hem och till jobbet ( för att detta ska funka krävs att administratören lagt till dessa uppgifter i passwordfilen /etc/passwd. Man lägger in det i det femte fältet, så här:

*:*:*:*:Peter Antman,, teljobb, telhem,: (vid asteriskerna står något annat egentligen.)

· om personen är inloggad, hur länge, i vilket fönster och när den gjorde något senast

· när pesonen läste eposten senast och om den finns oläst post

· om personen i sin hemkatalog lag upp filen .plan och skrivit något i den visas detta också upp (vi ser också att finger inte hanterar svenska tecken).

Det är många gånger det inte går att fingra en epost-adress. Det beror ofta på att administratören inte tillåter denna form av tjänst eftersom den talar om väl mycket om användarna på systemet. Andra gånger beror det på alla dessa eländiga virtuella adresser som börjat florera eller på att man kör någon skitmaskin som inte är Unix.

Det går också att ta reda på vilka användare som över huvud taget finns på ett visst system eller en viss adress. Man tar då bort namnet innan och skriver bara domänadresser inledd med ett @

finger @remote.domain
[peter@peter peter]$ finger @remote.domain
[remote.domain]
Login    Name                 Tty  Idle  Login Time   Office    
nils    Nils Andersson         p1    13  Oct 23 09:12 (:0.0)
bengt    Bengt Persson         p2        Oct 23 09:41 (:0.0)

Genom att ange förnamn eller efternamn som användarnamn kan vi avgränsa sökningarna. Säg att du vill ha tag på en person som du vet heter jan och sitter på ett visst ställe, men du kommer inte ihåg hans epostadress. Skriv då jan@viss.domain så får du en lista över samtliga jan som finna där. Eller försök med efternamnet i stället: fredriksson@viss.domain,

Hur finna ur epostadressen. Jo, kolla efter ordet "Login". Namnet som står efter detta går med all sannolikhet att använda som epostadress. Säga att det står janf, eftersom han heter Fredriksson i efternamn. Du skickar då brevet till janf@viss.domain.

8.10 Telnet

Med telnet kan du inte gör särskilt mycket om du inte redan kan Unix. Telnet är nämligen ett sätt att skaffa sig ett terminalfönster på en dator man inte fysiskt befinner sig vid. När man väl lyckats med det ser konsollen eller Xterm ut precis som om du körde på din egen dator. Filer du skapar eller tar bort eller hämtar hem med ftp skapas, tas bort eller läggs på den dator du etablerat en telnetförbindelse med, inte på din egen datror.

Har man inget konto på någon annan unixdator kopplad till ett tcp/ip har man heller ingen nytta av telnet. Har man det, har man emellertid ytterligare en Unix-dator man kan arbeta på. Det går att läsa sin post där med Pine, eller kompilera program :-) eller varför inte surfa på Internet.

Kanske viktigast av allt. Har man websidor upplagda på en extern Unixdator är telnet ett ovärdeligt verktyg för att inte säga nödvändingt verktyg för att arbeta med dem.

Unix-kommandon lär du dig på andra ställe i denna bok, här beskriver vi bara den uppkoppling som sker med telnet.

För att köra telnet behöver man bara kunna två saker. Programmets namn och komandot exit.

En förbindelse med telnet upprättas genom att skriva telnet följt av adressen till den andra datorn:

telnet annan.domain

Eller (ett komando till,OK):

telnet
>open annan.domain
Trying 196.168.1.2...
Connected to annan.domain.
Escape character is '^]'.

Red Hat Linux release 3.0.3 (Picasso)
Kernel 2.0.18 on a i586

annan.domain login: anders
Password: 
Last login: Thu Oct 24 09:28:30 from :0.0
You have mail.
[annan@anders anders]$ 
Man möts sedan av exakt samma inlogningsförfarande som när man startar sin egen dator. Vi loggar in och sedan kan vi arbetar på en externa datorn. När vi är klara skriver vi

exit

och vi får tillbaka vår lokala terminal.

Det är möjligt att helt hindra root från att logga in över nätverket genom att i filen /etc/securetty bara räkna upp fysiska terminaler så som ttty1, tty2 osv. Om vi lägger in några pesudoterminaler, så som ttyp0, ttyp1, så kan även root logga in direkt.

8.11 rlogin

rlogin är en annan variant av telnet. Om inte speciella åtgärder vidtagits beter den sig exakt som telnet. r-kommandot är emellertid också något speciellt och är skapat för att man ska kunna logga in på ''vänligt sinnande datorer'' utan något loginförfarande.

Säga att vi har datorerna A, B och C. Dessa kan tala om att de litar på varandra. Säg att A litar på B och B litar på C.

På alla datorer finns en användare som heter Anders. När Anders på dator B skriver

rlogin A

omvandlas hans terminal-fönster på B omdelbart till ett terminalfönster på A. Det ända sättet att på ett enkelt sätt se var man befinner i är att titta på skalets ''promt''.

[B:Anders]#
[A:Anders]#

Om  Anders däremot sitter på dator C och försöker med följande:

rlogin A

tvingas han genomföra en vanlig inlogning.

Vi kan nu se rlogins stora svaghet. A vet inte att B litar på C. I praktiken innebär dock As tillit till B att den också litar på C. För en användare Anders kan köra rlogin från C till B och sedan från B till A utan att mötas av något loginförfarande.

root är emellertid undantaget och måste alltid logga in.

Huruvida det är möjligt att logga in utan lösenord avgörs i file /etc/host.equiv. Enbart dess existens är en säkerhetrsisk, bara så du vet. I den filen kan man både tillåta vissa ''hoster'' och användare på dessa, samt direkt tala om vilka ''hoster'' och vilka användare som inte får logga in utan lösenord. Det sker med syntaxen.

[+ | - ][hostname][user]

På dator fanns därför åminstone följande i host.equiv

B

eller

B + anders

Den första varianden innebär att alla på B med samma loginnamn som på A kan logga in utan lösenord. Rad två innebär att bara Anders kan göra det.

Det skulle till och med kunna stå:

-C

eller

 C - Anders

I det första faller får ingen från C logga in på A utan lösenord. I det andra faller får alla med samma loginnamn göra det förutom Anders. Han kunde ändå i vårt exempel ta sig in via B.

En host.equiv-fil får aldrig börja med ett ensamt ''+''. Det innebär nämligen att man litar på alla datorer på nätet (även ''-'' är farligt).

Det finns r-kommadon även för att köra program på andra datorer utan lösenord (rsh) och att kopiera filer från andra datorer till den egna - eller tvärtom (rcp). Konsultera deras manualsidor om du är intresserad.

8.12 FTP

Förutom mail och www är säker ftp bland de mest kända tjänsterna bland de som redan haft kontakt med Internet.

- Det är ju det där man använder för att hämta program på Internet, säger säkert de flesta.

Och det är helt sant. FTP är ett protokoll för överföring av filer mellan olika datorer som är kopplade till ett tcp/ip-baserat nätverk (File Transfer Protocoll).

Detta med att hämta filer hur man vill ute på nätet med hjälp av ftp är emellertid bara en speciell variant av ftp. Ftp kan lika gärna användas för att både hämta och lämna filer på andra system som ingen annan än man själv har tillgång till. När man etablerar en ftp-förbindelse med en annan maskin möts man nämligen alltid av ett loginförfarande. Många har aldig sett det eftersom de grafiska ftp-programmen gömmer detta. Men det sker likväl.

Om man har ett användarkonto på maskinen kan man logga in med sitt användarnamn och lösenord. Då hamnar man i sin egen hemkatalog. Och kan både skicka och hämta egna filer.

För att skapa möjligheten att dela med sig av texter och program har också något som kallas för anonymous ftp skapas. När man kommer till login-promten skriver man anonymous i stället för ett äkta login-namn och anger sin epost-adress som lösenord (ibland funkar det med guest, eller något annat, som login-namn).

Poängen är att när man gör detta hamnar man i ett eget filsystem, ja ett eget system kan man säga, från vilket det inte ska vara möjligt att ta sig ut till det övriga systemet och de program- filer och kommandon so finns där. Allt detta för säkerhetens skull.

Det är som att komma in i receptionen på en myndighet. Bakom receptionen har man inget att göra om man inte är känd och speciellt välkomnad.

Den först katalogen man kommer in i brukar innehålla följande underkataloger. Alla utom katalogen pub är till för att kunna upprätta ett autonomt fungerande system. I dem har du inget att göra. Är systemet rätt konfigurerat kan du ändå inte se något där. Det är i pub och underliggande kataloger som de publikt tillgängliga texterna och programmen ligger.

drwxr-xr-x   7 root     root         1024 Aug 13 13:06 .
drwxr-xr-x   7 root     root         1024 Aug 13 13:06 ..
d--x--x--x   2 root     root         1024 Jun 26 21:25 bin
drwxr-xr-x   2 root     root         1024 Jun 26 21:25 dev
d--x--x--x   2 root     root         1024 Jun 26 21:25 etc
drwxr-xr-x   2 root     root         1024 Jun 26 21:25 lib
dr-xr-xr-x   4 root     root         1024 Oct  4 09:17 pub

Vi ska gå igenom två varianter av ftp. En radbaserad och en med grafiskt interface. Tyvärr finns det inte så många ftp-program som är grafiska för Linux eller Unix. Jag känner bara till tre xftp, llnlxdir och llnlxftp. Det första är ett äldre, och numera icke suportat program. De två senare är emellertid bådas skapade med motif. Har man inte motif är de, åtminstone enligt min mening, extremt slöa att köra. Det beror på att man då tvingad använda statiskt länkade versioner av dem. Vi ska därför titta på xftp.

ftp

Vi börjar emellertid med "vanilla" ftp som den brukar kallas. Det är faktiskt ett extremt effektivt hjälpmedel. Med bara en handfull komandon kan man utföra det mesta.

En uppkoppling med ftp kan inledas på två sätt. Antingen skriver man ftp följt av namnet på den maskin man vill koppla upp sin till på kommanoraden:

ftp ftp.remote.domain

Eller så skriver man bara ftp och kommer då in i ftp eget program där man kan ge kommandon direkt till ftp. För att starta en uppkoppling skriver man då open följt av adressen. Då händer föjande:

[peter@peter peter]$ ftp
ftp> open peter.antman.se
Connected to peter.antman.se.
220 peter.antman.se FTP server (Version wu-2.4.2-academ[BETA-9](1) Thu Feb 29 15:50:44 EST 1996) ready.

Name (peter.antman.se:peter): anonymous
331 Guest login ok, send your complete e-mail address as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Ftp tar konatkt med den andra maskiner och ber oss logga in. Vi provar med ordet "anonymous" och får veta att det är OK och skriver sedan in vår fulla epostadress. Vi är inne.

Vad göra nu? Eftersom vi redan vet att vi alltid hamnar i samma typ av katalog och det egentligen är pub vi är intresserad av flyttar vi till den genom att använda komandot cd (change directory)

ftp> cd pub
250 CWD command successful.
ftp> 

Om vi ångrar oss och vill gå tillbaka och kika på vad det var för katalog vi egentligen hamnade stegar vi bakåt med cd följt av två punkter.

cd ..

Vi låter emellertid blir det. I stället är vi intresserade av att få reda på vad som finns i katalogen pub. Man kan då använda två kommandon ls eller dir. Vi använder ls.

ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 1619
dr-xr-xr-x   4 root     root         1024 Oct  4 09:17 .
drwxr-xr-x   7 root     root         1024 Aug 13 13:06 ..
drwxrwxr-x   2 root     root         1024 Oct  4 09:18 uppload
drwxrwxr-x   6 root     root         2048 Oct  8 09:27 linux
-rwxrwxr-x   1 root     root      1141243 Jun 12 15:31 ls-lR
-rw-rw-r--   1 root     root       485387 Aug  7 20:38 xftp-2.2.athena+term.tgz

226 Transfer complete.
ftp> 

Vi ser då att här existerar två underkataloger. Det syns genom att raden inleds med ett "d". Och att här finns två filer. Bland annat vårt program xftp.

Men vad är ls -lR för en fil? Den är mycket vanligt förekommande när man använder anonym ftp. Det beror på att det är en så kallad rekursiv listning av allt innehåll under pub. Det är således ett utmärkt sätt att ta reda på vad en viss ftp-sajt har för filer. Vi laddar hem den.

För att hämta filer användare man kommandot get följt av filnamnet.

ftp> get ls-lr
200 PORT command successful.
150 Opening ASCII mode data connection for ls-lr (1141243 bytes).
226 Transfer complete.
1141243 bytes received in 2.01 secs (5.5e+02 Kbytes/sec)
ftp>

Om vi ville hämta flera filer på en gång kunde vi använda komandot mget i stället och ange alla filer eller en viss kombination av bokstäver och ett "wildecard". Tex

ftp>mget linux*

Då hämar vi allt som börjar på linux. Ftp kommer fråga oss inför varje överföring om vi vill ha just den filen och då svara vi med "y" för ja och "n" för nej.

Vi vill emellertid ta hem xftp. Om vi tittar i överföringen ovan ser vi att den skedde med en viss variant av ftps protokoll, nämligen "ASCII mode". Det är en fungerande överföringsmetod för engelska texter. Men inte för program eller svenska texter. Därför måste vi ändra överföringsmode. Det gör vi genom att skriva binary. Vill vi tillbaka till ascii skriver vi bara just det.

ftp> binary
200 Type set to I.
ftp> 

Nu hämtar vi xftp på samma sätt som vi använde för att hämta ls-lR. Vi märker då ftps stora svaghet. Hur lätt är det inte att flera gånger i rad skriva fel och få det irriterande medelandet:

550 xftp: No such file OR directory.

Vi lyckas til slut och blir så glada att vi bestämmer oss för att skicka upp vårt hemsnickrade program "snickarn" så att fler kan använda det. Vi minns från den första listningen att det fanns en katalog som hette uppload. Vi går dit för att lädda upp vårt program med "cd uppload".

Men när vi kommer dit så - hu - hommer vi på att den lokala katalog - alltså på hemmadatorn - vi befann oss i inte alls innehåller vårt program. ftp utgår alltid från den katalog man befinner sig i när man inleder uppkopplingen. Men det finns inte bara ett kommando för att byta katalog på ftp-server, utan ett för att byta katalog på den lokala maskinen: lcd. Så vi skriver

ftp> lcd /home/peter/bin
Local directory now /home/peter/bin
ftp> 

Nu kan vi skicka vår fil med kommandot put (även här kan man skicka flera filer med mput).

ftp>put snickarn
200 PORT command successful.
150 Opening BINARY mode data connection for snickarn.
226 Transfer complete.
207 bytes sent in 0.0282 secs (7.2 Kbytes/sec)

ftp>

Vi är nöjda och glada så vi vill koppla ner. Skriver vi bye avslutas ftp-programmet. skriver vi close avslutas just denna förbindelse men vi är kvar i ftp-programmet och kan koppla upp oss någon annan stans.


ftp <adress>starta uppkoppling
open <adress>startar uppkoppling om vi redan startat ftp
cd <arg>byter katalog (.. för att gå bakåt och katalognamnför attgå frammåt)
lcd <arg>byter lokal katalog
lslistar katalogens innehåll
gethämtar fil
mgethämtar flera filer
putladdar upp fil
mputladdare upp flera filer
closeavslutar förbindelsen
byeavslutar ftp-programmmet

xftp

Xftp utför exakt samma saker som ftp. Men med hjälp av musklickningar. Framför allt underlättar xftp om man vill hämta många filer, om filerna har långa och krångliga namn och om man vill läsa de olika README-filerna som ofta brukar finnans utan att först hämta hem dessa.

Så här ser xftp ut efter att vi gjort en uppkoppling SUNETs ftp-server (Svenska Universitets-nätet):

Hur kopplade vi upp oss. Jo, genom att först trycka på den knapp ovan dey står "close" på. Innan vi kopplade upp oss stod det nämligen "Login" där. Då får vi upp en ny meny:

Längst upp i högra hörnet ser vi att det står "Anonymous Login". Pekar vi med musen där och håller ner knappen kan vi välja mellan "Guest", "Mail adress" och "User Login". Om vi använder User Login fyller vi i vårt namn i rutan Login och vårt lösenord i Password-rutan. Väljer vi Anonymous sköter xftp det år oss. Då fyller vi bara i adressen till ftp-servern i rutan "Remote host".

Man måste ha musmarkören över rutan för att det ska vara möjligt att skriva in någonting. Sedam trycker vi på "Connect". Menyn försvinner och vi kopplas upp.

För att kunna utföra våra kommandon markerar vi något genom att klicka med musen på det, tex en fil eller en katalog. Vi håller sedan ner den högra musknappen och får då upp en ny meny där vi kan välja framför allt cd eller get. Här kan man också ställa in vilken typ av överföring vi vill göra under "File Modes" och om vi hat markerat en README-fil kan vi välja "View" för att lösa den. Ett kommando kan man utföra utan att ha pekat ut någonting, Up. Det är detsamma som att skriva "cd .." i vanliga ftp.

På så sätt kan vi flytta oss runt i katalogträdet och hämta filer. Vill vi ändra katalog lokalt trycker vi på knappen "Remote", den byts ut mot "Local" och vi kan ändra katalog på samma sätt som på ftp-servern.

Högst upp i xft finns några användbara menyer. Framför allt "Options" och "Multi File Options". Under "Otions" finns en ingång som heter "Listing option". Här kan man välja om man vill ha en lång lista med detaljerad information om innehållet, eller en mellanlång lista med - ja du gissade rätt - mellanmycket information. Och så det korta som vi använt i bilden ovan.

Markerar man fler filer blir menyn "Multi File Otion" svärtat. Där kan man välja att hämta alla desa filer, eller att ladda upp evetuella filer som man markerat under "Local" eller helt enkelt rensa sina markeringar.

Sluta gör man genom att hålla ner "Quit" och välja "Quit" eller "Abort".

8.13 Archie

Nu har vi lärt oss hur man hämtar filer man anonym ftp. Men hur vet man var man var man ska hitta dem? Ett sätt är förståss att koppla upp sig mot någon välkänd och stor ftp-sajt och kolla runt. Ett annat är att anväda Archie.

Runt om i världen finns ett antal archieservrar som kör ett archie-serverpogram. I dessa indexeras enorma mängder av information om vad som finns på olika ftp-sajter världen runt. Dessa archie-servrar är dessutom sökbara. Om vi t.ex letar efter ett visst program kan vi fråga dessa archieservrar om det finns och i sådana fall var.

I Sverige finns en archieserver vid Lunds tekniska högskola: archie.luth.se. Det finns en i Finland också som är bekväm och snabb att använda : archie.funet.fi, samt en i Norge: archie.uninett.no.

Det finns flera metoder att göra archi-sökningar (i Lund kan man numera göra det genom www också). Vi ska titta på två här: inloggning med telnet och xarchie.

Inlogning med telnet är ett rätt obekvämt sätt att göra sökningar på, men det kan vara bra att kunna grunderna ändå.

Vi startar alltså en vanlig telnet kontakt med en archiserver. Och loggar i med användarnamnet ''archie''.

telnet archie.uninett.no
Trying 128.39.2.20...
Connected to ratatosk.uninett.no.
Escape character is '^]'.


SunOS UNIX (ratatosk.uninett.no)


login: archie

                  Welcome to the Norwegian Archie server!
                                 Vers 3.3 

                    THE ARCHIE DATABASE IS INCOMPLETE!
                 It was corrupt and we are now rebuilding.

# Bunyip Information Systems, Inc., 1993, 1994, 1995

# Terminal type set to `xterm 24 80'.
# `erase' character is `^?'.
# `search' (type string) has the value `exact'.
archie> 

Vi kan nu börja ställa frågor. Vi gör det genom kommandot prog följt av en frågesträng, tex.

archie>prog snack
# Search type: exact.
# Your queue position: 1
# Estimated time for completion: 1 minute, 27 seconds.
working... =

Host ftp.mc.hik.se    (194.47.161.192)
Last updated 11:31  2 Oct 1996

    Location: /pub/users/mia95anp
      FILE    -rwxrwxrwx    2654 bytes  01:00  7 Nov 1995  snack

archie>

Vi söker alltså efter filer (och kataloger) som heter snack. Vi får bara en träff. Hade vi däremot sökt på t.ex linux hade fått enormt många träffar.

I archie kan man ställa in vilken form av träff man är ute efter, om den till exempel ska vara exakt eller om filen bara behöver innehålla orden någonstans. Typ av sökmetod ställs in med kommadot ''set search type'' där type kan vara


exactexakt träff
subdel av ord
regexanvänd Unix-likt reguljärt uttryck
subcasedel av ord som träffas med Unix-likt reguljärt uttryck
Skriver vi

archie>set serch exact
archie>prog mail

träffar vi enbar filer och kataloger som heter exakt mail. Skriver vi däremot

archie>set serch sub
archie>prog mail

kan vi få träff på Mail, popmail, maily osv.

Det går i archie också att avgränsa vilka länders ftp-sajter sökresultatet ska visa. Det görs med kommandot ''set match_domain''. Skriver vi:

archie>ser match_domain se:fi:no

får vi enbart träff på ftp-sajter i Sverige, Finland och Norge.

På archie-servrar finns dessutom ofta redan fördefinerade kluster av länder. Vilka dessa är får man reda på genom att ange ''domain'' på kommandoraden.

När vi hittat vår fil, så minns vi vägen till den i vårt huvud eller skriver ner den och loggar ut med quit:

archie>quit

xarchie

Xarchie är alltså en archie-klient med grafiskt interface. I den kan vi ställa in allt som vi gjorde i telnet- sessionen. Men vi gör det genom mussklickningar, så får xarchie sköta kontakterna med archiservern. När vi hittat vår fil - ja, då tar vi hem den direkt genom att klicka på den. När vi startar xarchie får vi följande fönster (inte riktigt, det är tomt på information).

Innan vi startar vår sökning måste vi tala om åtminstone tre saker för xarchie. Vilken archie-server och vilken söktyp vi vill använda, samt vad vi letar efter. De två första ställer vi in under knappen "Settings". Där kan vi välja "Archie host" och "Serch Type" genom att markera vårt val. Vi har i princip samma val som vi hade när vi telnetade.

Sedan skriver vi in namnet på det vi söker i rutan "Serch Term" och går upp och väljer menyn "Query" och väljer "Query item". Sökning sker och de ftp-sajter där det finns något som stämmer överens med vårt sökord visas i det vänstra fönstret. Klickar vi på en av dem, visas mer information i de andra fönstren. I Mellanfönstret visas "vägen" och fönstret längst till vänster visas "träffen".

Så kan vi leta runt bland de olika sajterna och kontrollera om vi hittat något som intresserar oss. Gör vi det. Ja, då klickar vi bara på filen - så hämtas den hem med hjälp av ftp. Vi kan också använda menyn "File". Med "Get" kan vi hämta filen. Säga att vi hittar ett program som verkar intressant. Där ligger också en README-fil. Med "Open" under File-menyn kan vi läsa denna fil och kontrollera om programmet verkar vara något att ha.

Under "Settings" kan den avancerade användaren ställa in xarchie mera i detalj, tex vilken form av ftp-överföring som ska användas. Här bör man också fylla i sin epostadress. xarchie använder nämligen den när den loggar in på ftp-sajter, och det finns vissa sådana som gör en så kallad revers lookup av adressen. Om den inte hittar en giltig ip-adress från epostadressen så vägrar den tillträde.

8.14 Talk

Talk är ett program med vars hjälp man kan ''ringa'' upp en annan användare, på den egna datorn eller på andra sidan jordklotet. När kontakt är etablerad kan man skriva till varandra i realtid. Talk finns så vitt jag vet enbart som radbaserat program.

Man inleder en talk-session genom att skriva talk följt av personens användarnamn, @ samt domänadress.

talk bengt@annan.domain

Vill man ha reda på en viss persons loginnamn eller om man vill veta om personen i fråga över huvud taget är inloggad kan man testa först med finger. Då kan man också så om personen i fråga är inloggad på flera terminaler. I sådana fall kan vi använda terminalnamn (den han senast var aktiv i) i ställer för loginnamnen: tex

talk tty3@annan.domain

På Bengts terminal kommer då ett meddelande att du vill ha en talk-session med honom. Om han känner för det svara han med att även han ge ett talk-komando:

talk anders@myhost.your.domain

När sessionen inleds delar sig skärmen (eller xterm) i två delar. Det man själv skriver syns högst upp och det den andra skriver syns i den nedre delen.

När man är klar säger man hej då och trycker på <CNTR>-c.

8.15 IRC

Irc betyder Inter Ralay Chat. Det är ungefär samma sak som Talk, fast många fler kan delta. Irc är alltså till för att kunna delta direkt i en pågående diskussion i realtid över nätet (med hjälp av tangenbordet). Principiellt fungerar det så att man kopplar upp sin mot en irc-server och går med i någon av kanalerna som finns där. Sedan kan man titta vad som skrivs, göra inlägg, samt en rad andra saker. På irc används så kallade "nic-names". Man döljer sig bakom en pseudonym. Det går att ta reda på vem som döljer sig bakom, men i samtalet på irc-kanalen är det en "nic-name" som identifierar en.

Jag är, måste jag erkänna, inte någon större användare av IRC och kan därför inte alla dess finurliga varianter. Därför gå vi bara här igenom själva grunderna. Med dessa ska du kunna koppla upp dig med chat, gå i en kanal, göra inlägg och avsluta.

Chat på Unix genomförs i huvudsak i programmet ircII. Det finns också ett par X-baserade irc-klinetret. Vi ska titta på en som herer zircon. Men vi börjar med ircII.

Man kan starta irc genom att enbart skriva irc på kommandoraden. Då kommer man till en förinställd irc-server. Därifrån kan man sedan ta sig vidare. Det går emellertid bra att också ange en irc-server på kommanodraden. Man måste då emellertid även ge ett "nic-name" på kommandoraden.

På högskolan i Kallmar finns en irc-server. Vi kopplar upp oss till den:

irc linus-fan irc.mc.hik.se
*** Connecting to port 6667 of server irc.mc.hik.se
*** Welcome to the Internet Relay Network peter (from lois-lane.mc.hik.se)

*** If you have not already done so, please read the new user information with

  /HELP NEWUSER
*** Your host is lois-lane.mc.hik.se, running version 2.8.21
*** Your host is lois-lane.mc.hik.se, running version 2.8.21
*** This server was created Sun Nov 19 1995 at 22: 15:01 MET
*** umodes available oiws, channel modes available biklmnopstv
*** There are 1 users and 0 invisible on 3 servers
*** This server has 1 clients and 2 servers connected
[1] linus-user                                                                     

> 

Allra längst ner ser vi en liten prompt ">". Det är vid den vi utför allting. Här ger vi kommandon och när vi är inne i en kanal skriver vi våra inlägg här.

Alla kommandon i irc måste föregås av tecknet "/" så att irc-servern vet att det är ett kommando. Det finns en uppsjö kommandon. Vi ska bara lära oss några få. Ett mycket nyttigt kommando är "/help". Med det får man upp en hjälpruta som listar olika komandon. Skriver man in ett får man hjälp med det. Vi tar oss ur hjälpen genom att trycka på return.

Nu ska vi tar reda på vilka kanaler som finns, gå med i en, skriva ett inlägg och gå ut. Vi börjar därför med kommadon /list:

*** Channel    Users  Topic
#linux  10
[1]
>/list

Och får då reda på att kanalen #linux finns och att 10 personer är inloggade där. Vi går med i kanalen genom kommadot /join #linux. Vi kommer då till kanalen, där det meddelas att vi just gått med. Någon hälsar och vi hälsar tillbaka genom att skriva något vid prompten och trycker på return. Kolla hur de andra skriver och följ mönstret.

Vi deltar en stund och bestämmer oss för att sluta och skriver därför /quit. Om vi vill kan vi skriva till ett skäl till varför vi slutar, tex

/quit ska lägga ungarna

Vi är nu tillbaka i irc-servern och bestämmer oss för att gå till en annan irc-server och skriver därför /server irc.annan.server.



/listlistar alla pågående irc-kanaler
/namesvisar alla användares "nic-names" på aktuell kanal
/join <kanal>gå med i kanalen
/msg <nick> <text..>skriv ett privat meddelande till person med "nic-name"
/nickändra nick-name
/quitsluta
/helphjälp
/whois <nick>visar personens "sanna" identitet


zircon

Zircon innehåller i princip alla ircII-s egenskaper. Fast man styr den med musen i stället. zircon har en uppsjö med fönster och menyer. När man startar zircon kommer man direkt till irc.blackdown.org och får upp två fönster. Ett som skickar meddelande från servern (vilket vi inte bryr oss om) och ett huvudfönster från vilket vi styr vad vi vill göra.

Vi kan där ändra de automaiskt inställda värdena för vår användaridentitet. Vill vi gå till tex irc.mc.hik.se i stället skriver vi in det på raden "Server" och trycker på return. Vi gör inte det. I stället går vi in under "Chanels" och väljer "List". Vi kommer då till ett nytt fönster, där vi kan göra lite olika inställningar om vilka krav vi har på innehållet i listningen. När vi gjort det trycker vi på "List" och får reda på vilka kanaler som finns (visas ej). Där står bland annat #linux. Vi fyller i det i huvudfönstret vid "Chanel" och trycker på return och får upp en kanalfönster:

Här kan vi se och göra en massa saker. I huvufönstret flyter inläggen in. Längst till höger ser vi alla inloggande användare. Vill vi kolla upp någon av dem gå vi in under "Names", väljer att namn och får du upp en rad alternativa kommandon, tex whois. Som nykomling kanske vi vill meddelande vår närvaro. Vi går in under "Action" och aktiverar "New". När vi vill höra ett inlägg skriver vi i lilla raden längst ner i fönstret och trycker på reurn. Vill vi sluta så är det "Leave" som gäller. Vi får då chansen att skriva i ett litet meddelande om varför vi vill sluta. Resten får du experimentera dig fram till.

8.16 WWW

Nu har vi kommit till den tjänst som gjorde att Internet verkligen slog igenom: Word Wide Webb. Eftersom online-versionen av Svenska Linux enbart går att läsa på webben räknar jag kallt med att alla vet vad det är för något. Det finns en uppsjö web-läsare för Linux. Ännu så länge har jag inte hittat någon som slår netscape. Eftersom chansen emellertid är omkring 80 procent att du läser detta med just nescape tänker jag inte försöka förklara hur man använder den (det vet du säker bättre än jag). Däremot är det inte så självklart att du lyckats få den att fungera på Linux. Vi ska därför titta på några fällor.

Innan dess ska vi emellertid vår vana trogen först titta på en radbaserad web-läsare. Det finns nämligen en mycket effektiv sådan till Linux: lynx. Den är bra att ha till hans när inget annat fungerar. Den är dessutom mycket enkelt att använda. När man startar lynx för första gången kör den i sk "novice mode", alltså nybörjar-tillstånd. I detta tillstånd kan man längst ner i fönstret få hjälp med vilka kommandon som finns. Även om det kan kännas lite förlämpande att klassas som nybörjare är ju lynx inget vi planerar att använda jämt - inga bilder, inga tabeller, väldigt lite av det som gör www attraktivt syns nänligen i lynx - utan när det krisar.

Vi startar lynx:

   



[IMAGE]
     
 

                       VÄLKOMMEN TILL ANTMANS HEMSERVER
 
     
 
   
   Än så länge finns här inte så mycket. Prova dock gärna en onlinebok

   som är under uppbyggnad.                                              

   De galna åren                                                        

   Eller prova mitt nya program WebSnack.Ett chat-program för

   webben. Unix help Peter         
     _________________________________________________________________

     
 
     
 
Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.

  Arrow keys: Up and Down to move. Right to follow a link; Left to go back.

 H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

Mer än så här är det i princip inte. Vi vandrar upp och ner på websidan med piltangenterna (upp och ner). Vill vi bläddra en sida i taget använder vi mellanslagstangen. När vi använder piltangenterna stannar lynx vid varje länk, som är de fettade orden i fönstret. Vill vi följa en länk ställer vi oss på den och trycker på höger-tangent-pilen. Ja, man backar bakåt med vänster-tangent-pilen.

För att gå till en sida som vi känner till adressen trycker vi på G och skriver in adressen (med http://) efter texten "URL to open", trycker return och off we go.

URL to open: http://www.antman.se

Vill vi förändra något av lynx bettende går vi in under options genom att tryck på O. Här kan vi till exempel välja att skriva in vår epostadress, sätta ISO Latin 1 och vilken typ av användare vi är :-).

              Options Menu (Lynx Version 2-4-2)
 
     E)ditor                    : NONE
     D)ISPLAY variable          : :0.0
     B)ookmark file             : lynx_bookmarks.html
     F)TP sort criteria         : By Filename
     P)ersonal mail address     : peter.antman@abc.se
     S)earching type            : CASE INSENSITIVE
     C)haracter set             : ISO Latin 1
     V)I keys                   : OFF
     e(M)acs keys               : OFF
     K)eypad as arrows
          or Numbered links     : Numbers act as arrows
     preferred lan(G)uage       : en
     U)ser mode                 : Novice
 
 
 
 
 
  Select capital letter of option line, '>' to save, or 'r' to return to Lynx.

 Command:

Vi gör det genom att ange bokstaven för det vi vill ändra. Ändrar och trycker på return. När vi är klara går vi tillbaka till huvudfönstret genom bokstaven r. (Stora och små bokstäver har ingen betydelse i lynx).

Vi avslutar lynx med Q och sedan Y (jo, lynx protesterar).

netscape

Ingen har ännu lyckats konkurera ut netscape som web-läsare. Trots att den i åtminstone unix-världen är en minnesslukande best. Netscape stödjer egentligen inte Linux. Men varje ny version läggs ut som en osuportad binär som Linux-användare är fria att (gratis) använda. På grund av licencieringsregler är chansen liten att netscape följde med i din Linuxdistrubition. Gå till:

ftp.sunet.se/pub/www/Netscape/navigator/

och hämta hem den senaste verionen till Linux. När du har packat upp den på rätt ställe är det ett par extra åtgärder som måste utföras. Netscape är statiskt länkad till motif. Detta kan skapa häftiga problem med tangent-bindningar och när man klickar på menyer. För att undvika detta följer filen XKeysymDB samt katalogen nls med nescapedistibutionen (du har förmodligen dessa redan i /usr/X11/lib/X11), men netscape brukar må bättre om man använder de som följde med. För att netscape ska hitta till dessa måste två miljövariabler sättas i /etc/profile eller $HOME/.bash_profile. Lägg in följande rader, men byt ut filangivelsen till den som stämmer för sig.

export XKEYSYMDB=${XKEYSYMDB-/usr/local/libXKeysymDB}
export XNLSPATH=${XNLSPATH-/usr/local/lib/netscape/nls}

När du sedan ska starta netscape för första gångense till att du är uppkopplad mot nätet. netscape vill nämligen gå till Netscapes egen hemsida när den startas. Enligt min erfarenhet hänger sig emellertid netscape gärna om dess DNS-uppslag inte kan genomföras, vilket ju är fallet om man inte är uppkopplad.

Gå sedan in under "Options" - "Mail and News perferances" och klicka på flicken "Servers". Här kan man ställa in att netscape ska starta med en blank sida i stället för någon fördefinerad hemsida. Gör det. Ändra också inställningen "Check Mail" från "every" till "never". Annars görs ändå ett DNS-uppslag. Om du mot förmodan skulle använda netscapes mail-funktion kan du istället manuellt välja att kolla din pop-server. (Fyll föresten i alla andra uppgifter också när du ändå är inne i inställningarna).

Nu är det bara att köra.

En nackdel med att köra Linux är extra synlig just med netscape. Det är inte många fräsiga hjälpprogram och plugin-moduler som fungerar med Linux. Real Audio funkar, tcl/tk funkar. Sedan är det inte så mycket mer. Ett allvarligt problem är att Adobe (ännu) inte gett ut någon Acrobat Reader för Linux. Det innebär att man inte kan läsa att de sidor och filer som är skapade i pdf-format.

Hav dock förtröstan. Det finns ett annat program som klara av det, xpdf. För att kunna använda det inifrån netscape krävs dock två små handgrepp. I hemkatalogen måste filerna .mime.types och .mailcap finnas. Finns de inte, skapa dem. I .mine.types lägger du in:

application/pdf pdf

Och i .mailcap

    # Use xpdf to view PDF files.
    application/pdf; xpdf -err %s

Sedan hittar netscape xpdf själv. Gör den inte det? Tala om för den vad den ligger i "Options" - "General Preferances" - "Helpers".

8.17 Usenet

Usenet tillhör också en av Internets mest kända tjänster. Usenet skapade emellertid inte för Internet utan för att Unixdatorer med hjälp av uucp-protokollet skulle kunna skapa en visa spridd offentlighet. Usenet går kanske bästa att jämföra med en offentlig anslagstavla där vem som helst kan hänga upp ett meddelande som vem som helst kan svara på. På Internet finns i dag tio tusentals sådana usenet-anslagstavlor.

Det finns en rad program man kan läsa news med på Linux. Om man sitter fast ansluten till Internet eller har en lokal new-server på sitt nätverk eller kan tänka sig att läsa sina nyheter medans man är uppkopplad via PPP (markeringarna tickar) så är det inget som helst problem. Man väljer sitt newsprogram (Pine, Elm, emacs, slrn, netscape osv). Ställer in miljövariabeln "NNTPSERVER" i /etc/profile eller $HOME/.bash_profile:

export NNTPSERVER=news.server.domain

Eller använder de inställningsmöjliheter som programmet bjuder på. Första gången tar det förmodligen rätt lång tid innan du får kontroll över programmet. Den laddar då ner en mycket lång lista med alla nyhetsgrupper som din news-server levererar. Hav tålamod.

Vi ska titta på två nyhets-program, slrn och knews. Bägge kan användas för att läsa online. Men vi nöjer oss inte med det. Vi vill kunna läsa våra nyheter och komponera våra fyndiga inlägg i lugn och ro. Vi behöver kort sagt en möjlighet att ladda hem de nyhetsgrupper vi är intressade av.

Det finns inget riktigt bra sätt att göra detta med Linux. Visst, man kan sätta upp en egen news-server, men det är ett otroligt arbete. Det är heller inte riktigt sant det jag sa. Normannen Arnt Gulbrandsen <agulbra@troll.no> har skapat ett program son heter leafnode som kan lösa detta åt oss. Det är en slags miniatyr-newsserver, som har förmågan att ladda ner de nyhetsgrupper vi visat intresse för på vår begäran. Vi anger således inte specifikt vilka nyhetsgrupper vi vill ha. Leafnode känner av detta åt oss. Sedan läser och postar vi nyheter mot vår egen lilla new-server.

Nu är tyvärr inte heller dettahelt sant. Programmet man använder till att hämta nyheter med - fetch - är inte helt buggfritt och alla nyhetsläsare använder inte systemanrop som är kompatibla med leafnode. Problemen är väl kända och kommer säkert bli åtgärdade framföver. För tillfället måste hacka. Vi måste ändra i kälkoder, kompliera och skriva skript. Bökigt.

Jag ska emellertid försöka göra allt detta åt er så att de blir så enkelt som bara möjligt är.

Vi börjar med leafnode. Känner du att det verkar för bökigt. Kolla in nyhets-programmen först. Läs on-line och prova senare.

8.18 leafnode

Börja med att installera leafnode. Den finns i rpm-format på ftp.redhat.com. Det skapas då en rad filer i /var/spool/news. Jag tänker inte gå in på några detaljer vad gäller desssa. Kolla att de ägs av news och har rättigheter 755 om något krånglat. I /usr/lib/leafnode/config ställer vi in allt det vi behöver ställa in. Det är bara tre värden. Här ställer man in den externa news-servern som nyheterna ska hämtas ifrån. Hur många dagar ett nyhetsinlägg ska ligga kvar och hur många nyhetsinlägg som maximalt får hämtas. Vi använder små värden för dessa när vi börjar:

server=news.remote.server
 expire=7
 maxfetch=1000

Sedan måste vi se till att leafnode verkligen dyker upp som en news-server. Det löser vi i /etc/inetd.conf. Där ligger vi in fäljande rad:

nntp    stream  tcp     nowait  root    /usr/sbin/tcpd \ /usr/sbin/leafnode

Kolla så att det inte redan ligger en sådan rad, och att vägarna är de rätta till programmen. Starta om inetd:

killall -HUP inetd

Får du problem så kolla i /etc/services efter följande rad:

nntp            119/tcp         usenet          # Network News Transfer

Nästa steg är att köra en första fetch för att initialisera leafnode. Lägger vi till "-v" efter fetch kan vi följa vad som händer:

fetch -v

Glöm inte bort att koppla upp dig först.

Sedan heter det i dokumentationen att man öppnar sitt favoritprogram och tittar in i de ännu toma nyhetsgrupper. Här måste man först ställa om miljövariabeln NNTPSERVER till sin lokala maskin, antigen ett domännamn om du har ett ethernetkort eller localhost. Sedan kör man fetch igen och så hämtas dessa nyhetsgrupper hem på riktigt.

Gjordes de det?

Inte. Nehe. Samma problem som alla andra. Fetch har liksom inte fattat att du kollat i dina nyhetsgrupper. Om detta beror på fetch (en del hävdar det) eller om det beror på nyhetsprogrammen (andra hävdar det) låter jag vara en öppen fråga. Genom en liten enkel rutin och en hackad variant av Knews kan vi få ett skönt skandinaviskt sammarbet (Knews är skriven av en svensk - Karl-Johan Johnsson <su95-kjo@nada.kth.se>).

Vi måste för det fösta lära oss att lägga till nyhetsgrupper manuelt. Det ska vi göra i /var/spool/news/interesting.groups. Vi måste dock ha identiteten news när vi gör det.

su root
cd /var/spool/news/interesting.gruops
su news
touch comp.os.linux.announce
touch swnet.unix
exit

Vi måste således känna till namnen på nyhetsgrupper vi vill ha hem. Och inte stava fel.

Om vi har ett nyhetsprogram som sänder rätt signaler till leafnode kommer de nyhetsgrupper vi använder att ständigt uppdateras, därför att datumstämpeln på dem i interesting.groups ändras. Om en nyhetsgrupp varit rörd de senaste två dagarna eller accessad flera gånger under en vecka kommer nya inlägg att hämtas hem när fetch körs. Då skickas också de meddelanden du skrivit iväg.

Om vi vill automatisera vårt hämtande av nyheter kan vi lägga in kommandot fetch i vår ip-up-fil (vilket alla säger ska funka - jag har aldig fått det att fungera). Ytterligare en sak krävs av oss. Vi måste köra ett upprensningsprogram med jämna intervaller. Det gör vi enklats genom att skapa ett cronjobb. Förtvivla ej. Följ mig. Bli root. Skriv:

crontab -u news -e

Det innebär att kör crontab-kommandot som root. Du kommer nu in i editorn vi. Där ska vi fylla i när vi vill att cron ska utföra vårt arbete. Först måste vi trycka på i för att komma in i inskrivningsläge. Sedan skriver vi tex:

0 4 * * 2 /usr/sbin/texpire

De två första siffrorna anger klockslaget och den sista siffran anger dag i veckan. Mer sällan än så bör du inte köra. Här kör vi alltså klockan 04 varje tisdag. Skriver du fel. Tryck på <esc> och ta bort med x och gå in med i och skriv det rätta. Tryck på <esc> igen, sedan på : och skriv wq så sparar du och slutar.

knews

Nu är det dags att läsa nyheterna. Vår vana otrogen börjar vi med X-programmet, knews. Har vi det redan hemma (det finns i rpm-format) startar vi bara och kör (glöm inte miljövariabeln NNTPSERVER). Blir den märkligt och obändigt stor. Prova med att ange en geometri, tex.

knews -geometry 600x700

Har vi den inte hemma finns det skäl att fundera om man ska ta hem den och kompilera den själv eller om man ska ladda hem en specialkompilerad binär som jag gjort (helt utan garantier). De är nämligen så att använder vi knews rakt av kan vi få problem.

För det första fungerar inte knews (sägs det - och jag tror på det) inte med leafnode, därför att leafnode inte fattar när knews har accessat en nyhetsgrupp. Det går bra att läsa, men efter ett par dagar kommer fetch inte ta hem några nyheter igen. Vi kan använda touch igen. Men det är ju bekvämare att inte behöva det. Det finns ett hack till knews som löser detta. I min förbyggda är detta gjort.

Det andra skälet är att precis som vi fick problem med vår epostadress förut får vi också här. Chansen är överhängande att knews fiskar upp din fullkommligt onåbara epostadress. Också detta går att ordna vid kompileringen. I min version läser knews file /etc/knewsdomain och använder det som står där som högra ledet i epostadressen (det ska alltså skrivas in utan @).

your.domain

Sedan kan man skriva in sitt fullnamn i filen /usr/X11/lib/X11/app-default/Knews så här:

! Local hack to include full name in email
Knews.mailName: anders.nilsson

Den kompilerade versionen finns på ftp.mc.hik.se/users/mia95anp/knews0.9.8-binleaf-linux.tar.gz.

Den installeras genom att den läggs i / och körs:

tar -xvzf knews0.9.8-binleaf-linux.tar.gz

Filerna hamnar i /usr/local-hierarkin.

Alltså du har tagit hem den version av knews som passar dig. Bäst att köra igång den.

Som vi ser påminner knews utseende en hel del om exms. Vi har två fönster. Ett uppe där nyhetsgrupper och även inäggens rubriker visas. Vi har ett nedre fönster där själva inläggen visas. I mitten finns en rad knappar och meny-knappar. Dessa ändrar funktion beorende på var man befinner sig i knews.

När vi öppnar knews visas nyhetsgrupper vi prenumererar på och som innehåller olästa inägg. Här kan vi till exempel välja att i stället se alla grupper som är möjliga att prenumererar på. Vi trycker då på "All groups" och får upp en enorm lista samtidig som knapparna ändra funktion. Vår "All groups"-knapp har tex blivit "Unsubscribe". Här kan vi gå igenom vilka grupper vi vill prenumerara på eller inte längre prenumerera på. Vill vi tex prenumererar markerar vi en viss grupp trycker vi på "Subscribe". Eller så vill vi se vad som finns i gruppen. Då trycker vi på "Goto group". När vi är klara använder vi knappen "Done" och kommer tillbaka.

Vi bestämmer oss för att vi vill läsa comp.os.linux.networking för att få reda på det senaste på linuxfronten. Med musen klickar vi på den rad där namnen på den nyhetsgruppen står. Då visar sig en av knews speciella egenskaper. Vi får inte upp en hel lista med varenda inlägg. Vi får upp en lista med de "träd" som finns. Alltså om det skrivits fem inlägg som hänger ihop med varandra så listas dessa på samma rad. Siffran längst till vänster anger antalet inlägg.

Vi kan välja att titta på detta på åtminstone två sätt. Genom att klicka på rubriken kan vi beta av inlägg efter inlägg i det aktuella trädet. Inläggen kan vi läsa i det nedre fönstret.

Men vi kan också välja att få en visuell bild av trädet genom att trycka på "View thread". Då få vi en rad rektanglar i övre fönstret med namnet på den som gjort inlägget. Klickar vi på en ruta kan vi läsa meddelandet.

Ok. Vi vill göra ett eget inlägg. Då går vi till "Post" och väjer "Post a new article". Då händer kanske något överaskande. Vi kastas in i en extern editor. knews använder vi aumagagiskt. Detta kan man emellertid ändra i /usr/X11/lib/X11/app-defaults/Knew. I min förbyggda binär är grundinställningen emacs. Bäst vore försås om det fanns någon editor skriven i tcl/tk som knews kunde kommunicera med - eller gör det det?

I vilket fall som helst. Vi skriver in vår rubrik, vårt inlägg och spara och avslutar som vi alltid gör i vår favoriteditor. Nu kan vi också passa på att kollla hur vår epostadress ser ut. Gör vi något galet kommer knews att klaga.

Under Post-menyn kan vi givetvis välja mycket fler saker, som att svara på ett inlägg, svara på ett inlägg via epost i stället, skriva epost till någon vi tycker skrivit något smart, osv.

slrn

Jag kan inte säga att jag är särksilt förtjust i denna nyhetsläsare, även om den påminner mycket om Pine. Framför allt därför att det är svårt att läsa rubrikerna i den, eller på grund av att man får sådana här meddelanden "Terminal not powerful enough for SLang". En uppebar fördel är att den funkar med leafnode (dock inte nödvändigheten av touch för att överhuvud taget få igång en nyhetsgrupp).

När vi startar får vi en lista på de grupper vi prenumererar på. Är det första gången vi kör slrn kommer programmet hämta hem en lista med nyhetsgrupper, där vi sedan kan välja vilka vi vill prenumerera på.

.slrn 0.8.6.1 ** Press '?' for help, 'q' to quit. ** Server: peter.antman.se  

       10  comp.os.linux.advocacy
        9  comp.os.linux.announce
       49  comp.os.linux.development.apps
       31  comp.os.linux.development.system
      112  comp.os.linux.hardware
        1  comp.os.linux.m68k
->   1085  comp.os.linux.misc
      626  comp.os.linux.networking
      234  comp.os.linux.setup
      414  comp.os.linux.x




-*-News Groups --comp.os.linux.misc                         -- 7/10  (Bot)   

SPC:Select  p:Post  c:CatchUp  l:List  q:Quit  ^R:Redraw  (u)s:(Un)Subscribe

Vi vandrar upp och ner med piltangernenterna och väljer nyhetsgrupp med mellanslag och får då upp en lista med inläggen. Vill vi läsa ett inlägg använder vi mellanslagstangenten igen. Då delar sig fönstret:

slrn 0.8.6.1 ** Press '?' for help, 'q' to quit. ** Server: peter.antman.se  

->  D   56:[See-Mong Tan]    Video Mosaic Netscape Plugin for Linux

    -   86:[Darren Hiebe]    Vim-4.5 An enhanced vi editor
    -   98:[Thor Sigvald]    xldlas v0.20 - An X application for statistics

    -  114:[Roland Weibe]    xtem X11-TeX-Menu 5.23
News Group: comp.os.linux.announce                          -- 5/8  (Bot)    

From: See-Mong Tan <stan@vosaic.com>
Newsgroups: comp.os.linux.announce
Subject: Video Mosaic Netscape Plugin for Linux
Date: 18 Oct 1996 09:57:05 GMT
Followup-To: comp.os.linux.networking
Organization: Vosaic Corp
      
-----BEGIN PGP SIGNED MESSAGE-----

Vosaic (Video Mosaic) is available as a Netscape Navigator plugin
for Linux from the Systems Research Group of the University of
Illinois at Urbana-Champaign and Vosaic Corp.

Vosaic supports real time video over the Internet that is embedded in

standard Web pages.  The technology allows one to view MPEG video
at 6 to 10 frames per second over telephone dial up connections at
28.8 Kbits/s.  Higher bandwidths improve video quality.  There is no

download latency - videos are displayed as the data arrives over the

network.  Get the 1 BETA 12 plugin at:

        http://www.vosaic.com
  1115 : Video Mosaic Netscape Plugin for Linux             -- 1/64 (Top)    

SPC:Pgdn  B:PgUp  u:Un-Mark-as-Read  f:Followup  n:Next  p:Prev  q:Quit

I den övre delen ser vi inläggen och i den nedre kan vi läsa enskildada inlägg. I just detta ser vi att det kommit en ny plugin-modul för netscape som funkar på Linux, Antingen går vi runt med pilttangenterna och mellanslagstangen eller också använder vi p för det förra inläggen och n för nästa inlägg. Vill vi kommentera använder vi f och hamnar i editorn vi där vi kan skriva vår kommentar. Vi går tillbaka till listan över våra prenumererade nyhets-gupper med q.

Säg att vi vill se hela listan för att kolla om vi ska prenumerera på några fler grupper. Då trycker vi på L. Där kan vi vandra upp och ner och trycka på s på de vill vill prenumerera på och u på de vi inte längre vill prenumerera på.

Kom dock ihåg. Med leafnode innebär att "prenumerera" inte att nyhetsgrupperna automatiskt kommer att laddas hem, utan bara att dessa kommer vara markerade som prenumererade i slrn.

Nu är vi klara med Internet och alla dessa applikationer. Det finns många flera. Lycka till.


Bakåt Framåt Innehåll