Obsolete English site
Uutiset
Linux - Tehokas hallinta -kirjan tukisivu
Vanha sivusto


Luku 5 Lisäohjelmien asennus

Listaus 3

yum install yum-priorities

Listaus 5

rpm -ivh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

Listaus 6

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

Listaus 7

yum install xmms xmms-mp3 xmms-faad2

Listaus 8

yum install audacious audacious-plugins-nonfree*

Listaus 9

yum install gstreamer-plugins-ugly gstreamer-plugins-bad

Listaus 10

yum install amarok amarok-extras-nonfree

Listaus 11

rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-1.0-1.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux
yum install flash-plugin

Listaus 12

rpm -ivh AdobeReader*.rpm

Listaus 13

yum install compat-libstdc++-33
rpm -iv RealPlayer10GOLD.rpm

Luku 7 Miten PC ja Linux käynnistyyy

Listaus 2

# dd if=/dev/hda2 of=/bootsect.lnx bs=512 count=1

Listaus 3

# grep boot= /etc/lilo.conf

Listaus 4

# mcopy /bootsect.lnx a:

Listaus 5

attrib -s -r c:\boot.ini

Listaus 7

attrib +s +r c:\boot.ini

Listaus 10

cd /boot
gunzip < initrd-.img > initrd-.img.nogz

Listaus 11

mkdir tmp
mount initrd-.img.nogz tmp -o loop

Listaus 12

mkdir initrd-
cd initrd-
cpio -i < ../initrd-.PAE.img.nogz
ls
bin  dev  etc  init  lib  proc  sbin  sys  sysroot  usr

Listaus 13

#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, 
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Things to run in every runlevel.
ud::once:/sbin/update

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 ``Power Failure; System Shutting Down''

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c ``Power Restored; Shutdown Cancelled''


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm -nodaemon

Listaus 15

#!/bin/bash
#
# Startup script for the Apache Web Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#	       HTML files and CGI.
# processname: httpd
# pidfile: /var/run/httpd.pid
# config: /etc/httpd/conf/access.conf
# config: /etc/httpd/conf/httpd.conf
# config: /etc/httpd/conf/srm.conf

# Source function library.
. /etc/rc.d/init.d/functions

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=/usr/sbin/httpd
prog=httpd
RETVAL=0

# Find the installed modules and convert their names into arguments httpd
# can use.
moduleargs() {
	moduledir=/usr/lib/apache
	moduleargs=`
	/usr/bin/find ${moduledir} -type f -perm -0100 -name "*.so" | env -i tr '[:lower:]' '[:upper:]' | awk '{\
	gsub(/.*\//,"");\
	gsub(/^MOD_/,"");\
	gsub(/^LIB/,"");\
	gsub(/\.SO$/,"");\
	print "-DHAVE_" $0}'`
	echo ${moduleargs}
}

# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure.  So we just do it the way init scripts
# are expected to behave here.
start() {
        echo -n $"Starting $prog: "
        daemon $httpd `moduleargs` $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
        return $RETVAL
}
stop() {
	echo -n $"Stopping $prog: "
	killproc $httpd
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /var/run/httpd.pid
}
reload() {
	echo -n $"Reloading $prog: "
	killproc $httpd -HUP
	RETVAL=$?
	echo
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
        status $httpd
	RETVAL=$?
	;;
  restart)
	stop
	start
	;;
  condrestart)
	if [ -f /var/run/httpd.pid ] ; then
		stop
		start
	fi
	;;
  reload)
        reload
	;;
  graceful|help|configtest)
	$apachectl $@
	RETVAL=$?
	;;
  *)
	echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
	exit 1
esac

exit $RETVAL

Luku 8 GRUB -- käyttöjärjestelmän lataaja

Listaus 1

grub> kernel /boot/vmlinuz root=/dev/hda1

Listaus 2

grub> kernel /boot/vmlinuz root=/dev/hda1 vga=ext

Listaus 3

grub> initrd /boot/initrd-2.4.9-13.img

Listaus 4

grub> rootnoverify (hd0,0)

Listaus 5

grub> makeactive

Listaus 6

grub> chainloader +1

Listaus 7

   grub> map (hd0) (hd1)

   grub> map (hd1) (hd0)

Listaus 8

# Esimerkki käynnistysvalikon 
# määritystiedostosta

# Käynnistyy automaattisesti 
# 30 sekunnin kuluttua

timeout 30

# Oletuksena käynnistetään 
# ensimmäinen määritys

default 0

# Varalla on toinen määritys

fallback 1

# Linuxin käynnistys

title IT Linux
kernel (hd1,0)/boot/vmlinuz root=/dev/hdb1

# GNU Hurd:n käynnistys

title GNU/Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz

# Mach:n käynnistys 
# (kerneli luetaan levykkeeltä)

title Utah Mach4 käynnistys
root (hd0,2)
pause Laita levyke asemaan_!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap

# FreeBSD käynnistys 
# (kerneli luetaan levykkeeltä)

title FreeBSD
root (hd0,2,a)
kernel (fd0)/kernel

# OS/2 käynnistys

title OS/2
root (hd0,1)
makeactive

# ketjutettu OS/2 käyttöjärjestelmän
# lataaja ensimmäiseltä sektorilta

chainloader +1

# Tämä vastaa chainloadia, mutta 
# lataa tiedoston /boot/chain.os2

# Windows NT:n tai Windows 95:n lataaminen

title Windows NT/95:n lataus
root (hd0,0)
makeactive
chainloader +1

# Dosin lataaminen, jos Windows NT on asennettu

# chainload /bootsect.dos

# GRUB:n asennus kiintolevylle

title Asenna GRUB kiintolevylle
root (hd0,0)
setup (hd0)

# Värien vaihto.

title Vaihda varit
color light-green/brown blink-red/blue

Luku 13 Komentorivin perusteita

Listaus 14

alias d='dir'
alias dir='/bin/ls $LS_OPTIONS -format=vertical'
alias ls='/bin/ls $LS_OPTIONS '
alias v='vdir'
alias vdir='/bin/ls $LS_OPTIONS -format=long'

Listaus 15

%alias ls='ls --color=yes'

Listaus 16

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Listaus 17

RK2:~# function calc()
> {
> echo $[$*]
> }
RK2:~# calc 3+4
7

Listaus 19

function nd()  {mkdir $1; cd $1;}

Listaus 20

function scp() {select i in $1; do cp $i $2; done;}

scp '*' kohde

Listaus 22

PS1='\h:\w \t \d \s [\!] \$'
RK2:~/tmp2 03:10:48 Sun [554] #

Luku 15 AWK-ohjelmoinnin perusteet

Listaus 13

BEGIN{ x=0 }
/^$/  { x=x+1 }
{y++}
END{ print "Löytyi " x " tyhjää riviä ja " y-x " täyttä riviä" }

Listaus 14

END{x="1.01"
# Edellä asetimme muuttujan x arvoksi *merkkijonon* "1.01"
    x=x+1
    # Nyt lisäsimme numeron 1 *merkkijonoon*
    print x
}

Listaus 15

BEGIN {
      FS="\n"
      RS=""
    }

Listaus 16

BEGIN {
      FS="\n"
      RS=""
    }
    {
      loppuosa = ""
      if (NF > 3) loppuosa = ", " $4
      if (NF > 4) loppuosa = loppuosa ", " $5
      print $1 ", " $2 ", " $3 loppuosa
    }

Listaus 17

BEGIN {
      FS="\n"
      RS=""
      OFS=", "
      ORS="\n"
      }
{
#print $1, $2, $3, $4, $5
x = 1
while ( x

Listaus 19

for ( x = 1; x <= 4; x++ ) {
      if (x == 3) continue
      if (x == 4) break
      print "kierros",x
    }

Listaus 21

if ( 1 in taulukko ) print "löytyy"

Listaus 22

#!/bin/gawk -f
BEGIN{
system("/bin/df > /var/tmp/df")
while (getline<"/var/tmp/df") {
  NR++
# Tulosta 1. rivi eli
#Filesystem           1k-blocks      Used Available Use% Mounted on
  if (NR == 1) {print;getline<"/var/tmp/df"}
  blocks += $2
  used += $3
# Oletetaan, että kentissä 2 ja 3 arvo on nolla, jos kyseessä on CD/DVD-levy
# ja silloin arvoa ei lasketa mukaan summiin.
  if ($4 != 0) blocks_hd += $2
  if ($4 != 0) used_hd += $3
  avail += $4
  printf("%-12s         %9d %9d %9d  %3d %s\n", $1, $2, $3, $4, $5, $6)
}
print "                     ========= ========= =========  ==="
printf ("Total\t\t     %9d %9d %9d  %d%\n", blocks, used, avail, used_hd / blocks_hd * 100)
system("/bin/rm /var/tmp/df")
}

Listaus 26

for i in /dev/hd? /dev/sd? ; do echo -n $i" "  ; smartctl -a -d ata $i | grep emperature ; done
/dev/hda /dev/hdc 194 Temperature_Celsius     0x0032   045   253   000    Old_age   Always       -       38
/dev/sda 194 Temperature_Celsius     0x0022   120   100   000    Old_age   Always       -       32
/dev/sdb 194 Temperature_Celsius     0x0022   120   099   000    Old_age   Always       -       32
/dev/sdc 194 Temperature_Celsius     0x0022   121   106   000    Old_age   Always       -       31
/dev/sdd 194 Temperature_Celsius     0x0022   112   098   000    Old_age   Always       -       40
/dev/sde 194 Temperature_Celsius     0x0022   119   099   000    Old_age   Always       -       33
/dev/sdf 194 Temperature_Celsius     0x0022   031   054   000    Old_age   Always       -       31 (Lifetime Min/Max 0/20)

Listaus 27

for i in /dev/hd? /dev/sd? ; do echo -n $i" " ; smartctl -a -d ata $i | grep emperature | awk '{print $10}' - ; done
/dev/hda /dev/hdc 39
/dev/sda 33

Listaus 28

for i in /dev/hd? /dev/sd? ; do echo -n $i" " ; smartctl -a -d ata $i | grep emperature | \
 awk '{print $10}' - ; done | awk '{print $(NF-1), $NF}'
/dev/hdc 39

Listaus 29

for i in /dev/hd? /dev/sd? ; do echo -n $i" " ; smartctl -a -d ata $i | grep emperature | \ 
 awk '{print $10}' - ; done | awk 'BEGIN{max=0;min=100}{print $(NF-1), $NF;tot+=$NF;count++;if \
  ($NF>max)max=$NF;if($NF

Listaus 30

#!/bin/sh
for i in /dev/hd? /dev/sd?
do
  echo -n $i" "
  smartctl -a -d ata $i | grep emperature | awk '{print $10}' -
done | \
awk 'BEGIN{max=0
           min=100}
     {print $(NF-1), $NF
      tot+=$NF;count++
      if ($NF>max)
        max=$NF
      if($NF

Listaus 31

chmod +x /usr/local/bin/hdtemp

Luku 16 Jed - editori

Listaus 1

cp /usr/share/jed/lib/jed.rc .jedrc

Listaus 2

%setkey("self_insert_cmd", "^I");~^T

Listaus 3

%  () = evalfile("edt");

Listaus 4

jed ./-2

Listaus 15

% Home
  setkey("bol", "^[[H");

Listaus 16

% Home
setkey ("bol", "^[[H");
% End
setkey ("eol", "^[[F");
% Delete
setkey ("delete_char_cmd", "^[[3~");
% Ctrl ->
setkey ("skip_word", "^[[1;5C");
% Ctrl <-
setkey ("bskip_word", "^[[1;5D");

Luku 23 RAID

Listaus 1

yum install mdadm

Listaus 3

mdadm -C /dev/md0 /dev/sda /dev/sd[c-j] -n 9 -l 5
mkfs.ext3  /dev/md0
mkdir /raid
mount /dev/md0 /raid

Listaus 5

mdadm --detail --scan >> /etc/mdadm.conf
echo "/dev/md0 /raid ext3 defaults 0 2" >> /etc/fstab

Listaus 6

echo "MAILADDR root@localhost" >> /etc/mdadm.conf
chkconfig --level 2345 mdmonitor on
service mdmonitor on

Listaus 8

mdadm /dev/md0 -f /dev/hdd1
mdadm /dev/md0 -r /dev/hdd1

Listaus 9

mdadm /dev/md0 -a /dev/hdd1

Listaus 10

# Sammutus
umount /dev/md0
mdadm -S /dev/md0
# Käynnistys
mdadm -As /dev/md0
mount /dev/md0

Listaus 11

mdadm --add /dev/md1 /dev/sdb3
mdadm --grow --raid-devices=4 /dev/md1

Listaus 12

mdadm --grow /dev/md0 --size=max

Listaus 13

resize2fs /dev/md0

Listaus 14

mdadm -C /dev/md0 /dev/sdb2 missing -n 2 -l 1
mkfs.ext3 /dev/md0
mkdir /raid
mount /dev/md0 /raid
mount / -o remount,ro
cp -raxv / /raid
vi /raid/etc/fstab

Listaus 15

mdadm /dev/md0 --add /dev/sda2
cat /proc/mdstat

Luku 24 Palvelinten levytilan käyttö

Listaus 3

rk2:/usr/local /mnt/rk2 nfs rsize=8192,wsize=8192,timeo=14,intr

Listaus 4

ls -l /lib/modules/`uname -r`/kernel/fs/fscache/fscache.ko

Listaus 5

yum install cachefilesd
service cachefilesd start
chkconfig cachefilesd on

Listaus 8

smbclient -L 192.168.0.253

Listaus 10

mount.cifs \\\\192.168.0.253\\PUBLIC /mnt/
mount.cifs '\\192.168.0.253\PUBLIC' /mnt/
mount.cifs //192.168.0.253/PUBLIC /mnt/
mount '\\192.168.0.253\PUBLIC' /mnt/ -t cifs

Luku 25 DVD/CD-R(W)-asemien ja -levyjen käyttö

Listaus 3

cdrecord -v -dev=/dev/cdrom -speed=16 -eject so52.iso

Listaus 4

cdrecord -v dev=/dev/cdrom speed=4 -isosize /dev/scd1

Listaus 5

cdrecord -v -eject speed=8 dev=/dev/cdrom -multi test.iso

Listaus 6

cdrecord dev=/dev/cdrom -msinfo
0,27139

Listaus 7

mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,1,0 /files/path/

Listaus 8

mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,1,0 -msinfo` \
-M 0,1,0 /files/path/

Listaus 9

mkisofs -o cd2.iso -J -r -T -A IT_LINUX_2002_2 -P \
IT_PRESS -p Raimo_Koski -V IT_LINUX -x cd2/rhmoved cd2

Listaus 10

mkisofs -b dosutils/autoboot/cdboot.img \
         -eltorito-alt-boot -b dosutils/autoboot/cdboot-fi.img \
         -eltorito-alt-boot -b dosutils/autoboot/cdboot-de.img \
         -eltorito-alt-boot -b dosutils/autoboot/cdboot-fr.img \
         -eltorito-alt-boot -b dosutils/autoboot/cdboot-es.img \
         -eltorito-alt-boot -b dosutils/autoboot/cdboot-it.img \
         -eltorito-alt-boot -b dosutils/autoboot/cdboot-sv.img \
         -c boot.cat -o spec1.iso -J -r -T -A Spectra_LINUX_1.2_1 \
	 -P Probatus -p Raimo_Koski -V ``Spectra LINUX 1.2 #1'' p12_1

Listaus 11

mkdir /mnt/loop1
mount cd2.iso /mnt/loop1 -o loop
ls /mnt/loop1

Listaus 12

#!/bin/sh
mkdir "$1_wav"
pushd "$1"
for i in [0-9][0-9]*.mp3
do
   mpg123 -w ../"$1_wav"/`basename $i mp3`wav $i
done
popd

Listaus 13

cdrecord -v -dev=/dev/cdrom -eject -speed=4 -dao -pad *.wav

Listaus 14

cdrecord -dev=/dev/cdrom -speed=10 -blank=fast -eject

Listaus 15

#!/bin/sh
mkdir $1
cd $1
cdparanoia -B
# Haetaan vain ensimmäinen sisällysluettelo.
freedbtool.py get -n1
dos2unix toc
# generoidaan skripti, joka uudelleennimeää tiedostot
awk 'BEGIN{FS="="
# Lisätään tyhjä rivi alkuun, jotta ääkköset jne. eivät aiheuta
# virhettä skriptin käynnistyksessä
         print > "toc.sh" }
     /TTITLE/{sub("TTITLE","")
     $1++
     if ($1 < 10) $1="0"$1
     gsub(" ","_",$2)
     gsub("\\(","\\\(",$2)
     gsub("\\)","\\\)",$2)
     gsub("\\&","\\\&",$2)
     print "mv track"$1".cdda.wav " $1"_"$2 ".wav"}' toc  | tr  \' _ >> toc.sh
# Uudelleennimeävä skripti     
sh toc.sh
eject /dev/cdrom

Listaus 16

cdparanoia -d /dev/cdrom1 -B

freedbtool.py get -n1 -d "discid /dev/cdrom1"

eject /dev/cdrom1

Listaus 17

sh ../mkwav.sh Pink_Floyd-Wish_you_were_here

Listaus 18

#!/bin/sh
for i in * 
do if [ -d $i ]
     then 
     cd $i 
     for j in *.wav 
     do 
	 lame $j `basename $j .wav`.mp3 
	 rm -f $j 
     done 
     cd .. 
   fi 
done

Listaus 19

for i in `ls -sr | awk '{print $2}'`

Listaus 20

#!/bin/sh
ls */* | grep -v id | grep -v \.wav | grep -v index | \
    grep -v toc | grep -v \.mp3
ls */track* -l

Listaus 21

#!/bin/sh
cd "$1"
# Tarkistetaan onko kappaleiden tiedot sisältävä toc-tiedosto olemassa
if [ -f toc ]
then
# Ei viitsitä tehdä työtä toistamiseen
 if [ -f id3tag.sh ]
  then
   echo $1 has already been id3tagged
  else
# generoidaan skripti, joka lisää id3-tietueet mp3-tiedostoihin
    awk 'BEGIN{FS="="
# Lisätään tyhjä rivi alkuun, jotta ääkköset jne. eivät aiheuta 
# virhettä skriptin käynnistyksessä
           print > "id3tag.sh"}
     /DTITLE/{sub("DTITLE=","")
             if (RECORD == ""){
             split($0,arr," / ")
	     ARTIST=arr[1]
	     RECORD=arr[2]
             }
# DTITLE voi olla myös jaettu kahdelle riville, yhdistetään loppu
	     else
             RECORD=RECORD $0
	     }
     /DYEAR/{YEAR=$2
	    }
     /TTITLE/{sub("TTITLE","")
# Tarkistetaan, onko TTITLE jaettu kahdelle riville
     if (TRACK == $1)
       TITLE=TITLE $2
     else
       TITLE=$2
     TRACK=$1
     $1++
     if ($1 < 10) $1="0"$1
     print "if [ -f "$1"* ] ; \
            then id3tag -a\""ARTIST"\" -A\""RECORD"\" \ 
                 -y"YEAR" -t"$1" -s\""TITLE"\" "$1"*.mp3 ; \
            fi "
     }' toc  >> id3tag.sh
# id3tag-tiedot lisäävä skripti
    sh id3tag.sh
  fi
fi

Listaus 22

for i in * ; do mktag.sh $i ; done

Listaus 24

[root@rk3 mnt]# dvd+rw-format -force /dev/cdrom
* DVD+/-RW format utility by , version 4.2.
* 4.7GB DVD+RW media detected.
* formatting 1.9/

Listaus 25

dd if=/dev/cdrom of=DVD-image.iso conv=noerror
mkdir DVD-image
mount DVD-image.iso DVD-image -o loop

Listaus 26

mplayer -dvd-device DVD-image dvd://1 -slang en

Listaus 27

mencoder -dvd-device DVD-image dvd://1 -slang en -o Barry_Lyndon.avi \
-oac copy -ovc lavc -lavcopts vcodec=mpeg4:vqscale=5

Listaus 28

mplayer tmp/VIDEO_TS/VTS_01_1.VOB  -vf cropdetect

Listaus 30

mencoder tmp/VIDEO_TS/VTS_01_1.VOB -oac copy  -vf crop=688:480:32:48 \
 -ovc lavc -lavcopts \
 vcodec=mpeg4:vbitrate=2000:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=1
 -o test.avi

Listaus 31

mencoder dvd://1 -dvd-device=tmp -chapter 12-13 -oac copy  -vf crop=688:480:32:48 \
 -ovc lavc -lavcopts \
 vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=1
 -o test.avi

Listaus 33

#for i in `seq 1 27` ; do mplayer -ao pcm dvd://1 -chapter $i ; done
for i in `seq 1 27` ; do transcode -i /dev/dvd -x dvd -T 1,$i,1 -a 0 -y wav -m track${i}.wav ; done

Listaus 34

for j in *.wav ; do lame $j `basename $j .wav`.mp3 ; done 

Luku 26 Ajan ja aikavyöhykkeen asetukset

Listaus 2

# Hosts on local network are less restricted.
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap

Listaus 3

30 * * * * root /usr/sbin/ntpdate 192.168.0.2

Luku 30 Yksinkertaisen palomuurin määrittely

Listaus 1

/sbin/service iptables restart

Listaus 2

/sbin/chkconfig --level 345 iptables on

Luku 31 Shorewall -- Monimutkaisen palomuurin määrittely

Listaus 1

rpm -i http://www.invoca.ch/pub/packages/shorewall/4.0/shorewall-4.0.13/\
shorewall-4.0.13-1.noarch.rpm \
http://www.invoca.ch/pub/packages/shorewall/4.0/shorewall-4.0.13/\
shorewall-perl-4.0.13-1.noarch.rpm

Listaus 2

# For information about entries in this file, type "man shorewall-interfaces"
#
# The manpage is also online at
# http://shorewall.net/manpages/shorewall-interfaces.html
#
###############################################################################
#ZONE   INTERFACE       BROADCAST       OPTIONS
net     eth0            detect          tcpflags,dhcp,routefilter,nosmurfs,logmartians
loc     eth1            detect          tcpflags,nosmurfs
dmz     eth2            detect

Listaus 3

vpn     tap0        detect

Listaus 4

vpn     ipv4

Listaus 5

#SOURCE         DEST            POLICY          LOG             LIMIT:BURST
#                                               LEVEL
vpn     dmz     ACCEPT
vpn     $FW     ACCEPT
vpn     loc     ACCEPT
vpn     net     ACCEPT

Listaus 6

#ACTION          SOURCE  DEST  PROTO  DEST  SOURCE  ORIGINAL  RATE   USER/   MARK
#                                     PORT  PORT(S) DEST      LIMIT  GROUP
DNS/ACCEPT loc   $FW

Listaus 7

ACCEPT  loc     $FW      tcp     53
ACCEPT  loc     $FW      udp     53

Listaus 8

#INTERFACE              SOURCE          ADDRESS         PROTO   PORT(S) IPSEC   MARK
eth0    eth1

Listaus 9

#TYPE                   ZONE    GATEWAY         GATEWAY
openvpnclient net     xxx.xxx.xxx.3

Listaus 10

#TYPE                   ZONE    GATEWAY         GATEWAY
openvpnserver:tcp       net     0.0.0.0/0

Listaus 11

#EXTERNAL       INTERFACE   INTERNAL    ALL         LOCAL
#                                       INTERFACES
xxx.xxx.xxx.45  eth0        10.0.0.45   no          no     #webmail.example.com

Listaus 15

grep  Shorewall /var/log/messages

Luku 32 VPN -- Virtuaalinen yksityisverkko

Listaus 1

rpm -i http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

Listaus 2

yum install openvpn

Listaus 3

# Increase this to 2048 if you
# are paranoid.  This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
export KEY_SIZE=2048

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY=FI
export KEY_PROVINCE=NA
export KEY_CITY=TURKU
export KEY_ORG="Yritys Oy"
export KEY_EMAIL="info@yritys.fi"

Listaus 4

. vars
sh clean-all
sh build-ca
sh build-key-server server
sh build-key client1
sh build-key client2
sh build-key client3
sh build-dh
for i in 1 2 3 ; do tar czf client${i}.tgz \
 keys/ca.crt keys/client${i}.crt keys/client${i}.key ; done
cp /usr/share/doc/openvpn-2*/sample-config-files/server.conf /etc/openvpn/openvpn.conf

Listaus 5

# grep -v ^# /etc/openvpn/openvpn.conf | grep -v ^\; | grep -v ^$)
dev tun1
local xxx.xxx.xxx.7
remote yyy.yyy.yyy.2
ifconfig 192.168.99.1 192.168.99.2
route 192.168.0.0 255.255.255.0 192.168.99.2
route 10.1.0.0 255.255.255.0 192.168.99.2
route 10.65.0.0 255.255.255.0 192.168.99.2
route 10.129.0.0 255.255.255.0 192.168.99.2
route 172.16.1.0 255.255.255.0 192.168.99.2
tls-server
port 1194
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh2048.pem
keepalive 5  120
cipher AES-128-CBC   # AES
comp-lzo
max-clients 100
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append  /var/log/openvpn.log
verb 6

Listaus 6

# grep -v ^# /etc/openvpn/client.conf | grep -v ^\; | grep -v ^$
dev tun1
local yyy.yyy.yyy.2
remote xxx.xxx.xxx.7
ifconfig 192.168.99.2 192.168.99.1
route 192.168.2.0 255.255.255.0 192.168.99.1
route 10.0.0.0 255.255.255.0 192.168.99.1
route 10.64.0.0 255.255.255.0 192.168.99.1
route 10.128.0.0 255.255.255.0 192.168.99.1
route 10.192.0.0 255.255.255.0 192.168.99.1
route 10.0.16.0 255.255.16.0 192.168.99.1
route 10.64.16.0 255.255.16.0 192.168.99.1
route 10.128.16.0 255.255.16.0 192.168.99.1
route 10.192.16.0 255.255.16.0 192.168.99.1
route 172.16.0.0 255.255.255.0 192.168.99.1
tls-client
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
cipher AES-128-CBC
comp-lzo
verb 6

Luku 35 Sähköpostipalvelimen vaihto

Listaus 1

/etc/rc.d/initd/sendmail stop
/etc/rc.d/initd/postfix start

Listaus 2

/etc/rc.d/initd/postfix stop
/etc/rc.d/initd/sendmail start

Luku 36 Sähköpostipalvelu

Listaus 1

yum install sendmail-doc sendmail-cf

Listaus 2

dnl define(`SMART_HOST', `smtp.your.provider')dnl

Listaus 5

define(`SMART_HOST', `[mail.inet.fi]')dnl

Listaus 6

yum install fetchmail

Listaus 7

set logfile fetchlog
set daemon 43200  # Hae 12 tunnin välein.
poll smtp.isp.fi proto IMAP:
      etakayttaja kayttajatunnus there pass salasana is paik_kayttaja here smtphost localhost;

Listaus 8

su kayttajatunnus /usr/bin/fetchmail --fetchmailrc /home/kayttajatunnus/.fetchmailrc

Listaus 9

# fetchmail starts as a daemon, but to ensure it runs, it can be
# awakened daily.
59 2 * * * kayttajatunnus /usr/bin/fetchmail --fetchmailrc /home/kayttajatunnus/.fetchmailrc

Listaus 11

dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl

Listaus 12

DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

Listaus 13

dnl FEATURE(`accept_unresolvable_domains')dnl

Listaus 15

#Valitse koneesi arkkitehtuurille sopiva
#rpm -iv http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
#rpm -iv http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

Listaus 16

# CentOS 5.x
yum install clamav-milter  
# Fedora 10
yum install clamav-milter-sendmail

Listaus 17

INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav/clmilter.sock, F=, T=S:4m;R:4m;C:30s;E:10m')dnl
define(`confINPUT_MAIL_FILTERS', `clamav')

Listaus 18

INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav.sock, F=, T=S:4m;R:4m')dnl

Listaus 19

# rpm -qa \*imap\*
cyrus-imapd-utils-2.3.7-2.el5_3.2
cyrus-imapd-2.3.7-2.el5_3.2
cyrus-imapd-perl-2.3.7-2.el5_3.2

Listaus 20

yum erase cyrus-imapd-utils cyrus-imapd cyrus-imapd-perl
yum --enablerepo=epel install uw-imap-utils uw-imap

Listaus 26

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

Listaus 29

FEATURE(`blacklist_recipients')dnl
dnl FEATURE(`dnsbl', `bl.csma.biz',  ` *** SPAM Blocked from $&{client_addr} - See http://bl.csma.biz/ .')dnl
FEATURE(`dnsbl', `zen.spamhaus.org', `550 Mail from  $&{client_addr}  refused - see http://www.spamhaus.org/zen/')dnl
dnl FEATURE(`dnsbl', `list.dsbl.org', `550 Mail from  $&{client_addr}  refused - see http://dsbl.org/')dnl
FEATURE(`dnsbl', `bl.spamcop.net', `450 Mail from  $&{client_addr}  refused - see http://spamcop.net/bl.shtml')dnl
FEATURE(`dnsbl', `combined.njabl.org', `450 Mail from  $&{client_addr} refused - see http://njabl.org/lookup?$&{client_addr}')dnl
dnl FEATURE(`dnsbl', `dnsbl.ahbl.org', `550 Mail from  $&{client_addr} refused - see http://www.ahbl.org/tools/lookup.php?ip=''$&{client_addr}''')dnl
FEATURE(`dnsbl', `dnsbl.sorbs.net', `554 Rejected  $&{client_addr} found in dnsbl.sorbs.net')dnl

Listaus 30

FEATURE(`greet_pause', `1500')dnl

Listaus 31

dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not have 24x7 DNS do need this.
dnl FEATURE(`accept_unresolvable_domains')dnl

Listaus 32

#!/bin/bash
if [ $1x = "x" ]
then
  LOGS=/var/log/maillog
else
  LOGS=$@
fi
totacc=`grep " to=" $LOGS | wc -l`
virusblock=`grep "Milter: data, discard" $LOGS | wc -l`
CSMA=`grep "bl.csma.biz" $LOGS | wc -l`
spamhaus=`grep www.spamhaus.org $LOGS | wc -l`
dsbl=`grep dsbl.org $LOGS | wc -l`
cop=`grep spamcop.net $LOGS | wc -l`
njabl=`grep njabl.org $LOGS | wc -l`
ahbl=`grep dnsbl.ahbl.org $LOGS | wc -l`
sorbs=`grep dnsbl.sorbs.net $LOGS | wc -l`
ordb=`grep "see http://www.ordb.org/faq/" $LOGS | wc -l`
bls=`echo $CSMA  $spamhaus  $dsbl  $cop $njabl $ahbl $sorbs $ordb | awk '{print $1+$2+$3+$4+$5+$6+$7+$8}'`
dns=`grep "Domain of sender address" $LOGS | wc -l`
delb=`grep "due to pre-greeting traffic" $LOGS | wc -l`
totb=`echo $virusblock $bls $dns $delb | awk '{print $1+$2+$3+$4}'`
totrec=`echo $virusblock $totacc $bls $dns $delb | awk '{print $1+$2+$3+$4+$5}'`
perblock=`echo $totb $totrec | awk '{print  $1*100/$2}'`
echo  "Total accepted:    " $totacc
echo  "Blocked due to a virus:  " $virusblock
echo  "csma.biz blacklist:      " $CSMA
echo  "spamhaus.org blacklist:  " $spamhaus
echo  "dsbl.org blacklist:      " $dsbl
echo  "spamcop.net blacklist:   " $cop
echo  "njabl.org blacklist:     " $njabl
echo  "ahbl.org blacklist:      " $ahbl
echo  "sorbs.net blacklist:     " $sorbs
echo  "ordb.org blacklist:      " $ordb
echo  "Blacklist total blocked: " $bls
echo  "DNS blocked:             " $dns
echo  "Delay blocked:           " $delb
echo  "Total received:    " $totrec
echo  "Total blocked:     " $totb
echo  "Percentage blocked:" $perblock

Luku 39 WWW"-palvelimen toiminnan seuraaminen ja statistiikka

Listaus 2


    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from rkoski.dyndns.org tk.yok.utu.fi 

		
#
# Allow remote server configuration reports, with the URL of
#  http://servername/server-info (requires that mod_info.c be loaded).
# Change the ".your_domain.com" to match your domain to enable.
#
#
#    SetHandler server-info
#    Order deny,allow
#    Deny from all
#    Allow from .your_domain.com
#

Listaus 3

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

Listaus 5


    ServerName it-linux.utu.net
    DocumentRoot /var/www/html
    CustomLog /var/log/httpd/access_log combined
    ErrorLog  /var/log/httpd/error_log


Listaus 6


    ServerName www.raimokoski.com
    ServerAdmin rk@raimokoski.com
    DocumentRoot /var/www/raimokoskicom

    Options  Includes FollowSymLinks
    AllowOverride None
    Order deny,allow
    deny from all
    Allow from env=access_1

    CustomLog /var/log/httpd/raimokoski-access_log combined
    ErrorLog  /var/log/httpd/raimokoski-error_log


Listaus 7

mkdir /var/www/html/usage

Listaus 8

#! /bin/bash
# update access statistics for the web site

if [ -s /var/log/httpd/access_log ] ; then
   /usr/bin/webalizer
   cat /var/log/httpd/raimokoski-access_log | \
     /usr/bin/webalizer -n www.raimokoski.com -o /var/www/html/rkusage
fi

exit 0

Listaus 9

#! /bin/bash
# update access statistics for the web site

if [ -s /var/log/httpd/access_log ] ; then
   cat `ls -rSt1 /var/log/httpd/access_log*` | /usr/bin/webalizer -p
   cat `ls -rSt1 /var/log/httpd/raimokoski-access_log*` | \
     /usr/bin/webalizer -p -n www.raimokoski.com -o /var/www/html/rkusage
fi

exit 0

Listaus 10

#! /bin/bash
# update access statistics for the web site

if [ -s /var/log/httpd/access_log ] ; then
   cat var/log/httpd/access_log  | /usr/bin/webalizer -p
   cat /var/log/httpd/raimokoski-access_log | \
     /usr/bin/webalizer -p -n www.raimokoski.com -o /var/www/html/rkusage
fi

exit 0

Listaus 11

Linuxin käyttöön työpöydällä on äskettäin perustettu oma <a href="/cgi-bin/redirect.pl?url=http://www.desktoplinux.com/" target="_blank">portaali</a>.

Listaus 12

LOGS: /var/log/httpd/raimokoski-access_log, /var/log/httpd/access_log

Listaus 13

FORMAT: hlut\"r\"sb\"R\"\"A\"

Listaus 14

DIR: /var/www/html/stats/daily

Listaus 15

/usr/local/bin/webstats.pl -c/etc/cronjobs/webstatsdaily

Listaus 16

LOGS: /var/log/httpd/raimokoski-access_log*, /var/log/httpd/access_log*
DIR: /var/www/html/stats/comb

Listaus 17

/usr/local/bin/webstats.pl -c/etc/cronjobs/webstatscomb

Listaus 18

CustomLog |/full/path/livewebstats.pl combined

Luku 40 Ajastetut toiminnot, cron-ohjelma

Listaus 1

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

Listaus 2

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These entries are useful for a Red Hat Linux system.
1       5       cron.daily              run-parts /etc/cron.daily
7       10      cron.weekly             run-parts /etc/cron.weekly
30      15      cron.monthly    run-parts /etc/cron.monthly

Luku 42 Järjestelmän hallinnan perusteita

Listaus 18

if [ id -gn = id -un -a id -u -gt 14 ]; then
# Tavallisten käyttäjien umask-arvo estää muita tekemästä mitään käyttäjien
# tiedostoille oletuksena.
        umask 077
else
# Järjestelmäkäyttäjien umask-arvo pitää olla sallivampi, jotta tavalliset
# käyttäjät voivat lukea asennettuja tiedostoja.
        umask 022
fi

Listaus 19

# cd /usr 
# find /usr -type f -perm +6000 -xdev -exec ls -l {} \;
-rwsr-xr-x    1 root     root        37528 tammi  17  2002 /usr/bin/at
-r-sr-sr-x    1 uucp     uucp       129908 helmi   2  2002 /usr/bin/cu
-rwsr-xr-x    1 root     root        46500 kesä 25  2001 /usr/bin/kon
-rwsr-xr-x    1 root     root        14588 heinä  24  2001 /usr/bin/rcp
-rwsr-xr-x    1 root     root         7932 heinä  24  2001 /usr/bin/rsh
-rwsr-xr-x    1 root     root       219932 huhti   5  2002 /usr/bin/ssh
-r-sr-xr-x    1 uucp     uucp        93512 helmi   2  2002 /usr/bin/uux
-rws--x--x    1 root     root        12072 huhti   2  2002 /usr/bin/chfn
-rws--x--x    1 root     root        11496 huhti   2  2002 /usr/bin/chsh
---s--x--x    1 root     root        84680 huhti  18  2002 /usr/bin/sudo
-r-sr-xr-x    1 uucp     uucp        91720 helmi   2  2002 /usr/bin/uucp
-r-xr-sr-x    1 root     tty          6920 maalis 14  2002 /usr/bin/wall
-r-sr-x---    1 root     news        33335 huhti  15  2002 /usr/bin/inndstart
-rwsr-xr-x    1 root     root        19927 huhti  17  2002 /usr/bin/lppasswd
-rwsr-xr-x    1 root     root        21080 huhti  15  2002 /usr/bin/crontab
-rwsr-xr-x    1 root     root        34296 maalis 28  2002 /usr/bin/chage
............

Luku 43 Linuxin ajonaikaisten asetusten muuttaminen

Listaus 2

sysctl -w fs.file-max="2097152"

Listaus 3

echo "2097152" > /proc/sys/fs/file-max

Luku 44 Ssh:n käyttö

Listaus 2

Port 2200
PidFile /var/run/sshd2200.pid

Listaus 3

.. 
PID_FILE=/var/run/sshd2200.pid
..
echo -n "Starting sshd2200: "
..
sshd -f /etc/ssh/sshd_config.vara $OPTIONS
..
my_success "sshd startup" "sshd2200"
touch /var/lock/subsys/sshd2200
..
echo -n "Shutting down sshd2200: "
..
killproc sshd2200
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sshd2200
..
condrestart)
     if [ -f /var/lock/subsys/sshd2200 ] ; then
..
status)
                status sshd2200
..
echo "Usage: sshdvara {start|stop|restart|status|condrestart}"

Luku 45 Peilaus eli tiedostojen kopiointi tai synkronointi verkossa

Listaus 4

#!/bin/sh
cd /usr/local
wget -r -X cgi-bin,rpm2html,ftp,LDP,btmgr --convert-links http://www.raimokoski.com/
cd /usr/local/www.raimokoski.com
mv menu.html menu.temp
for i in find -name \*.\*html ; do awk -f fix.awk $i > $i.tmp ; mv -f $i.tmp $i ; done
mv menu.temp menu.html
awk '/(lasketaan yöllä)./{print $0
    $0 = "<br>Osumia pääsivulle Soneran palvelimella 16.1.2002 jälkeen <img src=\"
          http://personal.inet.fi/cgi/count?key=laskuri1&font=1\"><br>"}
    {print}' uutiset.shtml > uutimet.shtml
mv uutimet.shtml uutiset.shtml
ncftpput -u tunnus -p salasana -m -F -R -z -t 15 -r 10 -y -d ../deb -e ../err -b 
          personal.inet.fi / *
ncftpbatch -d

Listaus 5

01 18 */3 * * root cd /home/ftp/pub/mirrors ;  rsync -av --partial
   --delete ftp.sunet.se::pub/Linux/distributions/redhat/
   ftp.sunet.se/pub/Linux/distributions/redhat/

Listaus 6

#!/bin/sh
rsync -avub -e ssh  rk6:office52/   /root/office52/
rsync -avub -e ssh  rk6:finman/     /usr/local/finman/
rsync -avub -e ssh  rk6:artikkelit/ /root/artikkelit/

rsync -avub -e ssh  /root/office52/    rk6:office52/
rsync -avub -e ssh  /usr/local/finman/ rk6:finman/
rsync -avub -e ssh  /root/artikkelit/  rk6:artikkelit/

Listaus 7

#       uid = nobody
#       gid = nobody
       max connections = 4
       syslog facility = local5
       pid file = /etc/rsyncd.pid
[finman]
       path = /root/finman
       comment = kirjojen hakemisto

[artikkelit]
       path = /root/artikkelit
  
[office52]
       path = /root/office52

Listaus 8

ncftpput -u tunnus -p salasana -m -F -R -z -t 15 -r 10 -y -d ../deb -e ../err -b 
       personal.inet.fi / *
ncftpbatch -d

Luku 46 Varmistustallennus kiintolevylle

Listaus 1

#!/bin/sh
# Pienemmän levyn /etc- ja /home-hakemistojen varmistus
cd /
for i in 4 3 2 1
 do mv var/www/html/BaK/etc.tgz.$i var/www/html/BaK/etc.tgz.$(($i + 1)) 2> /dev/null
 done
mv var/www/html/BaK/etc.tgz   var/www/html/BaK/etc.tgz.1 2> /dev/null
tar czvf var/www/html/BaK/etc.tgz etc/
 
mv var/www/html/BaK/home.tgz.4 var/www/html/BaK/home.tgz.5 2> /dev/null
mv var/www/html/BaK/home.tgz.3 var/www/html/BaK/home.tgz.4 2> /dev/null
mv var/www/html/BaK/home.tgz.2 var/www/html/BaK/home.tgz.3 2> /dev/null
mv var/www/html/BaK/home.tgz.1 var/www/html/BaK/home.tgz.2 2> /dev/null
mv var/www/html/BaK/home.tgz   var/www/html/BaK/home.tgz.1 2> /dev/null
tar czvf var/www/html/BaK/home.tgz home/   
 
# Suuremman levyn varmistus 
cd /var/www
for i in 4 3 2 1
 do mv html.tgz.$i html.tgz.$(($i + 1)) 2> /dev/null
 done
mv html.tgz   html.tgz.1 2> /dev/null
tar czv --exclude html/BaK/\* --exclude \*.iso --exclude \*.rpm  -f html.tgz html 
# Tiedostolistaus myös talteen
for i in 4 3 2 1
 do mv html_lR.$i html_lR.$(($i + 1)) 2> /dev/null
 done
mv html_lR   html_lR.1 2> /dev/null
ls -lR html > html_lR  

Listaus 2

#/etc/sysconfig/bkpaths
BKDIRS="/usr/local/proj /root /home /etc" 

Listaus 3

#!/bin/sh
#/etc/cron.weekly/wbackup 
. /etc/sysconfig/bkpaths
date +"%d %b %Y" > /var/run/backup
cd /
mount rk1:/bak bkrk1 && for i in $BKDIRS
   do
# Arkiston nimeksi tulee esim. home.tgz
     tar czv  --exclude \*.iso -f bkrk1/`basename $i`.tgz $i
   done
umount bkrk1   

Listaus 4

#!/bin/sh
#/etc/cron.daily/backup 
. /etc/sysconfig/bkpaths
mount /bk
for i in $BKDIRS ; do cp -au --one-file-system $i /bk ; done
umount /bk
cd /
mount rk1:/bak bkrk1 && for i in $BKDIRS
   do
     PAIV=`cat /var/run/backup`
# Arkiston nimeksi tulee esim. home.Wed.tgz
     tar czv --newer "$PAIV"  --exclude \*.iso -f bkrk1/`basename $i`.`date +%a`.tgz $i
   done
umount bkrk1 

Luku 47 Kasvata hännästä demoni

Listaus 1

#!/bin/sh
 
# Missä Apachen loki luuraa
cd /var/log/httpd
# Varmistetaan tiedostojen olemassaolo
touch nimda.txt
touch codered.txt
# Tapetaan vanha ajossa oleva versio
kill `ps -C "tail -n100" h | cut -f2 -d" "`
 
# Muuta -n suuremmaksi, jos on tarvetta.
tail -n10000 --follow=name access_log | \
  awk '
# Pyydystetään nimda-mato
  /scripts\/root.exe/ {
  vanha=0
  while(getline rivi < "nimda.txt"){if($1 ~ rivi) vanha=1}
  if(vanha==0){
# Matopesän nimi talteen
  print $1 >> "nimda.txt"
  system("/sbin/ipchains -A input -j DENY  -i eth0 -p tcp -s " $1 " --destination-port 80")
  }
  close("nimda.txt")
  }
# Pyydystetään Code Red -mato
  /default.ida/ {
  vanha=0
  while(getline rivi < "codered.txt"){if($1 ~ rivi) vanha=1}
  if(vanha==0){
# Matopesän nimi talteen
  print $1 >> "codered.txt"
  system("/sbin/ipchains -A input -j DENY  -i eth0 -p tcp -s " $1 " --destination-port 80")
  }
  close("codered.txt")
  }' - &

Listaus 3

iptables -A INPUT -p tcp --dport ssh -m recent --update --seconds 60 -j DROP

Listaus 4

auth        required      /lib/security/pam_env.so
auth required /lib/security/pam_abl.so config=/etc/security/pam_abl.conf

auth        sufficient    /lib/security/pam_unix.so likeauth nullok

Listaus 5

# /etc/security/pam_abl.conf
# debug
host_db=/var/lib/abl/hosts.db
host_purge=2d
host_rule=*:10/1h,30/1d
user_db=/var/lib/abl/users.db
user_purge=2d
user_rule=!root:10/1h,30/1d

Listaus 7

pam_abl -p /etc/security/pam_abl.conf

Luku 48 Rinnakkaisajo, SMP, ryvästäminen, vikasietoisuus

Listaus 5

time ( for x in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do \
awk `BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' &  done) \
| grep foo

Listaus 6

alias gcc='mosrun -2 gcc'

Listaus 8

mount rk4:/usr/src/redhat/SPECS/ /usr/src/redhat/SPECS/
mount rk4:/usr/src/redhat/RPMS/ /usr/src/redhat/RPMS/
mount rk4:/usr/src/redhat/SOURCES/ /usr/src/redhat/SOURCES/
mount rk4:/usr/src/redhat/SRPMS/ /usr/src/redhat/SRPMS/

Listaus 9

#!/bin/sh
/usr/bin/make -j12 $@

Listaus 10

#!/bin/bash

# Huomaa, että joudut tekemään hakemiston /usr/src/redhat/SPECSLOCK
# jokaisessa käännöksiin osallistuvassa koneessa.

# Konfigurointimuuttujat.
# BHOSTS on välilyönnein eroteltu lista koneista, jotka osallistuvat
# kääntämiseen. Paikallista konetta ei mainita. Mainitse nopein kone ensin.
export BHOSTS="rk3 rk8"

# Haetaan käännettäviä paketteja netistä ja siirrytään hakemistoon,
# jossa uudet lähdekoodipaketit ovat. Korvaa tämä osuus sopivalla
# koodinpätkällä
for i in *
   rpm -i $i
done

cd /usr/src/redhat/SPECS/
if [ -f kernel-2.4.spec ]
  then
# Pakotetaan myös i586-arkkitehtuurin käännös.  
    awk '/^%define all_x86 / {print "%define all_x86 i386 i586 i686 athlon"
                              next}
                             {print}' kernel-2.4.spec > kernel-2.4.spec.out
    mv -f kernel-2.4.spec.out kernel-2.4.spec
fi
if [ "`ls *.spec`" != "" ]
  then
# /var/lock-hakemistossa on lukitustiedostot, jotka kertovat onko kone vapaa
# seuraavaan työhön.  
    rm -f /var/lock/rk?
    for j in $BHOSTS 
      do
        unset ALIVE
# Tarkistetaan onko kone verkossa.	
        ping -c 3 $j >/dev/null && ALIVE="1"
        if [ $ALIVE="1" ]
          then 
# Yritetään liittää etäkoneille hakemistoja ja jos liitokset eivät onnistu
# merkitään kone käyttökelvottomaksi.
            ssh $j "mount rk6:/usr/src/redhat/RPMS /usr/src/redhat/RPMS" && OK=$j
            ssh $j "mount rk6:/usr/src/redhat/SRPMS /usr/src/redhat/SRPMS" || unset OK
            ssh $j "mount rk6:/usr/src/redhat/SOURCES /usr/src/redhat/SOURCES" || \
                unset OK
            ssh $j "mount rk6:/usr/src/redhat/SPECS /usr/src/redhat/SPECS" || unset OK
            ssh $j "mount rk6:/usr/src/redhat/SPECSLOCK /usr/src/redhat/SPECSLOCK" \
                || unset OK
            ssh $j "mount rk6:/ /rk6" && BHOSTS_OK=$BHOSTS_OK" "$OK
        fi
    done
fi   
# Yritetään kääntää 3 kertaa
for t in 1 2 3
  do
    for i in *.spec 
      do
# /usr/src/redhat/SPECSLOCK-hakemistossa on lukitustiedostoja. Jos siellä on
# lukitustiedosto, ko. paketti on vapaana käännettäväksi. Kun se otetaan
# käännettäväksi, lukitustiedosto poistetaan välittömästi.
        touch ../SPECSLOCK/$i
    done
# Jatketaan niin kauan, kuin on vapaita paketteja käännettäväksi.    
    while [ "`ls ../SPECSLOCK/`" != "" ]
      do
        for i in *.spec 
          do
            for j in $BHOSTS_OK
              do
# Tarkistetaan onko kone vapaana seuraavaan käännöstyöhön.
                if [ ! -f /var/lock/$j -a -f ../SPECSLOCK/$i ]
                  then
                    echo "at `date` $j starts to build packages specified in" $i
# Estetään, että samaa pakettia ei enää toinen kone lähde kääntämään.		    
                    rm -f ../SPECSLOCK/$i
# Käsitellään eri pakettien arkkitehtuuriparametrit case-lauseessa.		    
                    case $i in 
# Ydin käännetään usealle arkkitehtuurille.		    
                    "kernel-2.4.spec")
                        ssh $j "touch /rk6/var/lock/$j ; \
                         rpmbuild -ba --rmspec --target i386,i586,i686,athlon \
                         /usr/src/redhat/SPECS/$i > /dev/null 2>&1; \
                         rm -f /rk6/var/lock/$j" &
                        ;;
                    "glibc.spec")
                        ssh $j "touch /rk6/var/lock/$j ; \
                         rpmbuild -ba --rmspec --target i386,i686 \
                         /usr/src/redhat/SPECS/$i >/dev/null 2>&1 ; \
                         rm -f /rk6/var/lock/$j" &
                        ;;
                    "openssl.spec")
                        ssh $j "touch /rk6/var/lock/$j ; \
                         rpmbuild -ba --rmspec --target i386,i686 \
                         /usr/src/redhat/SPECS/$i >/dev/null 2>&1 ; \
                         rm -f /rk6/var/lock/$j" &
                        ;;
                    *)
# Oletuksena käännetään vain i386-arkkitehtuurille.
# Ennen käännöksen aloittamista luodaan lukitustiedosto, jonka olemassa olo
# tarkoittaa, että kone on varattu. rpmbuild-komento poistaa
# .spec-tiedoston, jos rakentaminen onnistuu --rmspec-parametrilla.
# Käännöksen valmistuttua koneen varausta tarkoittava lukitustiedosto
# poistetaan ja kone on valmiina uusii töihin.
# Skriptissä koko ssh:n avulla etäkoneessa käynnistettävä komentokokonaisuus
# käynnistetään tausta-ajoon, joten skripti etenee välittömästi eikä jää
# odottamaan komentojen valmistumista.
                         ssh $j "touch /rk6/var/lock/$j ; \
                          PATH=$PATH:/usr/local/scripts rpmbuild -ba --rmspec \
                          /usr/src/redhat/SPECS/$i \
                          > /dev/null 2>&1; \
                          rm -f /rk6/var/lock/$j" &
                        ;;
                    esac
                fi
            done
# Tehdään samat paikallisessa koneessa kuin etäkoneissa.	    
            if [ ! -f /var/lock/rk6 -a -f ../SPECSLOCK/$i ]
              then
                echo "At `date` localhost starts to build packages specified in" $i
                rm -f ../SPECSLOCK/$i
                case $i in 
                "kernel-2.4.spec")
                    sh -c "touch /var/lock/rk6 ; \
                     rpmbuild -ba --rmspec --target i386,i586,i686,athlon \
                     /usr/src/redhat/SPECS/$i >/dev/null 2>&1; \
                     rm -f /var/lock/rk6" &
                    ;;
                "glibc.spec")
                    sh -c "touch /var/lock/rk6 ; \
                     rpmbuild -ba --rmspec --target i386,i686 \
                     /usr/src/redhat/SPECS/$i >/dev/null 2>&1; \
                     rm -f /var/lock/rk6" &
                    ;;
                "openssl.spec")
                    sh -c "touch /var/lock/rk6 ; \
                     rpmbuild -ba --rmspec --target i386,i686 \
                     /usr/src/redhat/SPECS/$i >/dev/null 2>&1; \
                     rm -f /var/lock/rk6" &
                    ;;
                *)
#gcc build needs pod2man which is in usr/local/scripts directory. 
#We add it to PATH always to avoid other similar problems.
                    sh -c "touch /var/lock/rk6 ; \
                     PATH=$PATH:/usr/local/scripts rpmbuild -ba --rmspec \
                     /usr/src/redhat/SPECS/$i >/dev/null 2>&1; \
                     rm -f /var/lock/rk6" &
                    ;;
                esac
            fi
# Tämä skripti on käynnistänyt käännökset taustalle ja tämä silmukka
# ``pyörii'' jatkuvasti tarkistaen olisiko joku koneista saanut työnsä
# valmiiksi. Jotta silmukan pyöritys ei veisi turhaan tehoa, nukutaan 10
# sekuntia.
            sleep 10s
        done
    done
#Wait untill all compiles have completed   
    while [ "`ls /var/lock/rk? 2>/dev/null`" != "" ]
      do
        sleep 10s
    done
done 
# Puretaan liitokset. Hakemistojen alkuperäinen sisältö näkyy.
for j in $BHOSTS_OK
  do
    ssh $j  "umount rk6:/usr/src/redhat/RPMS"
    ssh $j  "umount rk6:/usr/src/redhat/SRPMS"
    ssh $j  "umount rk6:/usr/src/redhat/SOURCES"
    ssh $j  "umount rk6:/usr/src/redhat/SPECS"
    ssh $j  "umount rk6:/usr/src/redhat/SPECSLOCK"
    ssh $j  "umount rk6:/"
    ssh $j  "rm -rf /usr/src/redhat/BUILD/*"
    ssh $j  "rm -rf /var/tmp/*root"
    ssh $j  "rm -f /var/tmp/rpm-tmp.*"
done

Luku 49 Virtualisointi

Listaus 2

#!/bin/bash
if [ "$1" == "" ]
then 
  echo "$0: Must give a directory name where to install chroot environment" 
  echo "For example, $0 /root/chroottest (the path must be absolute)"
  exit
fi
export TESTFS=$1
mkdir -p $TESTFS
mkdir -p $TESTFS/proc/
cp /proc/cpuinfo $TESTFS/proc/
mkdir $TESTFS/etc
cp /etc/resolv.conf $TESTFS/etc
mkdir -p $TESTFS/etc/yum.repos.d/
echo '[CentOS]' > $TESTFS/etc/yum.repos.d/CentOS.repo
echo 'name=CentOS-$releasever - Base' >> $TESTFS/etc/yum.repos.d/CentOS.repo
#echo 'baseurl=http://ftp.funet.fi/pub/mirrors/centos.org/5.2/os/$basearch/'  >> \
 $TESTFS/etc/yum.repos.d/CentOS.repo
echo 'baseurl=http://ftp.sunet.se/pub/Linux/distributions/centos/5.2/os/$basearch/'  >> \
 $TESTFS/etc/yum.repos.d/CentOS.repo
# No checks possible yet
echo 'gpgcheck=0' >> $TESTFS/etc/yum.repos.d/CentOS.repo
echo 'gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5' >> \
 $TESTFS/etc/yum.repos.d/CentOS.repo
rpm --initdb --root $TESTFS
mv /etc/yum.repos.d /etc/yum.repos.d.bak
mkdir /etc/yum.repos.d
cp $TESTFS/etc/yum.repos.d/CentOS.repo /etc/yum.repos.d/
yum -y --installroot=$TESTFS install yum 
/bin/rm $TESTFS/etc/yum.repos.d/*
cp  /etc/yum.repos.d/CentOS.repo $TESTFS/etc/yum.repos.d/CentOS.repo
/bin/rm -r /etc/yum.repos.d
mv /etc/yum.repos.d.bak /etc/yum.repos.d
yum --installroot=$TESTFS clean all
chroot $TESTFS

Listaus 3

rpm --rebuilddb
yum groupinstall core 

Listaus 4

yum groupinstall base