Estou tentando autopopular o / etc / issue em uma imagem do CentOS 7 (isso será um modelo, e precisa ser fácil identificar rapidamente as VMs resultantes).
Eu tenho o seguinte no meu / sbin / ifup-local:
#!/bin/bash
cd /etc ;
unlink ./issue ;
sleep 1 ;
issue_original="$(cat ./issue-original)" ;
show_ip="$(ip addr show |awk '$1=="inet" && $2 !~ /^127/ {print "\t"$2}')" ;
co -l ./issue ;
echo -e "${issue_original}\n\n\tCurrent IP Numbers:\n\t===================\n${show_ip}\n" >./issue ;
ci -m -u ./issue ;
O / etc / issue-original parece com:
Logging into:
Node: \n
Running: \S
Quando executo o script manualmente ( sudo / sbin / ifup-local; cat / etc / issue ), ele preenche corretamente o arquivo / etc / issue. Quando isso é executado automaticamente (por exemplo, quando é resultado de reinicialização da rede de serviço sudo; cat / etc / issue ), o modelo de arquivo e o texto estático estão lá, mas os números IP estão vazios ( nem linhas vazias).
Estou entendendo errado a ordem de execução (o ifup-local é executado antes dos números IP serem atribuídos)? Parece que isso é no final do / etc / sysconfig / network-scripts / ifup-post, então eu diria que é após o cliente DHCP ter definido as interfaces.
Existe um atraso entre quando os números IP da interface são definidos e quando o comando "ip" sabe sobre eles? A declaração "sleep" está lá porque pensei que poderia ser o caso.
Todos os ponteiros na direção certa são muito apreciados.
Feliz domingo!
==========================
Editar:
Aqui está o que eu vi em / etc / issue depois de reiniciar o serviço de rede.
[david@localhost ~]$ sudo service network restart
Restarting network (via systemctl): [ OK ]
[david@localhost ~]$ cat /etc/issue
Logging into:
Node: \n
Running: \S
Current IP Numbers:
===================
[david@localhost ~]$
Além disso, eu tenho instrumentado o script com mensagens copiosas de depuração, para descobrir onde as coisas estão e não estão funcionando. Aqui está o que foi registrado na última execução (trunquei o log antes da execução, para remover informações irrelevantes).
[david@localhost conf.d]$ clear
[david@localhost conf.d]$ >/tmp/ifup-local.log
[david@localhost conf.d]$ tail -f /tmp/ifup-local.log
--------------------------------------------------
2014-10-01 18:50:0808 DEBUG: PATH: /usr/sbin/:/usr/bin/:/sbin:/usr/sbin:/bin:/usr/bin
2014-10-01 18:50:0808 DEBUG: PWD: /etc
2014-10-01 18:50:0808 DEBUG: issue file exists
2014-10-01 18:50:0808 DEBUG: Removing old issue file
2014-10-01 18:50:0808 DEBUG: issue_original:
Logging into: Node: \n Running: \S
2014-10-01 18:50:0808 DEBUG: about to check the IP numbers
2014-10-01 18:50:0808 DEBUG: 0
2014-10-01 18:50:0909 DEBUG: show_ip:
2014-10-01 18:50:0909 DEBUG: checking out issue file to lock it
2014-10-01 18:50:0909 DEBUG: new_issue:
Logging into: Node: \n Running: \S
Current IP Numbers:
===================
2014-10-01 18:50:0909 DEBUG: issue file exists
2014-10-01 18:50:0909 DEBUG: checked back in issue file
--------------------------------------------------
2014-10-01 18:50:0909 DEBUG: PATH: /usr/sbin/:/usr/bin/:/sbin:/usr/sbin:/bin:/usr/bin
2014-10-01 18:50:0909 DEBUG: PWD: /etc
2014-10-01 18:50:0909 DEBUG: issue file exists
2014-10-01 18:50:0909 DEBUG: Removing old issue file
2014-10-01 18:50:0909 DEBUG: issue_original:
Logging into: Node: \n Running: \S
2014-10-01 18:50:0909 DEBUG: about to check the IP numbers
2014-10-01 18:50:0909 DEBUG: 0
2014-10-01 18:50:0909 DEBUG: show_ip:
2014-10-01 18:50:0909 DEBUG: checking out issue file to lock it
2014-10-01 18:50:0909 DEBUG: new_issue:
Logging into: Node: \n Running: \S
Current IP Numbers:
===================
2014-10-01 18:50:0909 DEBUG: issue file exists
2014-10-01 18:50:0909 DEBUG: checked back in issue file
Aqui está o script revisado, com todas as mensagens de depuração:
#!/bin/bash
function write-debug() {
msg="$(date +'%Y-%m-%d %H:%M:%S%S')\tDEBUG:\t$1\n" ;
echo -e ${msg} >>${LOGFILE} ;
}
################################################
################################################
set -x ;
export LOGFILE='/tmp/ifup-local.log' ;
export PATH="/usr/sbin/:/usr/bin/:${PATH}" ;
echo -e "\n--------------------------------------------------\n" >>${LOGFILE} ;
write-debug "PATH: ${PATH}" ;
cd /etc ;
write-debug "PWD: $(pwd)" ;
[[ -a ./issue ]] && write-debug "issue file exists" || write-debug "no existing issue file" ;
write-debug "Removing old issue file" ;
[[ -a ./issue ]] && unlink ./issue || write-debug "no issue file to remove" ;
issue_original="$(cat ./issue-original)" ;
write-debug "issue_original:\n${issue_original}" ;
write-debug "about to check the IP numbers" ;
show_ip="$(ip addr show |awk '$1=="inet" && $2 !~ /^127/ {print "\t"$2}')" ;
#show_ip="$(ip addr show |fgrep 'inet ')" ;
write-debug $? ;
write-debug "show_ip:\n ${show_ip}" ;
write-debug "checking out issue file to lock it" ;
[[ -a ./issue ]] && write-debug "issue file exists" || "no existing issue file" ;
co -l ./issue ;
export new_issue="${issue_original}\n\n\tCurrent IP Numbers:\n\t===================\n${show_ip}\n" ;
write-debug "new_issue:\n${new_issue}" ;
echo -e "${new_issue}" >./issue ;
[[ -a ./issue ]] && write-debug "issue file exists" || "no existing issue file" ;
ci -m -u ./issue ;
write-debug "checked back in issue file" ;