From b3f3562f417f2983a7e0d0c2d5b54bb3bd9e94ab Mon Sep 17 00:00:00 2001 From: Olivier Leobal Date: Mon, 18 May 2015 14:36:19 +0200 Subject: [PATCH] Added scripts from lgcore these are in simple-cdd/additional_scripts and should be included into the master archive the master.tar archive has been renamed to master.tar.gz to better convey how it should be compressed a few postinst instructions have been added, related to TFTP and initramfs --- master/opt/tftp/pxelinux.cfg/.default.swp | Bin 0 -> 12288 bytes .../change_configuration.sh | 164 ++++++++++++++++ .../additional_scripts/check_network.sh | 78 ++++++++ .../additional_scripts/configure_fe306.sh | 182 ++++++++++++++++++ .../additional_scripts/configure_matrix.tcl | 41 ++++ .../additional_scripts/configure_switch.tcl | 50 +++++ .../configure_switch_bootstrap.tcl | 47 +++++ .../additional_scripts/connect_switch.tcl | 115 +++++++++++ simple-cdd/additional_scripts/flash_fe306.sh | 84 ++++++++ .../additional_scripts/set_mediatray.tcl | 86 +++++++++ simple-cdd/profiles/trc6500.postinst | 7 +- simple-cdd/readme | 7 +- simple-cdd/simple-cdd.conf | 2 +- 13 files changed, 858 insertions(+), 5 deletions(-) create mode 100644 master/opt/tftp/pxelinux.cfg/.default.swp create mode 100755 simple-cdd/additional_scripts/change_configuration.sh create mode 100755 simple-cdd/additional_scripts/check_network.sh create mode 100755 simple-cdd/additional_scripts/configure_fe306.sh create mode 100755 simple-cdd/additional_scripts/configure_matrix.tcl create mode 100755 simple-cdd/additional_scripts/configure_switch.tcl create mode 100755 simple-cdd/additional_scripts/configure_switch_bootstrap.tcl create mode 100755 simple-cdd/additional_scripts/connect_switch.tcl create mode 100755 simple-cdd/additional_scripts/flash_fe306.sh create mode 100755 simple-cdd/additional_scripts/set_mediatray.tcl diff --git a/master/opt/tftp/pxelinux.cfg/.default.swp b/master/opt/tftp/pxelinux.cfg/.default.swp new file mode 100644 index 0000000000000000000000000000000000000000..15910124317d2c1cd282bd5b347e6ba85258e566 GIT binary patch literal 12288 zcmeI&J8#oa6bJBA5J(w#2*ikVfCVJ*BUV!wG9=iQth`KQBc!SzC%%r{+Oc(g6IB`D z3&08=09Ga#5g!3YHke>yXXQ9eDPkyHLC4Zx&b_`qIsQo*BHxj5-|gXsW&s`N0p9I& zf>Wo9lg)DgN{$=rhEZKP@))Q2JSo>3M=qj^k5>itNQ{zjTGiIGuv9|od7*R_t3ogK zM4C)zd)hdj(7HIBrRr~W`8o@*z;Oi5fK@k_Kj>>$ui(WC!EtWlH7vjaEWiRRzyd75 z0xZA+|A~Mq*5C;}%Zb(VTw0yi{y49Od}09>U;!3j0Ty5Z7GMDuU;!3j0T%cN1;Pm6 z@>zgql6Y2!*q}+vC&*=x)ZMA9g;ieSA&Py~k1NNt4nu+ofeifeP$uv-wi-zE=WJDaVb>*K+Ad9&~O zT?e" + echo " switch trc6500 mode" + echo " avaliable modes are:" + echo " - 8MHzMHF, 12MHzDF, 12MHzMDF, 30MHzMDF or 30MHzMHF" + echo " - fix_ssh" + echo " - hw_ibm or hw_supermicro" + echo " - network" + echo " - tz_zulu or tz_paris" + exit $@ +} + +# formating functions + +function title () { echo -e "\033[0;1m$*\033[0;0m"; } +function pass () { echo -e "\033[1;32m$*\033[0;0m"; } +function warn () { echo -e "\033[1;33m$*\033[0;0m"; } +function fail () { echo -e "\033[1;31m$*\033[0;0m"; } + +# check command + +function check () { + echo -n "$@: " + $@ 2>$TMPLOG && pass OK || { fail KO; cat $TMPLOG; exit 1; } + rm -f $TMPLOG +} + +# argument processing + +while [ $# -gt 0 ]; do + case "$1" in + -h) usage 0;; + 8mhz|8MHz|12mhzdf|12MHzDF|12mhzmdf|12MHzMDF|30mhz|30MHz) MODE_BW="${1^^}";; + fix_ssh) MODE_FIX="$1";; + hw_ibm|hw_supermicro) MODE_HW="$1";; + network) MODE_NET="$1";; + tz_paris|tz_zulu) MODE_TZ="$1";; + *) usage 1;; + esac + shift +done + +# main process + +action="" + +if [ "$MODE_BW" ]; then + title "updating /etc/hosts" + check rm -f /etc/hosts + check ln -s /etc/hosts.${MODE_BW/MHZ/MHz} /etc/hosts + TARBALLS+=" root" + for ip in 0A851{A,C}; do check ln -T -f -s default /opt/tftp/pxelinux.cfg/$ip; done + case "$MODE_BW" in + 8MHzMHF) + #for ip in 0A851{A,C}A{1..2}; do check ln -T -f -s acq /opt/tftp/pxelinux.cfg/$ip; done + for ip in 0A851{A,C}A5; do check ln -T -f -s rec /opt/tftp/pxelinux.cfg/$ip; done + ;; + 12MHzDF) ;; + 12MHzMDF) ;; + 30MHzMDF) ;; + 30MHzMHF) + for ip in 0A851{A,C}A{1..6}; do check ln -T -f -s acq /opt/tftp/pxelinux.cfg/$ip; done + for ip in 0A851{A,C}A9; do check ln -T -f -s rec /opt/tftp/pxelinux.cfg/$ip; done + ;; + esac + action="done" +fi + +if [ "$MODE_FIX" ]; then + + case "$MODE_FIX" in + fix_ssh) + sed -i 's/^\(UsePAM\) yes/\1 no/' /etc/ssh/sshd_config + TARBALLS+=" root" + + action="done" + esac + +fi + +if [ "$MODE_HW" ]; then + + conf=/etc/default/shutdownallblades + + title "change shutdownallblades" + if $(grep -sq '^#*REBOOT=' $conf); then + case "$MODE_HW" in + hw_ibm) check sed -i 's/^#*REBOOT=.*$/#REBOOT=yes/' $conf;; + hw_supermicro) check sed -i 's/^#*REBOOT=.*$/REBOOT=yes/' $conf;; + esac + else + case "$MODE_HW" in + hw_ibm) check sed -i '$a#REBOOT=yes' $conf;; + hw_supermicro) check sed -i '$aREBOOT=yes' $conf;; + esac + fi + + action="done" +fi + +if [ "$MODE_NET" ]; then + + conf=/etc/dhcp/dhcpd.conf + + title "update network configuraton" + if $(grep -sq 'trc[0-9]*_1' $conf); then + check sed -i 's/\(host.*trc[0-9][0-9]\)\([^_]\)/\1-rf\2/;s/\(host.*trc[0-9][0-9]\)_1/\1/' $conf + fi + TARBALLS+=" root" + + action="done" +fi + +if [ "$MODE_TZ" ]; then + case "$MODE_TZ" in + tz_paris) TZ="Europe/Paris";; + tz_zulu) TZ="Etc/Zulu";; + *) TZ="";; + esac + + if [ "$TZ" ]; then + echo $TZ > /etc/timezone + TARBALLS+=" root" + + action="done" + fi +fi + +# last check +[ "$action" ] || { echo "no mode specified"; exit 1; } + +[ "$TARBALLS" ] && make -f /opt/cluster/Makefile $TARBALLS + +# vim:set tabstop=4 expandtab shiftwidth=4: diff --git a/simple-cdd/additional_scripts/check_network.sh b/simple-cdd/additional_scripts/check_network.sh new file mode 100755 index 0000000..5c17bf2 --- /dev/null +++ b/simple-cdd/additional_scripts/check_network.sh @@ -0,0 +1,78 @@ +#!/bin/bash +# +# ============================================================================ +# +# Copyright (C) THALES. All rights reserved +# Author: Alexandre Cazalis +# +# Gestion attente lames esclaves au boot (ping,ssh) +# +# 2013-11-20 : V1.2 LMa +# - Ajout de la personalisation de la commande a executer +# par defaut (uptime). Ajout attente montage nfs avant demarrage +# 2014-05-28 : V1.3 LMa +# - Ajout d'un mode foreground pour ne tenter qu'une fois chaque commande +# - Ajout d'une commande pour exclude la lame maitre +# +# 2014-10-28 : Change owner +# ============================================================================ + +# TODO +# * + +CMD="uptime" +MODE="iter" +PROGNAME=$(basename $0) +VER=1.3 +EXCLUDE="___" + +function usage () { + echo "usage: $PROGNAME [-c command] [-h] [-i] [-o] [-t seconds] [-v] [-w] [-x] host1 host2..." + echo " -c: set command (default '$CMD')" + echo " -h: help message" + echo " -i: infinity loop mode [default]" + echo " -o: only try ones" + echo " -t: timeout" + echo " -v: version message" + echo " -w: wait mode" + echo " -x: avoid master blade" + exit $@ +} + +while [ $# -gt 0 ]; do + case "$1" in + -c) shift; CMD=$1;; + -h) usage 0;; + -i) MODE="iter";; + -o) MODE="ones";; + -t) shift; [[ "$1" =~ [^0-9] ]] && { echo "incorrect timeout ($1)"; exit 1;}; TIMEOUT=$1;; + -v) echo "$PROGNAME: version $VER"; exit;; + -w) MODE="wait";; + -x) EXCLUDE="trc00";; + *) list+=" "$1;; + esac + shift +done + +# list +[ "$list" ] || list=$(awk '{sub(/#.*/, "")} /trc[0-9][0-9]/ && ! /-rf/ {print $2}' /etc/hosts) +list=$(echo $list" "|sed s/$EXCLUDE//) + +# timeout +if [ "$TIMEOUT" ]; then + trap "echo 'timeout expired (${TIMEOUT}s)'; exit 0;" SIGVTALRM + ( sleep $TIMEOUT; kill -SIGVTALRM $$ 2>/dev/null; [ $? -eq 0 ] && rc=1 || rc=0; exit $rc) & +fi +trap "exit 0;" SIGINT + +# main loop +while true; do + for host in $list; do + stat=0 + echo -n ${host}:" " + ping -c 1 $host >&/dev/null && { ssh -t -o ConnectTimeout=1 root@$host "$CMD" 2>/dev/null && stat=1 || echo "soon..."; } || echo + [ "$MODE" = "wait" -a $stat -eq 1 ] && list=${list/$host } + done + [ "$MODE" = "ones" ] && break; + [[ "$list" =~ [a-zA-Z0-9_-] ]] && sleep 1 || break; +done diff --git a/simple-cdd/additional_scripts/configure_fe306.sh b/simple-cdd/additional_scripts/configure_fe306.sh new file mode 100755 index 0000000..a9de411 --- /dev/null +++ b/simple-cdd/additional_scripts/configure_fe306.sh @@ -0,0 +1,182 @@ +#!/bin/bash + +# parameters +# +# ============================================================================ +# +# Copyright (C) THALES. All rights reserved +# Author: Laurent Mazet +# +# 2013-11-10 V1.0 : Creation +# +# 2013-11-20 V1.1 : L.Mazet ajout possibilite de configuration du switch +# +# ============================================================================ + +DRY= +ID= +IP=192.168.0.1 +#TRC6500_SCRIPT_DIR=/opt/trc6500/script +TRC6500_SCRIPT_DIR=$(dirname $0) + +# help function + +function usage () { + echo "usage: $PROGNAME [-a] [-d] [-h] [-i ]" + echo " -a: configure all boards" + echo " -d: dry mode" + echo " -h: help message" + echo " -i: board id (from 1 to 5)" + exit $@ + } + +# formating functions + +function title () { echo -e "\033[0;1m$*\033[0;0m"; } +function pass () { echo -e "\033[1;32m$*\033[0;0m"; } +function warn () { echo -e "\033[1;33m$*\033[0;0m"; } +function fail () { echo -e "\033[1;31m$*\033[0;0m"; } + +# configuration values + +# argument processing + +while [ $# -gt 0 ]; do + case "$1" in + -a) ID=all;; + -d) DRY=yes;; + -h) usage 0;; + -i) shift; ID=$1;; + *) usage 1;; + esac + shift +done + +# switch port configure function () + +function sw_configure () { + case "$1" in + off) CMD="-c 'configure terminal' -c 'interface range g1/39-44' -c 'shutdown' -c end -c 'clear mac address-table dynamic' -c 'clear ip arp inspection log' -c exit";; + on) CMD="-c 'configure terminal' -c 'interface range g1/39-44' -c 'no shutdown' -c end -c exit";; + 1) CMD="-c 'configure terminal' -c 'interface g1/39' -c 'no shutdown' -c end -c exit";; + 2) CMD="-c 'configure terminal' -c 'interface g1/40' -c 'no shutdown' -c end -c exit";; + 3) CMD="-c 'configure terminal' -c 'interface g1/41' -c 'no shutdown' -c end -c exit";; + 4) CMD="-c 'configure terminal' -c 'interface g1/42' -c 'no shutdown' -c end -c exit";; + 5) CMD="-c 'configure terminal' -c 'interface g1/43' -c 'no shutdown' -c end -c exit";; + 6) CMD="-c 'configure terminal' -c 'interface g1/44' -c 'no shutdown' -c end -c exit";; + esac + + if [ "$DRY" = "yes" ]; then + echo connect_switch.tcl -h swm $CMD + else + LOG=/tmp/$PROGNAME-$$.log + echo -n "sw_configure $1: " + eval $TRC6500_SCRIPT_DIR/connect_switch.tcl $CMD swm >&$LOG && pass OK || { fail KO; cat $LOG; exit 1; } + rm -f $LOG + fi +} + +case "$ID" in +1) CH1=0; CH2=1; CLOCKREF=external;; +2) CH1=2; CH2=3; CLOCKREF=internal;; +3) CH1=4; CH2=5; CLOCKREF=internal;; +4) CH1=6; CH2=7; CLOCKREF=internal;; +5) CH1=8; CH2=9; CLOCKREF=internal;; +6) CH1=10; CH2=11; CLOCKREF=internal;; +all) + for id in $(seq 1 5); do + title "switch off all fe306 ports" + sw_configure off + title "switch on port for fe306 $id" + sw_configure $id + title "configure fe306 $id" + if [ "$DRY" = "yes" ]; then + echo $(basename $0) -i $id + else + { $0 -i $id | mawk -W interactive '{print " " $0}'; } && pass OK || { fail KO; exit 1; } + fi + done + title "switch on all fe306 ports" + sw_configure on + exit 0 + ;; +*) echo "unknown fe306 id ($ID)"; exit 1;; +esac + +# configure function + +function configure () { + echo -n "$1 [$2 <= $3]: " + if [ "$DRY" = "yes" ]; then + echo wget -q -O - http://$IP/$1?$2=$3 + else + wget -q -O - http://$IP/$1?$2=$3 >/dev/null && pass OK || { fail KO; exit 1; } + fi +} + +# setup local address + +title "setup local address" +cmd="ifconfig eth1:1 192.168.0.2 netmask 255.255.255.0" +[ "$DRY" = "yes" ] && echo $cmd || { echo -n $cmd" "; eval $cmd && pass OK || { fail KO; exit 1; }; } + +# check if fe306 is connected + +#title "check presence of $IP" +#cmd="ping -c 1 -w 10 -W 10 $IP" +#[ "$DRY" = "yes" ] && echo $cmd || { echo -n $cmd" "; eval $cmd >&/dev/null && pass OK || { warn KO; ifconfig eth1:1 down; exit 0; }; } + +# get serial number + +[ "$DRY" = "yes" ] && SN=00 || \ + SN=$(wget -q -O - http://$IP/versions_en.html | mawk '/MODULE/ { module = 1 } /Serial Number/ { if (module) { printf "%02X", $4; exit 0 } }') + +[[ "$SN" =~ ^[0-9A-F][0-9A-F]$ ]] || { echo "unknown serial number ($SN)"; exit 1; } + +# configure ip + +title "configure ip" + +configure ModeServ.cmd serv_mode MANUAL +configure MacServ.cmd serv_mac 00.80.EE.00.$SN.01 +configure IpServ.cmd serv_ip 10.133.28.1${ID}0 +configure MaskServ.cmd serv_mask 255.255.255.0 + +for i in $(seq 1 8); do + configure MacProd$i.cmd prod_mac$i 00.80.EE.00.$SN.0$((i+1)) + configure IpProd$i.cmd prod_ip$i 10.133.26.1$ID$i +done + +configure IpMulticast.cmd multicast_ip 238.0.0.0 +configure RxMulticast.cmd multicast_rx 62002 +configure TxMulticast.cmd multicast_tx 62004 +configure TTL.cmd ttl 10 + +# configure gps + +title "configure gps" + +configure GpsRate.cmd gps_rate 19200 +configure GpsChar.cmd gps_char 8 +configure GpsStop.cmd gps_stop 1 +configure GpsParity.cmd gps_parity no + +# configure miscellaneous + +title "configure miscellaneous" +configure BoardNum.cmd board_num $ID +configure RackNum.cmd rack_num 1 +configure Chan1Num.cmd channel1_num $CH1 +configure Chan2Num.cmd channel2_num $CH2 + +configure FpgaLoc.cmd fpga_loc FLASH +configure Clk10Mhz.cmd clk_10 $CLOCKREF +configure PllConfig.cmd pll_cfg pll_cfg_02 + +# unset local address + +title "unset local address" +cmd="ifconfig eth1:1 down" +[ "$DRY" = "yes" ] && echo $cmd || { echo -n $cmd" "; eval $cmd && pass OK || { fail KO; exit 1; }; } + +# vim:set tabstop=4 shiftwidth=4 softtabstop=4: diff --git a/simple-cdd/additional_scripts/configure_matrix.tcl b/simple-cdd/additional_scripts/configure_matrix.tcl new file mode 100755 index 0000000..0473f15 --- /dev/null +++ b/simple-cdd/additional_scripts/configure_matrix.tcl @@ -0,0 +1,41 @@ +#!/usr/bin/expect + +# ============================================================================ +# +# Copyright (C) THALES. All rights reserved +# +# * V1.0 Laurent Mazet 29/04/2013 +# creation script de configuration de la matrice par ligne de commande +# ============================================================================ + +set ipmaxtrix "10.133.28.253" + +spawn /opt/trc6500/tools/matrix_tool + +set timeout 3 + +exec ifconfig eth1:0 192.168.1.1 netmask 255.255.255.0 + +proc cleanexit {rc} { + exec ifconfig eth1:0 down + exit $rc +} + +expect { + "taper la commande choisie" { send "0\r" } + timeout { send_user "connection to $host timed out\n"; cleanexit 1 } + eof { send_user "connection to host failed\n"; cleanexit 1 } +} +expect { + "timeout detected" { send_user "can't connect on defaut ip\n"; cleanexit 1 } + "taper la commande choisie" { send "10\r" } +} + +expect "nouvelle adresse" { send "010.133.028.253\r" } + +expect "taper la commande choisie" { send "12\r" } + +expect "taper la commande choisie" { send "14\r" } + +cleanexit 0 +# vim:set tabstop=4 expandtab shiftwidth=4: diff --git a/simple-cdd/additional_scripts/configure_switch.tcl b/simple-cdd/additional_scripts/configure_switch.tcl new file mode 100755 index 0000000..8e2af2f --- /dev/null +++ b/simple-cdd/additional_scripts/configure_switch.tcl @@ -0,0 +1,50 @@ +#!/usr/bin/expect + +# ============================================================================ +# +# Copyright (C) THALES. All rights reserved +# Author: Laurent Mazet +# +# Script de configuration du switchs +# +# 2013-10-10 V1.0 : Creation +# +# ============================================================================ + +set host [lrange $argv 0 0] +if { $host == "" } { + puts "usage: configure_switch.tcl \[swg1|swg2|swm\]" + exit 1 +} + +set tftpserver "" +if { $host == "swg1" } { set tftpserver "10.133.26.160" } +if { $host == "swg2" } { set tftpserver "10.133.26.160" } +if { $host == "swm" } { set tftpserver "10.133.28.160" } +if { $tftpserver == "" } { puts "unknown switch '$host'"; exit } + +set date [ exec date +%Y%m%d-%H:%m:%S ] +set backup "$host-$date.txt" + +spawn telnet $host + +set timeout 30 + +expect { + "Password:" { send "thales\r" } + incorrect { send_user "invalid password or account\n"; exit 1 } + timeout { send_user "connection to $host timed out\n"; exit 1 } + eof { send_user "connection to host failed\n"; exit 1 } +} +expect -exact ">" { send "enable\r" } +expect "Password:" { send "thales\r" } +expect "#" { send "copy running-config tftp://$tftpserver/$backup\r" } +expect -exact "?" { send "$tftpserver\r" } +expect -exact "?" { send "$backup\r" } +expect "#" { send "copy tftp://$tftpserver/$host.txt startup-config\r" } +expect -exact "?" { send "startup-config\r" } +#expect "#" { send_user " << reload or exit ? >> "; interact } +expect "#" { send "reload\r" } + +exit 0 +# vim:set tabstop=4 expandtab shiftwidth=4: diff --git a/simple-cdd/additional_scripts/configure_switch_bootstrap.tcl b/simple-cdd/additional_scripts/configure_switch_bootstrap.tcl new file mode 100755 index 0000000..873b674 --- /dev/null +++ b/simple-cdd/additional_scripts/configure_switch_bootstrap.tcl @@ -0,0 +1,47 @@ +#!/usr/bin/expect + +set host [lrange $argv 0 0] +if { $host == "" } { + puts "usage: configure_switch_bootstrap.tcl \[swg1|swg2|swm\]" + exit 1 +} + +set ipaddress "" +if { $host == "swg1" } { set ipaddress "10.133.26.231" } +if { $host == "swg2" } { set ipaddress "10.133.26.232" } +if { $host == "swm" } { set ipaddress "10.133.28.231" } +if { $ipaddress == "" } { puts "unknown switch '$host'""; exit 1 } + +spawn screen -c . /dev/ttyUSB0 + +set timeout 5 + +set state 0 +while { $state != 1 } { + expect { + timeout { send "\r" } + -exact ">" { send "enable\r" } + "#" { set state 1 } + "Password:" { send "thales\r" } + eof { send_user "connection to host failed\n"; exit 1 } + } +} + +send "configure terminal\r" +expect "#" { send "interface vlan 1\r" } +expect "#" { send "ip address $ipaddress 255.255.255.0\r" } +expect "#" { send "exit\r" } +expect "#" { send "line vty 0 4\r" } +expect "#" { send "password thales\r" } +expect "#" { send "enable password thales\r" } +expect "#" { send "end\r" } + +# quit switch connection +expect "#" { send "exit\r" } + +# to quit screen we need to send C-a \. +send "\001\\" +expect "kill all your windows" { send "y\r" } + +exit 0 +# vim:set tabstop=4 expandtab shiftwidth=4: diff --git a/simple-cdd/additional_scripts/connect_switch.tcl b/simple-cdd/additional_scripts/connect_switch.tcl new file mode 100755 index 0000000..5f2299e --- /dev/null +++ b/simple-cdd/additional_scripts/connect_switch.tcl @@ -0,0 +1,115 @@ +#!/usr/bin/expect + +# ============================================================================ +# +# Copyright (C) THALES. All rights reserved +# Author: Laurent Mazet +# +# Script de connection au switchs +# +# 2013-10-10 V1.0 : Creation +# +# 2014-03-05 V1.1 : LMa ajout de passage de commande CISCO en parametre +# +# 2014-06-10 V1.2 : LMa ajout d'un fichier de commandes +# +# ============================================================================ + +# default value +set adminpassword "thales" +set cmd {} +set host "" +set loginpassword "thales" +set prompt "SW*" + +proc usage {rc} { + puts "usage: connect_switch.tcl \[host\] \[-a adminpassword\] \[-c command\] \[-f file\] \[-h\] \[-l loginpassword\] \[-p prompt\]" + exit $rc +} + +# process argument +set action "" +for {set i 0} {$i < [llength $argv]} {incr i} { + set arg [lindex $argv $i] + switch $arg { + -a { set action "-adminpassword" } + -c { set action "-cmd" } + -f { set action "-file" } + -h { usage 0 } + -l { set action "-loginpassword" } + -p { set action "-prompt" } + default { + switch $action { + -adminpassword { set adminpassword $arg } + -cmd { set cmd [lappend cmd $arg] } + -file { + if {[file isfile $arg] == 1} then { + set f [open $arg "r"] + set data [read $f] + close $f + foreach line [split $data "\n"] { + set cmd [lappend cmd $line] + } + } else { + puts "can't open file '$arg'" + exit 1 + } + } + -loginpassword { set loginpassword $arg } + -prompt { set prompt $arg } + default { set host $arg } + } + set action "" + } + } +} +if {$action != ""} { + puts "missing arguments" + exit 1 +} +if { $host == "" } { + usage 1 +} + +# start connection +spawn telnet $host + +# login password +expect { + "Password:" { send "$loginpassword\r" } + timeout { send_user "connection to host failed\n"; exit 1 } + eof { send_user "connection to host failed\n"; exit 1 } +} + +# admin password +expect { + "$prompt>" { send "enable\r" } + timeout { send_user "connection to host failed\n"; exit 1 } + "Password:" { send_user "invalid login password\n"; exit 1 } +} +expect "Password:" { send "$adminpassword\r" } +expect { + "$prompt#" { send "\r" } + "Password:" { send_user "invalid admin password\n"; exit 1 } +} + +# commands or interactive mode +if {[llength $cmd] == 0 } { + expect "$prompt#" { interact } +} else { + expect "$prompt#" { send "terminal length 0\r" } + for {set i 0} {$i < [llength $cmd]} {incr i} { + expect { + "$prompt#" { send "[lindex $cmd $i]\r" } + "confirm" { send "\r"; continue } + } + } + expect { + "confirm" { send "\r"; expect "$prompt" { send "exit\r" } } + "$prompt" { send "exit\r" } + } + send_user "\n" +} + +exit 0 +# vim:set tabstop=4 shiftwidth=4 softtabstop=4: diff --git a/simple-cdd/additional_scripts/flash_fe306.sh b/simple-cdd/additional_scripts/flash_fe306.sh new file mode 100755 index 0000000..b728862 --- /dev/null +++ b/simple-cdd/additional_scripts/flash_fe306.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +# parameters +# +# ============================================================================ +# +# Copyright (C) THALES. All rights reserved +# Author: Laurent Mazet +# +# 2014-10-06 V1.0 : Creation +# +# ============================================================================ + +DRY= +FIRMWARE=/opt/trc6500/config/code_metier/libHwCtrl/Bitstream +LIST="application.out production.bin ts12_fp_pano.bin ts22_fp_pano.bin firmware.out" +HOST= +#TRC6500_SCRIPT_DIR=/opt/trc6500/script +TRC6500_SCRIPT_DIR=$(dirname $0) + +# help function + +function usage () { + echo "usage: $PROGNAME [-d] [-f dir] [-h] [-i host] [-l list]" + echo " -d: dry mode" + echo " -f: firmware directory ($FIRMWARE)" + echo " -h: help message" + echo " -i: board hostname (or ip)" + echo " -l: list of firmware ($LIST)" + exit $@ + } + +# formating functions + +function title () { echo -e "\033[0;1m$*\033[0;0m"; } +function pass () { echo -e "\033[1;32m$*\033[0;0m"; } +function warn () { echo -e "\033[1;33m$*\033[0;0m"; } +function fail () { echo -e "\033[1;31m$*\033[0;0m"; } + +# argument processing + +while [ $# -gt 0 ]; do + case "$1" in + -d) DRY=yes;; + -f) shift; FIRMWARE=$1;; + -h) usage 0;; + -i) shift; HOST=$1;; + -l) shift; LIST=$1;; + *) usage 1;; + esac + shift +done + +# check host + +[ "$HOST" ] || ping -c 1 $HOST >&/dev/null || \ + { fail "Can't connect '$HOST'"; exit 1; } + +# check firmware + +for f in $LIST; do + [ -f $FIRMWARE/$f ] || { fail "Can't find '$FIRMWARE/$f'"; exit 1; } +done + +# check mode + +protect="" +[ "$DRY" = yes ] && protect="!echo" + +# flash firmware + +title "flash fe306 '$HOST'" + +ftp -n <" + +proc usage {script_name rc} { + puts "usage: [exec basename $script_name] \[host\] \[-b blade\] \[-h\] \[-l login\] \[-p password\] \[-x prompt\]" + exit $rc +} + +# process argument +set action "" +for {set i 0} {$i < [llength $argv]} {incr i} { + set arg [lindex $argv $i] + switch $arg { + -b { set action "-blade" } + -h { usage $argv0 0 } + -l { set action "-login" } + -p { set action "-password" } + -x { set action "-prompt" } + default { + switch $action { + -blade { set blade $arg } + -login { set login $arg } + -password { set password $arg } + -prompt { set prompt $arg } + default { set host $arg } + } + set action "" + } + } +} +if {$action != ""} { + puts "missing arguments" + exit 1 +} +if { $host == "" } { + usage $argv0 1 +} + +# start connection +spawn telnet $host + +# login +expect { + "username:" { send "$login\r" } + timeout { send_user "connection to host failed\n"; exit 1 } + eof { send_user "connection to host failed\n"; exit 1 } +} + + +# password +expect { + "password:" { send "$password\r" } + timeout { send_user "connection to host failed\n"; exit 1 } + eof { send_user "connection to host failed\n"; exit 1 } +} + +expect { + "$prompt" { send "mt -b $blade\r" } + "username:" { send_user "connection to host failed\n"; exit 1 } +} + +expect { + "OK" { send "exit\r" } + "$prompt" { send_user "error\n"; exit 1 } +} + +send_user "\n" +exit 0 +# vim:set tabstop=4 shiftwidth=4 softtabstop=4: diff --git a/simple-cdd/profiles/trc6500.postinst b/simple-cdd/profiles/trc6500.postinst index 01231b8..c372714 100755 --- a/simple-cdd/profiles/trc6500.postinst +++ b/simple-cdd/profiles/trc6500.postinst @@ -14,7 +14,7 @@ echo 'Additional packages installed.' # now we unpack our master archive and replace all those conf files and scripts and things echo 'Unpacking master config files..' -tar xzf /media/cdrom/simple-cdd/master.tar -C / +tar xzf /media/cdrom/simple-cdd/master.tar.gz -C / chown root /etc/cron.d/getswitchtemp chown root /root/bin/get_switch_temperature echo 'Files unpacked.' @@ -57,6 +57,11 @@ chmod go-rwx /root/.ssh/id_rsa chmod go-rwx /opt/cluster/slave/root/.ssh chmod go-rwx /opt/cluster/slave/root/.ssh/id_rsa chmod a+rwx /opt/tftp + +echo "">/var/log/atftpd.log +chown nobody /var/log/atftpd.log + +update-initramfs -u echo 'Finalized.' # our interfaces file gets written over for some reason, we'll copy it and restore it on first boot diff --git a/simple-cdd/readme b/simple-cdd/readme index c374eaf..0b8bec0 100644 --- a/simple-cdd/readme +++ b/simple-cdd/readme @@ -9,7 +9,7 @@ This uses the simple-cdd package (available on the official Debian repository) t - unpacking of config files and scripts during install - automatic execution of some configuration options -This CD does NOT create an usable operating system. All included systems should be reviewed, but particularly the network configuration (/etc/hosts, DHCP config), which is partly automated thanks to scripts provided by the TRC6500 exploitation software, which is NOT bundled with this CD. +This CD does NOT create an usable operating system. All included systems should be reviewed, but particularly the network configuration (/etc/hosts, DHCP config, TFTP config..), which is partly automated thanks to scripts provided by the TRC6500 exploitation software, which is NOT bundled with this CD. ** What files we'll be using @@ -17,7 +17,8 @@ This CD does NOT create an usable operating system. All included systems should - the entire profiles/ directory is used by build-simple-cdd - myrc.local is the script executed on first boot - the local_packages/ directory contains packages not available on the regular repository, or more recent versions of packages available there. -- master.tar is an archive of the "master" directory on the debian6500 repository, unpacked during install (NOT PROVIDED) +- the additional_scripts/ directory contains useful scripts to be included in the master.tar.gz archive, in the /opt/trc6500/script/ folder. +- master.tar.gz is an archive of the "master" directory on the debian6500 repository, unpacked during install (NOT PROVIDED) - TRC6500.pub is a GPG public key added to the OS's keyring during install, corresponding to a makeshift Debian repo from T. Pérennou - splash-thales.png is a 640*480 image used for the splashscreen @@ -30,7 +31,7 @@ build-simple-cdd --dist wheezy --conf ./simple-cdd.conf Most options described in the documentation are included in the simple-cdd.conf file. The program will use those (in addition to the default settings) to build a list of what is to be included on the CD. Primarily, it includes itself, profile(s) scripts, and pulls packages (from the .packages list) from whatever repositories are in /etc/apt/sources.list, or from the ./tmp folder if the packages have already been fetched. -Additional packages are to be put in the local_packages directory (which is specified in our ownsimple_cdd.conf). It should be noted that packages placed there simply join the pool of available packages : to actually include them on the CD, they should be added in an itself included profile's packages list (say, profiles/trc6500.packages). The list of packages added this way is : +Additional packages are to be put in the local_packages directory (which is specified in our own simple_cdd.conf). It should be noted that packages placed there simply join the pool of available packages : to actually include them on the CD, they should be added in an itself included profile's packages list (say, profiles/trc6500.packages). The list of packages added this way is : cpumon dce firmware-bnx2 libcalloc1 libcycle1 libdebug1 libmcore1 raf swb webconfig xcfe Additional files are included with the all_extras="," option in our simple-cdd.conf file. diff --git a/simple-cdd/simple-cdd.conf b/simple-cdd/simple-cdd.conf index ac0a142..fa330a7 100644 --- a/simple-cdd/simple-cdd.conf +++ b/simple-cdd/simple-cdd.conf @@ -22,7 +22,7 @@ local_packages="${working_dir}/local_packages" # we'll unpack that during install # for now, this includes : master.tar, myrc.local, TRC6500.pub, local_packages/firmware-bnx2 # additionally, the bnx2 firmware is there because it resists being added to local_packages for some odd reason. So we'll install it by hand. -all_extras="${working_dir}/master.tar,${working_dir}/myrc.local,${working_dir}/TRC6500.pub,${working_dir}/local_packages/firmware-bnx2_0.36+wheezy.1_all.deb" +all_extras="${working_dir}/master.tar.gz,${working_dir}/myrc.local,${working_dir}/TRC6500.pub,${working_dir}/local_packages/firmware-bnx2_0.36+wheezy.1_all.deb" # added value export SPLASHPNG="${working_dir}/splash-thales.png" -- 2.30.2