19829800dSFrançois Revol#!/bin/sh 29829800dSFrançois Revol# HardwareChecker.sh for Haiku 39829800dSFrançois Revol# 4*8e8f7748SFrançois Revol# Copyright 2011-2014, François Revol <revol@free.fr>. 59829800dSFrançois Revol# 69829800dSFrançois Revol# Distributed under the MIT License 79829800dSFrançois Revol# 89829800dSFrançois Revol# Created: 2011-10-25 99829800dSFrançois Revol# 109829800dSFrançois Revol 119829800dSFrançois Revol 12a02541b9SFrançois Revolnetcat=nc 136db5b8c6SFrançois Revolreport_site=fake.haikuware.com 149829800dSFrançois Revolreport_cgi=http://haikuware.com/hwreport.php 15894526b5SFrançois Revolpackages="dmidecode netcat" 169829800dSFrançois Revol 1793b9886aSFrançois Revoldo_notify () 1893b9886aSFrançois Revol{ 1993b9886aSFrançois Revol p="$1" 2093b9886aSFrançois Revol m="$2" 2193b9886aSFrançois Revol shift 2293b9886aSFrançois Revol shift 2393b9886aSFrançois Revol notify --type progress \ 2493b9886aSFrançois Revol --messageID hwck_$$ \ 2593b9886aSFrançois Revol --icon /system/apps/Devices \ 26*8e8f7748SFrançois Revol --group HardwareChecker \ 2793b9886aSFrançois Revol --title "progress:" --progress "$p" "$m" "$@" 2893b9886aSFrançois Revol 2993b9886aSFrançois Revol 3093b9886aSFrançois Revol} 3193b9886aSFrançois Revol 32*8e8f7748SFrançois Revoltry_install_packages () 33*8e8f7748SFrançois Revol{ 34*8e8f7748SFrançois Revol which pkgman >/dev/null 2>&1 || return 35*8e8f7748SFrançois Revol 36*8e8f7748SFrançois Revol for p in $packages; do 37*8e8f7748SFrançois Revol pkgman install "$p" || alert "Unable to install package '$p'" "Ok" 38*8e8f7748SFrançois Revol done 39*8e8f7748SFrançois Revol} 40*8e8f7748SFrançois Revol 419829800dSFrançois Revolstart_fake_httpd () 429829800dSFrançois Revol{ 439829800dSFrançois Revol report_port=8989 449829800dSFrançois Revol report_file="$(finddir B_DESKTOP_DIRECTORY)/hwchecker_report_$$.txt" 4519618f8bSFrançois Revol report_ack="<html><head></head><body><h1>Done! You can close this window now.</h1></body></html>" 469829800dSFrançois Revol report_cgi=http://127.0.0.1:$report_port/hwreport 479829800dSFrançois Revol ( 48*8e8f7748SFrançois Revol # force a previous instance to close 496c278c3bSFrançois Revol $netcat 127.0.0.1 8989 < /dev/null > /dev/null 509829800dSFrançois Revol echo "listening on port $report_port" 519829800dSFrançois Revol # 529829800dSFrançois Revol (echo -e "HTTP/1.1 100 Continue\r\n\r\n"; echo -e "HTTP/1.1 200 OK\r\nDate: $(date)\r\nContent-Type: text/html\r\nContent-Length: ${#report_ack}\r\n\r\n$report_ack") | $netcat -q 1 -l -p $report_port > "$report_file" 539829800dSFrançois Revol 546c278c3bSFrançois Revol # make sure we have something 556c278c3bSFrançois Revol if [ -s "$report_file" ]; then 569829800dSFrançois Revol open "$report_file" 579829800dSFrançois Revol sleep 1 589829800dSFrançois Revol alert "A file named $(basename $report_file) has been created on your desktop. You can copy this file to an external drive to submit it with another operating system." "Ok" 596c278c3bSFrançois Revol else 606c278c3bSFrançois Revol rm "$report_file" 616c278c3bSFrançois Revol fi 629829800dSFrançois Revol ) & 639829800dSFrançois Revol} 649829800dSFrançois Revol 659829800dSFrançois Revoldetect_network () 669829800dSFrançois Revol{ 679829800dSFrançois Revol ping -c 1 "$report_site" 689829800dSFrançois Revol if [ "$?" -gt 0 ]; then 699829800dSFrançois Revol alert --stop "Cannot contact the hardware report site ($report_site). 709829800dSFrançois RevolYou can continue anyway and generate a local file to submit later on, or try to configure networking." "Cancel" "Configure Network" "Continue" 719829800dSFrançois Revol case "$?" in 729829800dSFrançois Revol 0) 739829800dSFrançois Revol exit 0 749829800dSFrançois Revol ;; 759829800dSFrançois Revol 1) 769829800dSFrançois Revol /system/preferences/Network 779829800dSFrançois Revol detect_network 789829800dSFrançois Revol ;; 799829800dSFrançois Revol 2) 809829800dSFrançois Revol start_fake_httpd 819829800dSFrançois Revol ;; 829829800dSFrançois Revol *) 839829800dSFrançois Revol exit 1 849829800dSFrançois Revol ;; 859829800dSFrançois Revol esac 869829800dSFrançois Revol fi 879829800dSFrançois Revol} 889829800dSFrançois Revol 899829800dSFrançois Revolcheck_pci () 909829800dSFrançois Revol{ 919829800dSFrançois Revol echo "<h2>PCI devices</h2><dl>" 925dfed048SJoseph Prostko echo "<div><i>List of detected PCI devices. This does not indicate that every probed device is supported by a driver.</i></div><br />" 939829800dSFrançois Revol devn=0 949829800dSFrançois Revol bus="pci" 959829800dSFrançois Revol vendor='' 969829800dSFrançois Revol device='' 979829800dSFrançois Revol true; 989829800dSFrançois Revol listdev | while read line; do 999829800dSFrançois Revol 1009829800dSFrançois Revol case "$line" in 1019829800dSFrançois Revol device*) 1029829800dSFrançois Revol case "$vendor" in 1039829800dSFrançois Revol "") 1049829800dSFrançois Revol desc="${line/device /}" 1059829800dSFrançois Revol echo "<dt><b>$desc</b></dt>" 1069829800dSFrançois Revol ;; 1079829800dSFrançois Revol *) 1089829800dSFrançois Revol devicestr=${line#*:} 1099829800dSFrançois Revol device="${line%:*}" 1109829800dSFrançois Revol device="${device#device }" 1119829800dSFrançois Revol echo "<dd>" 1129829800dSFrançois Revol echo "<div>$vendor:$device <i>$vendorstr:$devicestr</i></div>" 1139829800dSFrançois Revol descline="$vendor:$device \"$vendorstr\" \"$devicestr\" $desc" 11418b34d36SFrançois Revol echo "<div>Identification: <input type='text' id='$bus${devn}_desc' name='$bus${devn}_desc' value='$descline' readonly='readonly' size='80' /></div>" 1159829800dSFrançois Revol 1169829800dSFrançois Revol echo "<div>" 11718b34d36SFrançois Revol echo "<table border='0'>" 11818b34d36SFrançois Revol echo "<tr><td>" 1199829800dSFrançois Revol echo "Status: " 12018b34d36SFrançois Revol echo "</td><td>" 1212362652aSFrançois Revol echo "<input type='radio' name='$bus${devn}_status' id='$bus${devn}_status_ok' value='ok' /><label for='$bus${devn}_status_ok' class='status_ok'>Working</label>" 12218b34d36SFrançois Revol echo "</td></tr><tr><td></td><td>" 12318b34d36SFrançois Revol #echo "<br />" 1242362652aSFrançois Revol echo "<input type='radio' name='$bus${devn}_status' id='$bus${devn}_status_ko' value='ko' /><label for='$bus${devn}_status_ko' class='status_ko'>Not working</label>" 12518b34d36SFrançois Revol echo "</td></tr><tr><td></td><td>" 12618b34d36SFrançois Revol #echo "<br />" 1272362652aSFrançois Revol echo "<input type='radio' name='$bus${devn}_status' id='$bus${devn}_status_unkn' value='unkn' checked='checked' /><label for='$bus${devn}_status_unkn' class='status_unkn'>Unknown</label>" 12818b34d36SFrançois Revol echo "</td></tr>" 12918b34d36SFrançois Revol echo "</table>" 1309829800dSFrançois Revol echo "</div>" 1319829800dSFrançois Revol 1329829800dSFrançois Revol echo "<div>" 1339829800dSFrançois Revol echo "Is it an add-in card (not part of the motherboard) ? " 1349829800dSFrançois Revol echo "<input type='checkbox' name='$bus${devn}_addin' id='$bus${devn}_addin' /><label for='$bus${devn}_addin'>Yes</label>" 1359829800dSFrançois Revol echo "</div>" 1369829800dSFrançois Revol 1379829800dSFrançois Revol echo "<div>" 1389829800dSFrançois Revol echo "Comment: " 1399829800dSFrançois Revol echo "<input type='text' name='$bus${devn}_comment' id='$bus${devn}_comment' placeholder='bug, missing feature...' size='30' />" 1409829800dSFrançois Revol echo "</div>" 1419829800dSFrançois Revol 1422362652aSFrançois Revol echo "<br />" 1432362652aSFrançois Revol 1449829800dSFrançois Revol echo "</dd>" 1459829800dSFrançois Revol 1469829800dSFrançois Revol vendor='' 1479829800dSFrançois Revol devn=$(($devn+1)) 1489829800dSFrançois Revol ;; 1499829800dSFrançois Revol esac 1509829800dSFrançois Revol ;; 1519829800dSFrançois Revol vendor*) 1529829800dSFrançois Revol vendorstr=${line#*:} 1539829800dSFrançois Revol vendor="${line%:*}" 1549829800dSFrançois Revol vendor="${vendor#vendor }" 1559829800dSFrançois Revol ;; 1569829800dSFrançois Revol *) 1579829800dSFrançois Revol ;; 1589829800dSFrançois Revol esac 1599829800dSFrançois Revol done 1609829800dSFrançois Revol} 1619829800dSFrançois Revol 1629829800dSFrançois Revolcheck_usb () 1639829800dSFrançois Revol{ 1649829800dSFrançois Revol echo "<h2>USB devices</h2><dl>" 1659829800dSFrançois Revol echo "<div><i>List ot detected USB devices. This does not indicate that every probed device is supported by a driver.</i></div><br />" 1669829800dSFrançois Revol devn=0 1679829800dSFrançois Revol bus="usb" 1689829800dSFrançois Revol listusb | while read vpid dev desc; do 1699829800dSFrançois Revol echo "<dt><b>$desc</b></dt>" 1709829800dSFrançois Revol echo "<dd>" 17118b34d36SFrançois Revol echo "<div>Identification: <input type='text' id='$bus${devn}_desc' name='$bus${devn}_desc' value='$vpid $dev $desc' readonly='readonly' size='80' /></div>" 1729829800dSFrançois Revol if [ "$vpid" != "0000:0000" ]; then 1739829800dSFrançois Revol enabled=1 1749829800dSFrançois Revol id="" 17518b34d36SFrançois Revol 1769829800dSFrançois Revol echo "<div>" 17718b34d36SFrançois Revol echo "<table border='0'>" 17818b34d36SFrançois Revol echo "<tr><td>" 1799829800dSFrançois Revol echo "Status: " 18018b34d36SFrançois Revol echo "</td><td>" 1812362652aSFrançois Revol echo "<input type='radio' name='$bus${devn}_status' id='$bus${devn}_status_ok' value='ok' /><label for='$bus${devn}_status_ok' class='status_ok'>Working</label>" 18218b34d36SFrançois Revol echo "</td></tr><tr><td></td><td>" 18318b34d36SFrançois Revol #echo "<br />" 1842362652aSFrançois Revol echo "<input type='radio' name='$bus${devn}_status' id='$bus${devn}_status_ko' value='ko' /><label for='$bus${devn}_status_ko' class='status_ko'>Not working</label>" 18518b34d36SFrançois Revol echo "</td></tr><tr><td></td><td>" 18618b34d36SFrançois Revol #echo "<br />" 1872362652aSFrançois Revol echo "<input type='radio' name='$bus${devn}_status' id='$bus${devn}_status_unkn' value='unkn' checked='checked' /><label for='$bus${devn}_status_unkn' class='status_unkn'>Unknown</label>" 18818b34d36SFrançois Revol echo "</td></tr>" 18918b34d36SFrançois Revol echo "</table>" 1909829800dSFrançois Revol echo "</div>" 1919829800dSFrançois Revol 1929829800dSFrançois Revol echo "<div>" 1939829800dSFrançois Revol echo "Is it an external device (not part of the motherboard) ? " 1949829800dSFrançois Revol echo "<input type='checkbox' name='$bus${devn}_addin' id='$bus${devn}_addin' name='$bus${devn}_addin' /><label for='$bus${devn}_addin'>Yes</label>" 1959829800dSFrançois Revol echo "</div>" 1969829800dSFrançois Revol 1979829800dSFrançois Revol echo "<div>" 1989829800dSFrançois Revol echo "Comment: " 1999829800dSFrançois Revol echo "<input type='text' name='$bus${devn}_comment' id='$bus${devn}_comment' placeholder='bug, missing feature...' size='30' />" 2009829800dSFrançois Revol echo "</div>" 2019829800dSFrançois Revol else 2022362652aSFrançois Revol echo "<div><i>(virtual device)</i></div>" 2039829800dSFrançois Revol fi 2042362652aSFrançois Revol 2052362652aSFrançois Revol echo "<br />" 2069829800dSFrançois Revol echo "</dd>" 2079829800dSFrançois Revol devn=$(($devn+1)) 2089829800dSFrançois Revol done 2099829800dSFrançois Revol echo "</dl>" 2109829800dSFrançois Revol} 2119829800dSFrançois Revol 21271f92c64SFrançois Revolcheck_dmidecode () { 21371f92c64SFrançois Revol which dmidecode >/dev/null 2>&1 || return 21471f92c64SFrançois Revol 215378601a7SFrançois Revol # make sure /dev/mem is published 216378601a7SFrançois Revol ls -l /dev/misc/mem > /dev/null 217378601a7SFrançois Revol 21871f92c64SFrançois Revol echo "<h2>DMIdecode output</h2>" 21971f92c64SFrançois Revol echo "<i>The output of dmidecode gives exact vendor and device identification.</i>" 22071f92c64SFrançois Revol 22171f92c64SFrançois Revol echo "<h3><tt>dmidecode</tt></h3>" 22271f92c64SFrançois Revol echo "<i>(full output, stripped from the machine UUID)</i><br />" 22371f92c64SFrançois Revol echo "<textarea style='font-family: monospace' rows='10' cols='80' name='dmidecode_output' id='dmidecode_output' readonly='readonly'>" 22471f92c64SFrançois Revol dmidecode | grep -v 'UUID:' 22571f92c64SFrançois Revol echo "</textarea>" 22671f92c64SFrançois Revol 22771f92c64SFrançois Revol dmidecode_bios_vendor="$(dmidecode -s bios-vendor)" 22871f92c64SFrançois Revol dmidecode_bios_version="$(dmidecode -s bios-version)" 22971f92c64SFrançois Revol dmidecode_bios_release_date="$(dmidecode -s bios-release-date)" 23071f92c64SFrançois Revol dmidecode_system_manufacturer="$(dmidecode -s system-manufacturer)" 23171f92c64SFrançois Revol dmidecode_system_product_name="$(dmidecode -s system-product-name)" 23271f92c64SFrançois Revol dmidecode_system_version="$(dmidecode -s system-version)" 23371f92c64SFrançois Revol} 23471f92c64SFrançois Revol 2359829800dSFrançois Revolcheck_machine () 2369829800dSFrançois Revol{ 2379829800dSFrançois Revol echo "<h2>Machine</h2>" 23871f92c64SFrançois Revol echo "Vendor: <input type='text' name='machine_vendor' id='machine_vendor' placeholder='Lenovo,HP,Asus...' value='$dmidecode_system_manufacturer'/>" 2399829800dSFrançois Revol echo "<br />" 24071f92c64SFrançois Revol echo "Model: <input type='text' name='machine_model' id='machine_model' placeholder='T510,l4500r...' value='$dmidecode_system_product_name' />" 2419829800dSFrançois Revol echo "<br />" 2429829800dSFrançois Revol echo "Specification page: <input type='url' name='machine_url' id='machine_url' placeholder='url of the model page on the vendor website' />" 2439829800dSFrançois Revol echo "<br />" 2449829800dSFrançois Revol echo "Comments: <br />" 2459829800dSFrançois Revol echo "<textarea style='font-family: monospace' rows='10' cols='40' name='machine_comments' id='machine_comments' placeholder='specific options...'></textarea>" 2469829800dSFrançois Revol echo "<br />" 2479829800dSFrançois Revol} 2489829800dSFrançois Revol 2499829800dSFrançois Revolcheck_haiku () 2509829800dSFrançois Revol{ 2519829800dSFrançois Revol echo "<h2>Haiku</h2>" 2529829800dSFrançois Revol uname_r="$(uname -r)" 2539829800dSFrançois Revol uname_v="$(uname -v)" 2549829800dSFrançois Revol echo "Release: <input type='text' name='uname_r' id='uname_r' value='$uname_r' readonly='readonly' size='6' />" 2559829800dSFrançois Revol echo "<br />" 2569829800dSFrançois Revol echo "Version: <input type='text' name='uname_v' id='uname_v' value='$uname_v' readonly='readonly' size='30' />" 2579829800dSFrançois Revol echo "<br />" 2589829800dSFrançois Revol echo "Comments: <br />" 2599829800dSFrançois Revol echo "<textarea style='font-family: monospace' rows='4' cols='40' name='haiku_comments' id='haiku_comments' placeholder='Custom build, gcc4...' ></textarea>" 2609829800dSFrançois Revol echo "<br />" 2619829800dSFrançois Revol} 2629829800dSFrançois Revol 2639829800dSFrançois Revolcheck_utils () 2649829800dSFrançois Revol{ 2659829800dSFrançois Revol echo "<h2>Utilities output</h2>" 2669829800dSFrançois Revol echo "<i>The output of some system utilities gives precious informations on the processor model and other stuff...</i>" 2679829800dSFrançois Revol 2689829800dSFrançois Revol echo "<h3><tt>sysinfo</tt></h3>" 2699829800dSFrançois Revol echo "<i>(system info)</i><br />" 2709829800dSFrançois Revol echo "<textarea style='font-family: monospace' rows='10' cols='80' name='sysinfo_output' id='sysinfo_output' readonly='readonly'>" 2719829800dSFrançois Revol sysinfo 2729829800dSFrançois Revol echo "</textarea>" 2739829800dSFrançois Revol 2749829800dSFrançois Revol echo "<h3><tt>listimage 1</tt></h3>" 2759829800dSFrançois Revol echo "<i>(list of loaded kernel drivers)</i><br />" 2769829800dSFrançois Revol echo "<textarea style='font-family: monospace' rows='10' cols='80' name='listimage_1_output' id='listimage_1_output' readonly='readonly'>" 2779829800dSFrançois Revol listimage 1 2789829800dSFrançois Revol echo "</textarea>" 2799829800dSFrançois Revol 2809829800dSFrançois Revol echo "<h3><tt>ifconfig</tt></h3>" 2819829800dSFrançois Revol echo "<i>(list of network interfaces)</i><br />" 2829829800dSFrançois Revol echo "<textarea style='font-family: monospace' rows='10' cols='80' name='ifconfig_output' id='ifconfig_output' readonly='readonly'>" 2839829800dSFrançois Revol ifconfig 2849829800dSFrançois Revol echo "</textarea>" 2859829800dSFrançois Revol 286*8e8f7748SFrançois Revol echo "<h3><tt>pkgman list-repos</tt></h3>" 287*8e8f7748SFrançois Revol echo "<i>(list of configured package repositories)</i><br />" 288*8e8f7748SFrançois Revol echo "<textarea style='font-family: monospace' rows='10' cols='80' name='pkgman_list_repos_output' id='pkgman_list_repos_output' readonly='readonly'>" 289*8e8f7748SFrançois Revol pkgman list-repos 290*8e8f7748SFrançois Revol echo "</textarea>" 291*8e8f7748SFrançois Revol 292*8e8f7748SFrançois Revol echo "<h3><tt>pkgman search -a</tt></h3>" 2939829800dSFrançois Revol echo "<i>(list of installed packaged)</i><br />" 294*8e8f7748SFrançois Revol echo "<textarea style='font-family: monospace' rows='10' cols='80' name='pkgman_search_a_output' id='pkgman_search_a_output' readonly='readonly'>" 295*8e8f7748SFrançois Revol pkgman search -a 2969829800dSFrançois Revol echo "</textarea>" 2979829800dSFrançois Revol 2989829800dSFrançois Revol echo "<br />" 2999829800dSFrançois Revol} 3009829800dSFrançois Revol 3019829800dSFrançois Revolcheck_syslog () 3029829800dSFrançois Revol{ 3039829800dSFrançois Revol echo "<h2>System log</h2>" 3049829800dSFrançois Revol echo "<div><i>Part of the system boot log that could help developer understand why some devices are not recognized...</i></div>" 3059829800dSFrançois Revol echo "<textarea style='font-family: monospace' rows='10' cols='80' name='syslog' id='syslog' readonly='readonly'>" 3069829800dSFrançois Revol cat /var/log/syslog 3079829800dSFrançois Revol echo "</textarea>" 3089829800dSFrançois Revol 3099829800dSFrançois Revol} 3109829800dSFrançois Revol 3119829800dSFrançois Revolcheck_sender () 3129829800dSFrançois Revol{ 3139829800dSFrançois Revol echo "<h2>Sender info (optional)</h2>" 3149829800dSFrançois Revol echo "Name: <input type='text' name='sender_name' id='sender_name' placeholder='Your name' />" 3159829800dSFrançois Revol echo "<br />" 3169829800dSFrançois Revol echo "Mail: <input type='email' name='sender_name' id='sender_name' placeholder='contact email' />" 3179829800dSFrançois Revol echo "<br />" 3189829800dSFrançois Revol echo "Other comments: <br />" 3199829800dSFrançois Revol echo "<textarea style='font-family: monospace' rows='4' cols='40' name='sender_comments' id='sender_comments' placeholder='IRC nickname on freenode...' ></textarea>" 3209829800dSFrançois Revol echo "<br />" 3219829800dSFrançois Revol} 3229829800dSFrançois Revol 3239829800dSFrançois Revolcheck_all () 3249829800dSFrançois Revol{ 3259829800dSFrançois Revol echo "<html>" 3262362652aSFrançois Revol echo "<head>" 32718b34d36SFrançois Revol echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">' 3282362652aSFrançois Revol echo "<title>Hardware report</title>" 32918b34d36SFrançois Revol #echo '<link rel="stylesheet" type="text/css" href="http://svn.haiku-os.org/haiku/haiku/trunk/docs/welcome/Haiku-doc.css">' 33018b34d36SFrançois Revol 3312362652aSFrançois Revol echo "<style type='text/css'>" 3322362652aSFrançois Revol echo ".status_ok { color: #008000 }" 3332362652aSFrançois Revol echo ".status_ko { color: #800000 }" 3342362652aSFrançois Revol echo ".status_unkn { color: #000080 }" 3352362652aSFrançois Revol echo "</style>" 3362362652aSFrançois Revol echo "</head>" 3379829800dSFrançois Revol echo "<body>" 33818b34d36SFrançois Revol echo "<div id='content'>" 3399829800dSFrançois Revol echo "<form method='POST' action='$report_cgi'>" 3409829800dSFrançois Revol 34193b9886aSFrançois Revol do_notify 0.1 "Checking for PCI hardware..." 3429829800dSFrançois Revol check_pci 34393b9886aSFrançois Revol 34471f92c64SFrançois Revol do_notify 0.2 "Checking for USB hardware..." 3459829800dSFrançois Revol check_usb 34693b9886aSFrançois Revol 34771f92c64SFrançois Revol do_notify 0.3 "Checking for utility outputs..." 3489829800dSFrançois Revol check_utils 34993b9886aSFrançois Revol 35071f92c64SFrançois Revol do_notify 0.7 "Dumping syslog output..." 3519829800dSFrançois Revol check_syslog 3526f6d1e36SFrançois Revol 35371f92c64SFrançois Revol do_notify 0.8 "Checking machine infos..." 35471f92c64SFrançois Revol check_dmidecode 3556f6d1e36SFrançois Revol check_machine 35671f92c64SFrançois Revol 35771f92c64SFrançois Revol do_notify 0.9 "Checking for Haiku version..." 35871f92c64SFrançois Revol check_haiku 35971f92c64SFrançois Revol 3609829800dSFrançois Revol check_sender 3619829800dSFrançois Revol 3626c278c3bSFrançois Revol do_notify 1.0 "Done!" --timeout 3 36393b9886aSFrançois Revol 3649829800dSFrançois Revol echo "<div><i>Note: this form will only send data that is visible on this page.</i></div>" 3659829800dSFrançois Revol 3669829800dSFrançois Revol echo "<input type='submit' name='submit' value='submit'>" 3679829800dSFrançois Revol 3689829800dSFrançois Revol echo "</form>" 36918b34d36SFrançois Revol echo "</div>" 3709829800dSFrançois Revol echo "</body>" 3719829800dSFrançois Revol echo "</html>" 3729829800dSFrançois Revol} 3739829800dSFrançois Revol 3749829800dSFrançois Revoltf=/tmp/hw_checker_$$.html 3759829800dSFrançois Revol 376*8e8f7748SFrançois Revoldo_notify 0.0 "Checking for needed packages..." 377*8e8f7748SFrançois Revoltry_install_packages 378*8e8f7748SFrançois Revol 379894526b5SFrançois Revoldo_notify 0.0 "Checking for network..." 380894526b5SFrançois Revoldetect_network 381894526b5SFrançois Revol 3829829800dSFrançois Revolcheck_all > "$tf" 3839829800dSFrançois Revol 3849829800dSFrançois Revolopen "$tf" 3859829800dSFrançois Revol 386