Search This Blog

Saturday, June 19, 2010

Replacing a failing software raid drive in 10 easy steps

Un post de acum 3-4 ani pe care unul din amicii de la birou n-a fost in stare sa-l gasesca pe board-ul intern:

1 - cat /proc/mdstat and check for referrences to failing device
(sda = first sata hdd, sdb = the second one, so on...) the failed
partition should be something like /dev/sdb5 (I'm goin to refer to this
partition as /dev/sdYn and I'm going to call the good one /dev/sdXn)
2 - fdkisk -l /dev/sdX (where sdX is the GOOD hdd); fdisk -l /dev/sdY
- take a note of all partition configuration
3 - remove failed hdd: mdadm --manage /dev/md0 --fail /dev/sdYn ;
mdadm --manage /dev/md0 --remove /dev/sdYn (/dev/sdYn is the failed device!)
4 - phisically replace hdd (maybe with a shutdown before? :-) )
5 - sfdisk -d /dev/sdX | sfdisk /dev/sdY will create identical partitions
on the new hdd, similar to the ones on the good hdd (usually a /boot
of 100MB as primary partition and the rest as extended type FD "Linux
raid autodetect")
6 - check if the partitions are identical: fdkisk -l /dev/sdY
(compare with what you read at step 2)
7 - mdadm --manage /dev/md0 --add /dev/sdYn will add the new
partition tothe raid array
8 - watch the rebuid procedure: watch -n 10 cat /proc/mdstat (if
you are bored type ^C - the rebuid is done anyway)
9 - in order to make a copy of the boot partition too, do a mount
/dev/sdY1 /boot2 (the first partition is usually the 100MB /boot), then
do acd /boot ; find . -depth -print | cpio -padmV /boot2 ; grub-install /dev/sdY
10 - enjoy a beer, you have a working raid again!

Saturday, March 13, 2010

Spamfilter 2.0 - teoria initiala (lang:RO)

Se implinesc in curand 4 ani de cand a inceput istoria asta. Acum 4 ani m-am apucat sa fac primul filtru antispam si habar n-aveam la ce ma inham (nu ca celelalte proiecte, care au venit dupa ar fi fost mai usoare, dimpotriva, da' inceputu' e intotdeauna mai greu). Dupa 4 ani filtru' meu inca e in topul celor mai bune din lume, blocand in medie cam 97% din spam, dar pe masura ce trece timpul, apar tot mai evidente limitarile versiunii 1,x, printre care lipsa unei metode de a permite fiecarui user sa-si gereze individual propriile mesaje, fara necesitatea unui admin, viteza foarte mica de raspuns in cazul cautarilor in mesajele din carantina, structura multi-layer, data de faptul ca am tot facut adaugiri la software-ul initial, dar nu am facut o reala integrare, ci am tot adaugat filtre unul in fata celuilalt - care poate induce intarzieri de pana la 5 minute in prelucrare (cu tot cu greylisting) si nu permite managementul centralizat al exceptiilor. Astfel, in versiunea 1.x, am ajuns sa am o lista de exceptii in postgrey, una in postfix si alta in spamd, iar lista din postgrey nici macar nu are o interfata web de management! Foarte important e si suportul de solidstate disk, care in v1 o cam suge rau de tot (se vede clar ca e adaugat dupa si mi-a dat cele mai multe batai de cap dealtfel).
Sigur, am si parti bune in 1.x, pe care le voi copia in v2, printre care: autoupdate/push updates, remote services monitoring, redir, call-home licensing...
Voi pastra combinatia postfix-spamassassin ca si structura de baza, dar proabil ca voi muta toata configuratia si storage-ul intr-o baza de date. Bazat pe scriptul de getuser probabil, voi crea o metoda autentificare a userilor la serverul principal de mail daca e exchange, iar pentru un server unix va trebui sa descopar cum imi pot autentifica userii la serverul pop3 - in felul asta nu am nevoie de alte combinatii user/parola pentru managementul mesajelor in carantina.
Trebuie sa fie posibil sa transfer bazele de date postgey si baesyan (actualmente berkleydb) in noul sistem, pen' ca sigur o sa trebuiasca sa upgradez din vechile sisteme sia ar fi bine sa pastrez rata mare de detectie pe care o am deja.
Trebuie sa investighez daca nu cumva cramfs/alt_filesystem_read_only in combinatie cu unionfs nu e o solutie mai buna pentru SSD-uri sau USB-flashuri (care actualmente sunt super-lente, iar pe masini cu >1mil de spamuri/luna crapa execrabil cu ext3fs chiar daca am mutat /tmp in ram si am limitat drastic scrierile pe disk).
Ca o ultima idee ar fi sa mut /etc/initsetup-ul intr-o interfata web, scapand astfel de nevoia initiala de a avea kbd+screen pentru instatalare si permitandu-mi poate sa modific cutia in ceva gen router cu doar un port rj45, un powercord si un powerbutton.

Edit: beta 1 is out! working on bug fixes now.
Edit2: spamfilter2, codename "miserable failure" is retired. let's welcome SpamFilter3!

Sunday, February 14, 2010

Laptop brightness

Elitebook-ul meu nu vrea sa mapeze Fn+F9 / Fn+F10 pentru brightness down/up. Fn+F11 merge (light sensor), dar F9 si F10 nu. Nici macar in xev nu apare nimic. Kde power management in schimb modifica brightness-ul in functie de power-profile pe care il aplica, e doar o problema de key-mapping. Mai mult, un echo 1-10 in /sys/class/backlight/acpi_video0/brightness imi schimba brightness-ul, deci tot ce am de facut e sa mapez miste taste care sa trimita un +1 / -1 in /sys/class/backlight/acpi_video0/brightness Nu pot face asta direct dintr-un script pentru ca va trebui sa-l fac suid root, iar mai nou (http://en.wikipedia.org/wiki/Setuid#setuid_on_executables ) nu prea mai poti sa suid un script. Sa scriem deci un programel care sa poata fi suid root.

#include 

void usage()
{
fprintf(stderr, "Usage: lcd-brightness [value]\n");
}

int main(int argc, char *argv[])
{
FILE *fp;
int bright = 0;
const char *kFileName =
"/sys/class/backlight/acpi_video0/brightness";

switch (argc) {
case 1:
fp = fopen(kFileName, "r");
fscanf(fp, "%d", &bright);
printf("%d\n", bright);
break;
case 2:
fp = fopen(kFileName, "w");
bright = atoi(argv[1]);
fprintf(fp, "%d\n", bright);
break;
default:
usage();
return -1;
}

fclose(fp);
return 0;
}

sa-l salvam undeva in path cu numele brightness si acum putem mapa niste taste in kde care sa-l apeleze:


Iar ca si command scriem:

brightness $(expr $(brightness) - 1); kdialog 
--passivepopup "Decrease Brightness to `cat 
/sys/class/backlight/acpi_video0/brightness`" 1
- asta va da un frumos notification pop-up cand este apelat:

Evident, trebuie mapata o combinatie si pentru Brightness up, care va face +1 in loc de -1 in comanda.

Sunday, February 07, 2010

Another Backup

Versiunea care foloseste tar (pentru ca cpio din debilian moare cand ti-e lumea mai draga si nu vreau sa pun cpio din surse)



#!/bin/sh
#       @(#) AUTOTBACK 2.8 09/12/09
# 
# 09/12/2009 (sorin@xxxxxxxx.com) mod for debian5. remove hit report. changed to use TAR
# 28/08/2008 (sorin@xxxxxxxx.com) modified for rhel5. skip /proc /sys /tmp
# modified 9/14/2000 to provide hit reporting on web site
#
#       Usage  -Command to be incorporated in cron of root for off Peak
#               automatic system TAR Backup.
#               Generates report in /var/autotback directory, mail and prints it.
#
#

####### Define Local Variables ################
RECIPIENT1=service@xxxxxxxx.com
RECIPIENT2=sorin@xxxxxxxx.com
PRINTER=HP4050
TAPE=/dev/st0
BACKDIR=/
EXCLUDE=/sys/*
EXCLUDE1=/proc/*
EXCLUDE2=/dev/*
EXCLUDE3=/var/run/*
EXCLUDE4=/tmp/*

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

# System variables
LOCK=/var/autotback/backlock
DEFAULTDIR=/var/autotback
REPORTFILE=/var/autotback/backrep
TEMPFILE=/var/autotback/backtmp
TEMPFILE2=/var/autotback/backtmp2
ALLIST=/var/autotback/allist
LIST=/var/autotback/list
ERRORMSG="Another backup is running or the last backup has not finished well. Please check"
DELIMIT="================================================================================"

# define a remove lock and set a trap on exit
remove_lock()
{
       rm -f $LOCK
       }
# make sure we release the lock no matter how we exit, when we exit
trap remove_lock 0
# Check if another backup is running or if the script crashed in such way that the lock is still there, clear the lock
if [ -r $LOCK ]
then
 DIFF=`echo "\`date +%s\`-\`cat $LOCK\`" | bc`
 if [ $DIFF -gt 86400 ]; then echo "More than one day since backup is NOT running, autoclean..." >> $REPORTFILE; rm -f $LOCK; fi
 sed -i -e "1i\ $ERRORMSG" -e "1i\ $DELIMIT" -e "1i\ " $REPORTFILE
 echo $ERRORMSG >> $REPORTFILE
 echo $REPORTFILE | mail -s "Backup Failure on $HOSTNAME" $RECIPIENT1 $RECIPIENT2
 lp -d $PRINTER $REPORTFILE
 exit 5
fi

# Cleanup obsolete traces
cd $BACKDIR
rm -rf $DEFAULTDIR
if [ ! -d $DEFAULTDIR ]
then
       mkdir -p $DEFAULTDIR
fi

# Create lockfile
echo "`date +%s`">$LOCK

# Start backup
echo "                           Automatic Backup Report
(c)1991-2010 Xxxxxxxx Xxxxxxxxx Inc.
$DELIMIT

Backup of $BACKDIR on $HOSTNAME started at `date`
">>$REPORTFILE

# Create a list of what we have to backup and exclude
#cd $BACKDIR
#find . -depth -print  >$ALLIST
#grep -vE ".$EXCLUDE|.$EXCLUDE1|.$EXCLUDE2|.$EXCLUDE3|.$EXCLUDE4" $ALLIST >$LIST
echo "BACKUP started on `date`">$TEMPFILE

# Start saving at the begining of the tape
mt -f $TAPE rewind 2>>$TEMPFILE2
#cat $LIST | cpio -ocvB >$TAPE 2>>$TEMPFILE
tar --exclude=$EXCLUDE --exclude=$EXCLUDE1 --exclude=$EXCLUDE2 --exclude=$EXCLUDE3 --exclude=$EXCLUDE4 -cvpf $TAPE $BACKDIR >>$TEMPFILE 2>>$TEMPFILE2
backstat=$?
tail $TEMPFILE2 >>$REPORTFILE
echo "
Exit status = $backstat
">>$REPORTFILE
if [ $backstat -eq 0 ]
then
 echo "*** Backup COMPLETED OK ***">>$REPORTFILE
fi
if [ $backstat -eq 1 ]
then
 echo "*** Backup may be incomplete or have missing files ***">>$REPORTFILE
fi
if [ $backstat -eq 2 ]
then
 echo "*** Backup has encounter a fatal error. Please check ***">>$REPORTFILE
fi
echo "Tape Save finished on `date`
$DELIMIT
">>$REPORTFILE
# Check total nr of blocks reported by cpio
#set `tail -1 $TEMPFILE`
#BACKTOT=$1
#echo "Total of amount of Backup was $1 blocks.
echo "Verify of $BACKDIR on $HOSTNAME started at `date`
">>$REPORTFILE
# Tape rewind / Verify
mt -f $TAPE rewind 2>>$TEMPFILE2
# cpio -icvtB <$TAPE >>$TEMPFILE 2>>$TEMPFILE2
tar --exclude=$EXCLUDE --exclude=$EXCLUDE1 --exclude=$EXCLUDE2 --exclude=$EXCLUDE3 --exclude=$EXCLUDE4 --exclude=$EXCLUDE -tpvf $TAPE >>$TEMPFILE 2>>$TEMPFILE2
verstat=$?
tail $TEMPFILE2 >>$REPORTFILE
echo "
Exit status = $verstat
">>$REPORTFILE
if [ $verstat -eq 0 ]
then
 echo "***  Verify COMPLETED OK ***
">>$REPORTFILE
if [ $verstat -eq 1 ]
then
 echo "***  Verify may be incomplete ***
">>$REPORTFILE
if [ $verstat -eq 2 ]
then
 echo "***  Verify has encounter a fatal error. Please check ***
">>$REPORTFILE
cat $TEMPFILE >> $REPORTFILE
fi
echo "Tape Verify finished on `date`
">>$REPORTFILE
# Check nr of verified blocks reported by cpio and send warning if not ok
#set `tail -1 $TEMPFILE2`
#VERTOT=$1
#if [ "$BACKTOT" != "$VERTOT" -o $backstat -ne 0 -o $verstat -ne 0 ]
#then
#        echo "*** WARNING BACKUP TRANSFER TOTALS DID NOT MATCH ***">>$REPORTFILE
#        echo "***              PLEASE VERIFY                   ***
# ">>$REPORTFILE
#else
#        echo "*** Transfer Totals Concur ***
# ">>$REPORTFILE
#fi
echo $DELIMIT >>$REPORTFILE

# Send / Print the report
cat $REPORTFILE | mail -s "Backup Report $HOSTNAME" $RECIPIENT1 $RECIPIENT2
lp -d $PRINTER $REPORTFILE

# Remove lock, eject and exit
sleep 5
rm -f $LOCK
mt -f $TAPE rewoffl 2>>$TEMPFILE2
exit 0

Sunday, January 10, 2010

2k10

2010 - si se fac 5 ani de cand am ajuns aici.
[...]
La multi ani!

Thursday, December 10, 2009

Fax setup

#!/bin/bash

# greetings from neXt :)

#cd /etc/initsetup
vardt=/etc/initsetup/vardt
log=/etc/initsetup/setup.log

if [ -f $log ]; then
oldexp=`grep expd $log | cut -d= -f2`
fi
. $vardt

echo -en "Starting setup: " > $log
date > $log
cat $vardt >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 1/10" \
--inputbox "Enter your domain name" 8 60 $fakedom 2>/tmp/input.$$
sel=$?
dom=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo dom=$dom >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 2/10" \
--inputbox "Enter your IP address" 8 60 $fakeip 2>/tmp/input.$$
sel=$?
ipif=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipif=$ipif >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 3/10" \
--inputbox "Enter the MailServer IP address" 8 60 $fakemail 2>/tmp/input.$$
sel=$?
ipmail=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipmail=$ipmail >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 4/10" \
--inputbox "Enter the Gateway IP address" 8 60 $fakegw 2>/tmp/input.$$
sel=$?
ipgw=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipgw=$ipgw >> $log

diafucklog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 5/10" \
--inputbox "Enter the DNS IP address" 8 60 $fakedns 2>/tmp/input.$$
sel=$?
ipdns=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipdns=$ipdns >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 6/10" \
--inputbox "Enter the Range of IP address" 8 60 $fakenet 2>/tmp/input.$$
sel=$?
ipnet=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipnet=$ipnet >> $log

/bin/sed -i s/$fakedom/$dom/g /etc/hosts
/bin/sed -i s/$fakedom/$dom/g /etc/squirrelmail/config.php
/bin/sed -i s/$fakedom/$dom/g /etc/postfix/transport
/bin/sed -i s/$fakedom/$dom/g /etc/sysconfig/network
/bin/sed -i s/$fakedom/$dom/g /etc/postfix/main.cf
/bin/sed -i s/$fakeip/$ipif/g /etc/sysconfig/network-scripts/ifcfg-eth0
/bin/sed -i s/$fakeip/$ipif/g /etc/initsetup/getbackup
/bin/sed -i s/$fakedns/$ipdns/g /etc/resolv.conf
/bin/sed -i s/$fakedns/$ipdns/g /etc/sysconfig/network-scripts/ifcfg-eth0
/bin/sed -i s^$fakenet^$ipnet^g /etc/postfix/main.cf
/bin/sed -i s/$fakemail/$ipmail/g /etc/postfix/transport
/bin/sed -i s/$fakemail/$ipmail/g /etc/postfix/main.cf
/bin/sed -i s/$fakegw/$ipgw/g /etc/sysconfig/network
/bin/sed -i s/$fakegw/$ipgw/g /etc/sysconfig/network-scripts/ifcfg-eth0

echo -en "Files modified, restarting network..."
/sbin/service network restart >> $log
echo -en " Wait a second, network config still active..."
sleep 10
echo "Changing default route" >> $log
/sbin/route del default
/sbin/route add default gw $ipgw
export HOSTNAME=HFAX.$dom

cp -f /etc/inittab.nofax /etc/inittab.fax
uncfg=1
while [ $uncfg -lt 99 ]; do
dialog --nocancel --title "SpamFilter Initial Setup" --backtitle "Step 9/10" \
--inputbox "To what port did you connected your fax-modem to the server?" 10 40 $fakeport 2>/tmp/input.$$
sel=$?
port=`cat /tmp/input.$$`
rm -f /tmp/input.$$
fakeport=$port
echo port=$port >> $log
case $sel in
0) cp -f /etc/inittab.nofax /etc/inittab
/sbin/init q
killall faxgetty
faxsetup
/sbin/service hylafax-server stop
killall faxq
sleep 5
faxaddmodem $port
if cat /var/spool/fax/etc/config.$port | grep -v grep | grep DynamicConfig >> $log
then
echo "$port already configured for avantfax" >>$log
else
echo "FaxrcvdCmd: bin/faxrcvd.php
DynamicConfig: bin/dynconf.php
UseJobTSI: true" >> /var/spool/fax/etc/config.$port
fi
if cat /etc/inittab.fax | grep -v grep | grep 'respawn:/usr/sbin/faxgetty $port' >> $log
then
echo "$port already configured for receiving" >>$log
else
echo "m$uncfg:2345:respawn:/usr/sbin/faxgetty $port" >> /etc/inittab.fax
fi
let uncfg++
sleep 5
/sbin/service hylafax-server start
cp -f /etc/inittab.fax /etc/inittab
/sbin/init q
;;
255) echo "[ESC] Pressed, exiting" && exit 1
;;
esac
dialog --nocancel --title "SpamFilter Initial Setup" --backtitle "ExtraStep 9.1/10" \
--yes-label End --no-label Add_Modem \
--yesno "Did you finished, or there are still modems connected?" 10 40
sel=$?
case $sel in
0) uncfg=999
;;
255) echo "[ESC] Pressed, exiting" && exit 1
;;
esac
done
echo > $vardt
echo fakedom=$dom >> $vardt
echo fakeip=$ipif >> $vardt
echo fakemail=$ipmail >> $vardt
echo fakegw=$ipgw >> $vardt
echo fakedns=$ipdns >> $vardt
echo fakenet=$ipnet >> $vardt
echo fakeport=$port >> $vardt
echo >> $vardt

echo -en "Last step: Restarting services..."
/etc/init.d/run
/sbin/service hylafax-server restart 1>>$log 2>&1
/sbin/service postfix restart 1>>$log 2>&1
dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 9/10" \
--msgbox "Let's add users for the fax now. point a browser to http://HFAX/admin login as
admin with the usual password, go to 'NewUser'.
Don't forget to go also to Configure Modems and to setup the default fax-to-email recipient!
Then, from each client, browse the network to \\HFAX\public folder
#!/bin/bash

# greetings from neXt :)

#cd /etc/initsetup
vardt=/etc/initsetup/vardt
log=/etc/initsetup/setup.log

if [ -f $log ]; then
oldexp=`grep expd $log | cut -d= -f2`
fi
. $vardt

echo -en "Starting setup: " > $log
date > $log
cat $vardt >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 1/10" \
--inputbox "Enter your domain name" 8 60 $fakedom 2>/tmp/input.$$
sel=$?
dom=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo dom=$dom >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 2/10" \
--inputbox "Enter your IP address" 8 60 $fakeip 2>/tmp/input.$$
sel=$?
ipif=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipif=$ipif >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 3/10" \
--inputbox "Enter the MailServer IP address" 8 60 $fakemail 2>/tmp/input.$$
sel=$?
ipmail=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipmail=$ipmail >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 4/10" \
--inputbox "Enter the Gateway IP address" 8 60 $fakegw 2>/tmp/input.$$
sel=$?
ipgw=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipgw=$ipgw >> $log

diafucklog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 5/10" \
--inputbox "Enter the DNS IP address" 8 60 $fakedns 2>/tmp/input.$$
sel=$?
ipdns=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipdns=$ipdns >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 6/10" \
--inputbox "Enter the Range of IP address" 8 60 $fakenet 2>/tmp/input.$$
sel=$?
ipnet=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipnet=$ipnet >> $log

/bin/sed -i s/$fakedom/$dom/g /etc/hosts
/bin/sed -i s/$fakedom/$dom/g /etc/squirrelmail/config.php
/bin/sed -i s/$fakedom/$dom/g /etc/postfix/transport
/bin/sed -i s/$fakedom/$dom/g /etc/sysconfig/network
/bin/sed -i s/$fakedom/$dom/g /etc/postfix/main.cf
/bin/sed -i s/$fakeip/$ipif/g /etc/sysconfig/network-scripts/ifcfg-eth0
/bin/sed -i s/$fakeip/$ipif/g /etc/initsetup/getbackup
/bin/sed -i s/$fakedns/$ipdns/g /etc/resolv.conf
/bin/sed -i s/$fakedns/$ipdns/g /etc/sysconfig/network-scripts/ifcfg-eth0
/bin/sed -i s^$fakenet^$ipnet^g /etc/postfix/main.cf
/bin/sed -i s/$fakemail/$ipmail/g /etc/postfix/transport
/bin/sed -i s/$fakemail/$ipmail/g /etc/postfix/main.cf
/bin/sed -i s/$fakegw/$ipgw/g /etc/sysconfig/network
/bin/sed -i s/$fakegw/$ipgw/g /etc/sysconfig/network-scripts/ifcfg-eth0

echo -en "Files modified, restarting network..."
/sbin/service network restart >> $log
echo -en " Wait a second, network config still active..."
sleep 10
echo "Changing default route" >> $log
/sbin/route del default
/sbin/route add default gw $ipgw
export HOSTNAME=HFAX.$dom

cp -f /etc/inittab.nofax /etc/inittab.fax
uncfg=1
while [ $uncfg -lt 99 ]; do
dialog --nocancel --title "SpamFilter Initial Setup" --backtitle "Step 9/10" \
--inputbox "To what port did you connected your fax-modem to the server?" 10 40 $fakeport 2>/tmp/input.$$
sel=$?
port=`cat /tmp/input.$$`
rm -f /tmp/input.$$
fakeport=$port
echo port=$port >> $log
case $sel in
0) cp -f /etc/inittab.nofax /etc/inittab
/sbin/init q
killall faxgetty
faxsetup
/sbin/service hylafax-server stop
killall faxq
sleep 5
faxaddmodem $port
if cat /var/spool/fax/etc/config.$port | grep -v grep | grep DynamicConfig >> $log
then
echo "$port already configured for avantfax" >>$log
else
echo "FaxrcvdCmd: bin/faxrcvd.php
DynamicConfig: bin/dynconf.php
UseJobTSI: true" >> /var/spool/fax/etc/config.$port
fi
if cat /etc/inittab.fax | grep -v grep | grep 'respawn:/usr/sbin/faxgetty $port' >> $log
then
echo "$port already configured for receiving" >>$log
else
echo "m$uncfg:2345:respawn:/usr/sbin/faxgetty $port" >> /etc/inittab.fax
fi
let uncfg++
sleep 5
/sbin/service hylafax-server start
cp -f /etc/inittab.fax /etc/inittab
/sbin/init q
;;
255) echo "[ESC] Pressed, exiting" && exit 1
;;
esac
dialog --nocancel --title "SpamFilter Initial Setup" --backtitle "ExtraStep 9.1/10" \
--yes-label End --no-label Add_Modem \
--yesno "Did you finished, or there are still modems connected?" 10 40
sel=$?
case $sel in
0) uncfg=999
;;
255) echo "[ESC] Pressed, exiting" && exit 1
;;
esac
done
echo > $vardt
echo fakedom=$dom >> $vardt
echo fakeip=$ipif >> $vardt
echo fakemail=$ipmail >> $vardt
echo fakegw=$ipgw >> $vardt
echo fakedns=$ipdns >> $vardt
echo fakenet=$ipnet >> $vardt
echo fakeport=$port >> $vardt
echo >> $vardt

echo -en "Last step: Restarting services..."
/etc/init.d/run
/sbin/service hylafax-server restart 1>>$log 2>&1
/sbin/service postfix restart 1>>$log 2>&1
dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 9/10" \
--msgbox "Let's add users for the fax now. point a browser to http://HFAX/admin login as
admin with the usual password, go to 'NewUser'.
Don't forget to go also to Configure Modems and to setup the default fax-to-email recipient!
Then, from each client, browse the network to \\HFAX\public folder and install ghostscript and yajhfc.
Start YajHFC, setup credentials and choose the coverpage from \\HFAX\public\cover.ps" 20 60
sel=$?
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Final info" \
--infobox "The system config and variables are backed-up daily in /etc/initsetup/backup.tgz. In order to save the backup on the unix machine just use the /etc/initsetup/getbackup ftp commands file.
Copy the file to the unix server (you can do that by ftp: as ftpuser:trsf on this box) get /tmp/getbackup /some/path/to/getbackup) and add the following line to cron:
50 21 * * * ftp -n /dev/null

If the server is windows, use the same getbackup script, started daily at 21:50 from getbackup.cmd via Task Scheduler.

THIS IS THE END OF SETUP (see logs in setup.log)" 20 60
sel=$?
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac

echo "Welcome to FaxServer" > /etc/motd
echo "DONE!"
exit 0
ig/network-scripts/ifcfg-eth0
/bin/sed -i s^$fakenet^$ipnet^g /etc/postfix/main.cf
/bin/sed -i s/$fakemail/$ipmail/g /etc/postfix/transport
/bin/sed -i s/$fakemail/$ipmail/g /etc/postfix/main.cf
/bin/sed -i s/$fakegw/$ipgw/g /etc/sysconfig/network
/bin/sed -i s/$fakegw/$ipgw/g /etc/sysconfig/network-scripts/ifcfg-eth0

echo -en "Files modified, restarting network..."
/sbin/service network restart >> $log
echo -en " Wait a second, network config still active..."
sleep 10
echo "Changing default route" >> $log
/sbin/route del default
/sbin/route add default gw $ipgw
export HOSTNAME=HFAX.$dom

cp -f /etc/inittab.nofax /etc/inittab.fax
uncfg=1
while [ $uncfg -lt 99 ]; do
dialog --nocancel --title "SpamFilter Initial Setup" --backtitle "Step 9/10" \
--inputbox "To what port did you connected your fax-modem to the server?" 10 40 $fakeport 2>/tmp/input.$$
sel=$?
port=`cat /tmp/input.$$`
rm -f /tmp/input.$$
fakeport=$port
echo port=$port >> $log
case $sel in
0) cp -f /etc/inittab.nofax /etc/inittab
/sbin/init q
killall faxgetty
faxsetup
/sbin/service hylafax-server stop
killall faxq
sleep 5
faxaddmodem $port
if cat /var/spool/fax/etc/config.$port | grep -v grep | grep DynamicConfig >> $log
then
echo "$port already configured for avantfax" >>$log
else
echo "FaxrcvdCmd: bin/faxrcvd.php
DynamicConfig: bin/dynconf.php
UseJobTSI: true" >> /var/spool/fax/etc/config.$port
fi
if cat /etc/inittab.fax | grep -v grep | grep 'respawn:/usr/sbin/faxgetty $port' >> $log
then
echo "$port already configured for receiving" >>$log
else
echo "m$uncfg:2345:respawn:/usr/sbin/faxgetty $port" >> /etc/inittab.fax
fi
let uncfg++
sleep 5
/sbin/service hylafax-server start
cp -f /etc/inittab.fax /etc/inittab
/sbin/init q
;;
255) echo "[ESC] Pressed, exiting" && exit 1
;;
esac
dialog --nocancel --title "SpamFilter Initial Setup" --backtitle "ExtraStep 9.1/10" \
--yes-label End --no-label Add_Modem \
--yesno "Did you finished, or there are still modems connected?" 10 40
sel=$?
case $sel in
0) uncfg=999
;;
255) echo "[ESC] Pressed, exiting" && exit 1
;;
esac
done
echo > $vardt
echo fakedom=$dom >> $vardt
echo fakeip=$ipif >> $vardt
echo fakemail=$ipmail >> $vardt
echo fakegw=$ipgw >> $vardt
echo fakedns=$ipdns >> $vardt
echo fakenet=$ipnet >> $vardt
echo fakeport=$port >> $vardt
echo >> $vardt

echo -en "Last step: Restarting services..."
/etc/init.d/run
/sbin/service hylafax-server restart 1>>$log 2>&1
/sbin/service postfix restart 1>>$log 2>&1
dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 9/10" \
--msgbox "Let's add users for the fax now. point a browser to http://HFAX/admin login as
admin with the usual password, go to 'NewUser'.
Don't forget to go also to Configure Modems and to setup the default fax-to-email recipient!
Then, from each client, browse the network to \\HFAX\public folder and install ghostscript and yajhfc.
Start YajHFC, setup credentials and choose the coverpage from \\HFAX\public\cover.ps" 20 60
sel=$?
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Final info" \
--infobox "The system config and variables are backed-up daily in /etc/initsetup/backup.tgz. In order to save the backup on the unix machine just use the /etc/initsetup/getbackup ftp commands file.
Copy the file to the unix server (you can do that by ftp: as ftpuser:trsf on this box) get /tmp/getbackup /some/path/to/getbackup) and add the following line to cron:
50 21 * * * ftp -n /dev/null

If the server is windows, use the same getbackup script, started daily at 21:50 from getbackup.cmd via Task Scheduler.

THIS IS THE END OF SETUP (see logs in setup.log)" 20 60
sel=$?
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac

echo "Welcome to FaxServer" > /etc/motd
echo "DONE!"
exit 0
#!/bin/bash

# greetings from neXt :)

#cd /etc/initsetup
vardt=/etc/initsetup/vardt
log=/etc/initsetup/setup.log

if [ -f $log ]; then
oldexp=`grep expd $log | cut -d= -f2`
fi
. $vardt

echo -en "Starting setup: " > $log
date > $log
cat $vardt >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 1/10" \
--inputbox "Enter your domain name" 8 60 $fakedom 2>/tmp/input.$$
sel=$?
dom=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo dom=$dom >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 2/10" \
--inputbox "Enter your IP address" 8 60 $fakeip 2>/tmp/input.$$
sel=$?
ipif=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipif=$ipif >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 3/10" \
--inputbox "Enter the MailServer IP address" 8 60 $fakemail 2>/tmp/input.$$
sel=$?
ipmail=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipmail=$ipmail >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 4/10" \
--inputbox "Enter the Gateway IP address" 8 60 $fakegw 2>/tmp/input.$$
sel=$?
ipgw=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipgw=$ipgw >> $log

diafucklog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 5/10" \
--inputbox "Enter the DNS IP address" 8 60 $fakedns 2>/tmp/input.$$
sel=$?
ipdns=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipdns=$ipdns >> $log

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 6/10" \
--inputbox "Enter the Range of IP address" 8 60 $fakenet 2>/tmp/input.$$
sel=$?
ipnet=`cat /tmp/input.$$`
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac
rm -f /tmp/input.$$
echo ipnet=$ipnet >> $log

/bin/sed -i s/$fakedom/$dom/g /etc/hosts
/bin/sed -i s/$fakedom/$dom/g /etc/squirrelmail/config.php
/bin/sed -i s/$fakedom/$dom/g /etc/postfix/transport
/bin/sed -i s/$fakedom/$dom/g /etc/sysconfig/network
/bin/sed -i s/$fakedom/$dom/g /etc/postfix/main.cf
/bin/sed -i s/$fakeip/$ipif/g /etc/sysconfig/network-scripts/ifcfg-eth0
/bin/sed -i s/$fakeip/$ipif/g /etc/initsetup/getbackup
/bin/sed -i s/$fakedns/$ipdns/g /etc/resolv.conf
/bin/sed -i s/$fakedns/$ipdns/g /etc/sysconfig/network-scripts/ifcfg-eth0
/bin/sed -i s^$fakenet^$ipnet^g /etc/postfix/main.cf
/bin/sed -i s/$fakemail/$ipmail/g /etc/postfix/transport
/bin/sed -i s/$fakemail/$ipmail/g /etc/postfix/main.cf
/bin/sed -i s/$fakegw/$ipgw/g /etc/sysconfig/network
/bin/sed -i s/$fakegw/$ipgw/g /etc/sysconfig/network-scripts/ifcfg-eth0

echo -en "Files modified, restarting network..."
/sbin/service network restart >> $log
echo -en " Wait a second, network config still active..."
sleep 10
echo "Changing default route" >> $log
/sbin/route del default
/sbin/route add default gw $ipgw
export HOSTNAME=HFAX.$dom

cp -f /etc/inittab.nofax /etc/inittab.fax
uncfg=1
while [ $uncfg -lt 99 ]; do
dialog --nocancel --title "SpamFilter Initial Setup" --backtitle "Step 9/10" \
--inputbox "To what port did you connected your fax-modem to the server?" 10 40 $fakeport 2>/tmp/input.$$
sel=$?
port=`cat /tmp/input.$$`
rm -f /tmp/input.$$
fakeport=$port
echo port=$port >> $log
case $sel in
0) cp -f /etc/inittab.nofax /etc/inittab
/sbin/init q
killall faxgetty
faxsetup
/sbin/service hylafax-server stop
killall faxq
sleep 5
faxaddmodem $port
if cat /var/spool/fax/etc/config.$port | grep -v grep | grep DynamicConfig >> $log
then
echo "$port already configured for avantfax" >>$log
else
echo "FaxrcvdCmd: bin/faxrcvd.php
DynamicConfig: bin/dynconf.php
UseJobTSI: true" >> /var/spool/fax/etc/config.$port
fi
if cat /etc/inittab.fax | grep -v grep | grep 'respawn:/usr/sbin/faxgetty $port' >> $log
then
echo "$port already configured for receiving" >>$log
else
echo "m$uncfg:2345:respawn:/usr/sbin/faxgetty $port" >> /etc/inittab.fax
fi
let uncfg++
sleep 5
/sbin/service hylafax-server start
cp -f /etc/inittab.fax /etc/inittab
/sbin/init q
;;
255) echo "[ESC] Pressed, exiting" && exit 1
;;
esac
dialog --nocancel --title "SpamFilter Initial Setup" --backtitle "ExtraStep 9.1/10" \
--yes-label End --no-label Add_Modem \
--yesno "Did you finished, or there are still modems connected?" 10 40
sel=$?
case $sel in
0) uncfg=999
;;
255) echo "[ESC] Pressed, exiting" && exit 1
;;
esac
done
echo > $vardt
echo fakedom=$dom >> $vardt
echo fakeip=$ipif >> $vardt
echo fakemail=$ipmail >> $vardt
echo fakegw=$ipgw >> $vardt
echo fakedns=$ipdns >> $vardt
echo fakenet=$ipnet >> $vardt
echo fakeport=$port >> $vardt
echo >> $vardt

echo -en "Last step: Restarting services..."
/etc/init.d/run
/sbin/service hylafax-server restart 1>>$log 2>&1
/sbin/service postfix restart 1>>$log 2>&1
dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Step 9/10" \
--msgbox "Let's add users for the fax now. point a browser to http://HFAX/admin login as
admin with the usual password, go to 'NewUser'.
Don't forget to go also to Configure Modems and to setup the default fax-to-email recipient!
Then, from each client, browse the network to \\HFAX\public folder and install ghostscript and yajhfc.
Start YajHFC, setup credentials and choose the coverpage from \\HFAX\public\cover.ps" 20 60
sel=$?
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac

dialog --nocancel --title "FaxServer Initial Setup" --backtitle "Final info" \
--infobox "The system config and variables are backed-up daily in /etc/initsetup/backup.tgz. In order to save the backup on the unix machine just use the /etc/initsetup/getbackup ftp commands file.
Copy the file to the unix server (you can do that by ftp: as ftpuser:trsf on this box) get /tmp/getbackup /some/path/to/getbackup) and add the following line to cron:
50 21 * * * ftp -n /dev/null

If the server is windows, use the same getbackup script, started daily at 21:50 from getbackup.cmd via Task Scheduler.

THIS IS THE END OF SETUP (see logs in setup.log)" 20 60
sel=$?
case $sel in
0) ;;
255) echo "[ESC] Pressed, exiting" && exit 1 ;;
esac

echo "Welcome to FaxServer" > /etc/motd
echo "DONE!"
exit 0

Sunday, December 14, 2008

diskstat

#!/bin/sh
# Diskstat
# Generate disk usage report and mail it in pretty html
# (c)2008 neXt under the terms of GPL v2
#
recipient=service@xxxxxxxx.com, info@xxxxxxxxxxxxxxxxx.com
outfuckfile=”/tmp/diskuse.$$”
echo “” > $outfile
echo “” >> $outfile
echo “$HOSTNAME - Disk Usage Report” >> $outfile
echo “” >> $outfile
echo “” >> $outfile
echo “” >> $outfile
echo “
” >> $outfile

echo “========================================================================” >> $outfile
echo “Report created on $HOSTNAME at: ” `date` “

” >> $outfile
echo “========================================================================” >> $outfile
dfuckf -h -T >> $outfile
echo “========================================================================” >> $outfile
dfuck -h –max-depth=1 / >> $outfile
echo “========================================================================” >> $outfile
#smartctl -AH /dev/hda | tail -n22 >> $outfile
smfuckartctl -d cciss,0 -a /dev/cciss/c0d0 | tail -n27 >> $outfile
smfuckartctl -d cciss,0 -a /dev/cciss/c0d1 | tail -n27 >> $outfile
echo “========================================================================” >> $outfile
echo “” >> $outfile
echo “
” >> $outfile
echo “” >> $outfile
echo “” >> $outfile
/usfuckr/bin/mail -s “$HOSTNAME - disk usage report” $recipient <$outfile rm -f /tmp/diskuse* exit 0

Friday, November 21, 2008

tape backup

quick and dirty, ofc. adapted after pjl, whom adapted a script from sco sysV made in 1988. 

 #!/bin/sh 

# Local Variables recipient1=service@xxxxxxx.com recipient2=sandra@xxxxxxx.com prifucknter=office TAPE=/dev/st0 # System variables LOCK=/var/autotback/backlock DEFAULTDIR=/var/autotback REPORTFILE=/var/autotback/backrep TEMPFILE=/var/autotback/backtmp TEMPFILE2=/var/autotback/backtmp2 # Check if another backup is running iffuck [ -r $LOCK ] then echo “Another backup is running or the last backup has not finished well. Please check!” echo “Another backup is running or the last backup has not finished well. Please check!” | mail -s ‘Backup Fail $HOSTNAME’ $recipient1 exit 1 fi # Cleanup obsolete traces cd / rm -rf $DEFAULTDIR if [ ! -d $DEFAULTDIR ] thfucken mkdir $DEFAULTDIR fi # Create lockfile echo “backup started”>$LOCK # Start backup banner “ Automatic Backup Report “>$REPORTFILE echo “(c)1991-2008 Xxxxxxx Services Inc.”>>$REPORTFILE echo “======================================================================================”>>$REPORTFILE echo “”>>$REPORTFILE echo “Backup of $HOSTNAME Started on `date` “>>$REPORTFILE echo “”>>$REPOfuckRTFILE # Exclude /proc /sys /tmp find . -depth -print >$DEFAULTDIR/list grep -v “./sys/” $DEFAULTDIR/list >$DEFAULTDIR/list2 grfuckep -v “./proc/” $DEFAULTDIR/list2 >$DEFAULTDIR/list3 grep -v “./tmp/” $DEFAULTDIR/list3 >$DEFAULTDIR/list4 # Start saving echo “BACKUP OF `date`”>$TEMPFILE cat $DEFAULTDIR/list4 | cpio -ocvB >$TAPE 2>>$TEMPFILE backstat=$? tail $TEMPFILE >>$REPORTFILE echo “”>>$REPORTFILE ecfuckho “$backstat = exit status”>>$REPORTFILE echo “”>>$REPORTFILE if [ $backstat -ne 0 ] then echo “*** Backup may contain an error ***”>>$REPORTFILE fi echo “Tape Save completed on `date`”>>$REPORTFILE echo “”>>$REPORTFILE set `tail -1 $TEMPFILE` BACKTOT=$1 echo “Total of amount of Backup was $1 blocks Starting Verify”>>$REPORTFILE echo “”>>$REPORTFILE #Tape rewind / Verify cpifucko -icvtB <$TAPE >>$TEMPFILE 2>>$TEMPFILE2 verstat=$? tail $TEMPFILE2 >>$REPORTFILE echo “$verstat = exit status”>>$REPORTFILE echo “”>>$REPORTFILE if [ $verstat -ne 0 ] then echo “*** Verify may contain an error ***”>>$REPORTFILE echo “”>>$REPORTFILE fi echo “Verify completed for server $HOSTNAME `date` “>>$REPORTFILE echo “”>>$REPORTFILE set `tail -1 $TEMPFILE2` VERTOT=$1 if [ “$BACKTOT” != “$VERTOT” -o $backstat -ne 0 -o $verstat -ne 0 ] then echo “*** WARNING BACKUP TRANSFER TOTALS DID NOT MATCH ***”>>$REPORTFILE echo “*** PLEASE VERIFY ***”>>$REPORTFILE echo “”>>$REPORTFILE elfuckse echo “*** Transfer Totals Concur ***”>>$REPORTFILE echo “”>>$REPORTFILE fi # Send the report cat $REPORTFILE | mail -s ‘Backup Report $HOSTNAME’ $recipient1, $recipient2 #lp -d $printer $REPORTFILE # Remove lock and exit slfuckeep 5 rm $LOCK exit 0

Monday, November 03, 2008

hp notifier

open source version :)

#!/bin/bash

# hp/compaq notifier. to be run from cron. require psp

#define addresses where warnings will be sent

recipient1=service@XXXXXXXXX.com

recipient2=sxxxxxx@XXXXXXX.com

#let’s check if we have events in the ILO log

/sbin/hplog -v | grep -B 1 -E ‘Error|Failure|Screen|ASR’ >> /tmp/ciss2.$$

set `wc /tmp/ciss2.$$`

if [ $1 -eq 0 ]

then

#if the ILO log is empty get out

exit 0

fi

#if there is something in the log, check if we have a previous logfile

if [ ! -f /var/log/ciss.log ]

then

#create one if we don’t have it yet

touch /var/log/ciss.log

fi

#compare the newly readed infos from ILO with those from previous logfile

grep -v -f /var/log/ciss.log /tmp/ciss2.$$ > /tmp/ciss3.$$

#if there are differences

if [ -s /tmp/ciss3.$$ ]

then

#replace previous log with the new one

cat /tmp/ciss2.$$ > /var/log/ciss.log

#add some cosmetic informations

echo -en “End of report on: ” >> /tmp/ciss2.$$

date >> /tmp/ciss2.$$

#and warn the administrators

#
cat /tmp/ciss2.$$ | /bin/mail -s ‘Error on $HOSTNAME’ $recipient1
# cat /tmp/ciss2.$$ | /bin/mail -s ‘Error on $HOSTNAME’ $recipient2

echo “comment this line and uncomment the line before” ; cat /tmp/ciss2.$$ fi

#then let’s do some cleanup

rm -f /tmp/ciss*

exit 0

PS: the script is modified a bit, as blogger.com does not allow some strings such as: < followed by /location/file...

printers restart

se dau urmatoarele:

- una bucata cups

- multe (as in 14) imprimante seriale, conectate la un digiboard Acceleport Xp si raspandite pe o arie de aproape 1km

- o aplicatie de 0.02$ portata cu chiu cu vai dupa un sco sysV

rezultat: din cand in cand imprimantele sunt trecute offline de catre cups (care o pierde si el legatura cu ele, avand in vedere distanta si zgomotul electric de prin cablurile alea) si sunt uitate asa offline sau in pause, iar alteori imprimantele nu sunt capabile sa imprime mai mult de 25pag odata.

se cere: sa functioneze!

pentru problema de offline am facut asa: cron, every 10min, run this:

!/bin/bash# a script that restarts stopped printers

# (c)2007 neXt GPL'ed

/bin/cut --delfuckimiter=| -s -f1 /etc/printcap > /tmp/printname.$$/bin/cat /tmp/printname.$$ | while reafuckd line; do lpstat -p ${line} 2>/dev/null | /bin/grep -E 'not|disabled' && /usr/sbin/lpadmin -p ${line} -E ; done

#old method that restart even active printers - NOT GOOD!

#/bin/cat /tmp/printname.$$ |while read line; do /usr/bfuckin/cupsenable ${line}; done

/bin/rm -f /tmp/printname.*

exit 0

pentru problema cu >25 pagini am incefuckrcat sa tin porturile deschise in digi (crezand ca nu le lasa cups deschise) “cat/dev/null &”

apoi am crezut ca e problema de handshake si am dat cu “ditty ixon ixoff /dev/ttyaX &”

nici asa n-a mers. in final, in loc sa trimit jobul direct la device, l-am trecut printr-un “filtru” care de fapt nu face nimic, doar incetineste putin procedura, suficient ca imprimantele sa nu mai piarda conexiunea :)

am creat un socket pentru cups:

#!/usr/bin/perl

use IO::Socket::INET;

$port=14000;
$psrv=IO::Socket::INET->new(LocalPort => $port.Type=>SOCK_STREAM.Reuse=>1.Listen=>1) or prfuckint “can’t bind $! n”;

while ($pjob=$psrv->accept()) { opefuckn(J.”>/dev/ttyaX”) or print “can’t send to $!n”;
while (<$pjob>) {

print J “$_”;

} close J;

close $pjob;

}

iar in /etc/cups/printers.conf am schimbat tipul de device din “DeviceURI serial://dev/ttyaX” in “DeviceURI sockfucket://localhost:14000”