2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2024-12-25 12:41:45 +00:00
1 logging pre script to make debug easy
penguhyang edited this page 2016-03-09 11:22:41 +08:00

The mini-design of logging pre-script to make debug easy

Background

Currently, the Pre-Installation script for redhat sles and early_command Installation script for ubuntu can't be logging to xcat.log file. Also as a new script getinstdisk was added to determine the install disk. It's necessary to logging the detail information to make debug easy.

This mini-design support the redhat6.7 redhat7 sles11 sles12 ubuntu14 ubuntu15 and the etc...

Planning Outputs

For redhat With xcatdebugmode off, only the running result of script will be logged. With xcatdebugmode on, the running procedure and running result both will be logged.

For sles The running procedure and running result both will be logged whether xcatdebugmode on or off.

For ubuntu With xcatdebugmode off, only the running result of script will be logged. With xcatdebugmode on, the running procedure and running result both will be logged.

Code Logic and Process

For redhat When using a %pre script, we can simply log the output to a file.

%pre
{  
echo "Running Kickstart Pre-Installation script..."  
#INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/pre.rh#  
} >>/tmp/pre-install.log 2>&1  

After Anaconda chrooted to the newly-built filesystem, we can use %include to include the pre-install.log.

%post  
mkdir -p /var/log/xcat/  
{  
cat >> /var/log/xcat/xcat.log << "EOF"  
%include /tmp/pre-install.log  
EOF  
echo "Running Kickstart Post-Installation script..."  
#INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/post.rh#  
} >>/var/log/xcat/xcat.log 2>&1  

For sles When using Pre-Install Script, we can simply log the output to a file.

      <pre-scripts config:type="list">
        <script>
          <filename>foo.sh</filename>
          <interpreter>shell</interpreter>
          <source>

<![CDATA[
{
...
} >>/tmp/pre-install.log 2>&1
]]>

          </source>
        </script>
      </pre-scripts>

When execute chroot scripts before the installation chroots into the installed system, we can append the pre-install.log to xcat.log.

      <chroot-scripts config:type="list">
        <script>
          <filename>boot.sh</filename>
          <interpreter>shell</interpreter>
          <source>

<![CDATA[
mkdir -p /mnt/var/log/xcat/
{

cat /tmp/pre-install.log >> /mnt/var/log/xcat/xcat.log

echo "Running AutoYaST Chroot-Installation script..."
...
} >>/mnt/var/log/xcat/xcat.log 2>&1
]]>

          </source>
        </script>
      </chroot-scripts>

For ubuntu When using d-i preseed/early_command string ... command, we can simply log the output to a file.

d-i preseed/early_command string wget http://`cat /tmp/xcatserver`/install/autoinst/#HOSTNAME#.pre; \
     chmod u+x #HOSTNAME#.pre; \
     { \
     echo "Running preseeding early_command Installation script..."; \
     ./#HOSTNAME#.pre; \
     } >>/tmp/pre-install.log 2>&1; \

And log the getinstdisk script output.

d-i partman/early_command string \
{ \
#INCLUDE_GET_FIRST_DISK_SCRIPT#  \
} >>/tmp/pre-install.log 2>&1; \
    debconf-set partman-auto/disk "$(cat /tmp/install_disk)"

When execute d-i preseed/late_command string ... command before the install finishes, there is still a usable /target directory. We can append the pre-install.log to xcat.log.

d-i preseed/late_command string wget http://`cat /tmp/xcatserver`/install/autoinst/#HOSTNAME#.post; \
     chmod u+x #HOSTNAME#.post; \
     cp ./#HOSTNAME#.post /target/root/post.script; \
     mount -o bind /proc /target/proc -t proc; \
     mount -o bind /dev /target/dev; \
     mount -o bind /dev/pts /target/dev/pts -t devpts; \
     mount -o bind /sys /target/sys; \
     mkdir -p /target/var/log/xcat/; \
     { \
     cat /tmp/pre-install.log >> /target/var/log/xcat/xcat.log; \
     echo "Running preseeding late_command Installation script..."; \
     chroot /target /root/post.script; \
     } >>/target/var/log/xcat/xcat.log 2>&1; \