diff --git a/docs/scripts/getInfo.md b/docs/scripts/getInfo.md new file mode 100644 index 0000000..cfc3d77 --- /dev/null +++ b/docs/scripts/getInfo.md @@ -0,0 +1,159 @@ +# getInfo + +> c'est un script bash qui rassemble un certain nombre d'informations techniques sur la configuration d'un PC + +> le rapport est au format markdown + +> il propose un export du rapport sur un pastebin pour partager les informations, par défaut le paste sera + conservé 7 jours + +> normalement, aucunes données confidentielles ne sont contenues dans le rapport + +> majoritairement, tout est collecté avec les droits utilisateur, sauf dmesg et la config réseau ssid de +NetworkManager + +> l'installation du script est possible, en option. il se mettra éventuellement à jour automatiquement + + +## chargement et lancement du script: + +```shell +wget -O getInfo https://framagit.org/kyodev/kyopages/raw/master/scripts/getInfo +chmod +x getInfo +``` +_remarque:_ lancer le script avec les droits root, permettra d'accéder à dmesg + +```shell +./getInfo +``` +```text + _ ___ __ + __ _ ___| |_|_ _|_ __ / _| ___ + / _' |/ _ \ __|| || '_ \| |_ / _ \ +| (_| | __/ |_ | || | | | _| (_) | + \__, |\___|\__|___|_| |_|_| \___/ + |___/ + version 1.0.0b1 - 17/08/2017 + +............ +exporter sur un pastebin par défaut? [o/N] + + le rapport est disponible en local, fichier: getInfo_rapport.md + + vous pouvez le visualiser avec getInfo -l + +``` +* sauf, à lancer le script avec les privilèges root, les extraits des erreurs/warnings/critiques de dmesg ne sont + pas rapportés, ce qui peut être dommage en recherche de diagnostics +* export ou non, le rapport au format markdown est disponible dans le répertoire courant, sous le nom: + **getInfo_rapport.md** +* par défaut, l'export sur un pastebin ne se fera pas (touche Entrée) +* répondre o + \[ entrée \] permet de récupérer un lien où le paste sera visible + +```text +exporter sur un pastebin par défaut? [o/N] o + + + votre paste: + https://www.pastery.net/dznaxr/ + + + le rapport est disponible en local, fichier: getInfo_rapport.md + + vous pouvez le visualiser avec getInfo -l + +``` +si vous n'avez pas exporté de suite, vous pouvez le faire avec la commande `./getInfo -p` ou revoir à l'écran +le rapport avec `./getInfo -l` + +### exemple de rapport + +[getInfo_rapport](getInfo_rapport.md) + +## help + +```shell +./getInfo -h +``` +```text + _ ___ __ + __ _ ___| |_|_ _|_ __ / _| ___ + / _' |/ _ \ __|| || '_ \| |_ / _ \ +| (_| | __/ |_ | || | | | _| (_) | + \__, |\___|\__|___|_| |_|_| \___/ + |___/ + version 1.0.0 - 17/08/2017 + + ---------------------------------------------------------------------- + ./getInfo : exécution normale + getInfo : exécution normale si script installé dans le système + + options: + -d, --dmesg : dmesg erreur, warning, critique. root requis, rapport seul de dmesg + -h, --help : affichage aide + --ip : affiche ip(s) publique(s) (ipv4 / ipv6), /!\ infos confidentielles, sans rapport + -l, --list : afficher le rapport existant + -p, --paste : exporte le rapport existant + -s, --ssid : affiche configurations ssid /!\ infos confidentielles + pas de rapport, root et NetworkManager requis + + -i, --install : installation du script dans le système, droits root requis + -r, --remove : suppression du script dans le système, droits root requis + -u, --upgrade : upgrade script si maj possible + -v, --version : version du script, en ligne et en cours d'exécution + +``` + +## options diverses + +* l'extrait dmesg peut être isolé avec `./getInfo -d` ou `getInfo -d`, lancé avec les droits **root**. + _getInfo_rapport.md_ contiendra uniquement cet extrait +* un rapport _getInfo_rapport.md_ existant peut être exporté sur le pastebin avec `./getInfo -p` + ou `getInfo -p` +* `./getInfo -l` ou `/getInfo -l` permet d'afficher un rapport _getInfo_rapport.md_ existant +* `./getInfo --ip` ou `getInfo --ip` affiche les IPs publiques du PC (ipV4 et/ou ipV6) +* `./getInfo -s` ou `getInfo --ssid` affiche seulement (pas de rapport construit) la configuration des ssid + de NetworkManger. Attention, cela affichera probablement les mot de passe des réseaux wifi configurés. + Les **droits root** sont requis + +## installation et exploitation du script + +* `./getInfo -i` **droits root** requis. Installation du script dans le système, pour + exploitation plus fréquente. Le script téléchargé sera effacé du répertoire courant. Le lancement se fera + donc par `getInfo`. Le script sera mis à jour automatiquement, avec une périodicité hebdomadaire. +* `getInfo -u` mise à jour manuelle si possible, du script. Cette opération étant + automatiquement lancée toutes les semaines si le script est installé. +* `getInfo -r` **droits root** requis. Suppression du script du système. +* `getInfo -v` affiche la version du script et la version en ligne. + + +## sources + +sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getInfo) + + +## changelog + +sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getInfo_changelog.md) + + +## contact + +pour tout problème ou suggestion concernant ce script, n'hésitez pas à ouvrir une issue +[Framagit](https://framagit.org/kyodev/kyopages/issues) + +IRC freenode: ##sdeb + + +## license + +[LPRAB/WTFPL](https://framagit.org/kyodev/kyopages/blob/master/scripts/LICENSE.md) + + +## remerciements + +* [neofetch](https://github.com/dylanaraps/neofetch) pour du code sur la détection système. + neofetch est un successeur dynamique de screenfetch avec du code sympa +* [wireless-info](https://github.com/UbuntuForums/wireless-info) pour savoir comment détecter les managers + de réseaux +* [pastery.net](https://www.pastery.net/) pour héberger des pastebin au format markdown diff --git a/docs/scripts/getInfo_rapport.md b/docs/scripts/getInfo_rapport.md new file mode 100644 index 0000000..00da695 --- /dev/null +++ b/docs/scripts/getInfo_rapport.md @@ -0,0 +1,473 @@ +# getInfo 1.0.0 sur 1101HA / Linux + +Rapport au 17 août 2017 10:20 +0200 + +## système + +**CPU: Intel Atom Z520 (1)(2) @ 0.8 - 1.3 GHz [55.0°C]** +**GPU: Intel Corporation System Controller Hub (SCH Poulsbo) Graphics Controller** +**type de boot: Legacy boot** +**Debian GNU/Linux 9 (stretch) 9.1** + +``` +architecture: 32bits, i686 +uname: 4.9.0-3-686-pae i686 GNU/Linux +BOOT_IMAGE=/boot/vmlinuz-4.9.0-3-686-pae, ro, quiet +résolution: 1366x768 @ 60Hz +serveur d'affichage: x11 +desktop (DE): MATE +window manager: Metacity (Marco) +shell actif: bash 4.4.12(1) +shells installés: sh dash bash rbash +disque(s): 9,1G / 43G (22%) +batteries(s): 100% [Full] +dernier boot: 2017-08-15 11:53:49+0200, uptime: depuis 1 jour, 22 h, 26 mn +192.168.1.129 pour wlp1s0 (wifi) +``` + +## processeur / mémoire + +``` +CPU: Intel Atom Z520 (1)(2) @ 0.8 - 1.3 GHz [55.0°C] +adressage: 32 bits physical, 32 bits virtual +bogomips: 2662.55 + +mémoire Ram utilisée/totale: 547Mo / 994Mo + +mémoire système: total used free shared buff/cache available +Mem: 994M 475M 121M 72M 398M 303M +Swap: 3,7G 87M 3,6G +Total: 4,7G 562M 3,8G +``` +flags cpu: +``` +fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon pebs bts aperfmperf eagerfpu pni dtes64 monitor ds_cpl vmx est tm2 ssse3 xtpr pdcm movbe lahf_lm tpr_shadow vnmi flexpriority dtherm +``` + +## graphisme + +**GPU: Intel Corporation System Controller Hub (SCH Poulsbo) Graphics Controller** +**résolution: 1366x768 @ 60Hz** + + +**lspci -nnvvv | grep -iEA 13 '^[0-9]+.*vga|display|3d'** (matériel) +``` +00:02.0 VGA compatible controller [0300]: Intel Corporation System Controller Hub (SCH Poulsbo) Graphics Controller [8086:8108] (rev 07) (prog-if 00 [VGA controller]) + Subsystem: ASUSTeK Computer Inc. System Controller Hub (SCH Poulsbo) Graphics Controller [1043:83ce] + Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- + Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever +2: enp3s0: mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000 + link/ether 00:26:18:69:ec:c2 brd ff:ff:ff:ff:ff:ff +3: wlp1s0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether 00:25:d3:43:de:42 brd ff:ff:ff:ff:ff:ff + inet 192.168.1.129/24 brd 192.168.1.255 scope global dynamic wlp1s0 + valid_lft 29950sec preferred_lft 29950sec + inet6 2a01:e35:8bf2:37b0:f9ef:6cdb:f8a9:d419/64 scope global noprefixroute dynamic + valid_lft 86359sec preferred_lft 86359sec + inet6 fe80::96a8:dcbc:b798:370/64 scope link + valid_lft forever preferred_lft forever +``` +**iwconfig** +``` +wlp1s0 IEEE 802.11 ESSID:"freemfi" + Mode:Managed Frequency:2.452 GHz Access Point: 14:0C:76:54:74:91 + Bit Rate=65 Mb/s Tx-Power=15 dBm + Retry short limit:7 RTS thr:off Fragment thr:off + Encryption key:off + Power Management:off + Link Quality=67/70 Signal level=-43 dBm + Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 + Tx excessive retries:0 Invalid misc:86 Missed beacon:0 +``` +**/etc/network/interfaces** +``` +source /etc/network/interfaces.d/* +auto lo +iface lo inet loopback +``` +**ip route show** +``` +default via 192.168.1.5 dev wlp1s0 proto static metric 600 +169.254.0.0/16 dev wlp1s0 scope link metric 1000 +192.168.1.0/24 dev wlp1s0 proto kernel scope link src 192.168.1.129 metric 600 +``` +**/etc/resolv.conf** +``` +nameserver 37.187.16.17 +nameserver 52.174.55.168 +nameserver 80.67.169.12 +nameserver 80.67.169.40 +nameserver 2a01:e00::1 +nameserver 2a01:e00::2 +``` +### network managers + +installé(s): **NetworkManager** +en fonctionnement: **/usr/sbin/NetworkManager --no-daemon** + +### modules réseau + +liste non garantie complète +``` +ath9k 90112 0 +ath9k_common 32768 1 ath9k +ath9k_hw 413696 2 ath9k,ath9k_common +ath 24576 3 ath9k_hw,ath9k,ath9k_common +mac80211 548864 1 ath9k +cfg80211 450560 4 mac80211,ath9k,ath,ath9k_common +wmi 16384 0 +rfkill 20480 6 eeepc_laptop,bluetooth,cfg80211 +``` +**iwlist chan** +``` +wlp1s0 14 channels in total; available frequencies : + Channel 01 : 2.412 GHz + Channel 02 : 2.417 GHz + Channel 03 : 2.422 GHz + Channel 04 : 2.427 GHz + Channel 05 : 2.432 GHz + Channel 06 : 2.437 GHz + Channel 07 : 2.442 GHz + Channel 08 : 2.447 GHz + Channel 09 : 2.452 GHz + Channel 10 : 2.457 GHz + Channel 11 : 2.462 GHz + Channel 12 : 2.467 GHz + Channel 13 : 2.472 GHz + Channel 14 : 2.484 GHz + Current Frequency:2.452 GHz (Channel 9) +``` + +## Network Manager + +**grep -vE '#|^$' /var/lib/NetworkManager/NetworkManager.state** +``` +[main] +NetworkingEnabled=true +WirelessEnabled=true +WWANEnabled=true +``` +**grep -vE '#|^$' /etc/NetworkManager/NetworkManager.conf** +``` +[main] +plugins=ifupdown,keyfile +[ifupdown] +managed=false +``` + +## wifis à proximité + +**nmcli -f SSID,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY device wifi list** +``` +SSID BSSID MODE CHAN FRÉQ DÉBIT SIGNAL BARS SÉCURITÉ +FreeWifi 14:0C:76:54:74:92 Infra 9 2452 MHz 54 Mo/s 94 ▂▄▆█ -- +FreeWifi_secure 14:0C:76:54:74:93 Infra 9 2452 MHz 54 Mo/s 94 ▂▄▆█ WPA2 802.1X +freemfi 14:0C:76:54:74:91 Infra 9 2452 MHz 54 Mo/s 79 ▂▄▆_ WPA2 +KLAC2Free F4:CA:E5:D2:6E:74 Infra 11 2462 MHz 54 Mo/s 45 ▂▄__ WPA2 +Bbox-10913089 E8:BE:81:B1:FE:B0 Infra 1 2412 MHz 54 Mo/s 42 ▂▄__ WPA1 WPA2 +FreeWifi_secure F4:CA:E5:D2:6E:76 Infra 11 2462 MHz 54 Mo/s 37 ▂▄__ WPA2 802.1X +FreeWifi F4:CA:E5:D2:6E:75 Infra 11 2462 MHz 54 Mo/s 32 ▂▄__ -- +FreeWifi 14:0C:76:F5:95:C9 Infra 3 2422 MHz 54 Mo/s 27 ▂___ -- +Freebox-62E169 14:0C:76:F5:95:C8 Infra 3 2422 MHz 54 Mo/s 25 ▂___ WPA1 +FreeWifi 7A:13:8E:BD:A0:B6 Infra 7 2442 MHz 54 Mo/s 24 ▂___ -- +FreeWifi_secure 7A:13:8E:BD:A0:B7 Infra 7 2442 MHz 54 Mo/s 22 ▂___ WPA1 802.1X +FreeWifi F4:CA:E5:B0:DE:C1 Infra 11 2462 MHz 54 Mo/s 22 ▂___ -- +Livebox-334E B4:A5:EF:D3:33:4C Infra 6 2437 MHz 54 Mo/s 20 ▂___ WPA2 +-- 7A:13:8E:BD:A0:B5 Infra 7 2442 MHz 54 Mo/s 20 ▂___ WPA2 +SFR WiFi FON 7A:95:04:06:F0:E5 Infra 11 2462 MHz 54 Mo/s 20 ▂___ -- +GilBENETT BA:95:9A:05:36:E8 Infra 12 2467 MHz 54 Mo/s 20 ▂___ WEP +freebox_guillot 7A:13:8E:BD:A0:B4 Infra 7 2442 MHz 54 Mo/s 19 ▂___ WEP +Bbox-1836349E 64:7C:34:C6:C7:9C Infra 1 2412 MHz 54 Mo/s 17 ▂___ WPA1 WPA2 +FreeWifi_secure 14:0C:76:F5:95:CA Infra 3 2422 MHz 54 Mo/s 17 ▂___ WPA2 802.1X +freebox_JACKY 68:A3:78:1D:F9:1C Infra 11 2462 MHz 54 Mo/s 17 ▂___ WPA1 +FreeWifi 68:A3:78:0F:25:0A Infra 12 2467 MHz 54 Mo/s 17 ▂___ -- +FreeWifi 06:7F:8F:C1:CF:82 Infra 3 2422 MHz 54 Mo/s 15 ▂___ -- +-- 06:7F:8F:C1:CF:81 Infra 3 2422 MHz 54 Mo/s 15 ▂___ WPA2 +FreeWifi_secure 06:7F:8F:C1:CF:83 Infra 3 2422 MHz 54 Mo/s 12 ▂___ WPA1 802.1X +orange 48:83:C7:25:0E:81 Infra 6 2437 MHz 54 Mo/s 12 ▂___ -- +Livebox-CD70 48:83:C7:25:0E:80 Infra 6 2437 MHz 54 Mo/s 12 ▂___ WPA2 +FreeWifi_secure F4:CA:E5:B0:DE:C2 Infra 11 2462 MHz 54 Mo/s 12 ▂___ WPA2 802.1X +FREEBOX_HABIB_2C 06:7F:8F:C1:CF:80 Infra 3 2422 MHz 54 Mo/s 10 ▂___ WPA1 +FreeWifi_secure 68:A3:78:0F:25:0B Infra 12 2467 MHz 54 Mo/s 10 ▂___ WPA2 802.1X +mrowifi 68:A3:78:0F:25:09 Infra 12 2467 MHz 54 Mo/s 10 ▂___ WPA1 +``` + +## périphériques USB + +**lsusb** +``` +Bus 003 Device 004: ID 13d3:5071 IMC Networks +Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub +Bus 004 Device 003: ID 0b05:b700 ASUSTek Computer, Inc. Broadcom Bluetooth 2.1 +Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub +Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub +Bus 001 Device 002: ID 046d:c52f Logitech, Inc. Unifying Receiver +Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub +``` +**lsusb -t** +``` +/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M + |__ Port 2: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M + |__ Port 2: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M + |__ Port 2: Dev 3, If 2, Class=Vendor Specific Class, Driver=, 12M + |__ Port 2: Dev 3, If 3, Class=Application Specific Interface, Driver=, 12M +/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/8p, 480M + |__ Port 7: Dev 4, If 0, Class=Video, Driver=uvcvideo, 480M + |__ Port 7: Dev 4, If 1, Class=Video, Driver=uvcvideo, 480M +/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M +/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M + |__ Port 2: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M + |__ Port 2: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M +``` + +## analyse boot + +durée de boot: 4.797s (kernel) + 25.807s (espace utilisateur) = 30.605s + +**systemd-analyze blame | head -n 20** +``` + 6.575s NetworkManager-wait-online.service + 5.844s loadcpufreq.service + 5.175s dev-sda1.device + 4.500s accounts-daemon.service + 4.015s upower.service + 3.917s networking.service + 3.534s exim4.service + 3.421s systemd-logind.service + 3.348s apt-daily-upgrade.service + 2.984s rsyslog.service + 2.887s NetworkManager.service + 2.783s avahi-daemon.service + 2.772s bluetooth.service + 2.710s ModemManager.service + 2.246s apt-daily.service + 1.466s systemd-fsck@dev-disk-by-uuid-426c6d02-3471-4158-b6f3-f1348c8c2d54.service + 1.195s keyboard-setup.service + 855ms systemd-tmpfiles-setup-dev.service + 762ms polkit.service + 706ms udisks2.service +``` + +## dmesg (erreur, warning ou critique) + +**dmesg -l err** (erreur) +``` +[ 10.780816] gma500 0000:00:02.0: trying to get vblank count for disabled pipe 0 +[ 10.780912] gma500 0000:00:02.0: trying to get vblank count for disabled pipe 0 +``` +**dmesg -l warn** (warning) +``` +[ 0.398049] pci 0000:03:00.0: [Firmware Bug]: disabling VPD access (can't determine size of non-standard VPD format) +[ 6.769087] systemd[1]: rtkit-daemon.service: Cannot add dependency job, ignoring: Unit rtkit-daemon.service is masked. +[ 9.587065] pmd_set_huge: Cannot satisfy [mem 0x3f800000-0x3fa00000] with a huge-page mapping due to MTRR override. +[ 11.234804] uvcvideo 3-7:1.0: Entity type for entity Extension 2 was not initialized! +[ 11.234821] uvcvideo 3-7:1.0: Entity type for entity Processing 3 was not initialized! +[ 11.234833] uvcvideo 3-7:1.0: Entity type for entity Camera 1 was not initialized! +``` + +_[rapport getInfo v1.0.0b1](https://kyodev.frama.io/kyopages/scripts/getInfo/) diff --git a/scripts/getInfo b/scripts/getInfo index c0269f6..0243b4f 100755 --- a/scripts/getInfo +++ b/scripts/getInfo @@ -1,14 +1,15 @@ #!/bin/bash -version=0.11.0 -date="08/08/2017" +version=1.0.0 +date="17/08/2017" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues" script="getInfo" urlScript="https://framagit.org/kyodev/kyopages/raw/master/scripts/$script" +urlNotice="https://kyodev.frama.io/kyopages/scripts/getInfo/" ##### license LPRAB/WTFPL -# auteur: simpledebian +# auteur: simpledeb # contributeurs: kyodev ##### @@ -34,7 +35,7 @@ EOF # detect system architecture, assign $architecture : 32bits, i686 | 64bits, amd64, return 1 on unknown architecture # remarque, debian: dpkg --print-architecture affiche i386 -f__architecture(){ +f__architecture(){ # v08/2017 spécifique case "$(uname -m)" in amd64 | x86_64 ) architecture="64bits, amd64";; @@ -52,113 +53,155 @@ f__architecture(){ esac } - # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur -f__error() { - echo -e "\n$RED Erreur critique: $1 $COLOR" + # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si upgrade($opType) +f__error() { # v16/08/2017 + echo -e "\n$RED Erreur critique: $1 $COLOR" for (( i=2 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done echo "$COLOR" if [ "$opType" == "upgrade" ]; then f__log "$script $version: $1"; fi exit 1 } - # affichage des paramètres en bleu, ligne vide à la fin -f__info() { - for (( i=1 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done - echo "$COLOR" + # affichage des paramètres en bleu, si $1=raw, pas d'espace en début de ligne, pas de ligne vide à la fin +f__info() { # v16/08/2017 + if [ "$1" == "raw" ]; then depart=2; + else local espace=" "; local depart=1; fi + for (( i=$depart ; i<=$# ; i++ )); do echo -e "$espace$BLUE${!i}"; done + [ "$1" == raw ] && printf "$COLOR" || echo "$COLOR" } # log spécifique, fichier log limité à 10000octets, $1 message à loguer -f__log(){ +f__log(){ # v08/2017 if [ -w "$fileLogs" ]; then if [ "$(stat -c %s $fileLogs)" -ge "10000" ]; then echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$fileLogs" else echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$fileLogs" fi + else + f__info "$fileLogs doit être activé" fi } - # test dépendances (commandes disponibles), $1 liste commandes ou $1...$x, si manquant, avertissement des commandes manquantes -f__requis(){ - local dependsFail - for i in $@; do which $i &>/dev/null || dependsFail+="$i "; done - [ "$dependsFail" ] && f__error "commandes(s) manquante(s)" " vous devez avoir le(s) commande(s) ""$RED$dependsFail""$BLUE""pour exploiter ce script" + # test dépendances/paquets, $1 liste commande[>paquet] (ex: killall>psmisc) + # si manque, info commandes manquantes, si debian, proposition paquet à installer et SORTIE + # si $2=debOnly et si paquets manquants: return 1 et $debOnlyPackages ( $1=liste paquets ) + # si $2=debOnly et si paquets présent: return 0 et $debOnlyPresents ( $1=liste paquets ) + # attention priorité $debOnlyPackages sur $debOnlyPresents +f__requis(){ # v16/08/2017-3 + local dependsMissing packagesMissing + unset debOnlyPackages debOnlyPresents + for i in $1; do + local command=$(cut -d '>' -f 1 <<< $i) + local package=$(cut -d '>' -f 2 <<< $i) + if [ "$2" == "debOnly" ]; then + if [ "$(which dpkg)" ]; then # package only et debian + LC_ALL=C dpkg --get-selections | grep -qE "^$package[[:space:]]+install" \ + && debOnlyPresents+="$package " || debOnlyPackages+="$package " + else f__error "dpkg n'est pas disponible sur ce système"; fi + elif [ -z "$(which $command)" ]; then + dependsMissing+="$command " + packagesMissing+="$package " + fi + done + [ "$debOnlyPackages" ] && debOnlyPackages=$(xargs <<< $debOnlyPackages) # trim début & fin + [ "$debOnlyPresents" ] && debOnlyPresents=$(xargs <<< $debOnlyPresents) # trim début & fin + [ "$debOnlyPackages" ] && return 1 + [ "$debOnlyPresents" ] && return 0 + if [ "$dependsMissing" ]; then + if [ -e /etc/debian_version ]; then f__error "paquet(s) manquant(s): " " $dependsMissing" \ + " vous devriez exécuter:$GREEN apt install $packagesMissing" + else f__error "commandes(s) manquante(s): " "$dependsMissing"; fi + fi } # user ayant initié la session graphique, assigne $user_, testé avec mate, gnome, xfce. manque KDE - # sortie script sur erreur, gestion variable environnement pour personnaliser l'user avec: - # USER_INSTALL=user script -f__user(){ - [ "$USER_INSTALL" ] && user_="$USER_INSTALL" # user_ via variable en environnement - if [ -z "$user_" ]; then # priorité à $USER_INSTALL - [ "$SUDO_UID" ] && user_id="$SUDO_UID" # sudo-gnome - echo "$XAUTHORITY" | grep -Eo '[0-9]+' && user_id="$(echo $XAUTHORITY | grep -Eo '[0-9]+')" || \ - user_id="$(echo $XDG_RUNTIME_DIR | grep -Eo '[0-9]+')" - [ "$user_id" ] && user_="$(grep $user_id /etc/passwd | cut -d ":" -f 1 )" || \ - user_="$(echo $XAUTHORITY | cut -d "/" -f 3)" + # return 1 sur echec ident user, return 2 sur absence home + # gestion variable environnement user avec: USER_INSTALL=user script +f__user(){ # v15/08/2017-4 + local user_id + if [ "$USER_INSTALL" ]; then user_="$USER_INSTALL"; fi # user_ via variable environnement + if [ -z "$user_" ]; then # priorité à $USER_INSTALL + if [ "$SUDO_UID" ]; then user_id="$SUDO_UID"; fi # sudo + user_id=$(grep -qEo '[0-9]+' <<< "$XAUTHORITY") || user_id=$(grep -qEo '[0-9]+' <<< $XDG_RUNTIME_DIR) + if [ "$user_id" ]; then user_=$(grep $user_id /etc/passwd | cut -d ":" -f 1 ) + else user_=$(echo $XAUTHORITY | cut -d "/" -f 3); fi + if [ -z "$user_" ] && [ "$LOGNAME" ] ; then user_=$(grep -v 'root' <<< $LOGNAME) + elif [ -z "$user_" ] && [ $(grep -v 'root' <<< $HOME) ]; then user_=$(cut -sd / -f 3 <<< $HOME) + elif [ -z "$user_" ]; then user_=$(grep -v 'root' <<< $(who | head -n1 | cut -d " " -f1)) + elif [ -z "$user_" ] && [ $(grep -v 'not') <<< $(LC_ALL=C tty) ]; then user_=$(stat -c %U $(tty)); fi + fi + if [ -z "$user_" ]; then + echo -e "user indéterminé, pour contourner, lancer le script avec:\n USER_INSTALL=user $0 n" \ + "merci contacter $projet $contact pour corriger ça" + return 1 + fi + if [ ! -d "/home/$user_" ]; then + echo -e "répertoire '/home/$user_' INEXISTANT" + return 2 fi - [ "$user_" ] && [ -d "/home/$user_" ] && return 0 || echo " répertoire '/home/$user_' INEXISTANT" - f__error " user indéterminé, lancer le script avec:\n USER_INSTALL=user $0" \ - "merci contacter $projet $contact pour corriger ça" } # test wget, $1 url à tester, sortie script sur erreur -f__wget_test(){ +f__wget_test(){ # v07/2017 echo " $1" - wget -Sq --tries=1 --timeout=15 -O /dev/null "$1" + wget -Sq --tries=1 --timeout=15 --user-agent="$user_agent" -O /dev/null "$1" f__error "Erreur wget" " réessayer et si persistance, contacter $projet $contact" " en indiquant les messages précédents." } # inscription dans tache upgrade en anacron hebdomadaire, via cron horaire -fscript_cronAnacron(){ +fscript_cronAnacron(){ # v17/08/2017 local dirAnacron="/home/$user_/.config/anacron" local dirSpool="$dirAnacron/spool" local fileAnacron="$dirAnacron/$script.anacrontab" + sed -i "/$script.anacrontab/d" /etc/crontab case "$1" in - install ) + install | upgrade ) mkdir -p "$dirAnacron" # table anacron - echo "7 01 $script nice /opt/bin/$script --upgrade &>/dev/null" > "$fileAnacron" - ## test: anacron journalier: echo "1 01 ""$script""test nice /opt/bin/$script --upgrade &>/dev/null" > "$fileAnacron" - chown -R --no-preserve-root "$user_": "$dirAnacron" - chmod -R --no-preserve-root ug+xw "$dirAnacron" + echo "7 01 $script nice /opt/bin/$script --upgrade" > "$fileAnacron" + ## test: anacron journalier: echo "1 01 $script test nice /opt/bin/$script --upgrade 2>/dev/null" >> "$fileAnacron" # création spool anacron utilisateur mkdir -p "$dirSpool" - chown -R --no-preserve-root "$user_": "$dirSpool" - chmod -R --no-preserve-root ug+xw "$dirSpool" - # crontab pour activation horaire anacron - grep -q ".*$script.anacrontab" /etc/crontab || \ + chown -R "$user_": "$dirAnacron" "$dirSpool" + if [ $EUID -eq 0 ]; then + # crontab pour activation horaire anacron echo "@hourly $user_ /usr/sbin/anacron -t $fileAnacron -S $dirSpool" >> /etc/crontab + service cron restart &>/dev/null || /etc/init.d/cron restart &>/dev/null || f__info "redémarrer cron ou le PC" + fi + [ "$(grep "$script" /etc/crontab)" ] || echo f__error "inscription crontab" \ + "certains systèmes semblent poser poser problème, merci de rapporter ce bug à $projet $contact" ;; remove ) rm "$dirSpool/$script"* &>/dev/null - sed -i "/$script.anacrontab/d" /etc/crontab rm "$fileAnacron" &>/dev/null - rm "$dirSpool/$script" &>/dev/null rmdir "$dirSpool" "$dirAnacron" &>/dev/null + service cron restart &>/dev/null || /etc/init.d/cron restart &>/dev/null || f__info "redémarrer cron ou le PC" ;; esac } - # mise à jour script si disponible -fscript_dl(){ + # mise à jour script si dispo +fscript_dl(){ # v17/08/2017 if [ "$script_aJour" == "ok" ]; then return 0; fi local dirTemp="/tmp/$script-$RANDOM/" mkdir -p "$dirTemp" opType="upgrade" wget -q --show-progress --tries=2 --timeout=15 -O "$dirTemp$script" "$urlScript" if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi - chmod a+rwx "$dirTemp$script" + chmod 755 "$dirTemp$script" chown "$user_": "$dirTemp$script" cp -d "$dirTemp$script" /opt/bin/"$script" rm -rf "$dirTemp" + fscript_cronAnacron "upgrade" f__info "\n $script mis à jour en version $versionScript" f__log "$script mis à jour en version $versionScript" + $0 upgrade # spécifique getFlash, script mis à jour, on relance le script en upgrade pour le plugin exit 0 } # version script en ligne, assigne $versionScript, $script_aJour=ok|ko -fscript_get_version(){ +fscript_get_version(){ # v08/2017 versionScript="$(wget -q --tries=2 --timeout=15 -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)" if [ "$versionScript" ]; then if [ "$version" != "$versionScript" ]; then @@ -172,7 +215,7 @@ fscript_get_version(){ } # installation du script dans le système -fscript_install(){ +fscript_install(){ # v08/2017 if dirname "$0" | grep -q 'bin' ; then f__info "$script $version est déjà installé" return 1 @@ -181,30 +224,29 @@ fscript_install(){ # install /opt mkdir -p /opt/bin/ cp -d "$(basename $0)" "/opt/bin/$script" - chmod a+rwx "/opt/bin/$script" - chown "$user_": "/opt/bin/$script" ln -s "/opt/bin/$script" "/usr/bin/$script" &>/dev/null + chmod 755 "/opt/bin/$script" # cron/anacron install fscript_cronAnacron "install" # création fichier log touch "$fileLogs" - chmod a+rwx "$fileLogs" - chown "$user_": "$fileLogs" - [ -f "$script"_changelog.md ] || rm "$(basename $0)" &>/dev/null ## on efface pas si changelog (dev) + chmod 644 "$fileLogs" + chown "$user_": "$fileLogs" "/opt/bin/$script" + [ -f "$script"_changelog.md ] || rm "$(basename $0)" &>/dev/null ## on efface pas si changelog (dev) f__info "$GREEN$script $version installé dans le système." "maintenant, appel du script par:$GREEN $script$BLUE (sans ./)" f__log "$script $version installé dans le système" + exit 0 } # suppression du script dans le système -fscript_remove(){ +fscript_remove(){ # v08/2017 [ $EUID -eq 0 ] || f__error "vous devez être ROOT pour supprimer ce script dans le système" # suppression de /opt rm /opt/bin/"$script" &>/dev/null unlink /usr/bin/"$script" &>/dev/null - unlink /usr/local/bin/"$script" &>/dev/null # ancienne localisation # cron/anacron remove - fscript_cronAnacron remove - f__info "$GREEN$script supprimé du système." + fscript_cronAnacron "remove" + f__info "$GREEN$script $version supprimé du système." f__log "$script $version supprimé du système" } @@ -240,7 +282,6 @@ fi__dialog_oui_non () { shopt -u nocasematch } - get_battery() { # thanks neofetch, assigne $battery for bat in "/sys/class/power_supply/BAT"*; do local capacity="$(< "${bat}/capacity")" @@ -630,8 +671,11 @@ fi_dmesg(){ # root only, si $1=dmesg rapport dmesg only if [ -z "$dmesg_crit" ] && [ -z "$dmesg_warn" ] && [ -z "$dmesg_warn" ]; then text+="**pas de messages** \n" fi + if [ "$1" == "dmesg" ]; then + echo > "$fileOutput" + chown "$user_": "$fileOutput" + fi echo -e "$text" >> "$fileOutput" - if [ "$1" == "dmesg" ]; then cat -n "$fileOutput"; fi } fi_disk(){ @@ -677,6 +721,7 @@ fi_disk(){ fi_gpu(){ # local graphCards=$(lspci -nnk | grep -iEA 3 'vga|display|3d') local graphCards=$(lspci -nnvvv | grep -iEA 13 '^[0-9]+.*vga|display|3d') + which glxinfo &>/dev/null && local openGl=$(glxinfo | grep 'OpenGL version string:') local extraitXorg=$(grep -E '\(WW\)|\(EE\)|\(NI\)|\(\?\?\)' /var/log/Xorg.*.log /home/$user_/.local/share/xorg/Xorg.*.log 2>/dev/null) local resolutions=$(xrandr --query | grep '^ *[0-9]' | head -n 10) @@ -687,11 +732,16 @@ fi_gpu(){ text+='```\n' text+="$graphCards \n" text+='```\n' + text+="\n**glxinfo | grep 'OpenGL version string:'** \n" + text+='```\n' + text+="$openGl \n" + text+='```\n' text+="**xrandr --query | grep '^ *[0-9]' | head -n 10** (10 premières résolutions possibles) \n" text+='```\n' text+="$resolutions \n" text+='```\n' text+="**grep -E '\(WW\)|\(EE\)|\(NI\)|\(\?\?\)' /var/log/Xorg.*.log /home/user/.local/share/xorg/Xorg.*.log** (extrait xorg.log) \n" + [ "$noHome" == "true" ] && text+="attention pas de home utilisateur détecté \n" text+='```\n' text+="$extraitXorg \n" text+='```\n' @@ -707,25 +757,25 @@ cat << 'EOF' getInfo : exécution normale si script installé dans le système options: - --dmesg, -d : dmesg erreur, warning, critique. root requis, rapport seul de dmesg - --debug : affichage résultat complet de l'export paste - --help, -h : affichage aide - --ip, -ip : affiche ip(s) publique(s) (ipv4 / ipv6), /!\ infos confidentielles, sans rapport - --list, -l : afficher le rapport existant - --paste, -p : exporte le rapport existant - --ssid, -s : affiche configurations ssid /!\ infos confidentielles - pas de rapport, root et NetworkManager requis + -d, --dmesg : dmesg erreur, warning, critique. root requis, rapport seul de dmesg + -h, --help : affichage aide + --ip : affiche ip(s) publique(s) (ipv4 / ipv6), /!\ infos confidentielles, sans rapport + -l, --list : afficher le rapport existant + -p, --paste : exporte le rapport existant + -s, --ssid : affiche configurations ssid /!\ infos confidentielles + pas de rapport, root et NetworkManager requis - --install, -i : installation du script dans le système - --remove, -r : suppression du script dans le système - --upgrade, -u : upgrade script si maj possible - --version, -v : version du script, en ligne et en cours d'exécution + -i, --install : installation du script dans le système, droits root requis + -r, --remove : suppression du script dans le système, droits root requis + -u, --upgrade : upgrade script si maj possible + -v, --version : version du script, en ligne et en cours d'exécution EOF printf "$COLOR\n" } fi_localisation(){ local locale=$(grep -vE '#|^$' /etc/default/locale) + local timezone=$(cat /etc/timezone) local keymap=$(setxkbmap -query) local keyboard=$(grep -vE '#|^$' /etc/default/keyboard) @@ -734,6 +784,10 @@ fi_localisation(){ text+='```\n' text+="$locale \n" text+='```\n' + text+="**cat /etc/timezone** \n" + text+='```\n' + text+="$timezone \n" + text+='```\n' text+="**setxkbmap -query** \n" text+='```\n' text+="$keymap \n" @@ -867,6 +921,8 @@ fi_sources(){ which apt &>/dev/null || return 0 # retour si pas d'apt ? et aptitude...???? local sources=$(grep -rvE '^#|^$' /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null | sed 's/ / /g; s/:/: /') local dateMaj=$(date -r /var/cache/apt/archives/) + local httpredir=$(grep 'httpredir' /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null) + local upgradable=$(LC_ALL=C apt list --upgradable 2>/dev/null | sed 's/Listing...//' | grep -v '^$') local apt=$(LC_ALL=C apt-get autoremove --simulate) local autoremove=$(grep -c 'Remv' <<< $apt) local paquetToRemove=$(grep 'Remv' <<< $apt | sed 's/Remv //; s/\[[0-9.-]*\]//' | tr '\n' ' ') @@ -884,6 +940,19 @@ fi_sources(){ text+="$paquetToRemove \n" text+='```\n' fi + if [ "$httpredir" ]; then + text+="url **httpredir,** ces urls sont obsolètes, préférer http://deb.debian.org/debian/ ou un miroir local\n" + text+='```\n' + text+="$httpredir \n" + text+='```\n' + fi + if [ "$upgradable" ]; then + text+="**des paquets devraient être mis à jour:** \n" + text+="**apt list --upgradable** \n" + text+='```\n' + text+="$upgradable \n" + text+='```\n' + fi if [ "$paquetBiz" ]; then text+="il y a des **paquet(s) dans un état non installé**. ce n'est pas forcément grave, mais ça peut être examiné. paquet(s) concerné(s): \n" text+='```\n' @@ -962,24 +1031,23 @@ fi_usb(){ echo -e "$text" >> "$fileOutput" } - fi_paste(){ - paste_curl_pastery "$fileOutput" "$dureePaste" "$option" + paste_curl_pastery "$fileOutput" "$PasteDuration" "$optDebug" # à tester paste_curl_markdownshare "$fileOutput" } # initialisation -PATH='/bin:/usr/bin:/sbin' ; IFS=' ' +PATH='/usr/sbin:/usr/bin:/sbin:/bin' ; IFS=' ' fileOutput="getInfo_rapport.md" fileLogs="/var/log/sdeb_$script.log" -dureePaste=1 # en nombre de jours +PasteDuration=7 # durée conservation du paste en jours f__affichage -f__user +f__user || ( [ "$?" -eq 2 ] && noHome="true" ) +f__requis "gawk wget curl" +fi__context -prg_1(){ # début - f__requis "gawk wget curl" - fi__context +prg_1(){ # début programme rm "$fileOutput" &>/dev/null touch "$fileOutput" chown $user_: "$fileOutput" @@ -990,79 +1058,63 @@ prg_1(){ # début echo -e "Rapport au $dateRapport \n" >> "$fileOutput" } prg_2(){ # traitements principaux - fi_systeme - fi_cpu - fi_gpu - fi_disk - fi_reseau - fi_nm # si network manager, état et conf - fi_nm_wifis # si network manager, wifi proximité - fi_usb - fi_localisation - fi_system_analyse - fi_sources - fi_dmesg + printf "." + fi_systeme; printf "." + fi_cpu; printf "." + fi_gpu; printf "." + fi_localisation; printf "." + fi_sources "." + fi_disk; printf "." + fi_reseau; printf "." + fi_nm; printf "." # si network manager, état et conf + fi_nm_wifis; printf "." # si network manager, wifi proximité + fi_usb; printf "." + fi_system_analyse; printf "." + fi_dmesg; printf ".\n" } prg_3(){ # fin de traitements - cat $fileOutput + echo "_[rapport getInfo v$version]($urlNotice)" >> "$fileOutput" if ! fi__dialog_oui_non "non" "exporter sur un pastebin par défaut?" ; then fi_paste fi f__info "\n$GREEN le rapport est disponible en local, fichier: $fileOutput" + f__info "vous pouvez le visualiser avec $GREEN$script -l$COLOR" } -options=$@ +amark(){ + echo +} +options="$@" for i in "$options"; do case $i in - --debug ) - option="debug" ;; # affichage résultat complet de l'export paste - esac -done -for i in "$options"; do - case $i in - --dmesg | -d ) fi_dmesg "dmesg" ;; # rapport dmesg only, root requis - --install | -i ) fscript_install ;; # installation du script dans le système - --list | -l ) [ -e $fileOutput ] && cat $fileOutput || f__info "pas de rapport à afficher" ;; # afficher le rapport existant - --paste | -p ) fi_paste ;; # exporte le rapport existant - --remove | -r ) fscript_remove ;; # suppression du script dans le système - --ssid | -s ) fi_ssid ;; # affiche configurations ssid, root requis - --version | -v ) fscript_get_version ;;# version du script, en ligne et exécuté - "" ) if [ $# -eq 0 ];then + --dmesg | -d ) + fi_dmesg "dmesg" + prg_3 ;; # rapport dmesg only, root requis + --list | -l ) [ -e $fileOutput ] && cat $fileOutput || f__info "pas de rapport à afficher" ;; # afficher le rapport existant + --paste | -p ) fi_paste ;; # exporte le rapport existant + --ssid | -s ) fi_ssid ;; # affiche configurations ssid, root requis + --install | -i ) fscript_install ;; # installation du script dans le système + --remove | -r ) fscript_remove ;; # suppression du script dans le système + --version | -v ) fscript_get_version ;; # version du script, en ligne et exécuté + "" ) if [ $# -eq 0 ];then prg_1 prg_2 prg_3 fi ;; # programme - --ip | -ip ) + --ip | -ip ) get_ip_public "IPv4" f__info "$GREEN""ip4: $ip_public" get_ip_public "IPv6" f__info "$BLUE""ip6: $ip_public" ;; # affiche ip public - --upgrade | -u ) + --upgrade | -u ) f__log "test mise à jour" fscript_get_version fscript_dl ;; # upgrade script si maj possible - --help | -h | * ) fi_help ;; # affichage help + --help | -h | * ) fi_help ;; # affichage help esac done -printf $COLOR -exit - -bug markdownshare: - '```' pas interprêté en
 
-
-	style.css ligne 167
-pre {
-	padding:10px;
-	margin:0 0px 20px 0px;
-	font-size:0.8em
-}
-
-toc auto markdown:
-http://ndossougbe.github.io/strapdown/
-
-https://www.pastery.net/api/
-	license non libre? pas de depot, mais ça marche
+exit 0
 
 wget -O getInfo https://framagit.org/kyodev/kyopages/raw/master/scripts/getInfo
 chmod +x getInfo && ./getInfo
diff --git a/scripts/getInfo_changelog.md b/scripts/getInfo_changelog.md
index e69de29..2f342b3 100644
--- a/scripts/getInfo_changelog.md
+++ b/scripts/getInfo_changelog.md
@@ -0,0 +1,30 @@
+# changelog getInfo
+
+## 1.0.0 17/08/2017
+
+* version publique
+
+
+
+
+
+
+
+
+## notes
+
+bug markdownshare:
+	'```' pas interprêté en 
 
+
+	style.css ligne 167
+pre {
+	padding:10px;
+	margin:0 0px 20px 0px;
+	font-size:0.8em
+}
+
+toc auto markdown:
+http://ndossougbe.github.io/strapdown/
+
+https://www.pastery.net/api/
+	license non libre? pas de depot, mais ça marche