So I'm installing an OS on my laptop, and for whatever reason, the Debian Etch install disk thought it would be a good idea to initialize the whole disk to random data *before* rather than *after* the rest of the install. Writing to the whole disk takes a long time --- a few hours --- and so I'm left with the Debian netinst environment to play with.
So I decided to IRC. Unfortunately, the only programming language I could find is sh, and there don't seem to be any IRC clients. And I can't get the ssh client to work --- I was able to install the ssh client from the udeb on the CD-ROM with udpkg -i path/to/openssl-client-whatever.udeb. But it depends on libnsl.so.1, and I don't know what udeb I have to install to get that. So I wrote my own IRC client in shell. The output is a little ugly, and there's no line editing or multiple window support, but otherwise it's just like any other IRC client to use. Almost. #!/bin/sh # In the grim future of the Debian netinst disk, there is only nc. # And dd and sh, of course. : ${2?"Usage: $0 ircserver nickname"} ircserver="$1" nickname="$2" grimdir="`dirname "$0"`" case "$grimdir" in /*) ;; *) grimdir="../$grimdir" ;; esac tmpdir=".tmp.grimirc.$$" mkdir "$tmpdir" cd "$tmpdir" trap 'cd ..; rm -rf "$tmpdir"' 0 (echo user grimirc hostname "$ircserver" :grimirc user echo nick "$nickname" > grimirc-responses tail -f grimirc-responses & while read command do case "$command" in /join*) echo "joining">/dev/tty set $command; currentchan="$2" echo "$command" > .grimtmp dd bs=1 skip=1 < .grimtmp 2>/dev/null;; /*) echo "$command" > .grimtmp dd bs=1 skip=1 < .grimtmp 2>/dev/null;; *) echo "PRIVMSG $currentchan :$command" esac done) | "$grimdir/grimdebuglog" | nc "$ircserver" 6667 | while read response do echo "$response" case "$response" in "PING "*) echo "responding to ping" set $response shift echo "PONG $*" >> grimirc-responses esac done This depends on this little script, "grimdebuglog": #!/bin/sh # "grimdebuglog": Helper for grimirc. while read line do echo "debug: $line" >/dev/tty echo "$line" done I'm posting this mail with a similar program: #!/bin/sh # Wrapper around nc to support logging (incl. downloading) and file sending tmp=".grimmodem7.$$.tmp" logfile=".grimmodem7.$$.logfile" trap 'rm -f "$tmp" "$logfile"' 0 while read line; do case "$line" in ..*) echo "$line" > "$tmp" dd bs=1 skip=1 < "$tmp" rm -f "$tmp" ;; ".send "*) set $line cat "$2" echo "sent $2" >/dev/tty ;; ".log "*) set $line rm -f "$logfile" ln -s "$2" "$logfile" touch "$2" ls -l "$logfile" > /dev/tty ;; *) echo "$line" ;; esac done | nc "$@" | while read line; do if [ -e "$logfile" ] ; then echo "$line" >> "$logfile"; fi echo "$line" done Hope it works!