#!/usr/bin/regina
/* ReXX */
/****************************************************************
* REXX zum automatischen Einspielen von Patches *
* *
* *
* Aufruf: Update_OS *
* Version: 1.3 *
* Autor: J. Weber *
* *
* Aenderungen: *
*--------------------------------------------------------------*
* 1.0 | Initiale Version *
* | *
* 1.1 | Fehlerkorrektur bei zypper patch: *
* | -y, --no-confirm *
* | -l, --auto-agree-with-licenses *
* | eingefügt. *
* | *
* 1.2 | Automatische Reboot, wenn zypper rc = 102 *
* | *
* 1.3 | zypper command um Verbose option erweitert *
* | *
* x.x | *
* | *
****************************************************************
trace i
*/
/***********************************************************************************
*
***********************************************************************************/
OPTIONS AREXX_BIFS
PARSE version language level day month year .
PARSE source system invocation filename .
SIGNAL ON SYNTAX
language = TRANSLATE(language)
module = DELSTR(filename,1,LASTPOS("/",filename))
retc=0
ToDo = ""
Repo = ""
sReboot = 0
DT=DATE('S')
PARSE UPPER ARG Parmlist /* Get Parameter 1 */
/***********************************************************************************
*
***********************************************************************************/
/***********************************************************************************
*
***********************************************************************************/
SAY module" starts at "DATE('N')" "TIME('N')" running under "language" Lvl "level
CALL RXFUNCADD 'sysloadfuncs', 'RexxUtil', 'sysloadfuncs'
CALL sysloadfuncs
SAY module": "SysVersion()
current_dir = directory() /* save current dir. */
CALL check_Parms
retc = RESULT
IF retc <> 0 THEN SIGNAL PROG_ENDE
'zypper ref 'Repo
retc = RC
IF ToDo = "PATCH" & retc = 0 THEN
DO
'zypper -vvv pchk --with-optional 'Repo
retc = RC
IF retc >= 100 & retc <= 101 THEN
DO
'zypper -vvv lp --with-optional 'Repo
IF RC = 0 THEN
DO
CALL Install_Patches
retc = RESULT
END
END
END
IF ToDo = "UPDATE" & retc = 0 THEN
DO
'zypper -vvv lu 'Repo
IF RC = 0 THEN
DO
CALL Install_Updates
retc = RESULT
END
END
IF retc = 0 THEN ,
'zypper ps -s'
/***********************************************************************************
*
***********************************************************************************/
PROG_ENDE:
IF sReboot THEN ,
'systemctl reboot'
SAY module" ends at "DATE('N')" "TIME('N')
EXIT retc
/***********************************************************************************
*
***********************************************************************************/
SYNTAX:
errorline = Strip(Sourceline(sigl));
errormgs = Errortext(rc)
Say "======================================================================="
Say "REXX-Error in Exec" module ") in line" sigl
Say "line" sigl!!":" errorline
Say "Error-Msg :" errormsg
Say "======================================================================="
EXIT 16
/**********************************************************************************
**********************************************************************************
**********************************************************************************
** Sub Procedures **
**********************************************************************************
**********************************************************************************
**********************************************************************************/
/***********************************************************************************
*
***********************************************************************************/
Check_Parms: Procedure Expose module Parmlist ToDo Repo
sRC = 0
SAY module": check Parameters: "Parmlist
SELECT
WHEN WORDS(Parmlist) = 1 THEN ,
ToDo = WORD(Parmlist, 1)
WHEN WORDS(Parmlist) = 2 THEN
DO
Repo = "-r "WORD(Parmlist, 2)
ToDo = WORD(Parmlist, 1)
END
WHEN WORDS(Parmlist) = 0 THEN ,
ToDo = "PATCH"
OTHERWISE
SAY module": invalid input"
sRC = 12
END
IF sRC = 0 THEN
DO
IF ToDo <> "PATCH" & ToDo <> "UPDATE" THEN
DO
SAY module": Parameter 1 must be 'PATCH' or 'UPDATE'"
sRC = 12
END
END
Return sRC
/***********************************************************************************
*
***********************************************************************************/
/***********************************************************************************
*
***********************************************************************************/
Install_Patches: Procedure Expose module Repo sReboot
sRC = 0
RC = 0
SAY module": Execute 'zypper -vvv patch -y -l --with-optional --with-update --with-interactive "Repo"'"
'zypper -vvv patch -y -l --with-optional --with-update --with-interactive 'Repo
IF RC = 103 THEN ,
'zypper -vvv patch -y -l --with-optional --with-update --with-interactive 'Repo
sRC = RC
IF sRC = 102 THEN
DO
SAY module": Reboot erforderlich!"
sReboot = 1
END
ELSE ,
IF sRC <> 0 THEN ,
SAY module": Install patches not successfull, Return_Code="sRC
Return sRC
/***********************************************************************************
*
***********************************************************************************/
/***********************************************************************************
*
***********************************************************************************/
Install_Updates: Procedure Expose module Repo sReboot
sRC = 0
RC = 0
SAY module": Execute 'zypper -vvv up -y -l --with-optional --with-interactive '"Repo
'zypper -vvv up -y -l 'Repo
sRC = RC
IF sRC = 102 THEN
DO
SAY module": Reboot erforderlich!"
sReboot = 1
END
ELSE ,
IF sRC <> 0 THEN ,
SAY module": Install updates not successfull, Return_Code="sRC
Return sRC
/***********************************************************************************
*
***********************************************************************************/
/**********************************************************************************
**********************************************************************************
** END OF Update_OS **
**********************************************************************************
**********************************************************************************/