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