(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IMAGE_FILE) op: assign_op.Equal rhs: {(raspbian-stretch-lite.zip)} spids: [14] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TODAY_EXT) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:18) command_list: (command.CommandList children: [(C {(date)} {(Id.Lit_Other '+') (DQ ('%Y-%m-%d-%H-%M'))})] ) ) } spids: [17] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BUILD_ID) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:28) command_list: (command.CommandList children: [ (C {(hexdump)} {(-n)} {(4)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'4/4 "%X" 1 "\\n"' span_id:38))} {(/dev/random)} ) ] ) ) } spids: [27] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IMAGE_FILE_CUSTOMIZED) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:IMAGE span_id:46) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: { (DQ (crankshaft-) (${ Id.VSub_Name TODAY_EXT) (-) (${ Id.VSub_Name BUILD_ID) (.img) ) } ) ) } spids: [44] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IMAGE_URL) op: assign_op.Equal rhs: {(https) (Id.Lit_Other ':') (//downloads.raspberrypi.org/raspbian_lite_latest)} spids: [61] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEMP_CHROOT_DIR) op: assign_op.Equal rhs: {(/mnt/raspbian-temp)} spids: [66] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DROP_IN) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:DROP_IN span_id:71) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(0)}) ) } spids: [69] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CUSTOM_SCRIPT) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:CUSTOM_SCRIPT span_id:78) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ )}) ) } spids: [76] ) ] ) (C {(clear)}) (C {(echo)} {(DQ ('###########################################################################'))}) (C {(echo)} {(DQ )}) (C {(echo)} {(DQ (' Welcome to the Crankshaft build script!'))}) (C {(echo)} {(DQ )}) (C {(echo)} {(DQ ('###########################################################################'))}) (command.ShFunction name: bail_and_cleanup body: (command.BraceGroup children:[(C {(kpartx)} {(-d)} {($ Id.VSub_Number '$1')})]) ) (command.ShFunction name: check_command_ok body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-x)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:162) command_list: (command.CommandList children: [(C {(command)} {(-v)} {($ Id.VSub_Number '$1')})] ) ) ) } {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:172) ) ] action: [ (C {(echo)} { (DQ ( '###########################################################################' ) ) } ) (C {(echo)} {(DQ )}) (command.Simple words: [ {(echo)} { (DQ ('Error: ') ($ Id.VSub_Number '$1') (' is not installed. Please install it.') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:198) fd: -1 arg_word: {(2)} ) ] ) (C {(echo)} {(DQ )}) (C {(echo)} { (DQ ( '###########################################################################' ) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:215) arg_word: {(1)} ) ] spids: [153 174] ) ] ) ] ) ) (command.ShFunction name: check_root body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$EUID'))} {(-ne)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:249) ) ] action: [ (C {(echo)} { (DQ ( '###########################################################################' ) ) } ) (C {(echo)} {(DQ )}) (C {(echo)} { (DQ ( "Please run this script as using sudo/as root, otherwise it can't continue. " ) ) } ) (C {(echo)} {(DQ )}) (C {(echo)} { (DQ ( '###########################################################################' ) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:288) ) ] spids: [236 251] ) ] ) ] ) ) (command.ShFunction name: check_dependencies body: (command.BraceGroup children: [ (C {(check_command_ok)} {(kpartx)}) (C {(check_command_ok)} {(qemu-arm-static)}) (C {(check_command_ok)} {(chroot)}) (C {(check_command_ok)} {(pv)}) (C {(check_command_ok)} {(zipinfo)}) (C {(check_command_ok)} {(zerofree)}) ] ) ) (command.ShFunction name: get_unzip_image body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name IMAGE_FILE)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:361) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:remotesize) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:371) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(wget)} {(https) (Id.Lit_Other ':') (//downloads.raspberrypi.org/raspbian_lite_latest) } {(--spider)} {(--server-response)} {(-O)} {(-)} ] redirects: [ (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '2>&' span_id: 388 ) fd: 2 arg_word: {(1)} ) ] ) (C {(sed)} {(-ne)} { (SQ (Token id: Id.Lit_Chars val: '/Content-Length/{s/.*: //;p}' span_id: 398 ) ) } ) ] negated: F ) ] ) ) } spids: [370] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:localsize) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:404) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(wc)} {(-c)} {(${ Id.VSub_Name IMAGE_FILE)}) (C {(awk)} { (SQ (Token id: Id.Lit_Chars val: '{print $1}' span_id: 420 ) ) } ) ] negated: F ) ] ) ) } spids: [403] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (braced_var_sub token: (Token id:Id.VSub_Name val:remotesize span_id:435) prefix_op: (Id.VSub_Pound) ) } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} { (braced_var_sub token: (Token id:Id.VSub_Name val:localsize span_id:443) prefix_op: (Id.VSub_Pound) ) } {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:447) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:remotesize) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:453) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(wget)} {(https) (Id.Lit_Other ':') ( //downloads.raspberrypi.org/raspbian_lite_latest ) } {(--spider)} {(--server-response)} {(-O)} {(-)} ] redirects: [ (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '2>&' span_id: 470 ) fd: 2 arg_word: {(1)} ) ] ) (C {(sed)} {(-ne)} { (SQ (Token id: Id.Lit_Chars val: '/Content-Length/{s/.*: //;p}' span_id: 480 ) ) } ) ] negated: F ) ] ) ) } spids: [452] ) ] ) ] spids: [429 449] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$remotesize'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$localsize'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:504) ) ] action: [ (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(echo)} { (DQ ('Image file ') (${ Id.VSub_Name IMAGE_FILE) (' is already the same, skipping download.') ) } ) (C {(echo)} {(DQ ('It will be re-downloaded if remote file has changed.'))}) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) ] spids: [489 506] ) ] else_action: [ (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(echo)} {(DQ ('Downloading new version of raspbian image from server...'))}) (C {(wget)} {(-q)} {(--show-progress)} {(-O) (${ Id.VSub_Name IMAGE_FILE)} {(${ Id.VSub_Name IMAGE_URL)} ) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) ] ) ] spids: [350 363] ) ] else_action: [ (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('Downloading raspbian image from server...'))}) (C {(wget)} {(-q)} {(--show-progress)} {(-O) (${ Id.VSub_Name IMAGE_FILE)} {(${ Id.VSub_Name IMAGE_URL)} ) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IMAGE_FILE_UNZIPPED) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:633) command_list: (command.CommandList children: [(C {(zipinfo)} {(-1)} {(${ Id.VSub_Name IMAGE_FILE)})] ) ) } spids: [632] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IMAGE_FILE_UNZIPPED_SIZE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:647) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(zipinfo)} {(-l)} {(${ Id.VSub_Name IMAGE_FILE)}) (C {(tail)} {(-1)}) (C {(xargs)}) (C {(cut)} {(-d) (SQ (Token id:Id.Lit_Chars val:' ' span_id:674))} {(-f3)} ) ] negated: F ) ] ) ) } spids: [646] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name IMAGE_FILE_UNZIPPED)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:695) ) ] action: [ (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(echo)} {(DQ ('Unpacking raspbian image...'))}) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (command.Pipeline children: [ (C {(unzip)} {(-o)} {(-p)} {(${ Id.VSub_Name IMAGE_FILE)}) (command.Simple words: [ {(pv)} {(-p)} {(-s)} {(${ Id.VSub_Name IMAGE_FILE_UNZIPPED_SIZE)} {(-w)} {(80)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:747) fd: -1 arg_word: {(${ Id.VSub_Name IMAGE_FILE_UNZIPPED)} ) ] ) ] negated: F ) ] spids: [682 697] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name IMAGE_FILE_CUSTOMIZED)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:771) ) ] action: [ (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(echo)} {(DQ ('Copying a big file...'))}) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(cp)} {(${ Id.VSub_Name IMAGE_FILE_UNZIPPED)} {(${ Id.VSub_Name IMAGE_FILE_CUSTOMIZED)} ) ] spids: [758 773] ) ] else_action: [ (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} { (DQ ('Skipping creation of ') (${ Id.VSub_Name IMAGE_FILE_CUSTOMIZED) (", it's already there. To re-create, delete it.") ) } ) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) ] ) ] ) ) (command.ShFunction name: resize_raw_image body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IMAGE_SIZE_RAW) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:849) command_list: (command.CommandList children: [ (command.Simple words: [{(wc)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:854) fd: -1 arg_word: {(DQ (${ Id.VSub_Name IMAGE_FILE_UNZIPPED))} ) ] ) ] ) ) } spids: [848] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IMAGE_SIZE_ACTUAL) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:865) command_list: (command.CommandList children: [ (command.Simple words: [{(wc)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:870) fd: -1 arg_word: {(DQ (${ Id.VSub_Name IMAGE_FILE_CUSTOMIZED))} ) ] ) ] ) ) } spids: [864] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IMAGE_ROOTPART_START) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:881) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(parted)} {(${ Id.VSub_Name IMAGE_FILE_UNZIPPED)} {(unit)} {(s)} {(print)} {(-sm)} ) (C {(tail)} {(-1)}) (C {(cut)} {(-d) (Id.Lit_Other ':')} {(-f2)}) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:s/s// span_id:916))}) ] negated: F ) ] ) ) } spids: [880] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name IMAGE_SIZE_ACTUAL)} {(-gt)} {(${ Id.VSub_Name IMAGE_SIZE_RAW)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:936) ) ] action: [ (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(echo)} {(DQ ('Image seems already resized, or something is wrong.'))}) (C {(echo)} {(DQ ("If the image doesn't work, try removing the .img and try again."))} ) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:969) ) ] spids: [921 938] ) ] ) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('Resizing image...'))}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (command.Simple words: [ {(dd)} {(Id.Lit_VarLike 'if=') (/dev/zero)} {(Id.Lit_VarLike 'bs=') (1M)} {(Id.Lit_VarLike 'count=') (512)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1012) fd: -1 arg_word: {(${ Id.VSub_Name IMAGE_FILE_CUSTOMIZED)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PART_NUM) op: assign_op.Equal rhs: {(2)} spids: [1020] ) ] ) (command.Simple words: [{(fdisk)} {(${ Id.VSub_Name IMAGE_FILE_CUSTOMIZED)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1031) fd: -1 here_begin: {(EOF)} here_end_span_id: 1048 stdin_parts: [ ('p\n') ('d\n') ($ Id.VSub_DollarName '$PART_NUM') ('\n') ('n\n') ('p\n') ($ Id.VSub_DollarName '$PART_NUM') ('\n') ($ Id.VSub_DollarName '$IMAGE_ROOTPART_START') ('\n') ('\n') ('p\n') ('w\n') ] ) ] ) ] ) ) (command.ShFunction name: set_up_loopdevs body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(kpartx)} {(-v)} {(-a)} {(${ Id.VSub_Name IMAGE_FILE_CUSTOMIZED)}) (C {(tee)} {(/tmp/kpartx-output.txt)}) ] negated: F ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LOOPPARTSID) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:1082) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(cat)} {(/tmp/kpartx-output.txt)}) (C {(head)} {(-n1)}) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/add map //' span_id:1100))} ) (C {(cut)} {(-f1)} {(-d) (SQ (Token id:Id.Lit_Chars val:' ' span_id:1111))} ) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/p1$//' span_id:1119))}) ] negated: F ) ] ) ) } spids: [1081] ) ] ) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('The loop device is ') (${ Id.VSub_Name LOOPPARTSID))}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(sync)}) (C {(sleep)} {(2)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-L)} {(/dev/mapper/) (${ Id.VSub_Name LOOPPARTSID) (p1)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:1181) ) ] action: [ (C {(echo)} { (DQ ( '###########################################################################' ) ) } ) (C {(echo)} { (DQ ( ' ' ) ) } ) (C {(echo)} { (DQ ("Couldn't find the loopdev partitions at /dev/mapper/") (${ Id.VSub_Name LOOPPARTSID) ('p1!') ) } ) (C {(echo)} { (DQ ( ' ' ) ) } ) (C {(echo)} { (DQ ( '###########################################################################' ) ) } ) (C {(bail_and_cleanup)} {(/dev/) (${ Id.VSub_Name LOOPPARTSID)} {(${ Id.VSub_Name IMAGE_FILE_CUSTOMIZED)} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1237) arg_word: {(1)} ) ] spids: [1166 1183] ) ] ) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} { (DQ ('Found the loopdev partitions at /dev/mapper/') (${ Id.VSub_Name LOOPPARTSID) ('!') ) } ) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LOOPDEVPARTS) op: assign_op.Equal rhs: {(/dev/mapper/) (${ Id.VSub_Name LOOPPARTSID)} spids: [1271] ) ] ) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('Check rootfs before resize...'))}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(e2fsck)} {(-f)} {(${ Id.VSub_Name LOOPDEVPARTS) (p2)}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('Resize rootfs...'))}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(resize2fs)} {(-p)} {(${ Id.VSub_Name LOOPDEVPARTS) (p2)}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('Check rootfs afer resize...'))}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(e2fsck)} {(-f)} {(${ Id.VSub_Name LOOPDEVPARTS) (p2)}) (C {(mount_chroot_dirs)} {(${ Id.VSub_Name LOOPDEVPARTS)} {(${ Id.VSub_Name LOOPPARTSID)}) (C {(sed)} {(-i)} {(SQ (Token id:Id.Lit_Chars val:'s/^/#CHROOT /g' span_id:1396))} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/etc/ld.so.preload)} ) (C {(cp)} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:1412) command_list: (command.CommandList children:[(C {(which)} {(qemu-arm-static)})]) ) } {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/usr/bin/)} ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_ne left: {(${ Id.VSub_Name DROP_IN)} right: {(0)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1440) ) ] action: [ (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(echo)} {(-e)} {(DQ ('Dropping you in the chroot shell.'))}) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(chroot)} {(${ Id.VSub_Name TEMP_CHROOT_DIR)} {(/bin/bash)}) ] spids: [1427 1442] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ (${ Id.VSub_Name CUSTOM_SCRIPT))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1497) ) ] action: [(C {(eval)} {(${ Id.VSub_Name CUSTOM_SCRIPT)})] spids: [1484 1499] ) ] else_action: [ (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(echo)} {(DQ ('Unpacking qt5 libraries...'))}) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (command.Pipeline children: [ (C {(pv)} {(-p)} {(-w)} {(80)} {(prebuilt/libQt5_OpenGLES2.tar.xz)}) (C {(tar)} {(-xf)} {(-)} {(-C)} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/)}) ] negated: F ) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(echo)} {(DQ ('Copy crankshaft files to root...'))}) (C {(echo)} { (DQ ( --------------------------------------------------------------------------- ) ) } ) (C {(cp)} {(-a)} {(crankshaft/.)} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/root/)}) (C {(sync)}) (C {(sleep)} {(1)}) (C {(chroot)} {(${ Id.VSub_Name TEMP_CHROOT_DIR)} {(/bin/bash)} {(/root/scripts/customize-image-pi.sh)} ) (C {(chroot)} {(${ Id.VSub_Name TEMP_CHROOT_DIR)} {(/bin/bash)} {(/root/scripts/read-only-fs.sh)} ) ] ) ] ) (C {(sed)} {(-i)} {(SQ (Token id:Id.Lit_Chars val:'s/^#CHROOT //g' span_id:1668))} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/etc/ld.so.preload)} ) (C {(umount_chroot_dirs)}) (C {(zerofree)} {(${ Id.VSub_Name LOOPDEVPARTS) (p2)}) (C {(umount_loop_dev)} {(/dev/) (${ Id.VSub_Name LOOPPARTSID)}) (C {(echo)} {(DQ ('###########################################################################'))} ) (C {(echo)} {(DQ (' '))} ) (C {(echo)} {(DQ ('If you reach here, it means the image is ready. :)'))}) (C {(echo)} {(DQ (' '))} ) (C {(echo)} {(DQ ('###########################################################################'))} ) ] ) ) (command.ShFunction name: mount_chroot_dirs body: (command.BraceGroup children: [ (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('Mounting CHROOT directories'))}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(mkdir)} {(-p)} {(${ Id.VSub_Name TEMP_CHROOT_DIR)}) (C {(mount)} {(-o)} {(rw)} {(${ Id.VSub_Number 1) (p2)} {(${ Id.VSub_Name TEMP_CHROOT_DIR)}) (C {(mount)} {(-o)} {(rw)} {(${ Id.VSub_Number 1) (p1)} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/boot)} ) (C {(mount)} {(--bind)} {(/dev)} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/dev/)}) (C {(mount)} {(--bind)} {(/sys)} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/sys/)}) (C {(mount)} {(--bind)} {(/proc)} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/proc/)}) (C {(mount)} {(--bind)} {(/dev/pts)} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/dev/pts)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name TEMP_CHROOT_DIR) (/etc/ld.so.preload)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:1877) ) ] action: [ (C {(echo)} { (DQ ( '###########################################################################' ) ) } ) (C {(echo)} { (DQ ( ' ' ) ) } ) (C {(echo)} { (DQ ("I didn't see ") (${ Id.VSub_Name TEMP_CHROOT_DIR) ('/etc/ folder. Bailing!') ) } ) (C {(echo)} { (DQ ( ' ' ) ) } ) (C {(echo)} { (DQ ( '###########################################################################' ) ) } ) (C {(umount_chroot_dirs)}) (C {(umount_loop_dev)} {($ Id.VSub_Number '$2')}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1929) arg_word: {(1)} ) ] spids: [1863 1879] ) ] ) ] ) ) (command.ShFunction name: umount_chroot_dirs body: (command.BraceGroup children: [ (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('Unmount chroot dirs...'))}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(sync)}) (C {(umount)} (word.BracedTree parts: [ (${ Id.VSub_Name TEMP_CHROOT_DIR) (/) (word_part.BracedTuple words: [{(dev/pts)} {(dev)} {(sys)} {(Id.KW_Proc proc)} {(boot)} {}] ) ] ) ) ] ) ) (command.ShFunction name: umount_loop_dev body: (command.BraceGroup children: [ (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (C {(echo)} {(DQ ('Unmount loop devices...'))}) (C {(echo)} {(DQ (---------------------------------------------------------------------------))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:loopdev) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2022) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_Number '$1')}) (C {(cut)} {(-d) (DQ (/))} {(-f3)}) ] negated: F ) ] ) ) } spids: [2021] ) ] ) (C {(dmsetup)} {(remove)} {(-f)} {($ Id.VSub_DollarName '$loopdev') (DQ (p1))}) (C {(dmsetup)} {(remove)} {(-f)} {($ Id.VSub_DollarName '$loopdev') (DQ (p2))}) (C {(kpartx)} {(-d)} {($ Id.VSub_Number '$1')}) ] ) ) (C {(check_dependencies)}) (C {(check_root)}) (C {(get_unzip_image)}) (C {(resize_raw_image)}) (C {(set_up_loopdevs)}) ] )