debian-install.sh 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/env bash
  2. set -o errexit
  3. set -o errtrace
  4. set -o nounset
  5. set -o pipefail
  6. shopt -s expand_aliases
  7. alias die='EXIT=$? LINE=$LINENO error_exit'
  8. trap die ERR
  9. trap 'die "Script interrupted."' INT
  10. function error_exit() {
  11. trap - ERR
  12. local DEFAULT='Unknown failure occured.'
  13. local REASON="\e[97m${1:-$DEFAULT}\e[39m"
  14. local FLAG="\e[91m[ERROR:LXC] \e[93m$EXIT@$LINE"
  15. msg "$FLAG $REASON"
  16. exit $EXIT
  17. }
  18. function msg() {
  19. local TEXT="$1"
  20. echo -e "$TEXT"
  21. }
  22. YW=`echo "\033[33m"`
  23. RD=`echo "\033[01;31m"`
  24. BL=`echo "\033[36m"`
  25. GN=`echo "\033[1;92m"`
  26. CL=`echo "\033[m"`
  27. RETRY_NUM=10
  28. RETRY_EVERY=3
  29. NUM=$RETRY_NUM
  30. CM="${GN}✓${CL}"
  31. CROSS="${RD}✗${CL}"
  32. BFR="\\r\\033[K"
  33. HOLD="-"
  34. function msg_info() {
  35. local msg="$1"
  36. echo -ne " ${HOLD} ${YW}${msg}..."
  37. }
  38. function msg_ok() {
  39. local msg="$1"
  40. echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
  41. }
  42. msg_info "Setting up Container OS "
  43. sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen
  44. locale-gen >/dev/null
  45. while [ "$(hostname -I)" = "" ]; do
  46. 1>&2 echo -en "${CROSS}${RD} No Network! "
  47. sleep $RETRY_EVERY
  48. ((NUM--))
  49. if [ $NUM -eq 0 ]
  50. then
  51. 1>&2 echo -e "${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}"
  52. exit 1
  53. fi
  54. done
  55. msg_ok "Set up Container OS"
  56. msg_ok "Network Connected: ${BL}$(hostname -I)"
  57. msg_info "Updating Container OS"
  58. apt update &>/dev/null
  59. apt-get -qqy upgrade &>/dev/null
  60. msg_ok "Updated Container OS"
  61. msg_info "Installing Dependencies"
  62. apt-get install -y curl &>/dev/null
  63. apt-get install -y sudo &>/dev/null
  64. msg_ok "Installed Dependencies"
  65. PASS=$(grep -w "root" /etc/shadow | cut -b6);
  66. if [[ $PASS != $ ]]; then
  67. msg_info "Customizing Container"
  68. rm /etc/motd
  69. rm /etc/update-motd.d/10-uname
  70. touch ~/.hushlogin
  71. GETTY_OVERRIDE="/etc/systemd/system/container-getty@1.service.d/override.conf"
  72. mkdir -p $(dirname $GETTY_OVERRIDE)
  73. cat << EOF > $GETTY_OVERRIDE
  74. [Service]
  75. ExecStart=
  76. ExecStart=-/sbin/agetty --autologin root --noclear --keep-baud tty%I 115200,38400,9600 \$TERM
  77. EOF
  78. systemctl daemon-reload
  79. systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//')
  80. msg_ok "Customized Container"
  81. fi
  82. msg_info "Cleaning up"
  83. apt-get autoremove >/dev/null
  84. apt-get autoclean >/dev/null
  85. rm -rf /var/{cache,log}/* /var/lib/apt/lists/*
  86. msg_ok "Cleaned"