diff --git a/qgm-updatecache.yml b/qgm-updatecache.yml new file mode 100644 index 0000000..edc9f02 --- /dev/null +++ b/qgm-updatecache.yml @@ -0,0 +1,16 @@ +## This playbook deploys a KDE desktop machine for LinuxMuster. +# hosts: localhost +# remote_user: ansible +# become: yes +--- +- name: Update local software cache on netboot Host + hosts: localhost + connection: local + become: yes + + vars_files: + - qgm-vars.yml + + roles: + - qg-updatecache + diff --git a/qgm-vars.yml b/qgm-vars.yml index 72294d4..be03020 100644 --- a/qgm-vars.yml +++ b/qgm-vars.yml @@ -1,24 +1,116 @@ $ANSIBLE_VAULT;1.1;AES256 -35323461653738313436323264383334326130373035333736343666353865303931336331613266 -3334623634333034326163633734636265653164386235330a663532346266663565346265383336 -65656364653264343764366333353264353834356633323663323161303138373166303338613731 -3938656132633734340a666339643337343064653632383931363961393762663065326163666538 -34643933373330646239646634376338393230643637383163643462373630326635323139666463 -65643065346532343766346531613434303435373837343633663364616163383961343235373839 -38356266666239343762663965306536623435353939376132396466646366373937386538366237 -33373538613237353061306132616332623333373962396535373137343166626630623962323232 -32323133323865303462326163336539353636383566373935333933373463626136613965333734 -61386130373330646634316336303863666662396266616333623931373462653835393238336537 -66626265613033653563646135373337326263633031636533613130623830653132633963663535 -65393065636461303865333237363337336633316236353662386437363932386532396433653366 -65656439333430653937653730613336393539343062353131393033313737353939376532383163 -33363732363664383561303364653436666139643238663531383938386437306131613334343837 -63326232623034336563323238366234646535633537666630623664363834366132666563623363 -33333335366637636439313335323666383963656434376435633735633536313366343162366135 -65333931393262643163386161313035313339353762643064386533636665653738386166373134 -36323766643231633032653936623538656633373036653136643065663734643430646339613665 -32383136636333336337306336393263623336653763313762353235363961303965313465306630 -30363334616232313736313061356337636237626230363239333963323165616631623332336561 -63393833386133613037376230316238646130336239613533343762316261353561636366373362 -35663230313932326365666239623062623138653738656562643238393332643530333364346133 -363138353361373563393339663934356232 +65376666303362353162646136396366633234343730376563323834373336333831636663396430 +6632353537623736633831623931356333386662623839640a626431663464316330363034626339 +33313561636466623936643436663632313166353365323166353530336336333634363630383963 +3836336235636133350a346166663637633535383164666435303430363233633735613165643763 +66613565313262363864393632333337303737623565363034366233386363633861626431356434 +35363739396361663763313232373533316236666363306166316362303132313435303033613438 +30616566306361333037633966336464316234643139303961633864643436643035363436633066 +33616465663561613165323834656563656461353261323137386334626562386137373732376135 +36643362636466666638643539663332643765663231623030666435636463343330663166303039 +31623934656232393130613335336432373466316461366230316538346535343931613836336333 +30353931346231333834623232623136613862353735623164313162306264373964306165306139 +63306138353536636533353734396339663434376462316662633661613132386561613165663864 +37396134353438383665613636613565636561373061383065326633393738353232666230663164 +62336136323437666261646562643131356562376431326632303639623764303236393437366264 +36663535666431363565626262633132393631353934666363316231356165383833346233636664 +37656261613134613766353638306165646230616530656565363731326437666161623261396232 +36306531396232653236353664333638373332316332386133356464633033333033623133323066 +39646465643130376564343839343439373062376237393863363238643164666164666639623036 +30653934646338343361626362393636333566306364356434643062353733363733353830643462 +63636533396335336666316166326336643662383365666161653562353061643237616566396661 +65303332313733333735303461333665386335623332353034306134626138306462633532633962 +66356332656565636131386663323039333363663561653464363235336532646461633265316564 +35616565666333376361653835636461616635363431383930646136656565323166366565383031 +38356362613465386134353736653262323439323430373837396539666136653266376466303165 +37376138343466656131616338653334356666396461313530653939626434663032316465343634 +66626431313136343633383664336239343333633434333038633766656234616165633166323330 +37323833343334616263626532306138633237633764303930633665353936666431343862623865 +33626565666432306136626662316238663263333031373437656135663562323636373534353135 +61323839623135383265313564326363326161633739633631356335313961363062636435646437 +39323166636438353439633662653334663037643463653030316133313633636335363034306462 +30616539353938616363333564613061313334323936323564336432633131373636383633373035 +64376338386533323330316263333962366139633532333164623532396535333034343366343633 +65353463393433636239363936633161313366323936613461373064633364373866396236346362 +34656430656664663561363234643166653162373861636230623036623835613038383562643234 +33376331643437333133383339643437383732366335326463646634363562336235336338303066 +36613438383539396634613862383566643236323530326564393864303434636530333339343835 +37303563653661343862333561346336613134646663633137396336316139353764323831663661 +66326231613030396638366136336239336334306564616536363430613365356365386364633435 +65363662626435393864623335303365363235353234393332653163313839656331353662353966 +66303532393265333765323433363037393661386365303330313334393463393165316230303533 +38613235323539343437306164323930666438636534666264646362666636626536306235333663 +61323937653764306333646235336365303933383333613931393938663364666139363032666636 +31636635303735386662366133346331343133393232376231633938313339663739666530373238 +32336564656137366233616633336333616135363132326233353132346661343235663466306339 +61396134383366653730626633643766623735396662653861353431333465383531346236383166 +38636634306637346237613434316632323233626237326263616530313564636237303130386631 +33353137373139323261663263663534653466633463333630626130333163623466613530303733 +32393764646631636537643564373364393261643463386230656561363332666261353539353435 +63383061616231336238373665323462303066326439336330313637616431653338336562326337 +30623462313236323635663739366262346239303933636238393562663238363366393838346639 +36626133353962343338366464653938326133633261613432336135376238323962646433646334 +66666537333934343262376465353431343935313566396265326535663534663661373634336436 +63303633636633613631633266356630656632373939623337666438323435633230303733336433 +34333930643063373034303530663861643733653239366530383835303537353464336531666565 +38396435333734396565633461323665633063323162616335366338636231643736343836393734 +34363237323532373363363066313331333335373966373964356130363765616432323934376333 +32383736636239356232633837626365666534353862666363326366383464316664393330386339 +35643264303366316163616333663934363436653838333736636533306131376632653339373262 +63303862623635343239623064666363326136343631343662313030613864613739643330633163 +30613831306230323363396636303731303034326337313764323732396230343666363964636237 +34386433643430353330326638303162366533383962663237643737326166313133613661393439 +63323763303932643930353562666130666539363033633538623161363261626237363534393731 +33333363393363643666623738313962633363363464336532343731363535633861323439383165 +61643066346464613139643265363637666239646262356566333830323963613431653034643131 +37323434623637303331626139323133326430306630613565626539613561373437303738363866 +32663031643066333866386532336131613636303961353432626136323264306166313532623665 +37396134653061333264656534366331353965346466626136643633623263333262333633343234 +32303663326432353137383231366630396561633539303261323534393661663062393431363864 +34616334326239636263346463313066376565623463386336323863633665393333333739373138 +66626635383531343434373563633766313630373231643865636666303033353365333931313433 +63663661656632316164656330356332646633356264383137666638343662353031663761343964 +32323866323365343038303363363361323235623838393933336430306466346365343433363663 +35643438316265633538316330386338333339376263346662383733313438613464666435376364 +32613538306163303465373632623764366363373434613534363230613932646538333462393831 +36343530363933356633373430666237633531393765656165636135323561656362396366313361 +37326437666636326539636333643834643634366634376361343161633735363363633462386234 +64646334323930623836326638393232333130643935323262316365303538623763353463376130 +64353661376433356466353633396161346237333534383639386364396636616338313538623836 +35666237666631313134653834613031383261663733636336326631653264383632363733376461 +38303966646332353837386234663139333032653363643862306639336663336636333738376163 +64386662353931363061313930376534336635373836303363323534313863366161323333346136 +32363961356430643639373032393163303433623130613939356335643234616566396634343261 +39396361303463303132383635303035663663393334616436663838656535633966636539633035 +66353566346435323963653030663662633636666663303261316362313765343463333631306364 +38376566366662613761343734656466333935336563663239363137326665363266333932663064 +36656139303835363537613734626438306162616336303263306161366537613531623931336438 +38346562366136346435643138306137393462343936326334343838613231303137396430386165 +35383661303638333634306533653461343834616439616564356561386237343834323963643031 +30363737666439373630346234663963373566616138376234663536303936333034366435393235 +36663235396236356634666138316634306363623430343837356562303235653666323832613839 +36363433393936623534313631633166353832626431393461663662623232663630366236336662 +30343831623632323339646431616630633137336231333830363266303530613939616332636634 +37303362366663663638383830383462373864373036633435623361313235353066623934333333 +32643664306435626333643133623864663030343036303436646136666536656438623939396533 +32303464393439386535353334333361303331373763656165643861383337313263663430303765 +64346264393661313737633330663032393563663133303836353636353063383662653836343534 +35626432663930303236643339616230333835313463303238613438383837356261613861396464 +31623531373632336564303365303731656263393161393730313130643734396264643964353536 +66386263666635636665306539326230333636393739366534666533323537643537306336626666 +35653235616461653562613962326232396132393935623561323334623533613336613934613537 +38306134313232666133356664663561333531373463353662653031323364306138326536313265 +39376538613430366261303964663031366137386130353536373238613161323736613666323438 +65663533346637363362623166613564313632343862633165393664393131336233643565643035 +33663765326231356166393237663132343666306665386133383532633535393933313265623830 +62613938373663383662346465646161373438313733313863373834336166306239653333666566 +32643430646136373133383630653539653938303038353163336132666565386133393536386533 +66656430343230383161376139383635336164356636363631386464633138393163333034336238 +32383430373030396534306436613530333936393865663137323933666139656164643366613132 +37396535366563613562383863346635323263383163363430356338346635326533316532313537 +63386564363037393939393531316565616563653261653137333133393666616235306262323037 +38353165303333623866373231623536313037343239306432353834623034396231633431646338 +32383934653535646239333831663336626635353836376363616465313661396136306335326537 +33333961643236646233366165366438383362306561383538393739323231656637636538373632 +30383866373737656166316238393666653336366365333434623433386136366530376339323333 +373365313136623537373733373635633436 diff --git a/roles/custom/qg-base/files/52-arduino.rules b/roles/custom/qg-base/files/52-arduino.rules new file mode 100644 index 0000000..7c49415 --- /dev/null +++ b/roles/custom/qg-base/files/52-arduino.rules @@ -0,0 +1,3 @@ +SUBSYSTEMS=="usb",KERNEL=="ttyACM*",ATTRS{idVendor}=="16c0",ATTRS{idProduct}=="0483",GROUP="dialout",MODE="0666" +SUBSYSTEMS=="usb",KERNEL=="ttyACM*",ATTRS{idVendor}=="2341",ATTRS{idProduct}=="0043",GROUP="dialout",MODE="0666" +SUBSYSTEMS=="usb",KERNEL=="ttyUSB*",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",GROUP="dialout",MODE="0666" diff --git a/roles/custom/qg-base/files/81-wol.rules b/roles/custom/qg-base/files/81-wol.rules new file mode 100644 index 0000000..dea07fd --- /dev/null +++ b/roles/custom/qg-base/files/81-wol.rules @@ -0,0 +1,2 @@ +# enable wol +ACTION=="add", SUBSYSTEM=="net", NAME=="*", RUN+="/usr/sbin/ethtool -s $name wol g" diff --git a/roles/custom/qg-base/files/BeamerSetup.sh b/roles/custom/qg-base/files/BeamerSetup.sh new file mode 100755 index 0000000..124a426 --- /dev/null +++ b/roles/custom/qg-base/files/BeamerSetup.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# Get connected monitors and their native resolutions +monitor_info=$(xrandr --query) + +# Extract primary monitor name +primary_monitor_name=$(echo "$monitor_info" | grep " primary" | cut -d" " -f1) + +# Extract secondary monitor name and native resolution +secondary_monitor_line=$(echo "$monitor_info" | grep -m1 -n -P " connected(?! primary)") +secondary_monitor_line_number=$(echo "$secondary_monitor_line" | cut -d":" -f1) +secondary_monitor_name=$(echo "$secondary_monitor_line" | cut -d":" -f2 | cut -d" " -f1) +if [ ! -z "$secondary_monitor_line_number" ]; then + secondary_resolution=$(echo "$monitor_info" | sed -e "1,${secondary_monitor_line_number}d" | grep -m1 "+" | awk '{ print $1 }') +fi + +if [ -z "$secondary_monitor_name" ] || [ -z "$secondary_resolution" ] || [ -z "$primary_monitor_name" ]; then + zenity --error --text="Es konnten keine passenden Bildschirme gefunden werden. Sind Sie sich sicher, dass der Beamer eingeschaltet und verbunden ist?" + exit 1 +fi + +# Find out which resolutions we want to recommend +if [ "$secondary_resolution" = "1920x1080" ]; then + recommend_high_res="Ja" + recommend_low_res="Nein" + default_xga="FALSE" + default_hd="TRUE" +else + recommend_high_res="Nein" + recommend_low_res="Ja" + default_xga="TRUE" + default_hd="FALSE" +fi + +# Generate GUI to let the user select a resolution +mode=$(zenity --list --radiolist --title="Beamer Setup" --text="Beamer mit der Auflösung $secondary_resolution gefunden." \ +--print-column=3 --width 500 --height 250 \ +--column= --column="Name" --column="Auflösung" --column="Format" --column="Empfohlen" \ +FALSE "Full HD" "1920x1080" "16:9" "$recommend_high_res" \ +"$default_hd" "HD" "1280x720" "16:9" "Ja" \ +"$default_xga" "XGA" "1024x768" "4:3" "$recommend_low_res") + +# Use xrandr to configure both displays +if [ ! -z "$mode" ]; then + xrandr --output $primary_monitor_name --mode $mode + xrandr --output $secondary_monitor_name --mode $mode --same-as $primary_monitor_name +fi + +# Use pactl to set audio output to hdmi +profile="output:hdmi-stereo+input:analog-stereo" +sink_line=$(pactl list short sinks | grep -m1 alsa_output.pci-) +sink_nr=$(echo $sink_line | awk '{ print $1 }') +sink_name_hdmi=$(echo $sink_line | awk '{ print $2 }' | grep hdmi) +if [ ! -z "$sink_nr" ] && [ -z "$sink_name_hdmi" ]; then + card_name=$(pactl list cards short | grep -m1 alsa_card.pci- | awk '{ print $2 }') + pactl set-card-profile $card_name $profile +fi + +if [ ! -z "$sink_nr" ]; then + pactl set-default-sink $(pactl list short sinks | grep -m1 alsa_output.pci- | awk '{ print $1 }') +fi + +# if there is no hdmi sink search for a card profile to change +if [ -z "$sink_nr" ]; then + card_name=$(pactl list cards short | head -n 1 | awk '{ print $2 }') + pactl set-card-profile $card_name $profile +fi diff --git a/roles/custom/qg-base/files/beamer.png b/roles/custom/qg-base/files/beamer.png new file mode 100644 index 0000000..3977d07 Binary files /dev/null and b/roles/custom/qg-base/files/beamer.png differ diff --git a/roles/custom/qg-base/files/firefox-esr.desktop b/roles/custom/qg-base/files/firefox-esr.desktop new file mode 100644 index 0000000..942268b --- /dev/null +++ b/roles/custom/qg-base/files/firefox-esr.desktop @@ -0,0 +1,104 @@ +[Desktop Entry] +Name=Firefox ESR +Name[bg]=Firefox ESR +Name[ca]=Firefox ESR +Name[cs]=Firefox ESR +Name[el]=Firefox ESR +Name[es]=Firefox ESR +Name[fa]=Firefox ESR +Name[fi]=Firefox ESR +Name[fr]=Firefox ESR +Name[hu]=Firefox ESR +Name[it]=Firefox ESR +Name[ja]=Firefox ESR +Name[ko]=Firefox ESR +Name[nb]=Firefox ESR +Name[nl]=Firefox ESR +Name[nn]=Firefox ESR +Name[no]=Firefox ESR +Name[pl]=Firefox ESR +Name[pt]=Firefox ESR +Name[pt_BR]=Firefox ESR +Name[ru]=Firefox ESR +Name[sk]=Firefox ESR +Name[sv]=Firefox ESR +Comment=Browse the World Wide Web +Comment[bg]=Сърфиране в Мрежата +Comment[ca]=Navegueu per el web +Comment[cs]=Prohlížení stránek World Wide Webu +Comment[de]=Im Internet surfen +Comment[el]=Περιηγηθείτε στον παγκόσμιο ιστό +Comment[es]=Navegue por la web +Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید +Comment[fi]=Selaa Internetin WWW-sivuja +Comment[fr]=Navigue sur Internet +Comment[hu]=A világháló böngészése +Comment[it]=Esplora il web +Comment[ja]=ウェブを閲覧します +Comment[ko]=웹을 돌아 다닙니다 +Comment[nb]=Surf på nettet +Comment[nl]=Verken het internet +Comment[nn]=Surf på nettet +Comment[no]=Surf på nettet +Comment[pl]=Przeglądanie stron WWW +Comment[pt]=Navegue na Internet +Comment[pt_BR]=Navegue na Internet +Comment[ru]=Обозреватель Всемирной Паутины +Comment[sk]=Prehliadanie internetu +Comment[sv]=Surfa på webben +GenericName=Web Browser +GenericName[bg]=Интернет браузър +GenericName[ca]=Navegador web +GenericName[cs]=Webový prohlížeč +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής ιστού +GenericName[es]=Navegador web +GenericName[fa]=مرورگر اینترنتی +GenericName[fi]=WWW-selain +GenericName[fr]=Navigateur Web +GenericName[hu]=Webböngésző +GenericName[it]=Browser Web +GenericName[ja]=ウェブ・ブラウザ +GenericName[ko]=웹 브라우저 +GenericName[nb]=Nettleser +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[no]=Nettleser +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ru]=Интернет-браузер +GenericName[sk]=Internetový prehliadač +GenericName[sv]=Webbläsare +X-GNOME-FullName=Firefox ESR Web Browser +X-GNOME-FullName[bg]=Интернет браузър (Firefox ESR) +X-GNOME-FullName[ca]=Navegador web Firefox ESR +X-GNOME-FullName[cs]=Firefox ESR Webový prohlížeč +X-GNOME-FullName[el]=Περιηγήτης Ιστού Firefox ESR +X-GNOME-FullName[es]=Navegador web Firefox ESR +X-GNOME-FullName[fa]=مرورگر اینترنتی Firefox ESR +X-GNOME-FullName[fi]=Firefox ESR-selain +X-GNOME-FullName[fr]=Navigateur Web Firefox ESR +X-GNOME-FullName[hu]=Firefox ESR webböngésző +X-GNOME-FullName[it]=Firefox ESR Browser Web +X-GNOME-FullName[ja]=Firefox ESR ウェブ・ブラウザ +X-GNOME-FullName[ko]=Firefox ESR 웹 브라우저 +X-GNOME-FullName[nb]=Firefox ESR Nettleser +X-GNOME-FullName[nl]=Firefox ESR webbrowser +X-GNOME-FullName[nn]=Firefox ESR Nettlesar +X-GNOME-FullName[no]=Firefox ESR Nettleser +X-GNOME-FullName[pl]=Przeglądarka WWW Firefox ESR +X-GNOME-FullName[pt]=Firefox ESR Navegador Web +X-GNOME-FullName[pt_BR]=Navegador Web Firefox ESR +X-GNOME-FullName[ru]=Интернет-браузер Firefox ESR +X-GNOME-FullName[sk]=Internetový prehliadač Firefox ESR +X-GNOME-FullName[sv]=Webbläsaren Firefox ESR +Exec=/usr/lib/firefox-esr/firefox-esr %u --allow-downgrade +Terminal=false +X-MultipleArgs=false +Type=Application +Icon=firefox-esr +Categories=Network;WebBrowser; +MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https; +StartupWMClass=Firefox-esr +StartupNotify=true diff --git a/roles/custom/qg-base/files/firefox_policies.json b/roles/custom/qg-base/files/firefox_policies.json new file mode 100644 index 0000000..0c13eb9 --- /dev/null +++ b/roles/custom/qg-base/files/firefox_policies.json @@ -0,0 +1,70 @@ +{ + "policies": { + "Proxy": { + "Mode": "system" + }, + "OverrideFirstRunPage": "https://www.qg-moessingen.de", + "Homepage": { + "URL": "https://www.debian.org", + "Locked": false, + "StartPage": "previous-session" + }, + "DisplayBookmarksToolbar": true, + "ManagedBookmarks": [ + { + "toplevel_name": "QG Mössingen" + }, + { + "url": "https://server.qgm.lan", + "name": "Passwort ändern" + }, + { + "url": "https://wolke.qg-moessingen.de", + "name": "QG-Wolke" + }, + { + "url": "https://moodle.qg-moessingen.de", + "name": "QG-Moodle" + }, + { + "name": "Debian", + "children": [ + { + "url": "https://www.debian.org", + "name": "Debian Homepage" + }, + { + "url": "https://wiki.debian.org", + "name": "Debian Wiki" + }, + { + "name": "Debian LAN/Live", + "children": [ + { + "url": "https://salsa.debian.org/andi/debian-lan-ansible", + "name": "Debian LAN Ansible" + }, + { + "url": "https://wiki.debian.org/DebianLive", + "name": "Debian Live" + } + ] + } + ] + } + ], + "SearchEngines": { + "Add": [ + { + "Name": "Startpage", + "URLTemplate": "https://www.startpage.com/sp/search?query={searchTerms}", + "Method": "GET", + "IconURL": "https://www.startpage.com/sp/cdn/favicons/favicon--default.ico", + "Alias": "sp", + "Description": "Startpage Search Engine" + } + ], + "Default": "Startpage" + } + } +} diff --git a/roles/custom/qg-base/files/logout.png b/roles/custom/qg-base/files/logout.png new file mode 100644 index 0000000..93302b3 Binary files /dev/null and b/roles/custom/qg-base/files/logout.png differ diff --git a/roles/custom/qg-base/files/qgm-abmelden.desktop b/roles/custom/qg-base/files/qgm-abmelden.desktop new file mode 100644 index 0000000..b50a1cc --- /dev/null +++ b/roles/custom/qg-base/files/qgm-abmelden.desktop @@ -0,0 +1,13 @@ +#!/usr/bin/env xdg-open +[Desktop Entry] +Version=1.0 +Type=Application +Terminal=false +Exec=qdbus6 org.kde.Shutdown /Shutdown org.kde.Shutdown.logout +Name[de_DE]=Abmelden +Name=Abmelden +Icon=/usr/share/icons/logout.png +Hidden=false +Comment= +Path= +StartupNotify=false diff --git a/roles/custom/qg-base/files/qgm-beamersetup.desktop b/roles/custom/qg-base/files/qgm-beamersetup.desktop new file mode 100644 index 0000000..8b695b0 --- /dev/null +++ b/roles/custom/qg-base/files/qgm-beamersetup.desktop @@ -0,0 +1,15 @@ +#!/usr/bin/env xdg-open + +[Desktop Entry] +Version=1.0 +Type=Application +Terminal=false +Exec=BeamerSetup.sh +Name[de_DE]=QG-Beamersetup +Name=QG-Beamersetup +Icon=/usr/share/icons/beamer.png +Hidden=false +Comment= +Path= +StartupNotify=false + diff --git a/roles/custom/qg-base/files/qgm-login.sh b/roles/custom/qg-base/files/qgm-login.sh new file mode 100644 index 0000000..2303abc --- /dev/null +++ b/roles/custom/qg-base/files/qgm-login.sh @@ -0,0 +1,29 @@ +[[ "${UID}" -lt 10000 ]] && return + +# Desktop Verzeichnis? +DESKDIR=$(xdg-user-dir DESKTOP) +echo $DESKDIR >> /tmp/login.log + +# Wallpaper +chmod u+x "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" +kwriteconfig5 --file "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" --group 'Containments' --group '1' --group 'Wallpaper' --group 'org.kde.image' --group 'General' --key 'Image' "/usr/local/share/qgm/qgm_background_wallpaper.jpg" || return +# DiscoverButton löschen funzt noch nicht +kwriteconfig5 --file "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" --group 'Containments' --group '2' --group 'Applets' --group '5' --group 'Configuration' --group 'General' --key 'launchers' "applications:systemsettings.desktop,preferred://filemanager,preferred://browser" || return + +# Beamer-Icon +rm -f $DESKDIR/qgm-beamersetup.desktop +if [[ $(hostname -s) = lt-* || $(hostname -s) = r109-dell16 ]]; then + cp /usr/share/applications/qgm-beamersetup.desktop $DESKDIR/qgm-beamersetup.desktop + chmod 755 $DESKDIR/qgm-beamersetup.desktop +fi + +# Abmelden Knopf +echo "cp /usr/share/applications/qgm-abmelden.desktop $DESKDIR/qgm-abmelden.desktop" >> /tmp/login.log +cp /usr/share/applications/qgm-abmelden.desktop $DESKDIR/qgm-abmelden.desktop +chmod 755 $DESKDIR/qgm-abmelden.desktop + +# user-places löschen, wegen Schuljahreswechsel... +echo "rm $HOME/.local/share/user-places.xbel" >> /tmp/login.log +rm $HOME/.local/share/user-places.xbel + +echo "Done" >> /tmp/login.log diff --git a/roles/custom/qg-base/tasks/base.yml b/roles/custom/qg-base/tasks/base.yml new file mode 100644 index 0000000..931d6f0 --- /dev/null +++ b/roles/custom/qg-base/tasks/base.yml @@ -0,0 +1,273 @@ +--- +######### +# Management: Ansible User benötigt auf den Clients kein +# Passwort für sudo +- name: Enable passwordless sudo access for user ansible + lineinfile: + path: /etc/sudoers + state: present + regexp: '^ansible ALL=' + line: 'ansible ALL=(ALL) NOPASSWD: ALL' + validate: '/usr/sbin/visudo -cf %s' + +######### +# Paketvorkonfigurationen +- name: Preseed ttf-mscorefonts-installer + ansible.builtin.debconf: + name: ttf-mscorefonts-installer + question: msttcorefonts/dlurl + value: "{{ mirror_msfonts }}" + vtype: string + when: mirror_msfonts is defined and mirror_msfonts | length > 0 + +- name: Preseed libdvd-pkg + ansible.builtin.debconf: + name: libdvd-pkg + question: libdvd-pkg/build + value: "true" + vtype: boolean + ansible.builtin.debconf: + name: libdvd-pkg + question: libdvd-pkg/post-invoke_hook-install + value: "true" + vtype: boolean + ansible.builtin.debconf: + name: libdvd-pkg + question: libdvd-pkg/post-invoke_hook-remove + value: "false" + vtype: boolean + +######### +# Softwareauswahl +- name: Install desktop EDU packages and some more + apt: + name: + - curl + - git + - gitg + - gitk + - lshw + - libnotify-bin ## needed for pwroff script + - neovim + - net-tools + - ethtool + - netcat-openbsd + - nmap + - tmux + - hexyl + - meld + - tree + - hashcat + - ttf-mscorefonts-installer + - libdvd-pkg + - handbrake + - firmware-intel-sound + - cura + - filius + - wine + - kdenlive + - terminator + - geany + autoremove: true + state: latest + environment: + http_proxy: '' # this is needed to avoid ttf-mscorefonts-installer picking up aptcacher + +######### +# libdvdcss muss gebaut werden +# Optimierungspotential: Einmal bauen und über netboot +# die Pakete verteilen geht wahrscheinlich schneller + +- name: Build libdvdcss + ansible.builtin.shell: + cmd: dpkg-reconfigure -f noninteractive libdvd-pkg + +######### +# Den cups-browsed will ich gar nicht haben, nicht +# nur disablen. +- name: Remove cups-browsed + ansible.builtin.apt: + name: cups-browsed + state: absent + + +######### +# Das Skript, das beim Userlogin ausgeführt wird +# Setzt derzeit nur den Hintergrund zurück - nicht bei der +# allerersten Anmeldung eines Nutzers, weil es da die KDE Config noch +# nicht gibt. + +- name: Copy qgm-login.sh for misc login Tasks + copy: + src: files/qgm-login.sh + dest: /etc/profile.d/qgm-login.sh + mode: '0664' + owner: root + group: root + +######### +# Anpassungen an KDE +# - Doppelklick zum öffnen von Dateien +# - Style aug breeze fetstackern +# - Kein Benutzerwechsel +# - Kein Lockscreen +# - Keine neue Session +# - Login Session immer leer starten, nicht die laufenden Anwendungen merken + +- name: Set mandatory KDE settings + ansible.builtin.copy: + dest: /etc/xdg/kdeglobals + content: | + [KDE][$i] + SingleClick=false + widgetStyle=breeze + + [KDE Action Restrictions][$i] + action/switch_user=false + action/lock_screen=false + action/start_new_session=false + + [General][$i] + loginMode=emptySession + +######### +# Screen Locking abschalten, Mittelstufenschüler... +- name: Disable screen locking + ansible.builtin.copy: + dest: /etc/xdg/kscreenlockerrc + content: | + [Daemon][$i] + Autolock=false + LockOnResume=false + + [Greeter][Wallpaper][org.kde.image][General] + Image=file:///usr/local/share/qgm/qgm_background.jpg + +######## +# Logout beschleunigen +- name: Wartezeit nach KDE nach Logout/Shutdown verkürzen + ansible.builtin.replace: + path: /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/logout/Logout.qml + regexp: '^(\s+)property real timeout:.*$' + replace: '\1property real timeout: 4' + +######## +# Wayland abschalten, Standardsession X11 +# SDDM hat (noch) keine Option, die Standardsession vorzugeben +# Bei einem "normalen" System, merkt er sich die letzte Sitzung, die +# der Nutzer wählt für künftige Anmeldungen, das klappt im Netz nicht. +# Die Session Liste baut er alphabetisch zusammen aus den desktop-Dateien +# in den Verzeichnissen /usr/share/wayland-sessions und /usr/share/xsessions/ +# der erste Eintrag ist Standard - und das ist leider eben immer die Sitzung in +# wayland-sessions. Darum: Weg damit ;) + +- name: Disable wayland session systemwide + ansible.builtin.file: + path: /usr/share/wayland-sessions/plasmawayland.desktop + state: absent + + +######### +# plasma-discover ist der grafische Paketmamanger +# der stürzt nur ab und die Bejutzer können eh +# nichts selbst installieren +- name: Remove plasma-discover + ansible.builtin.apt: + name: plasma-discover + state: absent + +######### +# Anpassungen für Arduino +# - modemmanager dinstallieren, soll die Probleme mit wechselnden +# Device Namen lössen (ungetestet) +# - Udev-Rule, so dass die Devices mit 0666 angelegt werden, wie +# Warnung des Debian Pakets "arduino" wegen der dialout Gruppe +# bleiben leider. + +- name: Remove modemmanager to fix arduino problems + ansible.builtin.apt: + name: modemmanager + state: absent + +- name: Copy arduino udev rule + copy: + src: files/52-arduino.rules + dest: /etc/udev/rules.d/52-arduino.rules + mode: '0644' + owner: root + group: root + +- name: reload udev rules + ansible.builtin.command: udevadm control --reload-rules + +- name: trigger udev update + ansible.builtin.command: udevadm trigger + + +######### +# Firefox ESR Anpassungen +# Lesezeichen und Startseite müssen in der +# Datei firefox_policies.json für die eigene Schule +# angepasst werden. +- name: Create firefox policies directory + ansible.builtin.file: + path: /etc/firefox-esr/policies + state: directory + mode: '0755' + +- name: Create a symbolic link firefox to firefox-esr + ansible.builtin.file: + src: /etc/firefox-esr + dest: /etc/firefox + state: link + +- name: Copy firefox policy + ansible.builtin.copy: + src: firefox_policies.json + dest: /etc/firefox-esr/policies/policies.json + +- name: Remove wrongly copied policies file + ansible.builtin.file: + path: /etc/firefox-esr/policies/firefox_policies.json + state: absent + +########## +# Enable WOL +# +- name: Enable WOL + ansible.builtin.command: ethtool -s {{ ansible_default_ipv4.interface }} wol g + +- name: Copy 81-wol.rules to target + copy: + src: 81-wol.rules + dest: /etc/udev/rules.d/81-wol.rules + mode: '0644' + owner: root + group: root + +- name: Copy qgm-abmelden.desktop + copy: + src: qgm-abmelden.desktop + dest: /usr/share/applications/qgm-abmelden.desktop + mode: '0755' + owner: root + group: root + +- name: Copy modified Forefox Starter + copy: + src: firefox-esr.desktop + dest: /usr/share/applications/firefox-esr.desktop + mode: '0644' + owner: root + group: root + +- name: Copy logout icon + copy: + src: logout.png + dest: /usr/share/icons/logout.png + mode: '0644' + owner: root + group: root + + + diff --git a/roles/custom/qg-base/tasks/beamerscript.yml b/roles/custom/qg-base/tasks/beamerscript.yml new file mode 100644 index 0000000..719c8a5 --- /dev/null +++ b/roles/custom/qg-base/tasks/beamerscript.yml @@ -0,0 +1,41 @@ +########## +# Laptop Skripte +# +# Copy Beamer +- name: Copy BeamerSetup.sh + copy: + src: files/BeamerSetup.sh + dest: /usr/local/bin/BeamerSetup.sh + mode: '0755' + owner: root + group: root + +- name: Copy qgm-beamersetup.desktop + copy: + src: files/qgm-beamersetup.desktop + dest: /usr/share/applications/qgm-beamersetup.desktop + mode: '0644' + owner: root + group: root + +- name: Copy icon + copy: + src: files/beamer.png + dest: /usr/share/icons/beamer.png + mode: '0644' + owner: root + group: root + +# Remove old scripts +- name: Remove qgm-soudfix.sh + file: + path: /usr/local/bin/qgm-soundfix.sh + state: absent + +- name: Delete qgm-soudfix.desktop + file: + path: /usr/share/applications/qgm-soundfix.desktop + state: absent + + + diff --git a/roles/custom/qg-base/tasks/main.yml b/roles/custom/qg-base/tasks/main.yml new file mode 100644 index 0000000..d4da06d --- /dev/null +++ b/roles/custom/qg-base/tasks/main.yml @@ -0,0 +1,14 @@ +--- +- name: Base configuration for all hosts + import_tasks: + file: base.yml + +- name: Fix sound on lt- hosts + import_tasks: + file: soundfix.yml + when: "'lt-' in inventory_hostname" + +- name: Copy Beamerscript to lt- hosts + import_tasks: + file: beamerscript.yml + when: "'lt-' in inventory_hostname" diff --git a/roles/custom/qg-base/tasks/soundfix.yml b/roles/custom/qg-base/tasks/soundfix.yml new file mode 100644 index 0000000..020d8b6 --- /dev/null +++ b/roles/custom/qg-base/tasks/soundfix.yml @@ -0,0 +1,11 @@ +--- +# Probleme mit akgehackten Ton über HDMI an +# den Laptops in den Klassenzimmern +# ACHTUNG: Beddingung hostname muss mit lt- beginnen. +- name: Fix stuttering sound on HDMI + lineinfile: + dest: /etc/default/grub + regexp: '^(GRUB_CMDLINE_LINUX=).*' + line: '\g<1>"intel_iommu=on,igfx_off"' + backrefs: yes + notify: Run update-grub diff --git a/roles/custom/qg-sddm/README.txt b/roles/custom/qg-sddm/README.txt new file mode 100644 index 0000000..9005ded --- /dev/null +++ b/roles/custom/qg-sddm/README.txt @@ -0,0 +1,6 @@ +Diese Rolle macht ein SDDM Theme, das nett aussieht und folgende Vorteile hat. + +* Kein Fokus auf irgendeinem Element, d.h. wenn jemand den Monitor mit + Space "weckt" wird nirgends was eingefügt. +* Kein Userlistenelement +* Optik einfach konfigurierbar über theme.conf diff --git a/roles/custom/qg-sddm/files/qgm-sugar-dark.tgz b/roles/custom/qg-sddm/files/qgm-sugar-dark.tgz new file mode 100644 index 0000000..4d3f1ff Binary files /dev/null and b/roles/custom/qg-sddm/files/qgm-sugar-dark.tgz differ diff --git a/roles/custom/qg-sddm/files/qgm_background.jpg b/roles/custom/qg-sddm/files/qgm_background.jpg new file mode 100644 index 0000000..a7f1314 Binary files /dev/null and b/roles/custom/qg-sddm/files/qgm_background.jpg differ diff --git a/roles/custom/qg-sddm/files/qgm_background_wallpaper.jpg b/roles/custom/qg-sddm/files/qgm_background_wallpaper.jpg new file mode 100644 index 0000000..991ef13 Binary files /dev/null and b/roles/custom/qg-sddm/files/qgm_background_wallpaper.jpg differ diff --git a/roles/custom/qg-sddm/tasks/main.yml b/roles/custom/qg-sddm/tasks/main.yml new file mode 100644 index 0000000..0f9f8a3 --- /dev/null +++ b/roles/custom/qg-sddm/tasks/main.yml @@ -0,0 +1,43 @@ + +######### +# Anpassungen für Login Screen und Hintergrund +# Wir möchten am Login-Screen das Hintergrund-Bild +# qgm_background.jpg - in Schwarz/Weiss haben +# Bei der Anmeldung soll das Bild +# qgm_background_desktop.jpg - in Farbe +# gesetzt werden. +# Das passiert im Skript qgm-login.sh, das weiter unten +# auf die Rechner kopiert wird + +- name: Make qgm share directory + file: + path: /usr/local/share/qgm + state: directory + mode: '0755' + owner: root + group: root + +- name: Copy qgm background pictures + ansible.builtin.copy: + src: "{{ item }}" + dest: /usr/local/share/qgm/ + mode: '0644' + owner: root + group: root + loop: + - qgm_background.jpg + - qgm_background_wallpaper.jpg + +- name: Entpacke qgm-sugar-dark.tgz nach /usr/share/sddm/themes + unarchive: + src: qgm-sugar-dark.tgz + dest: /usr/share/sddm/themes + +- name: Link /etc/alternatives/sddm-debian-theme nach /usr/share/sddm/themes/qgm-sugar-dark/ + file: + src: /usr/share/sddm/themes/qgm-sugar-dark + dest: /etc/alternatives/sddm-debian-theme + owner: root + group: root + state: link + diff --git a/roles/custom/qg-software/files/logseq.png b/roles/custom/qg-software/files/logseq.png new file mode 100644 index 0000000..7b12837 Binary files /dev/null and b/roles/custom/qg-software/files/logseq.png differ diff --git a/roles/custom/qg-software/files/prusaslicer.png b/roles/custom/qg-software/files/prusaslicer.png new file mode 100644 index 0000000..a667be3 Binary files /dev/null and b/roles/custom/qg-software/files/prusaslicer.png differ diff --git a/roles/custom/qg-software/files/qg.appimage.ArduinoIDE2.desktop b/roles/custom/qg-software/files/qg.appimage.ArduinoIDE2.desktop new file mode 100644 index 0000000..f498c8f --- /dev/null +++ b/roles/custom/qg-software/files/qg.appimage.ArduinoIDE2.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Name=Arduino IDE2 AppImage +Comment=Open-source electronics prototyping platform +GenericName=Arduino IDE +Exec=unset -v https_proxy http_proxy && . /opt/appimages/arduino2/start-arduino2-appimage %f > /tmp/arduinoAppimage.log 2>&1 +Icon=arduino +Type=Application +Terminal=false +Categories=Development;Engineering;Electronics;IDE; +MimeType=text/x-arduino +Keywords=embedded electronics;electronics;avr;microcontroller; +StartupWMClass=processing-app-Base + diff --git a/roles/custom/qg-software/files/qg.appimage.FreeCAD.desktop b/roles/custom/qg-software/files/qg.appimage.FreeCAD.desktop new file mode 100644 index 0000000..dfb3dc0 --- /dev/null +++ b/roles/custom/qg-software/files/qg.appimage.FreeCAD.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Name=FreeCAD Appimage +Name[de]=FreeCAD Appimage +Name[pl]=FreeCAD Appimage +Name[ru]=FreeCAD Appimage +Comment=Feature based Parametric Modeler Appimage +Comment[de]=Feature-basierter parametrischer Modellierer Appimage +Comment[ru]=Система автоматизированного проектирования Appimage +GenericName=CAD Application Appimage +GenericName[de]=CAD-Anwendung Appimage +GenericName[pl]=Aplikacja CAD Appimage +GenericName[ru]=Система автоматизированного проектирования Appimage +Exec=/opt/appimages/freecad/FreeCAD.AppImage - --single-instance %F +Terminal=false +Type=Application +Icon=org.freecadweb.FreeCAD +Categories=Graphics;Science;Education;Engineering; +StartupNotify=true +MimeType=application/x-extension-fcstd;model/obj;model/iges;image/vnd.dwg;image/vnd.dxf;model/vnd.collada+xml;application/iges;model/iges;model/step;model/step+zip;model/stl;application/vnd.shp;model/vrml; diff --git a/roles/custom/qg-software/files/qg.appimage.Logseq.desktop b/roles/custom/qg-software/files/qg.appimage.Logseq.desktop new file mode 100644 index 0000000..ac85aa7 --- /dev/null +++ b/roles/custom/qg-software/files/qg.appimage.Logseq.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Logseq +Comment=Logseq for Desktop +Exec=/opt/appimages/logseq/Logseq.AppImage $SANDBOXPARAM %u +Icon=logseq +StartupWMClass=undefined +Type=Application +Categories=Office; +MimeType=x-scheme-handler/logseq;text/html; diff --git a/roles/custom/qg-software/files/qg.appimage.PrusaSlicer.desktop b/roles/custom/qg-software/files/qg.appimage.PrusaSlicer.desktop new file mode 100644 index 0000000..3530f51 --- /dev/null +++ b/roles/custom/qg-software/files/qg.appimage.PrusaSlicer.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Name=Prusa Slicer Appimage +Name[de]=Prusa Slicer Appimage +Name[pl]=Prusa Slicer Appimage +Comment=Slicer for 3d Printing +GenericName=Slicing App Image +Exec=/opt/appimages/prusaslicer/PrusaSlicer.AppImage +Terminal=false +Type=Application +Icon=prusaslicer +Categories=Graphics;Science;Education;Engineering; +StartupNotify=true +MimeType=application/x-extension-fcstd;model/obj;model/iges;image/vnd.dwg;image/vnd.dxf;model/vnd.collada+xml;application/iges;model/iges;model/step;model/step+zip;model/stl;application/vnd.shp;model/vrml; diff --git a/roles/custom/qg-software/files/start-arduino2-appimage b/roles/custom/qg-software/files/start-arduino2-appimage new file mode 100755 index 0000000..8613c89 --- /dev/null +++ b/roles/custom/qg-software/files/start-arduino2-appimage @@ -0,0 +1,16 @@ +echo "---------------------" +cachedir=/var/cache/user/${KDE_SESSION_UID}/arduino15 +echo "Cachedir: $cachedir" +echo "---------------------" +template=/var/lib/arduino2/template +arduinoAppimage=/opt/appimages/arduino2/ArduinoIDE2.AppImage + +mkdir -p $cachedir + +rsync -avr --delete $template/ $cachedir/ > /dev/null 2>&1 +rm -rf ${HOME}/.arduino15 +ln -s $cachedir ${HOME}/.arduino15 + +$arduinoAppimage $1 & + + diff --git a/roles/custom/qg-software/tasks/install.yml b/roles/custom/qg-software/tasks/install.yml new file mode 100644 index 0000000..d23f3e3 --- /dev/null +++ b/roles/custom/qg-software/tasks/install.yml @@ -0,0 +1,196 @@ +--- +######### +# Greenfoot und BlueJ. + +- name: Determine installed bluej version + shell: "dpkg -l bluej 2> /dev/null | grep ii | awk '{print $3}'" + register: command_output +- set_fact: + bluej_installed_version: "{{ command_output.stdout }}" + +- name: Determine installed greenfoot version + shell: "dpkg -l greenfoot 2> /dev/null | grep ii | awk '{print $3}'" + register: command_output +- set_fact: + greenfoot_installed_version: "{{ command_output.stdout }}" + +- name: Install bluej if necessary + ansible.builtin.apt: + deb: "{{ mirror_javadev }}/bluej-{{ bluej_target_version }}.deb" + when: (mirror_javadev is defined and mirror_javadev | length > 0) and + (bluej_target_version is defined and bluej_target_version | length > 0 ) and + (bluej_installed_version != bluej_target_version ) + +- name: Install greenfoot if necessary + ansible.builtin.apt: + deb: "{{ mirror_javadev }}/greenfoot-{{ greenfoot_target_version }}.deb" + when: (mirror_javadev is defined and mirror_javadev | length > 0) and + (greenfoot_target_version is defined and greenfoot_target_version | length > 0 ) and + (greenfoot_installed_version != greenfoot_target_version ) + +######## +# FreeCAD AppImage +# +- name: Make sure target dir exists + ansible.builtin.file: + path: /opt/appimages/freecad/ + state: directory + recurse: yes + owner: root + group: root + mode: '0755' + +- name: Download FreeCAD AppImage from Cache + ansible.builtin.get_url: + url: "{{ mirror_appimage }}/FreeCAD.AppImage" + dest: /opt/appimages/freecad/FreeCAD.AppImage + mode: '0755' + +- name: Copy desktop freecad starter file to target + copy: + src: files/qg.appimage.FreeCAD.desktop + dest: /usr/share/applications/qg.appimage.FreeCAD.desktop + mode: '0644' + owner: root + group: root + +######## +# Arduino2 AppImage +# +- name: Make sure target dir exists + ansible.builtin.file: + path: /opt/appimages/arduino2/ + state: directory + recurse: yes + owner: root + group: root + mode: '0755' + +- name: Make sure lib dir for template exists + ansible.builtin.file: + path: /var/lib/arduino2 + state: directory + recurse: yes + owner: root + group: root + mode: '0755' + +- name: Download Arduino2 AppImage from Cache + ansible.builtin.get_url: + url: "{{ mirror_appimage }}/ArduinoIDE2.AppImage" + dest: /opt/appimages/arduino2/ArduinoIDE2.AppImage + mode: '0755' + +- name: Copy desktop arduino2 starter file to target + copy: + src: files/qg.appimage.ArduinoIDE2.desktop + dest: /usr/share/applications/qg.appimage.ArduinoIDE2.desktop + mode: '0644' + owner: root + group: root + +- name: Copy arduino Appimage start Script to target + copy: + src: files/start-arduino2-appimage + dest: /opt/appimages/arduino2/start-arduino2-appimage + mode: '0755' + owner: root + group: root + +- name: Delete arduino15 template + ansible.builtin.file: + state: absent + path: /var/lib/arduino2/template + +- name: Extract up to date arduino15 template to target + ansible.builtin.unarchive: + src: "{{ mirror_appimage }}/ArduinoIDE2-template.zip" + dest: /var/lib/arduino2/ + remote_src: yes + +######## +# Prusa Slicer AppImage +# +- name: Make sure target dir exists + ansible.builtin.file: + path: /opt/appimages/prusaslicer/ + state: directory + recurse: yes + owner: root + group: root + mode: '0755' + +- name: Download PrusaSlicer AppImage from Cache + ansible.builtin.get_url: + url: "{{ mirror_appimage }}/PrusaSlicer.AppImage" + dest: /opt/appimages/prusaslicer/PrusaSlicer.AppImage + mode: '0755' + +- name: Copy desktop PrusaSlicer starter file to target + copy: + src: files/qg.appimage.PrusaSlicer.desktop + dest: /usr/share/applications/qg.appimage.PrusaSlicer.desktop + mode: '0644' + owner: root + +- name: Copy desktop Prusaslicer icon file to target + copy: + src: files/prusaslicer.png + dest: /usr/share/icons/prusaslicer.png + mode: '0644' + owner: root + group: root + group: root + + +######## +# Logseq AppImage +# +- name: Make sure target dir for logseq exists + ansible.builtin.file: + path: /opt/appimages/logseq/ + state: directory + recurse: yes + owner: root + group: root + mode: '0755' + +- name: Download logseq AppImage from Cache + ansible.builtin.get_url: + url: "{{ mirror_appimage }}/Logseq.AppImage" + dest: /opt/appimages/logseq/Logseq.AppImage + mode: '0755' + +- name: Copy desktop logseq starter file to target + copy: + src: files/qg.appimage.Logseq.desktop + dest: /usr/share/applications/qg.appimage.Logseq.desktop + mode: '0644' + owner: root + group: root + +- name: Copy desktop logseq icon file to target + copy: + src: files/logseq.png + dest: /usr/share/icons/logseq.png + mode: '0644' + owner: root + group: root + +######## +# Digital als tarpack +# +- name: Unpack digital.zip to target + ansible.builtin.unarchive: + src: "{{ tarpack_digital }}" + dest: / + remote_src: yes + when: tarpack_digital is defined and tarpack_digital | length > 0 + + +####### +# Scratch +- name: Install scratch + ansible.builtin.apt: + deb: "{{ mirror_debs }}/{{ scratch_install_name }}" + diff --git a/roles/custom/qg-software/tasks/main.yml b/roles/custom/qg-software/tasks/main.yml new file mode 100644 index 0000000..ad5591a --- /dev/null +++ b/roles/custom/qg-software/tasks/main.yml @@ -0,0 +1,8 @@ +--- +- name: Install additional software + import_tasks: + file: install.yml + +- name: Remove unwanted software + import_tasks: + file: remove.yml diff --git a/roles/custom/qg-software/tasks/remove.yml b/roles/custom/qg-software/tasks/remove.yml new file mode 100644 index 0000000..cb3f726 --- /dev/null +++ b/roles/custom/qg-software/tasks/remove.yml @@ -0,0 +1,8 @@ +--- +####### +# Uninstall KDE-Connect +- name: Uninstall KDe Connect + apt: + name: kdeconnect + state: absent + diff --git a/roles/qg-updatecache/files/qg.appimage.FreeCAD.desktop b/roles/qg-updatecache/files/qg.appimage.FreeCAD.desktop new file mode 100644 index 0000000..dfb3dc0 --- /dev/null +++ b/roles/qg-updatecache/files/qg.appimage.FreeCAD.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Name=FreeCAD Appimage +Name[de]=FreeCAD Appimage +Name[pl]=FreeCAD Appimage +Name[ru]=FreeCAD Appimage +Comment=Feature based Parametric Modeler Appimage +Comment[de]=Feature-basierter parametrischer Modellierer Appimage +Comment[ru]=Система автоматизированного проектирования Appimage +GenericName=CAD Application Appimage +GenericName[de]=CAD-Anwendung Appimage +GenericName[pl]=Aplikacja CAD Appimage +GenericName[ru]=Система автоматизированного проектирования Appimage +Exec=/opt/appimages/freecad/FreeCAD.AppImage - --single-instance %F +Terminal=false +Type=Application +Icon=org.freecadweb.FreeCAD +Categories=Graphics;Science;Education;Engineering; +StartupNotify=true +MimeType=application/x-extension-fcstd;model/obj;model/iges;image/vnd.dwg;image/vnd.dxf;model/vnd.collada+xml;application/iges;model/iges;model/step;model/step+zip;model/stl;application/vnd.shp;model/vrml; diff --git a/roles/qg-updatecache/tasks/download.yml b/roles/qg-updatecache/tasks/download.yml new file mode 100644 index 0000000..df25b12 --- /dev/null +++ b/roles/qg-updatecache/tasks/download.yml @@ -0,0 +1,111 @@ +--- +- name: Create greenfoot/bluej version strings w/o points + set_fact: + bluejVersion: "{{ bluej_target_version | replace('.','.') }}" + greenfootVersion: "{{ greenfoot_target_version | replace('.','') }}" + +- name: Get download URIs + set_fact: + bluejURI: "{{ bluej_src_uri | replace ('VERSION', bluejVersion) }}" + greenfootURI: "{{ greenfoot_src_uri | replace ('VERSION', greenfootVersion) }}" + +- name: Create target filenames + set_fact: + bluejTargetFile: /var/www/html/javadev/bluej-{{ bluej_target_version }}.deb + greenfootTargetFile: /var/www/html/javadev/greenfoot-{{ greenfoot_target_version }}.deb + +- name: Check if greenfoot target-file exists + delegate_to: localhost + stat: + path: "{{ greenfootTargetFile }}" + register: gftf + +- name: Check if bluej target-file exists + delegate_to: localhost + stat: + path: "{{ bluejTargetFile }}" + register: bjtf + +- name: Download Greenfoot + delegate_to: localhost + command: wget {{ greenfootURI }} -O {{ greenfootTargetFile }} + when: not gftf.stat.exists + +- name: Download Bluej + delegate_to: localhost + command: wget {{ bluejURI }} -O {{ bluejTargetFile }} + when: not bjtf.stat.exists + +#### Freecad +- name: Check if freecad target-file exists + delegate_to: localhost + stat: + path: "{{ freecadTargetFile }}" + register: fctf + +- name: Download FreeCAD AppImage + delegate_to: localhost + command: wget {{ freecadFullURI }} -O {{ freecadTargetFile }} + when: not fctf.stat.exists + +#### Arduino +- name: Check if arduino2 target-file exists + delegate_to: localhost + stat: + path: "{{ arduinoTargetFile }}" + register: artf + +- name: Download Arduino AppImage + delegate_to: localhost + command: wget {{ arduinoFullURI }} -O {{ arduinoTargetFile }} + when: not artf.stat.exists + +#### Prusa Slicer +- name: Check if PrusaSlicer target-file exists + delegate_to: localhost + stat: + path: "{{ prusaTargetFile }}" + register: prtf + +- name: Create unzip dir for prusaslicer + ansible.builtin.file: + path: /tmp/prusaslicer.tmp + state: directory + +- name: Download and unpack PrusaSlicer Zip-Archive + delegate_to: localhost + unarchive: + src: "{{ prusaFullURI }}" + dest: /tmp/prusaslicer.tmp + remote_src: yes + when: not prtf.stat.exists + +- name: Copy Prusyslicer Appimage to cache + copy: + src: "{{ item }}" + dest: "{{ prusaTargetFile }}" + with_fileglob: + - "/tmp/prusaslicer.tmp/*newer-distros*" + +##command: wget {{ prusaFullURI }} -O /tmp/prusaslicer.zip + +###{{ freecadTargetFile }} + +#### Logseq + +- name: Check if logseq target-file exists + delegate_to: localhost + stat: + path: "{{ logseqTargetFile }}" + register: lstf + +- name: Download logseq AppImage + delegate_to: localhost + command: wget {{ logseqFullURI }} -O {{ logseqTargetFile }} + when: not lstf.stat.exists + +### Scratch offline + +- name: Download Scratch Offline deb + delegate_to: localhost + command: wget {{ scratch_src_uri }} -O /var/www/html/debs/{{ scratch_install_name }} diff --git a/roles/qg-updatecache/tasks/main.yml b/roles/qg-updatecache/tasks/main.yml new file mode 100644 index 0000000..85998aa --- /dev/null +++ b/roles/qg-updatecache/tasks/main.yml @@ -0,0 +1,4 @@ +--- +- name: Download additional software + import_tasks: + file: download.yml