Skip to content

zxcvos/system-automation-scripts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 

Repository files navigation

A collection of scripts to automate system management tasks

update-kernel.sh

  • Description: Update Linux kernel to the latest version

  • System Required: CentOS 6+, Debian10+, Ubuntu16+

  • Usage

    • online

      bash <(wget -qO- https://raw.githubusercontent.com/zxcvos/system-automation-scripts/main/update-kernel.sh)
      
    • download

      wget -O update-kernel.sh https://raw.githubusercontent.com/zxcvos/system-automation-scripts/main/update-kernel.sh
      bash update-kernel.sh
      
    • base64

      echo "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgRGVzY3JpcHRpb246ICAgICAgVXBkYXRlIExpbnV4IGtlcm5lbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24KIyBTeXN0ZW0gUmVxdWlyZWQ6ICBDZW50T1MgNissIERlYmlhbjEwKywgVWJ1bnR1MTYrCiMKIyBDb3B5cmlnaHQgKEMpIDIwMjMgenhjdm9zCiMgVGhhbmtzOiBUZWRkeXN1biA8aUB0ZWRkeXN1bi5jb20+CiMgT3JpZ2luYWw6IGh0dHBzOi8vdGVkZHlzdW4uY29tLzQ4OS5odG1sCiMgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20venhjdm9zL3N5c3RlbS1hdXRvbWF0aW9uLXNjcmlwdHMvYmxvYi9tYWluL3VwZGF0ZS1rZXJuZWwuc2gKCnRyYXAgJ3JtIC1yZiAiJHtUTVBGSUxFfSInIEVYSVQKVE1QRklMRT0kKG1rdGVtcCAtZCAtcCAke0hPTUV9IC10IHVwZGF0ZV9rZXJuZWwuWFhYWFhYWCkgfHwgZXhpdCAxCgpjdXJfZGlyPSIkKGNkIC1QIC0tICIkKGRpcm5hbWUgLS0gIiQwIikiICYmIHB3ZCAtUCkiClJFRD0nXDAzM1sxOzMxOzMxbScKR1JFRU49J1wwMzNbMTszMTszMm0nCllFTExPVz0nXDAzM1sxOzMxOzMzbScKTkM9J1wwMzNbMG0nCgpmdW5jdGlvbiBfaW5mbygpIHsKICAgIHByaW50ZiAiJHtHUkVFTn1bSW5mb10gJHtOQ30iCiAgICBwcmludGYgLS0gIiVzIiAiJDEiCiAgICBwcmludGYgIlxuIgp9CgpmdW5jdGlvbiBfd2FybigpIHsKICAgIHByaW50ZiAiJHtZRUxMT1d9W1dhcm5pbmddICR7TkN9IgogICAgcHJpbnRmIC0tICIlcyIgIiQxIgogICAgcHJpbnRmICJcbiIKfQoKZnVuY3Rpb24gX2Vycm9yKCkgewogICAgcHJpbnRmICIke1JFRH1bRXJyb3JdICR7TkN9IgogICAgcHJpbnRmIC0tICIlcyIgIiQxIgogICAgcHJpbnRmICJcbiIKICAgIGV4aXQgMQp9CgpmdW5jdGlvbiBfZXhpc3RzKCkgewogICAgbG9jYWwgY21kPSIkMSIKICAgIGlmIGV2YWwgdHlwZSB0eXBlID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICBldmFsIHR5cGUgIiRjbWQiID4gL2Rldi9udWxsIDI+JjEKICAgIGVsaWYgY29tbWFuZCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgICAgY29tbWFuZCAtdiAiJGNtZCIgPiAvZGV2L251bGwgMj4mMQogICAgZWxzZQogICAgICAgIHdoaWNoICIkY21kIiA+IC9kZXYvbnVsbCAyPiYxCiAgICBmaQogICAgbG9jYWwgcnQ9JD8KICAgIHJldHVybiAke3J0fQp9CgpmdW5jdGlvbiBfb3MoKSB7CiAgICBsb2NhbCBvcz0iIgogICAgWyAtZiAiL2V0Yy9kZWJpYW5fdmVyc2lvbiIgXSAmJiBzb3VyY2UgL2V0Yy9vcy1yZWxlYXNlICYmIG9zPSIke0lEfSIgJiYgcHJpbnRmIC0tICIlcyIgIiR7b3N9IiAmJiByZXR1cm4KICAgIFsgLWYgIi9ldGMvcmVkaGF0LXJlbGVhc2UiIF0gJiYgb3M9ImNlbnRvcyIgJiYgcHJpbnRmIC0tICIlcyIgIiR7b3N9IiAmJiByZXR1cm4KfQoKZnVuY3Rpb24gX29zX2Z1bGwoKSB7CiAgICBbIC1mIC9ldGMvcmVkaGF0LXJlbGVhc2UgXSAmJiBhd2sgJ3twcmludCAoJDEsJDN+L15bMC05XS8/JDM6JDQpfScgL2V0Yy9yZWRoYXQtcmVsZWFzZSAmJiByZXR1cm4KICAgIFsgLWYgL2V0Yy9vcy1yZWxlYXNlIF0gJiYgYXdrIC1GJ1s9ICJdJyAnL1BSRVRUWV9OQU1FL3twcmludCAkMywkNCwkNX0nIC9ldGMvb3MtcmVsZWFzZSAmJiByZXR1cm4KICAgIFsgLWYgL2V0Yy9sc2ItcmVsZWFzZSBdICYmIGF3ayAtRidbPSJdKycgJy9ERVNDUklQVElPTi97cHJpbnQgJDJ9JyAvZXRjL2xzYi1yZWxlYXNlICYmIHJldHVybgp9CgpmdW5jdGlvbiBfb3NfdmVyKCkgewogICAgbG9jYWwgbWFpbl92ZXI9IiQoIGVjaG8gJChfb3NfZnVsbCkgfCBncmVwIC1vRSAiWzAtOS5dKyIpIgogICAgcHJpbnRmIC0tICIlcyIgIiR7bWFpbl92ZXIlJS4qfSIKfQoKZnVuY3Rpb24gX2Vycm9yX2RldGVjdCgpIHsKICAgIGxvY2FsIGNtZD0iJDEiCiAgICBfaW5mbyAiJHtjbWR9IgogICAgZXZhbCAke2NtZH0KICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgogICAgICAgIFtbICJkZWJpYW4iID09ICIkKF9vcykiIHx8ICJ1YnVudHUiID09ICIkKF9vcykiIF1dICYmIGFwdC1nZXQgaW5zdGFsbCAteSAtZgogICAgICAgIF9lcnJvciAiRXhlY3V0aW9uIGNvbW1hbmQgKCR7Y21kfSkgZmFpbGVkLCBwbGVhc2UgY2hlY2sgaXQgYW5kIHRyeSBhZ2Fpbi4iCiAgICBmaQp9CgpmdW5jdGlvbiBfaXNfNjRiaXQoKSB7CiAgICBpZiBbICQoZ2V0Y29uZiBXT1JEX0JJVCkgPSAnMzInIF0gJiYgWyAkKGdldGNvbmYgTE9OR19CSVQpID0gJzY0JyBdOyB0aGVuCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICByZXR1cm4gMQogICAgZmkKfQoKZnVuY3Rpb24gX3ZlcnNpb25fZ2UoKSB7CiAgICB0ZXN0ICIkKGVjaG8gIiRAIiB8IHRyICIgIiAiXG4iIHwgc29ydCAtclYgfCBoZWFkIC1uIDEpIiA9PSAiJDEiCn0KCmZ1bmN0aW9uIGluc3RhbGxfZGVwZW5kZW5jZSgpIHsKICAgIGNhc2UgIiQoX29zKSIgaW4KICAgICAgICBjZW50b3MpCiAgICAgICAgICAgIGNhc2UgIiQoX29zX3ZlcikiIGluCiAgICAgICAgICAgICAgICA2fDcpCiAgICAgICAgICAgICAgICAgICAgaWYgW1sgNiA9PSAiJChfb3NfdmVyKSIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgbWFpbl92ZXI9IiQoIGVjaG8gJChfb3NfZnVsbCkgfCBncmVwIC1vRSAgIlswLTkuXSsiKSIKICAgICAgICAgICAgICAgICAgICAgICAgY3AgL2V0Yy95dW0ucmVwb3MuZC9DZW50T1MtQmFzZS5yZXBvIC9ldGMveXVtLnJlcG9zLmQvQ2VudE9TLUJhc2UucmVwby5iYWsKICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1pICdzL15taXJyb3JsaXN0LyMmL2c7IHMvXiNiYXNldXJsL2Jhc2V1cmwvZycgL2V0Yy95dW0ucmVwb3MuZC9DZW50T1MtQmFzZS5yZXBvCiAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtaSAic3xtaXJyb3IuY2VudG9zLm9yZy9jZW50b3MvXCRyZWxlYXNldmVyfHZhdWx0LmNlbnRvcy5vcmcvJG1haW5fdmVyfGciIC9ldGMveXVtLnJlcG9zLmQvQ2VudE9TLUJhc2UucmVwbwogICAgICAgICAgICAgICAgICAgICAgICB5dW0gY2xlYW4gYWxsCiAgICAgICAgICAgICAgICAgICAgICAgIHl1bSByZXBvbGlzdAogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgeXVtIHVwZGF0ZSAteQogICAgICAgICAgICAgICAgICAgIF9lcnJvcl9kZXRlY3QgInl1bSBpbnN0YWxsIC15IGNhLWNlcnRpZmljYXRlcyB5dW0tdXRpbHMgcHJvY3BzLW5nIgogICAgICAgICAgICAgICAgICAgIGlmICEgX2V4aXN0cyAiY3VybCI7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAieXVtIGluc3RhbGwgLXkgY3VybCIKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIGlmICEgX2V4aXN0cyAid2dldCI7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAieXVtIGluc3RhbGwgLXkgd2dldCIKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIGlmICEgX2V4aXN0cyAicGVybCI7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAieXVtIGluc3RhbGwgLXkgcGVybCIKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICA4fDkpCiAgICAgICAgICAgICAgICAgICAgZG5mIHVwZGF0ZSAteQogICAgICAgICAgICAgICAgICAgIF9lcnJvcl9kZXRlY3QgImRuZiBpbnN0YWxsIC15IGNhLWNlcnRpZmljYXRlcyBwcm9jcHMtbmciCiAgICAgICAgICAgICAgICAgICAgaWYgISBfZXhpc3RzICJjdXJsIjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJkbmYgaW5zdGFsbCAteSBjdXJsIgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgaWYgISBfZXhpc3RzICJ3Z2V0IjsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJkbmYgaW5zdGFsbCAteSB3Z2V0IgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgOzsgIyBkbyBub3RoaW5nCiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgOzsKICAgICAgICB1YnVudHV8ZGViaWFuKQogICAgICAgICAgICBhcHQtZ2V0IHVwZGF0ZSAteQogICAgICAgICAgICBhcHQtZ2V0IGluc3RhbGwgLXkgLWYKICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAiYXB0LWdldCBpbnN0YWxsIC0tbm8taW5zdGFsbC1yZWNvbW1lbmRzIC15IGxpbnV4LWJhc2UgaW5pdHJhbWZzLXRvb2xzIGNhLWNlcnRpZmljYXRlcyBwcm9jcHMiCiAgICAgICAgICAgIGlmICEgX2V4aXN0cyAid2dldCI7IHRoZW4KICAgICAgICAgICAgICAgIF9lcnJvcl9kZXRlY3QgImFwdC1nZXQgaW5zdGFsbCAtLW5vLWluc3RhbGwtcmVjb21tZW5kcyAteSB3Z2V0IgogICAgICAgICAgICBmaQogICAgICAgICAgICBpZiAhIF9leGlzdHMgImN1cmwiOyB0aGVuCiAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJhcHQtZ2V0IGluc3RhbGwgLS1uby1pbnN0YWxsLXJlY29tbWVuZHMgLXkgY3VybCIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgaWYgW1sgImRlYmlhbiIgPT0gIiQoX29zKSIgfHwgKCJ1YnVudHUiID09ICIkKF9vcykiICYmIDE2ID09ICIkKF9vc192ZXIpIikgXV07IHRoZW4KICAgICAgICAgICAgICAgIGlmICEgX2V4aXN0cyAiYXIiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAiYXB0LWdldCBpbnN0YWxsIC0tbm8taW5zdGFsbC1yZWNvbW1lbmRzIC15IGJpbnV0aWxzIgogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGlmICEgX2V4aXN0cyAienN0ZCI7IHRoZW4KICAgICAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJhcHQtZ2V0IGluc3RhbGwgLS1uby1pbnN0YWxsLXJlY29tbWVuZHMgLXkgenN0ZCIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBpZiAhIF9leGlzdHMgInh6IjsgdGhlbgogICAgICAgICAgICAgICAgICAgIF9lcnJvcl9kZXRlY3QgImFwdC1nZXQgaW5zdGFsbCAtLW5vLWluc3RhbGwtcmVjb21tZW5kcyAteSB4ei11dGlscyIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIDs7CiAgICBlc2FjCn0KCmZ1bmN0aW9uIGRwa2dfcmVwYWNrZWQoKSB7CiAgICBERUJfUEFDS0FHRT0iJHsxfSIKICAgIGNwIC1hICR7REVCX1BBQ0tBR0V9ICR7VE1QRklMRX0vJHtERUJfUEFDS0FHRX0KICAgIF9lcnJvcl9kZXRlY3QgImNkICR7VE1QRklMRX0iCiAgICBfZXJyb3JfZGV0ZWN0ICJhciB4ICR7REVCX1BBQ0tBR0V9IgogICAgaWYgW1sgLXMgY29udHJvbC50YXIuenN0ICYmIC1zIGRhdGEudGFyLnpzdCBdXTsgdGhlbgogICAgICAgIF9lcnJvcl9kZXRlY3QgInJtIC1yZiAke0RFQl9QQUNLQUdFfSIKICAgICAgICBfZXJyb3JfZGV0ZWN0ICJ6c3RkIC1kIDwgY29udHJvbC50YXIuenN0IHwgeHogPiBjb250cm9sLnRhci54eiIKICAgICAgICBfZXJyb3JfZGV0ZWN0ICJ6c3RkIC1kIDwgZGF0YS50YXIuenN0IHwgeHogPiBkYXRhLnRhci54eiIKICAgICAgICBfZXJyb3JfZGV0ZWN0ICJhciAtbSAtYyAtYSBzZHNkICR7REVCX1BBQ0tBR0V9IGRlYmlhbi1iaW5hcnkgY29udHJvbC50YXIueHogZGF0YS50YXIueHoiCiAgICAgICAgX2Vycm9yX2RldGVjdCAicm0gLXJmIGRlYmlhbi1iaW5hcnkgY29udHJvbC50YXIueHogZGF0YS50YXIueHogY29udHJvbC50YXIuenN0IGRhdGEudGFyLnpzdCIKICAgIGZpCiAgICBfZXJyb3JfZGV0ZWN0ICJjZCAtIgogICAgbXYgLWYgIiR7VE1QRklMRX0vJHtERUJfUEFDS0FHRX0iICR7REVCX1BBQ0tBR0V9CiAgICBybSAtcmYgIiR7VE1QRklMRX0vKiIKfQoKZnVuY3Rpb24gZ2V0X3JwbV9sYXRlc3RfdmVyc2lvbigpIHsKICAgIGxvY2FsIG9zX3Zlcj0iJChfb3NfdmVyKSIKICAgIF9lcnJvcl9kZXRlY3QgInJwbSAtLWltcG9ydCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZWxyZXBvL3BhY2thZ2VzL21hc3Rlci9lbHJlcG8tcmVsZWFzZS9lbCR7b3NfdmVyfS9SUE0tR1BHLUtFWS1lbHJlcG8ub3JnIgogICAgY2FzZSAke29zX3Zlcn0gaW4KICAgICAgICA2KQogICAgICAgICAgICBycG1fa2VybmVsX3VybD0iaHR0cHM6Ly9kbC5sYW1wLnNoL2ZpbGVzLyIKICAgICAgICAgICAgcnBtX2tlcm5lbF92ZXJzaW9uPSI0LjE4LjIwIgogICAgICAgICAgICBpZiBfaXNfNjRiaXQ7IHRoZW4KICAgICAgICAgICAgICAgIHJwbV9rZXJuZWxfbmFtZT0ia2VybmVsLW1sLTQuMTguMjAtMS5lbDYuZWxyZXBvLng4Nl82NC5ycG0iCiAgICAgICAgICAgICAgICBycG1fa2VybmVsX2RldmVsX25hbWU9Imtlcm5lbC1tbC1kZXZlbC00LjE4LjIwLTEuZWw2LmVscmVwby54ODZfNjQucnBtIgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBycG1fa2VybmVsX25hbWU9Imtlcm5lbC1tbC00LjE4LjIwLTEuZWw2LmVscmVwby5pNjg2LnJwbSIKICAgICAgICAgICAgICAgIHJwbV9rZXJuZWxfZGV2ZWxfbmFtZT0ia2VybmVsLW1sLWRldmVsLTQuMTguMjAtMS5lbDYuZWxyZXBvLmk2ODYucnBtIgogICAgICAgICAgICBmaQogICAgICAgICAgICA7OwogICAgICAgIDd8OHw5KQogICAgICAgICAgICBycG1fa2VybmVsX3VybD0iaHR0cHM6Ly9kbC5sYW1wLnNoL2tlcm5lbC9lbCR7b3NfdmVyfS8iCiAgICAgICAgICAgIGlmIF9pc182NGJpdDsgdGhlbgogICAgICAgICAgICAgICAgcnBtX2xpc3Q9JCh3Z2V0IC1xTy0gJHtycG1fa2VybmVsX3VybH0pCiAgICAgICAgICAgICAgICBycG1fa2VybmVsX3ZlcnNpb249JChlY2hvICR7cnBtX2xpc3R9IHwgZ3JlcCAtRW9pICJrZXJuZWwtbWwtWzUtOV0rXC5bMC05XStcLlswLTldKy0xXC5lbCR7b3NfdmVyfVwuKGVscmVwb1wuKT94ODZfNjQucnBtIiB8IGN1dCAtZC0gLWYzIHwgZ3JlcCAtdiAtIHwgc29ydCAtViB8IHRhaWwgLW4gMSkKICAgICAgICAgICAgICAgIHJwbV9rZXJuZWxfbmFtZT0kKGVjaG8gJHtycG1fbGlzdH0gfCBncmVwIC1Fb2kgImtlcm5lbC1tbC1bNS05XStcLlswLTldK1wuWzAtOV0rLTFcLmVsJHtvc192ZXJ9XC4oZWxyZXBvXC4pP3g4Nl82NC5ycG0iIHwgc29ydCAtViB8IHVuaXEgfCB0YWlsIC1uIDEpCiAgICAgICAgICAgICAgICBycG1fa2VybmVsX2RldmVsX25hbWU9JChlY2hvICR7cnBtX2xpc3R9IHwgZ3JlcCAtRW9pICJrZXJuZWwtbWwtZGV2ZWwtWzUtOV0rXC5bMC05XStcLlswLTldKy0xXC5lbCR7b3NfdmVyfVwuKGVscmVwb1wuKT94ODZfNjQucnBtIiB8IHNvcnQgLVYgfCB1bmlxIHwgdGFpbCAtbiAxKQogICAgICAgICAgICAgICAgcnBtX2tlcm5lbF9oZWFkZXJzX25hbWU9JChlY2hvICR7cnBtX2xpc3R9IHwgZ3JlcCAtRW9pICJrZXJuZWwtbWwtaGVhZGVycy1bNS05XStcLlswLTldK1wuWzAtOV0rLTFcLmVsJHtvc192ZXJ9XC4oZWxyZXBvXC4pP3g4Nl82NC5ycG0iIHwgc29ydCAtViB8IHVuaXEgfCB0YWlsIC1uIDEpCiAgICAgICAgICAgICAgICBpZiBbWyAke29zX3Zlcn0gLWdlIDggXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICBycG1fa2VybmVsX2NvcmVfbmFtZT0kKGVjaG8gJHtycG1fbGlzdH0gfCBncmVwIC1Fb2kgImtlcm5lbC1tbC1jb3JlLVs1LTldK1wuWzAtOV0rXC5bMC05XSstMVwuZWwke29zX3Zlcn1cLihlbHJlcG9cLik/eDg2XzY0LnJwbSIgfCBzb3J0IC1WIHwgdW5pcSB8IHRhaWwgLW4gMSkKICAgICAgICAgICAgICAgICAgICBycG1fa2VybmVsX21vZHVsZXNfbmFtZT0kKGVjaG8gJHtycG1fbGlzdH0gfCBncmVwIC1Fb2kgImtlcm5lbC1tbC1tb2R1bGVzLVs1LTldK1wuWzAtOV0rXC5bMC05XSstMVwuZWwke29zX3Zlcn1cLihlbHJlcG9cLik/eDg2XzY0LnJwbSIgfCBzb3J0IC1WIHwgdW5pcSB8IHRhaWwgLW4gMSkKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9lcnJvciAiTm90IHN1cHBvcnRlZCBhcmNoaXRlY3R1cmUsIHBsZWFzZSBjaGFuZ2UgdG8gNjQtYml0IGFyY2hpdGVjdHVyZS4iCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgOzsgIyBkbyBub3RoaW5nCiAgICBlc2FjCn0KCmZ1bmN0aW9uIGdldF9kZWJfbGF0ZXN0X3ZlcnNpb24oKSB7CiAgICBpZiBfaXNfNjRiaXQ7IHRoZW4KICAgICAgICBkZWJfa2VybmVsX3ZlcnNpb249JCh3Z2V0IC1xTy0gaHR0cHM6Ly9rZXJuZWwudWJ1bnR1LmNvbS9+a2VybmVsLXBwYS9tYWlubGluZS8gfCBhd2sgLUYnXCJ2JyAnL3ZbNC05XS4ve3ByaW50ICQyfScgfCBjdXQgLWQvIC1mMSB8IGdyZXAgLXYgLSB8IHNvcnQgLVYgfCB0YWlsIC1uIDEpCiAgICAgICAgW1sgLXogJHtkZWJfa2VybmVsX3ZlcnNpb259IF1dICYmIF9lcnJvciAiR2V0IGxhdGVzdCBrZXJuZWwgdmVyc2lvbiBmYWlsZWQuIgogICAgICAgIGRlYl9uYW1lPSQod2dldCAtcU8tIGh0dHBzOi8va2VybmVsLnVidW50dS5jb20vfmtlcm5lbC1wcGEvbWFpbmxpbmUvdiR7ZGViX2tlcm5lbF92ZXJzaW9ufS8gfCBncmVwICJsaW51eC1pbWFnZSIgfCBncmVwICJnZW5lcmljIiB8IGF3ayAtRidcIj4nICcvYW1kNjQuZGViL3twcmludCAkMn0nIHwgY3V0IC1kJzwnIC1mMSB8IGhlYWQgLTEpCiAgICAgICAgZGViX2tlcm5lbF91cmw9Imh0dHBzOi8va2VybmVsLnVidW50dS5jb20vfmtlcm5lbC1wcGEvbWFpbmxpbmUvdiR7ZGViX2tlcm5lbF92ZXJzaW9ufS8ke2RlYl9uYW1lfSIKICAgICAgICBkZWJfa2VybmVsX25hbWU9ImxpbnV4LWltYWdlLSR7ZGViX2tlcm5lbF92ZXJzaW9ufS1hbWQ2NC5kZWIiCiAgICAgICAgbW9kdWxlc19kZWJfbmFtZT0kKHdnZXQgLXFPLSBodHRwczovL2tlcm5lbC51YnVudHUuY29tL35rZXJuZWwtcHBhL21haW5saW5lL3Yke2RlYl9rZXJuZWxfdmVyc2lvbn0vIHwgZ3JlcCAibGludXgtbW9kdWxlcyIgfCBncmVwICJnZW5lcmljIiB8IGF3ayAtRidcIj4nICcvYW1kNjQuZGViL3twcmludCAkMn0nIHwgY3V0IC1kJzwnIC1mMSB8IGhlYWQgLTEpCiAgICAgICAgZGViX2tlcm5lbF9tb2R1bGVzX3VybD0iaHR0cHM6Ly9rZXJuZWwudWJ1bnR1LmNvbS9+a2VybmVsLXBwYS9tYWlubGluZS92JHtkZWJfa2VybmVsX3ZlcnNpb259LyR7bW9kdWxlc19kZWJfbmFtZX0iCiAgICAgICAgZGViX2tlcm5lbF9tb2R1bGVzX25hbWU9ImxpbnV4LW1vZHVsZXMtJHtkZWJfa2VybmVsX3ZlcnNpb259LWFtZDY0LmRlYiIKICAgICAgICBoZWFkZXJzX2RlYl9uYW1lPSQod2dldCAtcU8tIGh0dHBzOi8va2VybmVsLnVidW50dS5jb20vfmtlcm5lbC1wcGEvbWFpbmxpbmUvdiR7ZGViX2tlcm5lbF92ZXJzaW9ufS8gfCBncmVwICJsaW51eC1oZWFkZXJzIiB8IGdyZXAgImdlbmVyaWMiIHwgYXdrIC1GJ1wiPicgJy9hbWQ2NC5kZWIve3ByaW50ICQyfScgfCBjdXQgLWQnPCcgLWYxIHwgaGVhZCAtMSkKICAgICAgICBkZWJfa2VybmVsX2hlYWRlcnNfdXJsPSJodHRwczovL2tlcm5lbC51YnVudHUuY29tL35rZXJuZWwtcHBhL21haW5saW5lL3Yke2RlYl9rZXJuZWxfdmVyc2lvbn0vJHtoZWFkZXJzX2RlYl9uYW1lfSIKICAgICAgICBkZWJfa2VybmVsX2hlYWRlcnNfbmFtZT0ibGludXgtaGVhZGVycy0ke2RlYl9rZXJuZWxfdmVyc2lvbn0tYW1kNjQuZGViIgogICAgZWxzZQogICAgICAgIGRlYl9rZXJuZWxfdmVyc2lvbj0iNS4zIgogICAgICAgIGRlYl9uYW1lPSQod2dldCAtcU8tIGh0dHBzOi8va2VybmVsLnVidW50dS5jb20vfmtlcm5lbC1wcGEvbWFpbmxpbmUvdiR7ZGViX2tlcm5lbF92ZXJzaW9ufS8gfCBncmVwICJsaW51eC1pbWFnZSIgfCBncmVwICJnZW5lcmljIiB8IGF3ayAtRidcIj4nICcvaTM4Ni5kZWIve3ByaW50ICQyfScgfCBjdXQgLWQnPCcgLWYxIHwgaGVhZCAtMSkKICAgICAgICBkZWJfa2VybmVsX3VybD0iaHR0cHM6Ly9rZXJuZWwudWJ1bnR1LmNvbS9+a2VybmVsLXBwYS9tYWlubGluZS92JHtkZWJfa2VybmVsX3ZlcnNpb259LyR7ZGViX25hbWV9IgogICAgICAgIGRlYl9rZXJuZWxfbmFtZT0ibGludXgtaW1hZ2UtJHtkZWJfa2VybmVsX3ZlcnNpb259LWkzODYuZGViIgogICAgICAgIG1vZHVsZXNfZGViX25hbWU9JCh3Z2V0IC1xTy0gaHR0cHM6Ly9rZXJuZWwudWJ1bnR1LmNvbS9+a2VybmVsLXBwYS9tYWlubGluZS92JHtkZWJfa2VybmVsX3ZlcnNpb259LyB8IGdyZXAgImxpbnV4LW1vZHVsZXMiIHwgZ3JlcCAiZ2VuZXJpYyIgfCBhd2sgLUYnXCI+JyAnL2kzODYuZGViL3twcmludCAkMn0nIHwgY3V0IC1kJzwnIC1mMSB8IGhlYWQgLTEpCiAgICAgICAgZGViX2tlcm5lbF9tb2R1bGVzX3VybD0iaHR0cHM6Ly9rZXJuZWwudWJ1bnR1LmNvbS9+a2VybmVsLXBwYS9tYWlubGluZS92JHtkZWJfa2VybmVsX3ZlcnNpb259LyR7bW9kdWxlc19kZWJfbmFtZX0iCiAgICAgICAgZGViX2tlcm5lbF9tb2R1bGVzX25hbWU9ImxpbnV4LW1vZHVsZXMtJHtkZWJfa2VybmVsX3ZlcnNpb259LWkzODYuZGViIgogICAgICAgIGhlYWRlcnNfZGViX25hbWU9JCh3Z2V0IC1xTy0gaHR0cHM6Ly9rZXJuZWwudWJ1bnR1LmNvbS9+a2VybmVsLXBwYS9tYWlubGluZS92JHtkZWJfa2VybmVsX3ZlcnNpb259LyB8IGdyZXAgImxpbnV4LWhlYWRlcnMiIHwgZ3JlcCAiZ2VuZXJpYyIgfCBhd2sgLUYnXCI+JyAnL2kzODYuZGViL3twcmludCAkMn0nIHwgY3V0IC1kJzwnIC1mMSB8IGhlYWQgLTEpCiAgICAgICAgZGViX2tlcm5lbF9oZWFkZXJzX3VybD0iaHR0cHM6Ly9rZXJuZWwudWJ1bnR1LmNvbS9+a2VybmVsLXBwYS9tYWlubGluZS92JHtkZWJfa2VybmVsX3ZlcnNpb259LyR7aGVhZGVyc19kZWJfbmFtZX0iCiAgICAgICAgZGViX2tlcm5lbF9oZWFkZXJzX25hbWU9ImxpbnV4LWhlYWRlcnMtJHtkZWJfa2VybmVsX3ZlcnNpb259LWkzODYuZGViIgogICAgZmkKICAgIGhlYWRlcnNfYWxsX2RlYl9uYW1lPSQod2dldCAtcU8tIGh0dHBzOi8va2VybmVsLnVidW50dS5jb20vfmtlcm5lbC1wcGEvbWFpbmxpbmUvdiR7ZGViX2tlcm5lbF92ZXJzaW9ufS8gfCBncmVwICJsaW51eC1oZWFkZXJzIiB8IGdyZXAgImFsbCIgfCBhd2sgLUYnXCI+JyAnL2FsbC5kZWIve3ByaW50ICQyfScgfCBjdXQgLWQnPCcgLWYxIHwgaGVhZCAtMSkKICAgIGRlYl9rZXJuZWxfaGVhZGVyc19hbGxfdXJsPSJodHRwczovL2tlcm5lbC51YnVudHUuY29tL35rZXJuZWwtcHBhL21haW5saW5lL3Yke2RlYl9rZXJuZWxfdmVyc2lvbn0vJHtoZWFkZXJzX2FsbF9kZWJfbmFtZX0iCiAgICBkZWJfa2VybmVsX2hlYWRlcnNfYWxsX25hbWU9ImxpbnV4LWhlYWRlcnMtJHtkZWJfa2VybmVsX3ZlcnNpb259LWFsbC5kZWIiCiAgICBbIC16ICIke2RlYl9uYW1lfSIgXSAmJiBfZXJyb3IgIkdldHRpbmcgTGludXgga2VybmVsIGJpbmFyeSBwYWNrYWdlIG5hbWUgZmFpbGVkLCBtYXliZSBrZXJuZWwgYnVpbGQgZmFpbGVkLiBQbGVhc2UgY2hvb3NlIG90aGVyIG9uZSBhbmQgdHJ5IGFnYWluLiIKfQoKZnVuY3Rpb24gZ2V0X2NoYXIoKSB7CiAgICBTQVZFRFNUVFk9YHN0dHkgLWdgCiAgICBzdHR5IC1lY2hvCiAgICBzdHR5IGNicmVhawogICAgZGQgaWY9L2Rldi90dHkgYnM9MSBjb3VudD0xIDI+IC9kZXYvbnVsbAogICAgc3R0eSAtcmF3CiAgICBzdHR5IGVjaG8KICAgIHN0dHkgJFNBVkVEU1RUWQp9CgpmdW5jdGlvbiBjaGVja19rZXJuZWxfdmVyc2lvbigpIHsKICAgIGxvY2FsIGtlcm5lbF92ZXJzaW9uPSQodW5hbWUgLXIgfCBjdXQgLWQtIC1mMSkKICAgIGxvY2FsIGxhdGVzdF9rZXJuZWxfdmVyc2lvbgogICAgY2FzZSAiJChfb3MpIiBpbgogICAgICAgIGNlbnRvcykKICAgICAgICAgICAgZ2V0X3JwbV9sYXRlc3RfdmVyc2lvbgogICAgICAgICAgICBsYXRlc3Rfa2VybmVsX3ZlcnNpb249IiR7cnBtX2tlcm5lbF92ZXJzaW9ufSIKICAgICAgICAgICAgOzsKICAgICAgICB1YnVudHV8ZGViaWFuKQogICAgICAgICAgICBnZXRfZGViX2xhdGVzdF92ZXJzaW9uCiAgICAgICAgICAgIGxhdGVzdF9rZXJuZWxfdmVyc2lvbj0iJHtkZWJfa2VybmVsX3ZlcnNpb259IgogICAgICAgICAgICA7OwogICAgZXNhYwogICAgaWYgX3ZlcnNpb25fZ2UgJHtrZXJuZWxfdmVyc2lvbn0gJHtsYXRlc3Rfa2VybmVsX3ZlcnNpb259OyB0aGVuCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICByZXR1cm4gMQogICAgZmkKfQoKIyBDaGVjayBPUyB2ZXJzaW9uCmZ1bmN0aW9uIGNoZWNrX29zKCkgewogICAgaWYgX2V4aXN0cyAidmlydC13aGF0IjsgdGhlbgogICAgICAgIHZpcnQ9IiQodmlydC13aGF0KSIKICAgIGVsaWYgX2V4aXN0cyAic3lzdGVtZC1kZXRlY3QtdmlydCI7IHRoZW4KICAgICAgICB2aXJ0PSIkKHN5c3RlbWQtZGV0ZWN0LXZpcnQpIgogICAgZmkKICAgIGlmIFsgLW4gIiR7dmlydH0iIC1hICIke3ZpcnR9IiA9ICJseGMiIF07IHRoZW4KICAgICAgICBfZXJyb3IgIlZpcnR1YWxpemF0aW9uIG1ldGhvZCBpcyBMWEMsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIgogICAgZmkKICAgIGlmIFsgLW4gIiR7dmlydH0iIC1hICIke3ZpcnR9IiA9ICJvcGVudnoiIF0gfHwgWyAtZCAiL3Byb2MvdnoiIF07IHRoZW4KICAgICAgICBfZXJyb3IgIlZpcnR1YWxpemF0aW9uIG1ldGhvZCBpcyBPcGVuVlosIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIgogICAgZmkKICAgIFsgLXogIiQoX29zKSIgXSAmJiBfZXJyb3IgIk5vdCBzdXBwb3J0ZWQgT1MiCiAgICBjYXNlICIkKF9vcykiIGluCiAgICAgICAgdWJ1bnR1KQogICAgICAgICAgICBbIC1uICIkKF9vc192ZXIpIiAtYSAiJChfb3NfdmVyKSIgLWx0IDE2IF0gJiYgX2Vycm9yICJOb3Qgc3VwcG9ydGVkIE9TLCBwbGVhc2UgY2hhbmdlIHRvIFVidW50dSAxNisgYW5kIHRyeSBhZ2Fpbi4iCiAgICAgICAgICAgIDs7CiAgICAgICAgZGViaWFuKQogICAgICAgICAgICBbIC1uICIkKF9vc192ZXIpIiAtYSAiJChfb3NfdmVyKSIgLWx0IDEwIF0gJiYgIF9lcnJvciAiTm90IHN1cHBvcnRlZCBPUywgcGxlYXNlIGNoYW5nZSB0byBEZWJpYW4gMTArIGFuZCB0cnkgYWdhaW4uIgogICAgICAgICAgICA7OwogICAgICAgIGNlbnRvcykKICAgICAgICAgICAgWyAtbiAiJChfb3NfdmVyKSIgLWEgIiQoX29zX3ZlcikiIC1sdCA2IF0gJiYgIF9lcnJvciAiTm90IHN1cHBvcnRlZCBPUywgcGxlYXNlIGNoYW5nZSB0byBDZW50T1MgNisgYW5kIHRyeSBhZ2Fpbi4iCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgX2Vycm9yICJOb3Qgc3VwcG9ydGVkIE9TIgogICAgICAgICAgICA7OwogICAgZXNhYwp9CgpmdW5jdGlvbiBzeXNjdGxfY29uZmlnKCkgewogICAgc2VkIC1pICcvbmV0LmNvcmUuZGVmYXVsdF9xZGlzYy9kJyAvZXRjL3N5c2N0bC5jb25mCiAgICBzZWQgLWkgJy9uZXQuaXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sL2QnIC9ldGMvc3lzY3RsLmNvbmYKICAgIGVjaG8gIm5ldC5jb3JlLmRlZmF1bHRfcWRpc2MgPSBmcSIgPj4gL2V0Yy9zeXNjdGwuY29uZgogICAgZWNobyAibmV0LmlwdjQudGNwX2Nvbmdlc3Rpb25fY29udHJvbCA9IGJiciIgPj4gL2V0Yy9zeXNjdGwuY29uZgogICAgc3lzY3RsIC1wID4vZGV2L251bGwgMj4mMQp9CgpmdW5jdGlvbiBpbnN0YWxsX2tlcm5lbCgpIHsKICAgIF9pbmZvICJHZXR0aW5nIGxhdGVzdCBrZXJuZWwgdmVyc2lvbi4uLiIKICAgIGNhc2UgIiQoX29zKSIgaW4KICAgICAgICBjZW50b3MpCiAgICAgICAgICAgIGlmIFsgLW4gIiQoX29zX3ZlcikiIF07IHRoZW4KICAgICAgICAgICAgICAgIGlmIFsgIiQoX29zX3ZlcikiIC1lcSA2IF07IHRoZW4KICAgICAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJ3Z2V0IC1jIC10MyAtVDYwIC1PICR7cnBtX2tlcm5lbF9uYW1lfSAke3JwbV9rZXJuZWxfdXJsfSR7cnBtX2tlcm5lbF9uYW1lfSIKICAgICAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJ3Z2V0IC1jIC10MyAtVDYwIC1PICR7cnBtX2tlcm5lbF9kZXZlbF9uYW1lfSAke3JwbV9rZXJuZWxfdXJsfSR7cnBtX2tlcm5lbF9kZXZlbF9uYW1lfSIKICAgICAgICAgICAgICAgICAgICBbIC1zICIke3JwbV9rZXJuZWxfbmFtZX0iIF0gJiYgX2Vycm9yX2RldGVjdCAicnBtIC1pdmggJHtycG1fa2VybmVsX25hbWV9IiB8fCBfZXJyb3IgIkRvd25sb2FkICR7cnBtX2tlcm5lbF9uYW1lfSBmYWlsZWQsIHBsZWFzZSBjaGVjayBpdC4iCiAgICAgICAgICAgICAgICAgICAgWyAtcyAiJHtycG1fa2VybmVsX2RldmVsX25hbWV9IiBdICYmIF9lcnJvcl9kZXRlY3QgInJwbSAtaXZoICR7cnBtX2tlcm5lbF9kZXZlbF9uYW1lfSIgfHwgX2Vycm9yICJEb3dubG9hZCAke3JwbV9rZXJuZWxfZGV2ZWxfbmFtZX0gZmFpbGVkLCBwbGVhc2UgY2hlY2sgaXQuIgogICAgICAgICAgICAgICAgICAgIHJtIC1mICR7cnBtX2tlcm5lbF9uYW1lfSAke3JwbV9rZXJuZWxfZGV2ZWxfbmFtZX0KICAgICAgICAgICAgICAgICAgICBbICEgLWYgIi9ib290L2dydWIvZ3J1Yi5jb25mIiBdICYmIF9lcnJvciAiL2Jvb3QvZ3J1Yi9ncnViLmNvbmYgbm90IGZvdW5kLCBwbGVhc2UgY2hlY2sgaXQuIgogICAgICAgICAgICAgICAgICAgIHNlZCAtaSAncy9eZGVmYXVsdD0uKi9kZWZhdWx0PTAvZycgL2Jvb3QvZ3J1Yi9ncnViLmNvbmYKICAgICAgICAgICAgICAgIGVsaWYgW1sgIiQoX29zX3ZlcikiIC1nZSA3IF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgaWYgW1sgIiQoX29zX3ZlcikiIC1nZSA4IF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIF9lcnJvcl9kZXRlY3QgIndnZXQgLWMgLXQzIC1UNjAgLU8gJHtycG1fa2VybmVsX2NvcmVfbmFtZX0gJHtycG1fa2VybmVsX3VybH0ke3JwbV9rZXJuZWxfY29yZV9uYW1lfSIKICAgICAgICAgICAgICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAid2dldCAtYyAtdDMgLVQ2MCAtTyAke3JwbV9rZXJuZWxfbW9kdWxlc19uYW1lfSAke3JwbV9rZXJuZWxfdXJsfSR7cnBtX2tlcm5lbF9tb2R1bGVzX25hbWV9IgogICAgICAgICAgICAgICAgICAgICAgICBbIC1zICIke3JwbV9rZXJuZWxfY29yZV9uYW1lfSIgXSB8fCBfZXJyb3IgIkRvd25sb2FkICR7cnBtX2tlcm5lbF9jb3JlX25hbWV9IGZhaWxlZCwgcGxlYXNlIGNoZWNrIGl0LiIKICAgICAgICAgICAgICAgICAgICAgICAgWyAtcyAiJHtycG1fa2VybmVsX21vZHVsZXNfbmFtZX0iIF0gfHwgX2Vycm9yICJEb3dubG9hZCAke3JwbV9rZXJuZWxfbW9kdWxlc19uYW1lfSBmYWlsZWQsIHBsZWFzZSBjaGVjayBpdC4iCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJ3Z2V0IC1jIC10MyAtVDYwIC1PICR7cnBtX2tlcm5lbF9uYW1lfSAke3JwbV9rZXJuZWxfdXJsfSR7cnBtX2tlcm5lbF9uYW1lfSIKICAgICAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJ3Z2V0IC1jIC10MyAtVDYwIC1PICR7cnBtX2tlcm5lbF9kZXZlbF9uYW1lfSAke3JwbV9rZXJuZWxfdXJsfSR7cnBtX2tlcm5lbF9kZXZlbF9uYW1lfSIKICAgICAgICAgICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJ3Z2V0IC1jIC10MyAtVDYwIC1PICR7cnBtX2tlcm5lbF9oZWFkZXJzX25hbWV9ICR7cnBtX2tlcm5lbF91cmx9JHtycG1fa2VybmVsX2hlYWRlcnNfbmFtZX0iCiAgICAgICAgICAgICAgICAgICAgWyAtcyAiJHtycG1fa2VybmVsX2NvcmVfbmFtZX0iIF0gJiYgX2Vycm9yX2RldGVjdCAicnBtIC1pdmggJHtycG1fa2VybmVsX2NvcmVfbmFtZX0iCiAgICAgICAgICAgICAgICAgICAgWyAtcyAiJHtycG1fa2VybmVsX21vZHVsZXNfbmFtZX0iIF0gJiYgX2Vycm9yX2RldGVjdCAicnBtIC1pdmggJHtycG1fa2VybmVsX21vZHVsZXNfbmFtZX0iCiAgICAgICAgICAgICAgICAgICAgWyAtcyAiJHtycG1fa2VybmVsX25hbWV9IiBdICYmIF9lcnJvcl9kZXRlY3QgInJwbSAtaXZoICR7cnBtX2tlcm5lbF9uYW1lfSIgfHwgX2Vycm9yICJEb3dubG9hZCAke3JwbV9rZXJuZWxfbmFtZX0gZmFpbGVkLCBwbGVhc2UgY2hlY2sgaXQuIgogICAgICAgICAgICAgICAgICAgIFsgLXMgIiR7cnBtX2tlcm5lbF9kZXZlbF9uYW1lfSIgXSAmJiBfZXJyb3JfZGV0ZWN0ICJycG0gLWl2aCAke3JwbV9rZXJuZWxfZGV2ZWxfbmFtZX0iIHx8IF9lcnJvciAiRG93bmxvYWQgJHtycG1fa2VybmVsX2RldmVsX25hbWV9IGZhaWxlZCwgcGxlYXNlIGNoZWNrIGl0LiIKICAgICAgICAgICAgICAgICAgICBbIC1zICIke3JwbV9rZXJuZWxfaGVhZGVyc19uYW1lfSIgXSAmJiBfZXJyb3JfZGV0ZWN0ICJycG0gLWl2aCAke3JwbV9rZXJuZWxfaGVhZGVyc19uYW1lfSIgfHwgX2Vycm9yICJEb3dubG9hZCAke3JwbV9rZXJuZWxfaGVhZGVyc19uYW1lfSBmYWlsZWQsIHBsZWFzZSBjaGVjayBpdC4iCiAgICAgICAgICAgICAgICAgICAgWyAtcyAiJHtycG1fa2VybmVsX2NvcmVfbmFtZX0iIF0gJiYgcm0gLWYgJHtycG1fa2VybmVsX2NvcmVfbmFtZX0KICAgICAgICAgICAgICAgICAgICBbIC1zICIke3JwbV9rZXJuZWxfbW9kdWxlc19uYW1lfSIgXSAmJiBybSAtZiAke3JwbV9rZXJuZWxfbW9kdWxlc19uYW1lfQogICAgICAgICAgICAgICAgICAgIHJtIC1mICR7cnBtX2tlcm5lbF9uYW1lfSAke3JwbV9rZXJuZWxfZGV2ZWxfbmFtZX0gJHtycG1fa2VybmVsX2hlYWRlcnNfbmFtZX0KICAgICAgICAgICAgICAgICAgICBncnViYnkgLS1zZXQtZGVmYXVsdCAkKGdydWJieSAtLWluZm89QUxMIHwgZ3JlcCAtRSBea2VybmVsLioke3JwbV9rZXJuZWxfdmVyc2lvbn0gfCBjdXQgLWQ9IC1mMikKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIDs7CiAgICAgICAgdWJ1bnR1fGRlYmlhbikKICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAid2dldCAtYyAtdDMgLVQ2MCAtTyAke2RlYl9rZXJuZWxfaGVhZGVyc19hbGxfbmFtZX0gJHtkZWJfa2VybmVsX2hlYWRlcnNfYWxsX3VybH0iCiAgICAgICAgICAgIF9lcnJvcl9kZXRlY3QgIndnZXQgLWMgLXQzIC1UNjAgLU8gJHtkZWJfa2VybmVsX2hlYWRlcnNfbmFtZX0gJHtkZWJfa2VybmVsX2hlYWRlcnNfdXJsfSIKICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAid2dldCAtYyAtdDMgLVQ2MCAtTyAke2RlYl9rZXJuZWxfbW9kdWxlc19uYW1lfSAke2RlYl9rZXJuZWxfbW9kdWxlc191cmx9IgogICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJ3Z2V0IC1jIC10MyAtVDYwIC1PICR7ZGViX2tlcm5lbF9uYW1lfSAke2RlYl9rZXJuZWxfdXJsfSIKICAgICAgICAgICAgaWYgISBkcGtnLWRlYiAtLWhlbHAgfCBncmVwIC1xdyAienN0ZCI7IHRoZW4KICAgICAgICAgICAgICAgIGRwa2dfcmVwYWNrZWQgJHtkZWJfa2VybmVsX2hlYWRlcnNfYWxsX25hbWV9CiAgICAgICAgICAgICAgICBkcGtnX3JlcGFja2VkICR7ZGViX2tlcm5lbF9oZWFkZXJzX25hbWV9CiAgICAgICAgICAgICAgICBkcGtnX3JlcGFja2VkICR7ZGViX2tlcm5lbF9tb2R1bGVzX25hbWV9CiAgICAgICAgICAgICAgICBkcGtnX3JlcGFja2VkICR7ZGViX2tlcm5lbF9uYW1lfQogICAgICAgICAgICBmaQogICAgICAgICAgICBfZXJyb3JfZGV0ZWN0ICJkcGtnIC1pICR7ZGViX2tlcm5lbF9oZWFkZXJzX2FsbF9uYW1lfSAke2RlYl9rZXJuZWxfaGVhZGVyc19uYW1lfSAke2RlYl9rZXJuZWxfbW9kdWxlc19uYW1lfSAke2RlYl9rZXJuZWxfbmFtZX0iCiAgICAgICAgICAgIHJtIC1mICR7ZGViX2tlcm5lbF9oZWFkZXJzX2FsbF9uYW1lfSAke2RlYl9rZXJuZWxfaGVhZGVyc19uYW1lfSAke2RlYl9rZXJuZWxfbW9kdWxlc19uYW1lfSAke2RlYl9rZXJuZWxfbmFtZX0KICAgICAgICAgICAgX2Vycm9yX2RldGVjdCAiL3Vzci9zYmluL3VwZGF0ZS1ncnViIgogICAgICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIDs7ICMgZG8gbm90aGluZwogICAgZXNhYwp9CgpmdW5jdGlvbiByZWJvb3Rfb3MoKSB7CiAgICBlY2hvCiAgICBfaW5mbyAiVGhlIHN5c3RlbSBuZWVkcyB0byByZWJvb3QuIgogICAgcmVhZCAtciAtcCAgIkRvIHlvdSB3YW50IHRvIHJlc3RhcnQgc3lzdGVtPyBbeS9OXSIgaXNfcmVib290CiAgICBpZiBbWyAke2lzX3JlYm9vdH0gID1+IF5bWXldJCBdXTsgdGhlbgogICAgICAgIHJlYm9vdAogICAgZWxzZQogICAgICAgIF9pbmZvICJSZWJvb3QgaGFzIGJlZW4gY2FuY2VsZWQuLi4iCiAgICAgICAgZXhpdCAwCiAgICBmaQp9CgpmdW5jdGlvbiB1cGRhdGVfa2VybmVsKCkgewogICAgY2hlY2tfb3MKICAgIGluc3RhbGxfZGVwZW5kZW5jZQogICAgaWYgY2hlY2tfa2VybmVsX3ZlcnNpb247IHRoZW4KICAgICAgICBlY2hvCiAgICAgICAgX2luZm8gIlRoZSBrZXJuZWwgdmVyc2lvbiBpcyB0aGUgbGF0ZXN0IHZlcnNpb24uLi4iCiAgICAgICAgZXhpdCAwCiAgICBmaQogICAgaW5zdGFsbF9rZXJuZWwKICAgIHN5c2N0bF9jb25maWcKICAgIHJlYm9vdF9vcwp9CgpbWyAkRVVJRCAtbmUgMCBdXSAmJiBfZXJyb3IgIlRoaXMgc2NyaXB0IG11c3QgYmUgcnVuIGFzIHJvb3QiCm9wc3k9JCggX29zX2Z1bGwgKQphcmNoPSQoIHVuYW1lIC1tICkKbGJpdD0kKCBnZXRjb25mIExPTkdfQklUICkKa2Vybj0kKCB1bmFtZSAtciApCgpjbGVhcgplY2hvICItLS0tLS0tLS0tIFN5c3RlbSBJbmZvcm1hdGlvbiAtLS0tLS0tLS0tIgplY2hvICIgT1MgICAgICA6ICRvcHN5IgplY2hvICIgQXJjaCAgICA6ICRhcmNoICgkbGJpdCBCaXQpIgplY2hvICIgS2VybmVsICA6ICRrZXJuIgplY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgplY2hvICIgU2NyaXB0IHRvIHVwZGF0ZSBMaW51eCBrZXJuZWwgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIgplY2hvCmVjaG8gIiBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS96eGN2b3Mvc3lzdGVtLWF1dG9tYXRpb24tc2NyaXB0cy9ibG9iL21haW4vdXBkYXRlLWtlcm5lbC5zaCIKZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKZWNobwplY2hvICJQcmVzcyBhbnkga2V5IHRvIHN0YXJ0Li4ub3IgUHJlc3MgQ3RybCtDIHRvIGNhbmNlbCIKY2hhcj0kKGdldF9jaGFyKQoKdXBkYXRlX2tlcm5lbCAyPiYxIHwgdGVlICR7Y3VyX2Rpcn0vdXBkYXRlX2tlcm5lbC5sb2c=" | base64 -d > update-kernel.sh
      base update-kernel.sh
      

remove-kernel.sh

  • Description: Remove extra kernels

  • System Required: CentOS, Debian, Ubuntu

  • Usage

    • online

      bash <(wget -qO- https://raw.githubusercontent.com/zxcvos/system-automation-scripts/main/remove-kernel.sh)
      
    • download

      wget -O remove-kernel.sh https://raw.githubusercontent.com/zxcvos/system-automation-scripts/main/remove-kernel.sh
      bash remove-kernel.sh
      
    • base64

      echo "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgRGVzY3JpcHRpb246ICAgICAgUmVtb3ZlIGV4dHJhIGtlcm5lbHMKIyBTeXN0ZW0gUmVxdWlyZWQ6ICBDZW50T1MsIERlYmlhbiwgVWJ1bnR1CiMKIyBDb3B5cmlnaHQgKEMpIDIwMjMgenhjdm9zCiMgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20venhjdm9zL3N5c3RlbS1hdXRvbWF0aW9uLXNjcmlwdHMvYmxvYi9tYWluL3JlbW92ZS1rZXJuZWwuc2gKCmN1cl9kaXI9IiQoY2QgLVAgLS0gIiQoZGlybmFtZSAtLSAiJDAiKSIgJiYgcHdkIC1QKSIKUkVEPSdcMDMzWzE7MzE7MzFtJwpHUkVFTj0nXDAzM1sxOzMxOzMybScKWUVMTE9XPSdcMDMzWzE7MzE7MzNtJwpOQz0nXDAzM1swbScKCmZ1bmN0aW9uIF9pbmZvKCkgewogICAgcHJpbnRmICIke0dSRUVOfVtJbmZvXSAke05DfSIKICAgIHByaW50ZiAtLSAiJXMiICIkMSIKICAgIHByaW50ZiAiXG4iCn0KCmZ1bmN0aW9uIF93YXJuKCkgewogICAgcHJpbnRmICIke1lFTExPV31bV2FybmluZ10gJHtOQ30iCiAgICBwcmludGYgLS0gIiVzIiAiJDEiCiAgICBwcmludGYgIlxuIgp9CgpmdW5jdGlvbiBfZXJyb3IoKSB7CiAgICBwcmludGYgIiR7UkVEfVtFcnJvcl0gJHtOQ30iCiAgICBwcmludGYgLS0gIiVzIiAiJDEiCiAgICBwcmludGYgIlxuIgogICAgZXhpdCAxCn0KCmZ1bmN0aW9uIF9leGlzdHMoKSB7CiAgICBsb2NhbCBjbWQ9IiQxIgogICAgaWYgZXZhbCB0eXBlIHR5cGUgPiAvZGV2L251bGwgMj4mMTsgdGhlbgogICAgICAgIGV2YWwgdHlwZSAiJGNtZCIgPiAvZGV2L251bGwgMj4mMQogICAgZWxpZiBjb21tYW5kID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICBjb21tYW5kIC12ICIkY21kIiA+IC9kZXYvbnVsbCAyPiYxCiAgICBlbHNlCiAgICAgICAgd2hpY2ggIiRjbWQiID4gL2Rldi9udWxsIDI+JjEKICAgIGZpCiAgICBsb2NhbCBydD0kPwogICAgcmV0dXJuICR7cnR9Cn0KCmZ1bmN0aW9uIF9vcygpIHsKICAgIGxvY2FsIG9zPSIiCiAgICBbIC1mICIvZXRjL2RlYmlhbl92ZXJzaW9uIiBdICYmIHNvdXJjZSAvZXRjL29zLXJlbGVhc2UgJiYgb3M9IiR7SUR9IiAmJiBwcmludGYgLS0gIiVzIiAiJHtvc30iICYmIHJldHVybgogICAgWyAtZiAiL2V0Yy9yZWRoYXQtcmVsZWFzZSIgXSAmJiBvcz0iY2VudG9zIiAmJiBwcmludGYgLS0gIiVzIiAiJHtvc30iICYmIHJldHVybgp9CgpmdW5jdGlvbiBfb3NfZnVsbCgpIHsKICAgIFsgLWYgL2V0Yy9yZWRoYXQtcmVsZWFzZSBdICYmIGF3ayAne3ByaW50ICgkMSwkM34vXlswLTldLz8kMzokNCl9JyAvZXRjL3JlZGhhdC1yZWxlYXNlICYmIHJldHVybgogICAgWyAtZiAvZXRjL29zLXJlbGVhc2UgXSAmJiBhd2sgLUYnWz0gIl0nICcvUFJFVFRZX05BTUUve3ByaW50ICQzLCQ0LCQ1fScgL2V0Yy9vcy1yZWxlYXNlICYmIHJldHVybgogICAgWyAtZiAvZXRjL2xzYi1yZWxlYXNlIF0gJiYgYXdrIC1GJ1s9Il0rJyAnL0RFU0NSSVBUSU9OL3twcmludCAkMn0nIC9ldGMvbHNiLXJlbGVhc2UgJiYgcmV0dXJuCn0KCmZ1bmN0aW9uIGdldF9jaGFyKCkgewogICAgU0FWRURTVFRZPWBzdHR5IC1nYAogICAgc3R0eSAtZWNobwogICAgc3R0eSBjYnJlYWsKICAgIGRkIGlmPS9kZXYvdHR5IGJzPTEgY291bnQ9MSAyPiAvZGV2L251bGwKICAgIHN0dHkgLXJhdwogICAgc3R0eSBlY2hvCiAgICBzdHR5ICRTQVZFRFNUVFkKfQoKZnVuY3Rpb24gcmVib290X29zKCkgewogICAgZWNobwogICAgX2luZm8gIlRoZSBzeXN0ZW0gbmVlZHMgdG8gcmVib290LiIKICAgIHJlYWQgLXIgLXAgICJEbyB5b3Ugd2FudCB0byByZXN0YXJ0IHN5c3RlbT8gW3kvTl0iIGlzX3JlYm9vdAogICAgaWYgW1sgJHtpc19yZWJvb3R9ICA9fiBeW1l5XSQgXV07IHRoZW4KICAgICAgICByZWJvb3QKICAgIGVsc2UKICAgICAgICBfaW5mbyAiUmVib290IGhhcyBiZWVuIGNhbmNlbGVkLi4uIgogICAgICAgIGV4aXQgMAogICAgZmkKfQoKZnVuY3Rpb24gcmVtb3ZlX2V4dHJhX2tlcm5lbCgpIHsKICAgIF9pbmZvICJSZW1vdmluZyBleHRyYSBrZXJuZWxzLi4uIgogICAgY2FzZSAiJChfb3MpIiBpbgogICAgICAgIGNlbnRvcykKICAgICAgICAgICAgaWYgISBycG0gLXFhIHwgZ3JlcCAtRSAiaGVhZGVyc3xkZXZlbHxrZXJuZWx8bW9kdWxlc3xjb3JlIiB8IGdyZXAgLXYgJCh1bmFtZSAtcik7IHRoZW4KICAgICAgICAgICAgICAgIF9pbmZvICJObyBhZGRpdGlvbmFsIGtlcm5lbHMgZm91bmQgdG8gcmVtb3ZlIgogICAgICAgICAgICAgICAgZXhpdCAwCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHJwbSAtcWEgfCBncmVwIC1FICJoZWFkZXJzfGRldmVsfGtlcm5lbHxtb2R1bGVzfGNvcmUiIHwgZ3JlcCAtdiAkKHVuYW1lIC1yKSB8IHhhcmdzIHJwbSAtZSAtLW5vZGVwcwogICAgICAgICAgICBpZiBfZXhpc3RzICJ5dW0iOyB0aGVuCiAgICAgICAgICAgICAgICB5dW0gLXkgYXV0b3JlbW92ZQogICAgICAgICAgICBlbGlmIF9leGlzdHMgImRuZiI7IHRoZW4KICAgICAgICAgICAgICAgIGRuZiAteSBhdXRvcmVtb3ZlCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIDs7CiAgICAgICAgdWJ1bnR1fGRlYmlhbikKICAgICAgICAgICAgaWYgISBkcGtnIC1sIHwgZ3JlcCAtRSAibGludXgtKGltYWdlfG1vZHVsZXN8aGVhZGVycykiIHwgYXdrICd7cHJpbnQgJDJ9JyB8IGdyZXAgLXYgIiQodW5hbWUgLXIpIjsgdGhlbgogICAgICAgICAgICAgICAgX2luZm8gIk5vIGFkZGl0aW9uYWwga2VybmVscyBmb3VuZCB0byByZW1vdmUiCiAgICAgICAgICAgICAgICBleGl0IDAKICAgICAgICAgICAgZmkKICAgICAgICAgICAgZHBrZyAtbCB8IGdyZXAgLUUgImxpbnV4LShpbWFnZXxtb2R1bGVzfGhlYWRlcnMpIiB8IGF3ayAne3ByaW50ICQyfScgfCBncmVwIC12ICIkKHVuYW1lIC1yKSIgfCB4YXJncyBhcHQtZ2V0IC15IHB1cmdlCiAgICAgICAgICAgIGFwdC1nZXQgLXkgYXV0b3JlbWUKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBfZXJyb3IgIk5vdCBzdXBwb3J0ZWQgT1MiCiAgICAgICAgICAgIDs7CiAgICBlc2FjCiAgICBfaW5mbyAiRXh0cmEga2VybmVscyByZW1vdmVkLi4uIgp9CgpmdW5jdGlvbiByZW1vdmVfa2VybmVsKCkgewogICAgcmVtb3ZlX2V4dHJhX2tlcm5lbAogICAgcmVib290X29zCn0KCltbICRFVUlEIC1uZSAwIF1dICYmIF9lcnJvciAiVGhpcyBzY3JpcHQgbXVzdCBiZSBydW4gYXMgcm9vdCIKb3BzeT0kKCBfb3NfZnVsbCApCmFyY2g9JCggdW5hbWUgLW0gKQpsYml0PSQoIGdldGNvbmYgTE9OR19CSVQgKQprZXJuPSQoIHVuYW1lIC1yICkKCmNsZWFyCmVjaG8gIi0tLS0tLS0tLS0gU3lzdGVtIEluZm9ybWF0aW9uIC0tLS0tLS0tLS0iCmVjaG8gIiBPUyAgICAgIDogJG9wc3kiCmVjaG8gIiBBcmNoICAgIDogJGFyY2ggKCRsYml0IEJpdCkiCmVjaG8gIiBLZXJuZWwgIDogJGtlcm4iCmVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCmVjaG8gIiBTY3JpcHQgdG8gcmVtb3ZlIGV4dHJhIGtlcm5lbHMiCmVjaG8KZWNobyAiIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL3p4Y3Zvcy9zeXN0ZW0tYXV0b21hdGlvbi1zY3JpcHRzL2Jsb2IvbWFpbi9yZW1vdmUta2VybmVsLnNoIgplY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgplY2hvCl93YXJuICJQbGVhc2UgZG8gbm90IHVzZSB0aGlzIHNjcmlwdCBpbiBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQuIgpfd2FybiAiVG8gZW5zdXJlIHRoZSBzYWZldHkgb2YgeW91ciBkYXRhLCBwbGVhc2UgYmFjayB1cCB5b3VyIGRhdGEgYmVmb3JlIHRyeWluZyB0aGlzIHNjcmlwdC4iCmVjaG8gIlByZXNzIGFueSBrZXkgdG8gc3RhcnQuLi5vciBQcmVzcyBDdHJsK0MgdG8gY2FuY2VsIgpjaGFyPSQoZ2V0X2NoYXIpCgpyZW1vdmVfa2VybmVsIDI+JjEgfCB0ZWUgJHtjdXJfZGlyfS9yZW1vdmVfa2VybmVsLmxvZw==" | base64 -d > remove-kernel.sh
      base remove-kernel.sh
      
  • cmd (Warning: Please do not use this script in a production environment. To ensure the safety of your data, please back up your data before trying this script.)

    • yum(redhat centos fedora other-redhat)

      rpm -qa | grep -E "headers|devel|kernel|modules|core" | grep -v $(uname -r) | xargs rpm -e --nodeps
      yum -y autoremove
      
    • dnf(redhat centos fedora other-redhat)

      rpm -qa | grep -E "headers|devel|kernel|modules|core" | grep -v $(uname -r) | xargs rpm -e --nodeps
      dnf -y autoremove
      
    • apt-get(debian ubuntu deepin other-debian)

      dpkg -l | grep -E "linux-(image|modules|headers)" | awk '{print $2}' | grep -v "$(uname -r)" | xargs apt-get -y purge
      apt-get -y autoremove
      

About

A collection of scripts to automate system management tasks

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages