Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripts

Systemstart

dos5

Das script dient dem automatisierten Start und Beenden des DOS-5/ES und der Terminalemulation. Während des automatisierten Starts werden mit einem tcl3270 script die Standardeingaben am Terminal eingegeben.

Da weder hercules ohne einen Bildschirm, noch das DOS-5 ohne eine Hauptkonsole auskäme, werden beide mittels dtach abgebildet. Dies ermöglicht den Wechsel zwischen den verschiedenen benannten Instanzen.
Während der Laufzeit kann so mit dos5 con auf die DOS-5 Hauptkonsole bzw. mit dos herc auf den Hercules Schirm geschaltet werden.
Für den Standalonebetrieb, aber auch für den Zugang über das Web stehen über dtach zusätzliche Konsolen bereit, die automatisiert gestartet und wiederverwendet werden können (svs - Hauptkonsole OS, tso - klassischer TSO Schirm, pdf - TSO Schirm für ISPF)

Sobald das System läuft wird die serverbasierte Terminalemulation iTerm3270 mit Hilfe des scripts start3278 aktiviert und ggf. zugehörige Informationen auf einem LCD Display Odroid-Show angezeigt.

dos5
#!/bin/bash
 
### BEGIN INIT INFO
# Provides:          dos5
# Required-Start:    $network $local_fs $remote_fs $syslog
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: init-Script for dos5
### END INIT INFO
 
# installieren mit 
# update-rc.d dos5 defaults
# ln -s /etc/init.d/dos5 /bin/dos5
 
case "$1" in
	stop)
		if test `ps -ef|grep hercules|grep -c -v grep` != 0; 
		then
			#killall print2pipe > /dev/null
			#killall nc > /dev/null
			cat > /tmp/dos5shut <<-EOF
			BATCH RZESHUT
			// PDELETE SYSLOG
			* CMD SHUTDOWN
			/&&
			/&&
			EOF
			nc -q 0 127.0.0.1 2501 < /tmp/dos5shut &
			sleep 3
			if test `ps -ef|grep "nc 127"|grep -c -v grep` != 0; then 
				killall nc
			fi
			if test `ps -ef|grep hercules|grep -c -v grep` != 0; then 
				logger -t dos5 -p local3.debug ich muss ihn wg. timeout killen
				killall hercules
			fi
			killall start3278
			rm -f /tmp/dos5shut /tmp/dos5050.rc
			rm -f /var/run/dos5
		fi
	;;
	start)
		logger -t dos5 -p local3.debug dos5 start
		#export ipadr=`LANG=C ifconfig|grep "inet addr:"|grep -v "127\.[0-9]\+\.[0-9]\+\.[0-9]\+"|cut -d":" -f2|cut -d" " -f1|head -n1`
		export dos5=/dos5050
		export HERCULES_RC=/tmp/dos5050.rc
		export TZ="MEZ-1MESZ-2,M3.5.0,M10.5.0" 
		export TERM=xterm
		dc=`date +%y%m%d%H%M`
		hl=$dos5/logs/herc_$dc.log
		dc=$dos5/logs/dos5_$dc.log
		touch $dc
		chmod 755 $dc
		touch $hl
		chmod 755 $hl
		rm -f /tmp/dos5.cns /tmp/dos5050.log
		rm -f /tmp/hercules /tmp/console /tmp/dos5050.rc
		ln -s $dc /tmp/dos5.cns
		ln -s $hl /tmp/dos5050.log 
		cat > /tmp/dos5050.rc <<-EOF
		log /tmp/dos5050.log
		ipl 170
		pause 015
		i 010
		EOF
		PATH=/usr/local/bin:$PATH
		cd $dos5
		dtach -n /tmp/hercules -e ^q hercules -f $dos5/dos5050.cnf -b $dos5/dos5logo.txt
		sleep 4
		tcl3270 $dos5/scripts/dos5.tcl3270
 
		dtach -n /tmp/console -e ^q c3270 -model 3278-2 010@127.0.0.1:3270
		#dtach -n /tmp/dosterm -e ^q c3270 -model 3278-2 127.0.0.1:3270
		#dtach -n /tmp/svscon -e ^q c3270 -model 3278-2 SVS@127.0.0.1:3270
		#dtach -n /tmp/tsoterm -e ^q c3270 -model 3278-2 TSO@127.0.0.1:3270
		#dtach -n /tmp/pdfterm -e ^q c3270 -model 3278-2 TSO@127.0.0.1:3270
 
		chmod 660 /tmp/hercules
		chmod 660 /tmp/console
		#chmod 660 /tmp/dosterm
		#chmod 660 /tmp/svscon
		#chmod 660 /tmp/tsoterm
		#chmod 660 /tmp/pdfterm
 
		chgrp hercules /tmp/hercules
		chgrp hercules /tmp/console
		#chgrp hercules /tmp/dosterm
		#chgrp hercules /tmp/svscon
		#chgrp hercules /tmp/tsoterm
		#chgrp hercules /tmp/pdfterm
 
		#killall java
		#export ipadr=`LANG=C ifconfig|grep "inet addr:"|grep -v "127\.[0-9]\+\.[0-9]\+\.[0-9]\+"|cut -d":" -f2|cut -d" " -f1|head -n1`
		#dtach -n /tmp/iterm3270 -e ^q java -jar /opt/iTerm3270/iTerm3270.jar draht-zieher.ddns.net 3278 127.0.0.1 3270
		#chmod 677 /tmp/console
		echo "Start 3270 terminal java emulation"
		/usr/local/bin/start3278 &
	;;
	con|console)
		dtach -A /tmp/console -e ^q c3270 -model 3278-2 010@127.0.0.1:3270
	;;
	dos)
		dtach -A /tmp/dosterm -e ^q c3270 -model 3278-2 127.0.0.1:3270
	;;
	svs)
		dtach -A /tmp/svscon -e ^q c3270 -model 3278-2 SVS@127.0.0.1:3270
	;;
	tso)
		dtach -A /tmp/tsoterm -e ^q c3270 -model 3278-2 TSO@127.0.0.1:3270
	;;
	pdf)
		dtach -A /tmp/pdfterm -e ^q c3270 -model 3278-2 TSO@127.0.0.1:3270
	;;
	herc|hercules)
		dtach -a /tmp/hercules -e ^q
	;;
	test)
	;;
	*)
		echo "Usage dos5 start | stop | con[sole] | herc[ules] | svs | tso | pdf"
		exit 64
	;;
esac
exit 0

start3278

ist ein script welches für einen korrekten Betrieb der Java Terminalemulation sorgen soll. Es ermittelt die externe IP des Anschlusses und startet auf deren Basis iTerm3270. Wenn ein Odroid-Show angeschlossen ist (interessant vielleicht mal für einen standalone Betrieb), dann werden bestimmte Informationen, u.a. die IP Adressen intern und extern angezeigt.
Wenn alles korrekt läuft, sollte das script auch eine Änderung der externen IP Adresse bemerken und entsprechend die Terminalemulation mit veränderten Parametern neu starten.

start3270
#!/bin/bash
flag=0
serialPort="/dev/ttyUSB0"
EXTERNIP='127.0.0.1'
trap "flag=1" SIGINT SIGKILL SIGTERM
dsp=0
if [ $dsp -eq 0 ];
then
    if [ `lsusb|grep -c "10c4:ea60"` = 1 ];
    then
	/usr/local/bin/port_open &
	subppid=$!
	sleep 0.1
	echo -ne "\ec\e[2s\e[1r" > $serialPort
	sleep 3
	dsp=1
    fi
fi
while true
do
	if [ $flag -ne 0 ] ; then
		if [ $dsp -ne 0 ]; then
		    kill $subppid
		fi
		killall java
		exit
	fi
	LD=`mpstat 1 1| grep -A1 "usr" | grep -v "usr" | awk '{print $11}'`
	LD=`echo "scale=2; 100-${LD//,/.}" | bc`
	TI=`date +"%T"`
 
	# Get ip-adress from lan and wlan, external ip-adress
	INTERNIP=`LANG=C ifconfig eth0|grep "inet addr:"|grep -v "127\.[0-9]\+\.[0-9]\+\.[0-9]\+"|cut -d":" -f2|cut -d" " -f1|head -n1`
	WLANIP=`LANG=C ifconfig wlan0|grep "inet addr:"|grep -v "127\.[0-9]\+\.[0-9]\+\.[0-9]\+"|cut -d":" -f2|cut -d" " -f1|head -n1`
	if [[ "$INTERNIP" == "" ]]; then
	    if [[ "$WLANIP" != "" ]]; then
		EXTERNIPn=$WLANIP
	    else
		EXTERNIPn="127.0.0.1"
	    fi
	elif [[ "$(ping -c 1 8.8.8.8 | grep '100% packet loss' )" != "" ]]; then
	    if [[ "$WLANIP" != "" ]]; then
	        EXTERNIPn=$WLANIP
	    else
	        EXTERNIPn="127.0.0.1"
	    fi
	else
	    #EXTERNIPn=`curl http://ipecho.net/plain 2>/dev/null`
	    EXTERNIPn=`wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]|.]//g'`
	fi
 
	# if external ip is canged, restart iTerm3270
	if [ $EXTERNIP != $EXTERNIPn ]; then
		EXTERNIP=$EXTERNIPn
		killall java
		sleep 5
		dtach -n /tmp/iterm3270 -e ^q java -jar /opt/iTerm3270/iTerm3270.jar $EXTERNIP 3278 127.0.0.1 3270
	fi
 
 
		if [ `lsusb|grep -c "10c4:ea60"` = 1 ];
		then
		    if [ $dsp -eq 0 ];
		    then
			kill $subppid
			/usr/local/bin/port_open &
			subppid=$!
			sleep 0.1
			echo -ne "\ec\e[2s\e[1r" > $serialPort
			sleep 3
			dsp=1
		    fi
		    echo -ne "\e[HInternal: ${INTERNIP}" > $serialPort
		    sleep 0.1
		    echo -ne "\eEExternal: ${EXTERNIP}" > $serialPort
		    sleep 0.1
		    echo -ne "\eEWlan    : ${WLANIP}" > $serialPort
		    sleep 0.1
		    echo -ne "\eETime    : ${TI}" > $serialPort
		    sleep 0.1
		    echo -ne "\eECPU     : ${LD}%" > $serialPort
		else
		    if [ $dsp -ne 0 ];
		    then
			dsp=0
			kill $subppid
		    fi
		fi
		sleep 58.7
done

dos5.tcl3270

ermöglicht durch automatisierte Eingaben einen vollständig automatischen Systemstart des DOS-5/ES. Es gibt aktuell einen kleinen Schönheitsfehler, der darin besteht, dass die Terminalsitzung nach der Umschaltung des DOS-5 in den formatierten Bildschirmmodus in einen undefinierten Zustand geht. Dies wird umschifft, indem das Hercules .rc File nach dem IPL 15 sec wartet und anschliessend einen Interrupt (att) erzeugt (siehe dos5)

dos5.tcl3270
#!tcl3270
# dos-5 automatischer start draht-zieher.dyndns.org
# kommandoverarbeitung hauptconsole bei ipl
 
proc get_lastline {} {
	set x 0
	while {$x<20} {
		if {[Snap Ascii $x 0 10] == "          "} {
		incr x -1
		return $x
		}
	incr x
	}
}
 
Connect 010@127.0.0.1:3270
Enter
Wait InputField
Enter
Wait InputField
Enter
Wait InputField
Enter
Wait InputField
Enter
Wait InputField
Enter
 
set i 0
set pwr017 0
set pwr037 0
set pwr038 0
set pwr039 0
set sst 0
while {$i == 0} {
	Snap Wait Output 
	set y [get_lastline]
	if {$y == -1} {
		puts "irgendeinfehler"
		return 100}
	switch -regexp [Snap Ascii $y 5 6] {
		"PWR017" {
			if {$pwr017 == 0} {
				String "I\n"
				set pwr017 1}
		}
		"PWR037" {
			if {$pwr037 == 0} {
				Enter
				set pwr037 1}
			}
		"PWR038" {
			if {$pwr038 == 0} {
				Enter
				set pwr038 1}
			}
		"PWR039" {
			if {$pwr039 == 0} {
				Enter
				set pwr039 1}
			}
		"SOLL S" {
			if {$sst == 0} {
				set i 1
				set sst 1}
			}
		default {}
	}
}
while {$i<10} {
	if {![catch { Snap Wait 2 Output }] } {
		if {[Snap Ascii 21 0 6] == "SSTART"} {
			Enter
			set i 10}
	} {
		if {[Snap Ascii 21 0 6] == "SSTART"} {
			Enter
			set i 10}
	}
	incr i
}
 
set i 0
set y -1
while {$i<6} {
	if {[catch { Snap Wait 5 Output}] } {
		incr i} {
		set y [get_lastline]
		if {$y != -1} {
			if {[Snap Ascii $y 5 23] == "*** DOS-50.50 READY ***"} {
			puts "[Snap Ascii $y 0 60]"
			return}
		}
	}
}

Hercules/390 Konfiguration

hercules.cnf
#
# Hercules Emulator Control file for RPD DOS-5/US
#
 
# Die Umgebungsvariable DOS5 wird bei der Installation gesetzt
 
ARCHMODE	S/370
CPUMODEL	1057	# R.I.P.
CPUVERID	00	# FD & ECPSVM YES fuer VM-Assists
CPUSERIAL	000002
 
MAINSIZE	16	
NUMCPU		1
NUMVEC		1
DEVTMAX	 	-1	# Subtask fuer jede I/O - wg. Wiedereintrittsproblem in Task 3.05
#IODELAY		1000
 
OSTAILOR	QUIET	# keine unnuetzen Informationen ueber Seitenausnahmen usw.
CNSLPORT	3270	# Portnummer fuer Telnet und TN3270-Sitzungen
DIAG8CMD	enable	# Kommandointerface zwischen DOS-5 und hercules
#ECPSVM		YES	# Einschalten der VM-Assists
 
# Hier kann ein WebServer eingeschaltet werden, der ein Web-Interface fuer die
# Bedienung der hercules-console bereitstellt. Vielleicht sinnvoll fuer einen 
# emulierten Mainframe im Netz. 
#HTTPROOT	/usr/local/share/hercules	# Root-Verzeichnis fuer den WebServer
#HTTPPORT	7927	NOAUTH userid passwd
shrdport	3990	# fuer shared-disk
automount +./tape
 
SYSEPOCH	1900	# Jahr 00 Bezug des TOD, sinnvoll zu aendern fuer y2k-bug
TZOFFSET	+0100	# bei Sommerzeit +0200, Winter +0100
000A	3505	1442 sockdev ascii ucase trunc
000C	3505	2501 sockdev ascii ucase trunc eof
 
000D	3525	./spool/punch 
000E	1403	"|/usr/local/bin/prtspool ./spool /usr/local/bin/savepdf nosep"
000B	1403	/tmp/dos5.cns crlf
 
0010	  3270 CON
001F	3215
00A0-00A2 3270
00A3	  3287
 
00A4	3270	SVS
 
#00A4-00A6 3270
#00A7	  3287
#00A8-00AA 3270
#00AB	  3287
#00AC-00AE 3270
#00AF	  3287
 
0200-0207 3270
0208-020F 3270	TSO 
 
#die shadow-files fuer archiv-platten muessen erstmalig ueber sd+* erzeugt werden
#0330	3330	./archiv/dos5.cdsk100  sf=./dasd/shadows/dos5_1.dsk
 
# 200mb-platte ist 3330-11
#0350-0357	3330	dsk200 
#0360-0367	3350	dsk317
0360	3350	./dasd/privat.cdsk317
0361	3350	./dasd/prvshr.cdsk317
0362	3350	./dasd/yyyyyy.cdsk317
 
#0370	3380	./archiv/proxim.cdsk630  sf=/dos5/dasd/shadows/proxim_1.dsk
0371	3380	./dasd/pracov.cdsk630 nosyncio
 
# model a1 (285mb)
#0140	3370	./dasd/dosres.dsk 0 558000 nosyncio
#0141	3370	./dasd/yyyyyy.cdsk
#0142	3370	./dasd/privat.cdsk
#0142	3370	127.0.0.1:3990
 
# model a2 (354mb)
#0160	3370	$(dos5)/dasd/.....dsk
 
#9335 (400mb)
0170	9335	./dasd/newres.dsk
 
 
0580-058F 3420	*

automatischer Start am lokalen Terminal

Ist am HDMI Ausgang des Odroid ein Display angeschlossen, werden mehrere Bildschirmsitzungen automatisch gestartet. Dies geschieht in zwei Schritten.
In der /etc/inittab werden bestimmte virtuelle tty Geräte automatisch beim Bootvorgang eingeloggt:

1:2345:respawn:/sbin/mingetty --autologin root --noclear tty1
2:2345:respawn:/sbin/mingetty --autologin doscon --noclear tty2
3:2345:respawn:/sbin/mingetty --autologin dosterm --noclear tty3
4:2345:respawn:/sbin/mingetty --autologin svscon --noclear tty4
5:2345:respawn:/sbin/mingetty --autologin tsoterm --noclear tty5
6:2345:respawn:/sbin/mingetty --autologin pdfterm --noclear tty6

Dazu wurden die Benutzer doscon, dosterm, svscon, tsoterm und pdfterm extra angelegt. In deren jeweiliger .profile im ~home Directory wird geprüft, ob ein Bildschirm am HDMI Ausgang hängt und ob ggf. der automatische Start der Consolen manuell ausgeschaltet wurde (Anlegen einer Datei /dos5050/inhibit_console). Bei positivem Ergebnis wird das Script dos5 mit einem entsprechenden Parameter aufgerufen. Im folgenden Beispiel sieht man den Aufruf für die DOS Systemconsole.

if grep -q ^connected$ /sys/class/drm/card0-HDMI-A-1/status && [ ! -f /dos5050/inhibit_console ] ; then
    /usr/local/bin/dos5 con
    exit
fi
scripts.txt · Zuletzt geändert: 2016/03/16 22:10 von roman