slitaz-arm view rpi/tazberry @ rev 148

TazBerry: typo
author Christophe Lincoln <pankso@slitaz.org>
date Wed Apr 30 16:30:27 2014 +0200 (2014-04-30)
parents 0bdb769b766e
children 9442239bc76f
line source
1 #!/bin/sh
2 #
3 # TazBerry - SliTaz Raspberry Pi Config Tool
4 #
5 # Copyright (C) 2014 SliTaz ARM - BSD License
6 # Author: Christophe Lincoln <pankso@slitaz.org>
7 #
8 . /lib/libtaz.sh
9 check_root
11 title="{ TazBerry }"
12 config="/boot/config.txt"
13 tmpdir="/tmp/tazberry"
14 tmp="$tmpdir/$$"
15 height="20"
16 width="72"
18 # Mirror URL
19 rpi_mirror="http://mirror.slitaz.org/arm/rpi/"
21 # Use a tmp directory
22 mkdir -p ${tmpdir}
24 # Small built-in help
25 help() {
26 cat << EOT
28 $(boldify "$(gettext 'Usage:')") $(basename $0) [command|rpi_function]
30 $(boldify "$(gettext 'Commands:')")
31 oclock $(gettext 'Configure overclocking')
32 cam-setup $(gettext 'Configure your Pi to use the Camera')
33 ls-functions $(gettext 'List TazBerry functions')
34 rpi_ $(gettext 'Execute any tazberry_function')
35 testsuite $(gettext 'Run TazBerry testsuite')
37 EOT
38 }
40 #
41 # RPi functions
42 #
44 # This could move to /usr/bin/slitaz-??? or something since it's not
45 # ARM specific
46 rpi_stats() {
47 ip=$(ifconfig | fgrep -A 1 "encap:Ethernet" | fgrep "inet" | cut -d ":" -f 2)
48 mem_total=$(free -m | fgrep "Mem:" | awk '{print $2}')
49 mem_used=$(free -m | fgrep "Mem:" | awk '{print $3}')
50 mem_used_pct=$(( ( ${mem_used} * 100) / ${mem_total} ))
51 cat << EOT
52 $(gettext 'Kernel') : $(uname -snrm)
53 $(gettext 'Uptime') : $(uptime | awk '{print $3}' | sed s"/:/h /" | sed s"/,/min/")
54 $(gettext 'Network IP') : $(echo $ip | awk '{print $1}')
55 $(gettext 'CPU heat') : $(awk '{printf "%3.1f C\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp)
56 $(gettext 'Processes') : $(ps | wc -l)
57 $(gettext 'Memory usage') : ${mem_used_pct}%
58 EOT
59 }
61 rpi_turbo() {
62 if ! fgrep -q 'force_turbo=1' ${config}; then
63 gettext "Enabling Raspberry Pi force turbo..."
64 echo "force_turbo=1" >> ${config}; status
65 else
66 gettext "Disabling Raspberry Pi force turbo..."
67 sed -i '/force_turbo=1/'d ${config}; status
68 fi
69 }
71 # RPi Overclocking
72 rpi_oclock() {
73 cat << EOT
74 none 700MHz ARM 250MHz core 400MHz SDRAM 0 overvolt
75 modest 800MHz ARM 300MHz core 400MHz SDRAM 0 overvolt
76 medium 900MHz ARM 333MHz core 450MHz SDRAM 2 overvolt
77 high 950MHz ARM 450MHz core 450MHz SDRAM 6 overvolt
78 turbo 1000MHz ARM 500MHz core 500MHz SDRAM 6 overvolt
79 EOT
80 }
82 # Update custom Raspberry Pi Kernel
83 rpi_linux_up() {
84 cache="/var/cache/tazpkg"
85 gettext "Updating Raspberry Pi Linux kernel..."; echo
86 mkdir -p ${cache}
88 # Last version
89 rm -f ${cache}/linux-version.txt
90 if busybox wget -q -s ${rpi_mirror}/packages/last-linux.txt; then
91 echo -n "Fetching latest Kernel string..."
92 wget -q ${rpi_mirror}/packages/last-linux.txt \
93 -O ${cache}/linux-version.txt || exit 1
94 status
95 else
96 gettext "Mirror is unreachable"; echo && exit 1
97 fi
98 kvers=$(cat $cache/linux-version.txt)
99 rm -rf ${cache}/linux-${kvers}*
100 gettext "Kernel version: $kvers"; echo
102 # Download
103 gettext "Fetching latest Linux package..."
104 wget -q ${rpi_mirror}/packages/linux-${kvers}.tazpkg \
105 -O ${cache}/linux-${kvers}.tazpkg; status
107 # Install
108 if [ -f "$cache/linux-$kvers.tazpkg" ]; then
109 cd ${cache} && spk-add linux-${kvers}.tazpkg
110 else
111 gettext "Kernel update failed..."; echo
112 fi
113 rm -f ${cache}/linux-version.txt
114 }
116 # Unset overclocking
117 unset_oclock() {
118 debug "unset_oclock"
119 sed -i \
120 -e '/# Overclocking.*/'d \
121 -e '/arm_freq=/'d \
122 -e '/core_freq=/'d \
123 -e '/sdram_freq=/'d \
124 -e '/over_voltage=/'d ${config}
125 # Remove if 3 empty lines follows
126 sed -i '1N;N;/^\n\n$/d;P;D' ${config}
127 }
129 # Set overclocking: set_oclock [mode]
130 set_oclock() {
131 debug "set_oclock $1"
132 case "$1" in
133 none)
134 arm_freq=700
135 core_freq=250
136 sdram_freq=400
137 over_voltage=0 ;;
138 modest)
139 arm_freq=800
140 core_freq=300
141 sdram_freq=400
142 over_voltage=0 ;;
143 medium)
144 arm_freq=900
145 core_freq=333
146 sdram_freq=450
147 over_voltage=2 ;;
148 high)
149 arm_freq=950
150 core_freq=450
151 sdram_freq=450
152 over_voltage=6 ;;
153 turbo)
154 arm_freq=1000
155 core_freq=500
156 sdram_freq=500
157 over_voltage=6 ;;
158 esac
159 unset_oclock
160 cat >> ${config} << EOT
161 # Overclocking Settings
162 arm_freq=$arm_freq
163 core_freq=$core_freq
164 sdram_freq=$sdram_freq
165 over_voltage=$over_voltage
167 EOT
168 }
170 tazberry_back() {
171 gettext "Press ENTER to go back to TazBerry"; read
172 }
174 #
175 # GUI Functions
176 #
178 # Usage: msg_box "title" "message"
179 msg_box() {
180 dialog --title "{ $1 }" --cr-wrap \
181 --ok-label "TazBerry" --msgbox "\n$2" ${height} ${width}
182 }
184 # Usage: text_box "file"
185 text_box() {
186 local file="$1"
187 if [ -f "$file" ]; then
188 dialog --cr-wrap \
189 --title "{ $(gettext 'Viewing file:') $file }" \
190 --extra-button \
191 --extra-label "Edit file" \
192 --ok-label "TazBerry" \
193 --textbox ${file} ${height} ${width}
194 else
195 dialog --title "$title" \
196 --msgbox "\nERROR: $file does not exist" 10 ${width}
197 fi
198 # Handle options
199 case "$?" in
200 3) editor ${file} ;;
201 esac
202 }
204 # Usage: tail_box "file"
205 tail_box() {
206 dialog --title "{ $(gettext 'Watching file:') $2 }" \
207 --tailbox "$1" ${height} ${width}
208 }
210 # Packages info and spk-up button
211 pkgs_box() {
212 out="$tmpdir/spk-info.txt"
213 spk info --output=raw > ${out}
214 dialog --cr-wrap \
215 --title "{ $(gettext 'Packages') }" \
216 --extra-button \
217 --extra-label "$(gettext 'Upgrade')" \
218 --ok-label "TazBerry" \
219 --textbox "$out" ${height} ${width}
220 # Handle options
221 case "$?" in
222 3) spk-up && tazberry_back ;;
223 esac
224 }
226 # Overclocking info TODO: button to setup
227 oclock_box() {
228 mode=$(fgrep arm_freq ${config} | cut -d '=' -f 2)
229 case "$mode" in
230 700) mode="none" ;;
231 800) mode="modest" ;;
232 900) mode="medium" ;;
233 950) mode="high" ;;
234 1000) mode="turbo" ;;
235 esac
236 dialog \
237 --clear --colors \
238 --extra-button \
239 --title "{ Overclocking }" \
240 --ok-label "TazBerry" \
241 --extra-label "Set Overclock" \
242 --cancel-label "Unset Oclock" \
243 --menu "\nSet Raspberry Pi overclocking, current setting: \Zb\Z2$mode" \
244 ${height} ${width} 14 \
245 "none" "700MHz ARM 250MHz core 400MHz SDRAM 0 overvolt" \
246 "modest" "800MHz ARM 300MHz core 400MHz SDRAM 0 overvolt" \
247 "medium" "900MHz ARM 333MHz core 450MHz SDRAM 2 overvolt" \
248 "high" "950MHz ARM 450MHz core 450MHz SDRAM 6 overvolt" \
249 "turbo" "1000MHz ARM 500MHz core 500MHz SDRAM 6 overvolt" 2>${tmp}
250 retval="$?"
251 mode=$(cat $tmp)
252 case "$retval" in
253 0) continue ;;
254 1) unset_oclock ;;
255 3) set_oclock "$mode" ;;
256 255) rm -rf ${tmpdir} && exit 0 ;;
257 esac
258 }
260 gpu_mem_box() {
261 dialog \
262 --clear \
263 --title "$title" \
264 --ok-label "Set mem" \
265 --cancel-label "TazBerry" \
266 --menu "\nSet the memory allocated to the GPU (in MB)" \
267 ${height} ${width} 14 \
268 "16" "For server, NAS, base system without X" \
269 "32" "For very small TFT and TV display" \
270 "64" "Default value, fine for low latency desktop" \
271 "128" "For a faster desktop, using a video player" \
272 "256" "For media center, GL/3D applications" 2>${tmp}
273 mem=$(cat $tmp)
274 sed -i \
275 -e s"/#gpu_mem=.*/gpu_mem=$mem/" \
276 -e s"/gpu_mem=.*/gpu_mem=$mem/" /boot/config.txt
277 }
279 picam_setup() {
280 db="/var/lib/tazpkg/installed"
281 gpu_mem=128
282 pct="0"
283 {
284 # Needed packages
285 for pkg in raspberrypi-vc raspberrypi-boot-x
286 do
287 echo "XXX" && echo $((${pct} + 20))
288 echo -e "\nInstalling: $pkg"
289 echo "XXX"
290 [ -d "$db/$pkg" ] || spk-add ${pkg} >/dev/null 2>/dev/null
291 sleep 1
292 done
294 echo "XXX" && echo 60
295 echo -e "\nSetting up: ${config}"
296 echo "XXX" && sleep 1
297 # 0 to disable camera, 1 to enable it
298 if ! grep -q "start_x=1" ${config}; then
299 cat >> ${config} << EOT
301 # Camera settings
302 start_x=1
304 EOT
305 fi
306 # In case it was commented ot disabled
307 sed -i s'/#start_x=.*/start_x=1/' ${config}
308 sed -i s'/start_x=.*/start_x=1/' ${config}
310 # PiCam need 128 MB of GPU memory
311 echo "XXX" && echo 80
312 echo -e "\nSetting GPU memory to: ${gpu_mem}"
313 echo "XXX" && sleep 1
315 sed -i "s/#gpu_mem=.*/gpu_mem=${gpu_mem}/" ${config}
316 sed -i "s/gpu_mem=.*/gpu_mem=${gpu_mem}/" ${config}
318 echo "XXX" && echo 100
319 echo -e "\nPiCam config done..."
320 echo "XXX" && sleep 1
322 } | dialog --title "{ PiCam Setup }" \
323 --gauge "" 8 ${width} 0
325 # Reboot ?
326 dialog --title "$title" \
327 --yesno "\n\
328 SliTaz is configured for the PiCam but you need a reboot to use it.\
329 \n\n
330 Do You wish to reboot now ?" \
331 ${height} ${width}
332 [ "$?" == 0 ] && reboot
333 }
335 # Breakout bords!
336 boards_box() {
337 dialog \
338 --clear \
339 --title "$title" \
340 --ok-label "Exec" \
341 --cancel-label "Quit" \
342 --menu "\nSetup or use a breakout board" ${height} ${width} 14 \
343 "cam-setup" "$(gettext 'Configure your Pi to use a Camera')" \
344 "piglow" "$(gettext 'Setup your Pi to use PiGlow')" 2>${tmp}
346 # Handle options
347 case "$?" in
348 1|255) rm -rf ${tmpdir} && exit 0 ;;
349 esac
351 # Handle actions
352 action=$(cat $tmp)
353 case "$action" in
354 cam-setup)
355 picam_setup ;;
356 piglow)
357 for pkg in python-rpi-pyglow wiringpi-piglow; do
358 spk-add ${pkg}
359 done
360 newline
361 echo -n "Do you wish to try the leds [y/N] ? " ; read anser
362 [ "$anser" == "y" ] && echo "Enter a value between: 5-255" \
363 && pyglow test
364 esac
365 }
367 # Main Dialog menu
368 main_box() {
369 dialog \
370 --clear \
371 --title "$title" \
372 --ok-label "Exec" \
373 --cancel-label "Quit" \
374 --menu "" ${height} ${width} 14 \
375 "rpi-stats" "$(gettext 'Show some RPi system stats')" \
376 "gpu-mem" "$(gettext 'Set memory split between ARM and GPU')" \
377 "boards" "$(gettext 'Boards settings and tools (Camera, PyGlow)')" \
378 "act-led" "$(gettext 'Test the RPi onboard ACT green led')" \
379 "oclock" "$(gettext 'Overclocking configuration')" \
380 "rpi-turbo" "$(gettext 'Enable or disable RPi turbo on next boot')" \
381 "boot-cmdline" "$(gettext 'View boot args /boot/cmdline.txt')" \
382 "boot-config" "$(gettext 'View config file /boot/config.txt')" \
383 "linux-up" "$(gettext 'Update SliTaz Raspberry Pi Linux Kernel')" \
384 "packages" "$(gettext 'SliTaz packages manager') (spk)" \
385 "config" "$(gettext 'System config (lang, keyboard, wifi)')" \
386 "reboot" "$(gettext 'Reboot SliTaz system')" \
387 "halt" "$(gettext 'Halt the Raspberry Pi')" \
388 "quit" "$(gettext 'Exit TazBerry tool')" 2>${tmp}
390 # Handle options
391 case "$?" in
392 1|255) rm -rf ${tmpdir} && exit 0 ;;
393 esac
395 # Handle actions
396 action=$(cat $tmp)
397 case "$action" in
398 rpi-stats)
399 msg_box "RPi Stats" "$(rpi_stats)" ;;
400 gpu-mem)
401 gpu_mem_box ;;
402 boards)
403 boards_box ;;
404 act-led)
405 brightness="/sys/class/leds/led0/brightness"
406 (echo "1" > ${brightness}
407 sleep 3; echo "0" > ${brightness}) & ;;
408 oclock)
409 oclock_box ;;
410 rpi-turbo)
411 rpi_turbo && newline
412 tazberry_back ;;
413 boot-cmdline)
414 text_box /boot/cmdline.txt ;;
415 boot-config)
416 text_box ${config} ;;
417 linux-up)
418 rpi_linux_up
419 tazberry_back ;;
420 packages)
421 spk-dialog ;;
422 config)
423 slitaz-config ;;
424 reboot)
425 reboot ;;
426 halt)
427 poweroff ;;
428 quit)
429 rm -rf ${tmpdir} && exit 0 ;;
430 esac
431 }
433 # Progress bar testsuite
434 gauge_box() {
435 { for i in $(seq 1 100); do
436 echo $i
437 sleep 0.01
438 done
439 echo 100; } | dialog --title "{ TazBerry }" \
440 --gauge "Work in progress..." 6 ${width} 0
441 }
443 #
444 # Handle commands
445 #
447 case "$1" in
448 oclock)
449 oclock_box ;;
451 cam-setup)
452 picam_setup ;;
454 ls-functions)
455 newline
456 boldify "$(gettext 'TazBerry functions list')"
457 separator
458 grep "^rpi_*" $0 | awk '{print " ", $1}'
459 newline ;;
461 testsuite)
462 gauge_box
463 msg_box "Testsuite" "Test message"
464 rpi_stats
465 newline ;;
467 rpi_*)
468 # Execute functions
469 $@ ;;
471 "")
472 # No args: display Ncurses dialog
473 while true; do
474 main_box
475 done ;;
477 *|*help|-h)
478 # Display help
479 help ;;
480 esac
482 # Clean exit
483 rm -rf ${tmpdir}
484 exit 0