(command.CommandList children: [ (C {<.>} {(${ Id.VSub_Name BACKEND) <'/functions.sh'>}) (C {<.>} {(${ Id.VSub_Name BACKEND) <'/functions-parse.sh'>}) (command.Sentence child: (command.ShFunction name: copy_component body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPONENT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [105] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {(DQ <0>)} spids: [111] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CFILES) op: assign_op.Equal rhs: {(DQ )} spids: [117] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TYPE) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<grep>} {(SQ <'type:'>)} {(${ Id.VSub_Name COMPDIR) <'/'> (${ Id.VSub_Name COMPONENT) <'/component.cfg'> } ) (C {<cut>} {<-d>} {(SQ <' '>)} {<-f>} {<2>}) ] negated: F ) ) ) } spids: [127] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name TYPE))} {<Id.Lit_Equals '='>} {(DQ <PBI>)} {<Id.Lit_RBracket ']'>} ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SUBDIR) op: assign_op.Equal rhs: {(DQ <PBI>)} spids: [186] ) ] ) ] spids: [164 183] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SUBDIR) op: assign_op.Equal rhs: {(DQ <components>)} spids: [195] ) ] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands:[(C {<read>} {<line>})]) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CFILE) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$line')}) (C {<cut>} {<-d>} {(SQ <':'>)} {<-f>} {<1>}) ] negated: F ) ) ) } spids: [219] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CFILEMD5) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$line')}) (C {<cut>} {<-d>} {(SQ <':'>)} {<-f>} {<2>}) ] negated: F ) ) ) } spids: [245] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CFILE2MD5) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$line')}) (C {<cut>} {<-d>} {(SQ <':'>)} {<-f>} {<3>}) ] negated: F ) ) ) } spids: [271] ) ] ) (command.Case to_match: {(${ Id.VSub_Name INSTALLMEDIUM)} arms: [ (case_arm pat_list: [{<dvd>} {<usb>}] action: [ (command.Simple words: [ {<cp>} {(${ Id.VSub_Name CDMNT) <'/'> (${ Id.VSub_Name COMPFILEDIR) <'/'> (${ Id.VSub_Name SUBDIR) <'/'> (${ Id.VSub_Name CFILE) } {(${ Id.VSub_Name FSMNT) <'/'> (${ Id.VSub_Name COMPTMPDIR)} ] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name LOGOUT)} ) (redir op: <Id.Redir_DGreat '2>>'> loc: (redir_loc.Fd fd:2) arg: {(${ Id.VSub_Name LOGOUT)} ) ] do_fork: T ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '$?'))} spids: [356] ) ] ) ] spids: [307 310 362 -1] ) (case_arm pat_list: [{<ftp>}] action: [ (C {<get_value_from_cfg>} {<ftpPath>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$VAL'))} {<Id.Lit_RBracket ']'>} ) ] ) action: [ (C {<exit_err>} { (DQ < 'ERROR: Install medium was set to ftp, but no ftpPath was provided!' > ) } ) ] spids: [375 388] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FTPPATH) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name VAL))} spids: [401] ) ] ) (C {<fetch_file>} { (DQ (${ Id.VSub_Name FTPPATH) <'/'> (${ Id.VSub_Name COMPFILEDIR) <'/'> (${ Id.VSub_Name SUBDIR) <'/'> (${ Id.VSub_Name CFILE) ) } {(DQ (${ Id.VSub_Name FSMNT) <'/'> (${ Id.VSub_Name COMPTMPDIR) <'/'> (${ Id.VSub_Name CFILE))} {(DQ <0>)} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '$?'))} spids: [450] ) ] ) ] spids: [366 367 456 -1] ) (case_arm pat_list: [{<local>}] action: [ (C {<get_value_from_cfg>} {<localPath>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$VAL'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<exit_err>} { (DQ < 'Install medium was set to local, but no localPath was provided!' > ) } ) ] spids: [468 481] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LOCALPATH) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$VAL')} spids: [494] ) ] ) (command.Simple words: [ {<cp>} {(${ Id.VSub_Name LOCALPATH) <'/'> (${ Id.VSub_Name COMPFILEDIR) <'/'> (${ Id.VSub_Name SUBDIR) <'/'> (${ Id.VSub_Name CFILE) } {(${ Id.VSub_Name FSMNT) <'/'> (${ Id.VSub_Name COMPTMPDIR)} ] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name LOGOUT)} ) (redir op: <Id.Redir_DGreat '2>>'> loc: (redir_loc.Fd fd:2) arg: {(${ Id.VSub_Name LOGOUT)} ) ] do_fork: T ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '$?'))} spids: [537] ) ] ) ] spids: [459 460 543 -1] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name RESULT))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ) ] ) action: [ (C {<echo_log>} {(DQ <'WARNING: Failed to copy '> (${ Id.VSub_Name CFILE))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {(DQ <1>)} spids: [583] ) ] ) ] spids: [550 570] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHECKMD5) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<md5>} {<-q>} {(${ Id.VSub_Name FSMNT) <'/'> (${ Id.VSub_Name COMPTMPDIR) <'/'> (${ Id.VSub_Name CFILE) } ) ) } spids: [596] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name CHECKMD5))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name CFILEMD5))} {<-a>} {(DQ (${ Id.VSub_Name CHECKMD5))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name CFILE2MD5))} {<Id.Lit_RBracket ']'>} ) ] ) action: [ (C {<echo_log>} { (DQ <'WARNING: '> (${ Id.VSub_Name CFILE) <' failed md5 checksum'> ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {(DQ <1>)} spids: [671] ) ] ) ] spids: [618 657] ) ] else_action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ (${ Id.VSub_Name CFILES))} {<Id.Lit_RBracket ']'>} ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CFILES) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name CFILE))} spids: [698] ) ] ) ] spids: [680 695] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CFILES) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name CFILES) <','> (${ Id.VSub_Name CFILE) ) } spids: [710] ) ] ) ] ) ] ) ] ) ] ) redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(${ Id.VSub_Name COMPDIR) <'/'> (${ Id.VSub_Name COMPONENT) <'/distfiles'>} ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FAILED))} {<Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ) ] ) action: [ (C {<run_component_install>} {(${ Id.VSub_Name COMPONENT)} {(${ Id.VSub_Name CFILES)} ) ] spids: [749 768] ) ] ) ] ) ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShFunction name: run_component_install body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPONENT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [800] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CFILES) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [806] ) ] ) (command.Simple words: [ {<echo>} { (DQ <'#!/bin/sh\n'> <'COMPTMPDIR='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) (${ Id.VSub_Name COMPTMPDIR) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'\n'> <'export COMPTMPDIR\n'> <'CFILE='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) (${ Id.VSub_Name CFILE) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) <'\n'> <'export CFILE\n'> <'mount -t devfs devfs /dev\n'> <'\n'> <'sh '> (${ Id.VSub_Name COMPTMPDIR) <'/install.sh\n'> <'\n'> <'umount /dev\n'> ) } ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name FSMNT) <'/.componentwrapper.sh'>} ) ] do_fork: T ) (C {<chmod>} {<755>} {(${ Id.VSub_Name FSMNT) <'/.componentwrapper.sh'>}) (C {<cp>} {(${ Id.VSub_Name COMPDIR) <'/'> (${ Id.VSub_Name COMPONENT) <'/install.sh'>} {(${ Id.VSub_Name FSMNT) <'/'> (${ Id.VSub_Name COMPTMPDIR) <'/'>} ) (C {<echo_log>} {(DQ <'INSTALL COMPONENT: '> (${ Id.VSub_Name i))}) (command.Simple words: [{<chroot>} {(${ Id.VSub_Name FSMNT)} {<'/.componentwrapper.sh'>}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name LOGOUT)} ) (redir op: <Id.Redir_DGreat '2>>'> loc: (redir_loc.Fd fd:2) arg: {(${ Id.VSub_Name LOGOUT)} ) ] do_fork: T ) (C {<rm>} {(${ Id.VSub_Name FSMNT) <'/.componentwrapper.sh'>}) ] ) ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShFunction name: install_components body: (BraceGroup children: [ (C {<get_value_from_cfg>} {<installComponents>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ (${ Id.VSub_Name VAL))} {<Id.Lit_RBracket ']'>} ) ] ) action: [ (C {<strip_white_space>} {(${ Id.VSub_Name VAL)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPONENTS) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {(${ Id.VSub_Name VAL)}) (C {<sed>} {<-e>} {(DQ <'s|,| |g'>)}) ] negated: F ) ) } spids: [990] ) ] ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$COMPONENTS')}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} { (DQ (${ Id.VSub_Name COMPDIR) <'/'> (${ Id.VSub_Name i) <'/install.sh'> ) } {<-o>} {<Id.KW_Bang '!'>} {<-e>} {(DQ (${ Id.VSub_Name COMPDIR) <'/'> (${ Id.VSub_Name i) <'/distfiles'>)} {<Id.Lit_RBracket ']'>} ) ] ) action: [ (C {<echo_log>} { (DQ <'WARNING: Component '> (${ Id.VSub_Name i) <' doesn\'t seem to exist'> ) } ) ] spids: [1024 1063] ) ] else_action: [ (command.Simple words: [ {<mkdir>} {<-p>} {(${ Id.VSub_Name FSMNT) <'/'> (${ Id.VSub_Name COMPTMPDIR)} ] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name LOGOUT)} ) (redir op: <Id.Redir_DGreat '2>>'> loc: (redir_loc.Fd fd:2) arg: {(${ Id.VSub_Name LOGOUT)} ) ] do_fork: T ) (C {<copy_component>} {(${ Id.VSub_Name i)}) (command.Simple words: [ {<rm>} {<-rf>} {(${ Id.VSub_Name FSMNT) <'/'> (${ Id.VSub_Name COMPTMPDIR)} ] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name LOGOUT)} ) (redir op: <Id.Redir_DGreat '2>>'> loc: (redir_loc.Fd fd:2) arg: {(${ Id.VSub_Name LOGOUT)} ) ] do_fork: T ) ] ) ] ) ) ] spids: [961 976] ) ] ) ] ) ) terminator: <Id.Op_Semi _> ) ] )