slitaz-tools annotate tinyutils/slitaz-config @ rev 930
Finish previous tiny edit
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Tue Nov 25 00:41:01 2014 +0200 (2014-11-25) |
parents | 0764c1dac3c2 |
children | 5d80f6fdbdb7 |
rev | line source |
---|---|
pankso@840 | 1 #!/bin/sh |
pankso@840 | 2 # |
pankso@840 | 3 # SliTaz Config - A tool with all SliTaz Ncurses configs in one place for |
pankso@840 | 4 # text mode systems (server, ARM devices) |
pankso@840 | 5 # |
pankso@840 | 6 # Copyright (C) 2014 SliTaz ARM - BSD License |
pankso@840 | 7 # Author: Christophe Lincoln <pankso@slitaz.org> |
pankso@840 | 8 # |
pankso@840 | 9 . /lib/libtaz.sh |
al@926 | 10 export TEXTDOMAIN='slitaz-tools' #i18n |
al@926 | 11 |
pankso@840 | 12 check_root |
pankso@840 | 13 |
al@926 | 14 title="{ $(_ 'SliTaz Config') }" |
pankso@853 | 15 about="/usr/share/doc/slitaz/post-install.txt" |
pankso@840 | 16 tmpdir="/tmp/$(basename $0)" |
pankso@840 | 17 tmp="$tmpdir/$$" |
pankso@840 | 18 height="20" |
pankso@840 | 19 width="72" |
pankso@840 | 20 |
pankso@840 | 21 # Use a tmp directory |
al@926 | 22 mkdir -p $tmpdir |
al@926 | 23 |
al@926 | 24 quit() { |
al@926 | 25 rm -rf $tmpdir; exit 0 |
al@926 | 26 } |
al@926 | 27 |
pankso@840 | 28 |
pankso@840 | 29 # |
pankso@840 | 30 # GUI Functions |
pankso@840 | 31 # |
pankso@840 | 32 |
pankso@853 | 33 # Coded for the ARM first boot settings |
pankso@852 | 34 about_post_install() { |
pankso@852 | 35 dialog --cr-wrap \ |
al@926 | 36 --title "{ $(_ 'Post Installation') }" \ |
al@926 | 37 --exit-label "$(_ 'Continue')" \ |
al@926 | 38 --textbox "$about" $height $width |
pankso@852 | 39 } |
pankso@852 | 40 |
pankso@840 | 41 # Set root passwd |
pankso@840 | 42 root_passwd() { |
al@926 | 43 dialog --title "{ $(_ 'Root Password') }" --colors \ |
al@926 | 44 --inputbox "\n$(_ 'Enter new password for \Zb\Z1root')" \ |
al@926 | 45 12 $width 2>$tmp |
al@926 | 46 passwd=$(cat $tmp) |
al@926 | 47 [ -z "$passwd" ] && return 0 |
al@926 | 48 echo "root:$passwd" | chpasswd --md5 >/dev/null |
pankso@840 | 49 } |
pankso@840 | 50 |
pankso@852 | 51 # Add a new user |
pankso@852 | 52 add_user() { |
al@926 | 53 title2="{ $(_ 'Add User') }" |
al@926 | 54 |
al@926 | 55 dialog --title "$title2" --colors \ |
al@926 | 56 --inputbox "\n$(_ 'Enter login name for the new \Zb\Z4user')" 12 $width 2>$tmp |
pankso@852 | 57 user=$(cat $tmp) |
al@926 | 58 [ -z "$user" ] && return 0 |
al@926 | 59 |
al@926 | 60 dialog --title "$title2" --colors \ |
al@926 | 61 --inputbox "\n$(_ 'Enter password for user \Zb\Z4$user')" 12 $width 2>$tmp |
pankso@852 | 62 passwd=$(cat $tmp) |
al@926 | 63 [ -z "$passwd" ] && return 0 |
al@926 | 64 |
al@926 | 65 adduser -D -g "SliTaz User" -G users $user |
al@926 | 66 echo "$user:$passwd" | chpasswd --md5 >/dev/null |
al@926 | 67 |
al@926 | 68 # User groups |
al@926 | 69 for group in audio cdrom video tty; do |
al@926 | 70 addgroup $user $group >/dev/null |
pankso@852 | 71 done |
al@926 | 72 |
pankso@874 | 73 # Make sure system-wide applications.conf is used |
al@926 | 74 config="/home/$user/.config" |
al@926 | 75 mkdir -p $config/slitaz |
al@926 | 76 cp -f /etc/slitaz/applications.conf $config/slitaz |
al@926 | 77 |
pankso@852 | 78 # Slim default user on post-install |
pankso@852 | 79 if [ -f "/etc/slim.conf" ] && [ ! -f "/var/lib/slitaz/post-install" ]; then |
pankso@852 | 80 sed -i s"/default_user .*/default_user $user/" /etc/slim.conf |
pankso@852 | 81 fi |
pankso@852 | 82 } |
pankso@852 | 83 |
pankso@840 | 84 set_date() { |
al@926 | 85 clear; newline |
al@926 | 86 echo "Old date: $(date)" |
pankso@852 | 87 rdate -s tick.greyware.com 2>/dev/null |
al@926 | 88 echo "New date: $(date)" |
pankso@840 | 89 sleep 4 |
pankso@840 | 90 } |
pankso@840 | 91 |
al@926 | 92 # Catch ESSIDs and format output for Ncurses Dialog or GTK Yad tree. |
al@926 | 93 # We get the list of networks by Cell and without spaces. |
pankso@863 | 94 # Usage: detect_wifi --output=gtk (default output to dialog) |
pankso@863 | 95 detect_wifi() { |
pankso@863 | 96 . /etc/network.conf |
pankso@863 | 97 ifconfig $WIFI_INTERFACE up |
al@926 | 98 |
pankso@863 | 99 if [ -d /sys/class/net/$WIFI_INTERFACE/wireless ]; then |
al@926 | 100 IFS=$'\n'; hidden='' |
al@926 | 101 for i in $(iwlist $WIFI_INTERFACE scan | grep -Eo 'Cell [0-9]*'); do |
pankso@863 | 102 scan=$(iwlist $WIFI_INTERFACE scan last | \ |
pankso@863 | 103 awk '/(Cell|ESS|Qual|Encry|IE: WPA|WPA2)/ {print}' | \ |
al@926 | 104 sed "/$i/,/Cell/ !d") |
al@926 | 105 |
pankso@863 | 106 essid=$(echo $scan | cut -d '"' -f 2) |
pankso@863 | 107 |
al@926 | 108 quality=$(echo $scan | grep -Eo 'Quality[:=][^ ]*' | tr -cd '0-9/') |
al@926 | 109 [ -z "$quality" ] && quality='-----' |
pankso@863 | 110 |
al@926 | 111 crypto="$(echo $scan | sed 's/.*key:\([^ ]*\).*/\1/')" |
al@926 | 112 |
pankso@863 | 113 # Check encryption type |
pankso@863 | 114 if echo "$scan" | grep -q WPA*; then |
pankso@863 | 115 crypto="WPA" |
pankso@863 | 116 fi |
pankso@863 | 117 |
pankso@863 | 118 # Connected or not connected... |
al@926 | 119 if ifconfig | grep -A1 $WIFI_INTERFACE | grep -qF 'inet' && \ |
al@926 | 120 iwconfig $WIFI_INTERFACE | grep ESSID | grep -qwF "$essid"; then |
al@926 | 121 status="..$(_ 'connected')" |
pankso@863 | 122 else |
al@926 | 123 status='' |
pankso@863 | 124 fi |
al@926 | 125 |
pankso@863 | 126 # Output |
al@926 | 127 if [ -z "$essid" ]; then |
al@926 | 128 hidden='yes' |
al@926 | 129 else |
al@926 | 130 case "$output" in |
al@926 | 131 gtk) |
al@926 | 132 #echo -e "$(_n 'any')\n$(_n 'N/A')\n$(_n 'none')\n$(_n '-')" |
al@926 | 133 echo -e "$essid\n$quality\n$crypto\n$status" ;; |
al@926 | 134 *) |
al@926 | 135 echo "$essid" |
al@926 | 136 echo "$(_ 'Quality'):${quality}..$(_ 'Key'):${crypto}${status}" ;; |
al@926 | 137 esac |
al@926 | 138 fi |
pankso@863 | 139 done |
al@926 | 140 [ -n "$hidden" ] && echo "$(_ 'hidden.network')" "$(_ 'Connect.to.a.hidden.network')" |
pankso@863 | 141 fi |
pankso@863 | 142 } |
pankso@863 | 143 |
al@926 | 144 # Show message and percentage on the dialog gauge |
al@926 | 145 msg() { |
al@926 | 146 sleep 1; echo -e "XXX\n$1\n$MSG\nXXX" |
al@926 | 147 } |
al@926 | 148 |
al@926 | 149 # Wireless config so users don't have to edit any config files on post |
pankso@863 | 150 # install to get connected. If the wired connection is used it will auto |
pankso@863 | 151 # connect with DHCP so no need for a dialog frontend. |
pankso@863 | 152 wifi_setup() { |
pankso@863 | 153 . /etc/network.conf |
pankso@863 | 154 dialog \ |
pankso@863 | 155 --clear --title "$title" \ |
al@926 | 156 --ok-label "$(_ 'Select')" \ |
al@926 | 157 --menu "\n$(_ 'Connect to a Wi-Fi network')" \ |
al@926 | 158 $height $width 14 \ |
al@926 | 159 "any" "$(_ 'Connect.to.any.network')" \ |
al@926 | 160 $(detect_wifi) 2>$tmp |
al@926 | 161 |
pankso@863 | 162 # Handle options |
al@926 | 163 case "$?" in |
al@926 | 164 1|255) quit ;; |
pankso@863 | 165 0) essid=$(cat $tmp) ;; |
pankso@863 | 166 esac |
al@926 | 167 |
al@926 | 168 # Connect to hidden network |
al@926 | 169 if [ "$essid" == "$(_ 'hidden.network')" ]; then |
al@926 | 170 dialog --title "{ $(_ 'Wi-Fi ESSID') }" \ |
al@926 | 171 --inputbox "\n$(_ 'Enter Wi-Fi access point ESSID (name)')" \ |
al@926 | 172 12 $width 2>$tmp |
al@926 | 173 essid=$(cat $tmp) |
al@926 | 174 [ -z "$essid" ] && exit 0 |
al@926 | 175 |
al@926 | 176 dialog --title "{ $(_ 'Wi-Fi Password') }" --colors \ |
al@926 | 177 --inputbox "\n$(_ 'Enter Wi-Fi key (password) for \Zb\Z4$essid')" \ |
al@926 | 178 12 $width 2>$tmp |
pankso@863 | 179 key=$(cat $tmp) |
al@926 | 180 else |
al@926 | 181 |
al@926 | 182 # Check if we need to prompt user for an encrypted network |
al@926 | 183 key=$(iwlist $WIFI_INTERFACE scan last | grep -E 'Cell |Encryption|ESSID' | \ |
al@926 | 184 grep -C1 "$essid" | sed -n 's|.*key:\(.*\)|\1|p') |
al@926 | 185 |
al@926 | 186 if [ "$key" == "on" ]; then |
al@926 | 187 dialog --title "{ $(_ 'Wi-Fi Password') }" --colors \ |
al@926 | 188 --inputbox "\n$(_ 'Enter Wi-Fi key (password) for \Zb\Z4$essid')" \ |
al@926 | 189 12 $width 2>$tmp |
al@926 | 190 key=$(cat $tmp) |
al@926 | 191 [ -z "$key" ] && exit 0 |
al@926 | 192 fi |
pankso@863 | 193 fi |
al@926 | 194 |
pankso@863 | 195 # Configure connection |
pankso@863 | 196 { |
al@926 | 197 MSG="\n$(_ 'Shutting down network interfaces...')" |
al@926 | 198 msg 0; stopd network.sh >/dev/null 2>&1 |
al@926 | 199 msg 10 |
al@926 | 200 |
al@926 | 201 MSG="\n$(_ 'Configuring: /etc/network.conf...')" |
al@926 | 202 msg 20 |
pankso@863 | 203 # WIFI_KEY_TYPE=any should work for WEP/WPA* |
pankso@863 | 204 sed -i \ |
pankso@866 | 205 -e s"/^WIFI=.*/WIFI=\"yes\"/" \ |
pankso@863 | 206 -e s"/^WIFI_ESSID=.*/WIFI_ESSID=\"$essid\""/ \ |
pankso@863 | 207 -e s"/^WIFI_KEY=.*/WIFI_KEY=\"$key\"/" \ |
pankso@863 | 208 -e s"/^WIFI_KEY_TYPE=.*/WIFI_KEY_TYPE=\"any\"/" \ |
pankso@863 | 209 /etc/network.conf |
al@926 | 210 |
al@926 | 211 MSG="\n$(_ 'Restarting Wi-Fi interface...')" |
al@926 | 212 msg 30; startd network.sh >/dev/null 2>&1 |
al@926 | 213 msg 40; msg 50; msg 60; msg 70; msg 80 |
al@926 | 214 |
al@926 | 215 MSG="\n$(_ 'Checking connection...')" |
al@926 | 216 msg 90; sleep 2 |
al@926 | 217 ip="$(ifconfig $WIFI_INTERFACE | fgrep 'inet addr' | sed 's|.*:\([^ ]*\) .*|\1|')" |
al@926 | 218 |
pankso@863 | 219 if [ "$ip" ]; then |
al@926 | 220 MSG="\n$(_ 'IP address: $ip')" |
pankso@863 | 221 else |
al@926 | 222 MSG="\n$(_ 'Unable to connect...')" |
pankso@863 | 223 fi |
al@926 | 224 msg 100; sleep 2 |
al@926 | 225 |
al@926 | 226 } | dialog --title "{ $(_ 'Wi-Fi Config') }" --gauge "" 8 $width 0 |
pankso@863 | 227 } |
pankso@863 | 228 |
pankso@840 | 229 # Main Dialog menu |
pankso@840 | 230 main_box() { |
pankso@840 | 231 dialog \ |
pankso@840 | 232 --clear --title "$title" \ |
al@926 | 233 --ok-label "$(_ 'Exec')" --cancel-label "$(_ 'Quit')" \ |
al@926 | 234 --menu "" $height $width 14 \ |
al@926 | 235 "keyboard" "$(_ 'System keyboard setting')" \ |
al@926 | 236 "locale" "$(_ 'System language setting')" \ |
al@926 | 237 "wifi-setup" "$(_ 'Wi-Fi network settings')" \ |
al@926 | 238 "add-user" "$(_ 'Add a new user')" \ |
al@926 | 239 "root-passwd" "$(_ 'Change root password')" \ |
al@926 | 240 "set-date" "$(_ 'Set system date from the web')" \ |
al@926 | 241 "quit" "$(_ 'Exit from SliTaz Config')" 2>$tmp |
al@926 | 242 |
pankso@840 | 243 # Handle options |
al@926 | 244 opt="$?" |
pankso@840 | 245 case "$opt" in |
al@926 | 246 1|255) quit ;; |
pankso@840 | 247 esac |
al@926 | 248 |
pankso@840 | 249 # Handle actions |
pankso@840 | 250 action=$(cat $tmp) |
pankso@840 | 251 case "$action" in |
al@926 | 252 keyboard) tazkeymap ;; |
al@926 | 253 locale) tazlocale ;; |
al@926 | 254 wifi-setup) wifi_setup ;; |
al@926 | 255 add-user) add_user ;; |
pankso@840 | 256 root-passwd) root_passwd ;; |
al@926 | 257 set-date) set_date ;; |
al@926 | 258 quit) quit ;; |
pankso@840 | 259 esac |
pankso@840 | 260 } |
pankso@840 | 261 |
pankso@840 | 262 # |
pankso@840 | 263 # Handle commands |
pankso@840 | 264 # |
pankso@840 | 265 |
pankso@840 | 266 case "$1" in |
al@926 | 267 *_*) |
al@926 | 268 # Execute functions |
pankso@840 | 269 $@ ;; |
pankso@840 | 270 *) |
pankso@840 | 271 while true; do |
pankso@840 | 272 main_box |
pankso@840 | 273 done ;; |
pankso@840 | 274 esac |
pankso@840 | 275 |
pankso@840 | 276 # Clean exit |
pankso@863 | 277 #rm -rf ${tmpdir} |
pankso@840 | 278 exit 0 |