Code Monkey home page Code Monkey logo

computerspende's Introduction

computerspende

Script zu Erfassung unserer Geräte in Mantis.

Ziel ist es, dass Neueinsteiger oder Leute, die es nicht so oft machen, auch eine Chance haben den Ablauf richtig hinzubekommen.

Changelog:

01.04.2021:

  • Schönerer Output mit allen gesammelten Informationen kurz vorm erstellen des issues in mantis, damit man einsehen kann welche Informationen in mantis übertragen werden
  • Fix eines Fehler mit der Mantis_API variable in issues.py, seitdem geändert wurde, wie die config in die Klassen reingeladen wird.
  • Deaktivierung der Frage, ob die config.json geändert werden soll bei jedem Start stattdessen wird nun nur dann gefragt, wenn keine config.json existiert
  • Der Sonstige Teil in der description hat einen schöneren Output bekommen, der jetzt auch zu der Ausgabe in der Mantis Weboberfläche passt
  • Der Laufwerksbug wurde behoben
  • Zudem wird nun ausgelesen welche Möglichkeiten das Laufwerk bietet
  • Kleinere refactorings: imports sind nun alle in einer Zeile
  • Überall da wo es notwendig ist wird nun die config.json geladen und zudem die notwendigen Umgebungsvariablen MANTIS_API, STANDORT oder TOKEN aufgerufen

23.03.2021:

  • Hostname wird nun auch in der /etc/hosts geändert
  • Abbruch der Eingabe mit ctrl+d wurde durch ein Fertig ersetzt
  • Nicht funkionierendes docker-compose file um eine mantisbt dev umgebung bereitzustellen ist online, falls jemand mag kann er dran rumspielen
  • Ein Servicechecker wurde integriert mit dem überprüft werden kann ob alle Webadresse von computerspende erreichbar sind
  • Kleine kosmetische Änderungen am Quellcode
  • Ein Setup-dev script wurde erstellt
  • Das Setup.sh script wurde durch eine Installation von python3-venv erweitert

Anleitung zur Benutzung des Scripts

Als erstes erfolgt ein Klonen des Repository in einen Ordner. Am Sinnvollsten auf einer Partition des USB-Stick den man für das Klonen bzw. der Installation des Images auf den Rechnern verwendet. Per Defautl wird der Ordner computerspende am Ort erstellt wo der git clone Befehl aufgerufen wurde.

git clone https://github.com/sonnix-de/computerspende.git

Normalerweise sind python3, pip3 und die für das Skript benötigten Requirements bereits installiert. Falls es zu einer Fehlermeldung kommt, muss man diese Dinge erst noch installieren. Dazu lässt sich das mitgelieferte setup.sh verwenden:

chmod +x setup.sh
./setup.sh

Nun wird das Hauptskript gestartet

python3 main.py

Man wird nun aufgefordert den Mantis Token einzugeben. Wie dieser erstellt wird ist im Folgenden erklärt. Der Rest des Skriptes ist selbsterklärend, da ein Menü durch die einzelnen Schritte führt.

Token erstellen

  1. Erster Schritt Klick auf My Account oben rechts

TokenErstellung1

2. Klick auf API-Token (ist hier in blau markiert).

TokenErstellung2

3. Nun einen Namen eingeben und auf Create API Token klicken.

TokenErstellung3

4. Jetzt wird das folgende Fenster angezeigt. Den im grauen Bereich angezeigten Token - Hier irgendwas mit S2R... - kopieren und in das Terminal Fenster in dem das python script geöffnet ist einfügen.

TokenErstellung4

### Token wieder löschen (falls man den Zugang wieder sperren möchte) Hier sieht man den erstellten Token, man kann ihn mit einem Klick auf Revoke wieder löschen

TokenErstellung5

Anforderungen:

  • Das Script läuft auf unserem Standard Image ohne zusätzliche Software => Shellscript oder Python denke ich, anderes gerne willkommen

  • Das Einstiegs-Script lädt sich von assets.computerspende-regensburg.de das eigentliche script herunter, so bekommen wir updates hin ohne das jeder immer alles austauschen muss

  • Das heruntergeladene wird ausgeführt und ermittelt die Daten für den Eintrag (siehe nächster Punkt)

  • Das Script erzeugt einen Mantis-Eintrag über die Mantis Rest-API: https://documenter.getpostman.com/view/29959/mantis-bug-tracker-rest-api/7Lt6zkP#intro

Gefüllt ist:

  • Reporter (Benutzername und Passwort muss übergeben werden),
  • Betriebssystem,
  • RAM,
  • WLAN,
  • Webcam,
  • CPU,
  • eine schöne "Zusammenfassung",
  • Plattengröße (inkl. SSD oder HDD Anmerkung)
  • Standort = Benutzername (falls es den nicht gibt für einen Benutzernamen, kann ich ihn anlegen)
  • Welches OS installiert ist
  • Schöne Wrapper Scripte vorbereitet:
    • createAndFinish: Legt den Mantis-Eintrag an und füllt o. g. Felder und setzt den Status dann gleich auf "erledigt"
    • create: Legt nur einen neuen Eintrag an mit allem was ermittelbar ist und setzt ihn auf "zugewiesen"

Deployment

nylas.com

pip install make-deb

Development/Einrichtung einer Mantis Docker Umgebung (funktioniert aktuell nicht)

docker-compose.yml

version: '3'
services:

  mysql:
    image: mysql:5.7
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=mantis
      - MYSQL_USER=mantisbt
      - MYSQL_PASSWORD=mantisbt
    restart: always

  phpmyadmin:
    image: phpmyadmin
    container_name: phpmyadmin
    environment:
      - PMA_HOST=mysql
      - MYSQL_ROOT_PASSWORD=root
    restart: always
    ports:
      - 8080:80
    volumes:
      - /sessions
    depends_on:
      - mysql

  mantisbt:
    image: vimagick/mantisbt:latest
    container_name: mantisbt
    restart: always
    ports:
      - "8989:80"
    depends_on:
      - mysql
networks:
  mantis:

Diese Vorgehensweise:

  1. docker-compose up -d
  2. In phpmyadmin unter zB 192.168.236.2:8080 einloggen mit mantisbt und mantisbt, Datenbank mantis erstellen
  3. Import des sql dump in phpmyadmin in die Datenbank mantis oder über mysql -u root -p mantis < export_mantis_db.sql
  4. docker-compose -f docker-compose.yml exec mysql /bin/bash
    1. mysql -u root -p mantis (passwort ist root)
    2. ;
  5. dann http://192.168.236.2:8989/admin/install.php aufrufen und Eintragen:
  • hostname: mysql

  • user: mantisbt

  • passworduser: mantisbt

  • datenbank: mantis

  • admin: root

  • password: root

Die restliche Felder entsprechen den Default Werten

Ergibt folgenden Fehler:

Fatal error: 401 in /var/www/html/core/classes/DbQuery.class.php on line 293

=> Funktioniert jetzt, aber es gibt kein Zugriff auf die Datenbank... Anscheinend liest er nicht die mantis datenbank aus sondern verwendet irgenwas anderes evtl. eine andere default datenbank. Denn Benutzer administrator und root ist vorhanden...

Wenn nix geht => Löschen und von neuem Starten

  1. docker-compose down
  2. sudo rm -rf data
  3. armageddon (is bei mir in der bashrc n commando um alles was mit docker zu tun hat zu löschen)

Einspielen des sql dumps über cli:

mysql -u root -p bugtracker < export_mantis_db.sql

Links:

Startpage search: Does administrative user have access to the database? ( No such file or directory )

xlrl/docker-mantisbt#4

Das ganze Ding funktioniert nicht...komplett nervig und frustrierend. Evtl. tue ich das mal irgendwo dokumentieren.

Manueller Vorgang:

https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-on-ubuntu-20-04-de

Zusätzlicher Nutzer für phpmyadmin einrichten in mysql.

CREATE USER 'mantisbt'@'localhost' IDENTIFIED BY 'mantisbt';

Rechte vergeben GRANT ALL PRIVILEGES ON . TO 'mantisbt'@'localhost' WITH GRANT OPTION; flush privileges;

Falls notwendig, Rechte auf die Mantis db dem root User geben: GRANT ALL PRIVILEGES ON mantis to root@'localhost' IDENTIFIED BY 'root'; flush privileges;

Alternativ kann man auch dem root Nutzer Passwortzugriff geben auf die DB

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';

https://www.bennetrichter.de/anleitungen/apache2-php7-mariadb-phpmyadmin/

So manuell gehts auch nicht. Liegt wohl an den Rechten.

https://websolutionstogo.de/blog/mantis-bug-tracker-installation-update/

Import dump https://mantisbt.org/forums/viewtopic.php?t=20592 https://www.mantisbt.org/forums/viewtopic.php?t=26850 https://www.mantisbt.org/wiki/doku.php/mantisbt:db_dump_restore

https://docs.bitnami.com/installer/apps/mantis/administration/backup-restore-mysql-mariadb/ https://docs.bitnami.com/installer/apps/mantis/administration/export-database/

Mount a directory to docker compose https://stackoverflow.com/questions/40905761/how-do-i-mount-a-host-directory-as-a-volume-in-docker-compose

computerspende's People

Contributors

antonstech avatar destinyofyeet avatar dmuix avatar realwuffi avatar sonnix-de avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

computerspende's Issues

Hostname also in /etc/hosts

Currently we only set /etc/hostname

In /etc/hosts there is also the previous hostname set.
I don't know what the other one is used for, but we should check I guess.

Mantis-Instanz: Standort-Feld updaten damit keine Leerzeichen

im aktuellen Mantis sind beim Feld Standort teilweise Leerzeichen vorne und hinten dran
(... | Wolfgang | Ribisl | ....

Diese müssen weg und die custom_field_string ein update gemacht werden um Leerzeichen vorne und hinten weg zu nehmen
ansonsten wird es etwas blöd, den Standort in seinem eigenen Script zu hinterlegen

AttributeError: module 'readhw' has no attribute 'getInformationAboutCurrentComputer'

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/home/daniel/Documents/computerspende/venv/lib/python3.8/site-packages/consolemenu/console_menu.py", line 169, in _wrap_start
self._main_loop()
File "/home/daniel/Documents/computerspende/venv/lib/python3.8/site-packages/consolemenu/console_menu.py", line 226, in _main_loop
self.process_user_input()
File "/home/daniel/Documents/computerspende/venv/lib/python3.8/site-packages/consolemenu/console_menu.py", line 311, in process_user_input
self.select()
File "/home/daniel/Documents/computerspende/venv/lib/python3.8/site-packages/consolemenu/console_menu.py", line 351, in select
self.selected_item.action()
File "/home/daniel/Documents/computerspende/venv/lib/python3.8/site-packages/consolemenu/items/function_item.py", line 35, in action
self.return_value = self.function(*self.args, **self.kwargs)
File "main.py", line 13, in showHardware
print(hw.getInformationAboutCurrentComputer())
AttributeError: module 'readhw' has no attribute 'getInformationAboutCurrentComputer'

FileNotFoundError: [Errno 2] No such file or directory: 'config.json'

Should check if config.json is available if not should create it.
Traceback (most recent call last): File "main.py", line 7, in <module> import issues as issues File "/home/daniel/Documents/computerspende/issues.py", line 8, in <module> content = open("config.json").read() FileNotFoundError: [Errno 2] No such file or directory: 'config.json'

Images

NICHT LÖSCHEN wird für die Anleitung benötigt!

TokenErstellung1

TokenErstellung2

TokenErstellung3

TokenErstellung4

TokenErstellung5

TokenLöschen

Detection of cd-rom breaks whole script

Major bug: script fails at detection of cd-rom

checkforcd = subprocess.check_output("sudo --.-.lshw -C disk",shell=True).decode()

The --.-. seems strange

Also it would be way better no just to have "Ja / Nein", but to have a bit more details like if it is able to write DVDs etc.
So if you would call "sudo lshw -json -C disk" and try to extract the node from "id" : "cdrom"
Then you could append all the "capabilities" like that: cd-r cd-rw dvd dvd-ram

This ist the output from my notebook:

  {
    "id" : "cdrom",
    "class" : "disk",
    "claimed" : true,
    "handle" : "SCSI:02:00:00:00",
    "description" : "DVD-RAM writer",
    "product" : "DVDRAM GT80N",
    "vendor" : "HL-DT-ST",
    "physid" : "0.0.0",
    "businfo" : "scsi@2:0.0.0",
    "logicalname" : ["/dev/cdrom", "/dev/cdrw", "/dev/dvd", "/dev/dvdrw", "/dev/sr0"],
    "dev" : "11:0",
    "version" : "FS05",
    "configuration" : {
      "ansiversion" : "5",
      "status" : "nodisc"
    },
    "capabilities" : {
      "removable" : "support is removable",
      "audio" : "Audio CD playback",
      "cd-r" : "CD-R burning",
      "cd-rw" : "CD-RW burning",
      "dvd" : "DVD playback",
      "dvd-r" : "DVD-R burning",
      "dvd-ram" : "DVD-RAM burning"
    }
  }

KeyError: 'chassis'

[ WARN:0] global /tmp/pip-req-build-ms668fyv/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
Traceback (most recent call last):
File "main.py", line 8, in
import IssueBuilder as IssueBuilder
File "/home/daniel/Documents/computerspende/IssueBuilder.py", line 59, in
print(build())
File "/home/daniel/Documents/computerspende/IssueBuilder.py", line 50, in build
"name": category(lshwJson)
File "/home/daniel/Documents/computerspende/IssueBuilder.py", line 17, in category
if lshwJson["configuration"]["chassis"] == 'notebook' or lshwJson["configuration"]["chassis"] == 'laptop':
KeyError: 'chassis'

Code in cdrom could be better formatted

Maybe someone has a good solution to write this code here nicer than it is at the moment?

def cdrom():
    lshw = json.loads(str(subprocess.check_output("sudo lshw -json -C disk", shell=True).decode()))
    for disk in lshw:
        if "cdrom" in disk['id']:
            capabilities = {disk['capabilities'][k] for k in disk['capabilities'].keys() - {'removable'}} # removes key 'removable' from dictionary
            capabilities = sorted(capabilities) # sorts capabilities alphabetically
            capabilities = str(capabilities).replace("[","").replace("]", "").replace("'", "") # creates an output that makes sense without square braclets [] and single quotation mark '
            if "DVD" in capabilities:
                return "DVD-Laufwerk: " + capabilities
            elif "CD" in capabilities:
                return "CD-Laufwerk: " + capabilities
        else:
            continue
    return "Laufwerk: Kein Laufwerk verbaut"

enhancement cdrom

Also it would be way better no just to have "Ja / Nein", but to have a bit more details like if it is able to write DVDs etc.
So if you would call "sudo lshw -json -C disk" and try to extract the node from "id" : "cdrom"
Then you could append all the "capabilities" like that: cd-r cd-rw dvd dvd-ram

This ist the output from my notebook:

  {
    "id" : "cdrom",
    "class" : "disk",
    "claimed" : true,
    "handle" : "SCSI:02:00:00:00",
    "description" : "DVD-RAM writer",
    "product" : "DVDRAM GT80N",
    "vendor" : "HL-DT-ST",
    "physid" : "0.0.0",
    "businfo" : "scsi@2:0.0.0",
    "logicalname" : ["/dev/cdrom", "/dev/cdrw", "/dev/dvd", "/dev/dvdrw", "/dev/sr0"],
    "dev" : "11:0",
    "version" : "FS05",
    "configuration" : {
      "ansiversion" : "5",
      "status" : "nodisc"
    },
    "capabilities" : {
      "removable" : "support is removable",
      "audio" : "Audio CD playback",
      "cd-r" : "CD-R burning",
      "cd-rw" : "CD-RW burning",
      "dvd" : "DVD playback",
      "dvd-r" : "DVD-R burning",
      "dvd-ram" : "DVD-RAM burning"
    }
  }

"Free text" should be on top of description

I think we should set the text, that you can enter during the creation of the issue to the top of the issue

example:

this is the text I entered in the python script

Auflösung: ....
Grafikkarte: .....
USB3: ja

Prettier Output for Sonstiges

@ the Moment it looks a little ugly as the first line is completely omitted. Would be nicer to use the first line, too!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.