diff --git a/README.md b/README.md index 7034340..74c99c4 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,39 @@ +# Using the ansible scripts + Ansible playbooks for deploying classroom computers. Run with something like: + ansible-playbook --user -k -K -i inventory.yml setup.py - ansible-playbook --user --ask-pass \ - --become-user= - --inventory hosts winsetup.yml +or, for Apple computers: + ansible-playbook --user -k -K -i inventory.yml macsetup.py + +# How classroom computers are prepared at FRI + +The computers are prepared as follows: + - Ask teachers to check their requirements. + - Fix ansible scripts according to the requirements. + - Set up a fresh Windows and Linux install on a VM, using files in unattended\_install. + - Use ansible to deploy the software, fixing fresh bugs due to changes in the install processes along the way. + - Fix root filesystem UUIDs to what they were last year so the network-booted menu still works. + - Create partition table image and partition images using [FRI Backup](https://github.com/UL-FRI/ansible_classroom_deploy/tree/main/fri_backup). + - Deploy the images on separate VMs - one for Linux, one for Windows. + - Have teachers check their software in the VMs, report any problems. + - Fix problems on the VMs. + - Create partition images for Windows on one VM, for Linux on the other. + - Deploy the images on a limited number of computers in the classrooms using FRI Backup. + - Test the newly deployed computers, fix identified problems on the VMs. + - Join the Linux VM into AD. One AD account is used for all computers. + - Deploy the partition tables and partitions to the classrooms using [custom ansible scripts](https://github.com/UL-FRI/ansible_classroom_deploy/tree/main/polz_scripts) running FRI Backup and [UDPCast](https://www.udpcast.linux.lu/cmd.html). + - Join Windows into AD. + +# Immutable computers + +Some pieces of modern software assume that a computer is only used by one user who has practically unlimited space in their home folder. Examples of such software are Android Studio, Visual Studio Code, Matlab, Windows Subsystem for Linux (WSUS) and others. Instead of trying to get the software to work, we might just give up and have everyone use the same account on each computer, then wipe all data after they log out / reboot. + +## Windows + +We intend to use [UWF](https://learn.microsoft.com/en-us/windows/configuration/wcd/wcd-unifiedwritefilter). + +## Linux + +We intend to use [snapper](https://wiki.archlinux.org/title/Snapper). - ansible-playbook --user --ask-pass \ - --inventory hosts linsetup.yml diff --git a/linsetup.yml b/linsetup.yml index ba5ac23..8fcfe2b 100644 --- a/linsetup.yml +++ b/linsetup.yml @@ -1,8 +1,8 @@ -- hosts: ucilnice-prototip +- hosts: classroom become_method: sudo become: true vars: - ansible_port: 1001 + # ansible_port: 1001 ansible_ssh_extra_args: '-o ForwardX11=yes' # ansible_become_pass: '{{ lookup("env", "ANSIBLE_PASSWORD") }}' # ansible_password: '{{ lookup("env", "ANSIBLE_PASSWORD") }}' @@ -12,7 +12,8 @@ - vars/credentials.yml - vars/software_keys.yml roles: - # - orange + # - nodejs + # - qcadesigner-e - all_classes # - fri_base # - powerdesigner diff --git a/roles/APS1-63711/main.yaml b/roles/APS1-63711/main.yaml new file mode 100644 index 0000000..ac14147 --- /dev/null +++ b/roles/APS1-63711/main.yaml @@ -0,0 +1,7 @@ +# Algoritmi in podatkovne strukture 1 +# jurij.mihelic@fri.uni-lj.si +# JDK, vscode, gedit +dependencies: + - role: jdk + - role: vscode + - role: gedit diff --git a/roles/DN-63260/meta/main.yml b/roles/DN-63260/meta/main.yml index aaa0ce9..c87e3ff 100644 --- a/roles/DN-63260/meta/main.yml +++ b/roles/DN-63260/meta/main.yml @@ -1,5 +1,8 @@ # Digitalno načrtovanje -# Nejc.Ilc@fri.uni-lj.si +# ratko.pilipovic@fri.uni-lj.si # Windows, Vivado 2022.1 dependencies: - role: vivado + - role: iverilog + - role: cocotb + - role: surfer-project diff --git a/roles/DPS-63744/meta/main.yml b/roles/DPS-63744/meta/main.yml index 1ebf218..bd30f3d 100644 --- a/roles/DPS-63744/meta/main.yml +++ b/roles/DPS-63744/meta/main.yml @@ -1,8 +1,11 @@ # Digitalno procesiranje signalov # Aleks.Huc@fri.uni-lj.si +# metod.celestina@dewesoft.si # Windows, GNU/Linux, Matlab, wfdb, Octave, Audacity dependencies: - role: matlab - role: wfdb - role: octave - role: audacity + - role: numpy + - role: matplotlib diff --git a/roles/IS-63266/meta/main.yml b/roles/IS-63266/meta/main.yml new file mode 100644 index 0000000..3c867f3 --- /dev/null +++ b/roles/IS-63266/meta/main.yml @@ -0,0 +1,7 @@ +# Inteligentni sistemi +# tadej.skvorc@fri.uni-lj.si +# +dependencies: + - role: python3 + - role: jupyter + - role: vscode diff --git a/roles/KRV-63528/meta/main.yml b/roles/KRV-63528/meta/main.yml index 9d48639..300873b 100644 --- a/roles/KRV-63528/meta/main.yml +++ b/roles/KRV-63528/meta/main.yml @@ -5,5 +5,5 @@ # SageMath se se prevede za Ubutnu 24.04: https://github.com/sagemath/sage/issues/38051#issuecomment-2123452861 # - include_tasks: sagemath.yml dependencies: - - role: jupyter.yml - - role: openssl.yml + - role: jupyter + - role: openssl diff --git a/roles/NDN-63729/meta/main.yml b/roles/NDN-63729/meta/main.yml index 12b4f3e..21edf8f 100644 --- a/roles/NDN-63729/meta/main.yml +++ b/roles/NDN-63729/meta/main.yml @@ -1,10 +1,10 @@ # Načrtovanje digitalnih naprav -# Miran.Koprivec@fri.uni-lj.si, Miha.Moskon@fri.uni-lj.si -# Windows, Vivado 2022.1 -# Načrtovanje digitalnih naprav -# Miha.Moskon@fri.uni-lj.si +# Miran.Koprivec@fri.uni-lj.si, Miha.Moskon@fri.uni-lj.si, ratko.pilipovic@fri.uni-lj.si # Windows, Vivado 2022.1 dependencies: - role: putty - role: vivado - role: cp2102_driver + - role: cocotb + - role: iverilog + - role: surfer-project diff --git a/roles/OR-63717/meta/main.yml b/roles/OR-63717/meta/main.yml index 91b97d4..465e6d2 100644 --- a/roles/OR-63717/meta/main.yml +++ b/roles/OR-63717/meta/main.yml @@ -3,7 +3,7 @@ # Windows, Logisim, Logisim Evolution, RAVINOR, CubeIDE + Tools, VSCode + ST plugin, Putty dependencies: - role: logisim - - role: stm32cube + # - role: stm32cube - role: vscode - role: putty - role: stm32duino diff --git a/roles/OS-63217/main.yaml b/roles/OS-63217/main.yaml new file mode 100644 index 0000000..de42bde --- /dev/null +++ b/roles/OS-63217/main.yaml @@ -0,0 +1,9 @@ +# Operacijski sistemi +# jurij.mihelic@fri.uni-lj.si +# C, JDK, vscode, gedit +dependencies: + - role: c_development + - role: jdk + - role: vscode + - role: gedit + - role: virtualbox diff --git a/roles/P1-63277/meta/main.yml b/roles/P1-63277/meta/main.yml index 6c58609..7f729a8 100644 --- a/roles/P1-63277/meta/main.yml +++ b/roles/P1-63277/meta/main.yml @@ -6,3 +6,4 @@ dependencies: - role: gedit - role: mono - role: vscode + - role: notepad++ diff --git a/roles/PR-63765/meta/main.yml b/roles/PR-63765/meta/main.yml new file mode 100644 index 0000000..6c638e4 --- /dev/null +++ b/roles/PR-63765/meta/main.yml @@ -0,0 +1,18 @@ +# Podatkovno rudarjenje +# rok.gomiscek@fri.uni-lj.si +# +dependencies: + - role: jupyter + - role: pandas + - role: matplotlib + - role: plotly + - role: seaborn + - role: altair + - role: scikit-learn + - role: mlxtend + - role: networkx + - role: transformers + - role: datasets + - role: evaluate + - role: torch # includes torchvision + - role: streamlit diff --git a/roles/RA-63703/meta/main.yml b/roles/RA-63703/meta/main.yml index 7408923..655325d 100644 --- a/roles/RA-63703/meta/main.yml +++ b/roles/RA-63703/meta/main.yml @@ -2,7 +2,7 @@ # Ziga.Pusnik@fri.uni-lj.si, Robert.Rozman@fri.uni-lj.si # Windows, CubeIDE + tools, STMDuino, VSCode, WinIdea 9.21 + GCC + QEMU, Visual2 dependencies: - - role: stm32cube (CubeMonitor sem vzel samo exe) + # - role: stm32cube # (CubeMonitor sem vzel samo exe) - role: stm32duino - role: vscode - role: putty @@ -10,6 +10,7 @@ dependencies: - role: gcc-arm - role: git - role: visual2 +# - role: winidea-frisms #TODO Writable d:\RAVINOR directory diff --git a/roles/SPO-63264/meta/main.yml b/roles/SPO-63264/meta/main.yml new file mode 100644 index 0000000..e797ed7 --- /dev/null +++ b/roles/SPO-63264/meta/main.yml @@ -0,0 +1,5 @@ +# Sistemska programska oprema +# tomaz.dobravec@fri.uni-lj.si +# Windows, GNU/Linux, Java +dependencies: + - role: jdk diff --git a/roles/VN-63728/meta/main.yml b/roles/VN-63728/meta/main.yml index 04abcca..411c38d 100644 --- a/roles/VN-63728/meta/main.yml +++ b/roles/VN-63728/meta/main.yml @@ -2,13 +2,14 @@ # Robert.Rozman@fri.uni-lj.si # Windows, CubeIDE + Tools, STMDuino, VSCode, LTSpice, PulseView,Putty, STM32 Algobuilder & Unicleo GUI dependencies: - - role: stm32cube + #- role: stm32cube - role: stm32duino - role: vscode - role: ltspice - role: pulseview - role: putty - - role: stm32algobuilder #(ni še exe. Datoteke - ne dobim iz ST portala) - - role: stm32unicleogui - + - role: stm32mems-studio # replaces algobuilder and unicleogui +# - role: stm32algobuilder #(ni še exe. Datoteke - ne dobim iz ST portala) +# - role: stm32unicleogui + #TODO Writable d:\RAVINOR directory diff --git a/roles/ad_joined/files/pam_mount.conf.xml b/roles/ad_joined/files/pam_mount.conf.xml new file mode 100644 index 0000000..24167bc --- /dev/null +++ b/roles/ad_joined/files/pam_mount.conf.xml @@ -0,0 +1,37 @@ + + + + + + + + + + local_admin + root + sudo + + + + + + + local_admin + root + sudo + + + + diff --git a/roles/ad_joined/tasks/main_lin.yml b/roles/ad_joined/tasks/main_lin.yml index d1cadbb..fce6850 100644 --- a/roles/ad_joined/tasks/main_lin.yml +++ b/roles/ad_joined/tasks/main_lin.yml @@ -1,25 +1,39 @@ -- name: Enable create homedir on login - command: pam-auth-update --enable mkhomedir - become: true +- name: Install required packages + apt: + name: + - realmd + - sssd + - libpam-mount + - heimdal-clients + +- name: Remove krb5-user + apt: + name: + krb5-user + state: absent + +- name: Set OU + set_fact: + ou_path: "OU={{locations[0]}},OU=Ucilnice" + +- name: Show state + debug: + msg: "Host: {{inventory_hostname}}, OU: {{ou_path}}" + # - import_tasks: ne_sysprep.yaml + +- name: "Rename" + # Racunalnik najprej preimenujmo, da ne bosta v domeni obenem 2 z istim imenom + hostname: + name: "{{inventory_hostname}}-linux" + register: hostname_res + - name: Check whether we already joined command: /bin/bash -c "/usr/sbin/realm list" register: realm_list_results - - name: Set OU - set_fact: - ou_path: "OU={{locations[0]}},OU=Ucilnice" - - name: Show state - debug: - msg: "Host: {{inventory_hostname}}, OU: {{ou_path}}" - # - import_tasks: ne_sysprep.yaml - - name: "Rename" - # Racunalnik najprej preimenujmo, da ne bosta v domeni obenem 2 z istim imenom - hostname: - name: "{{inventory_hostname}}" - register: hostname_res - name: Join using realmd expect: - command: realm join --user={{ad_join_user}} --computer-ou={{ou_path}} FRI1.UNI-LJ.SI + command: realm join --user={{ad_join_user}} --computer-ou={{ou_path}} {{domain_name}} responses: (?i)Password: "{{ad_join_password}}" ignore_errors: yes @@ -32,3 +46,20 @@ owner: root mode: 0600 +- name: Configure libpam-mount + copy: + src: pam_mount.conf.xml + dest: /etc/security/pam_mount.conf.xml + +- name: Enable libpam-mount + command: pam-auth-update --enable libpam-mount + become: true + +- name: Disable libpam-mkhomedir + command: pam-auth-update --disable mkhomedir + become: true + +- name: Restart sssd + service: + name: sssd + state: restarted diff --git a/roles/ad_joined/tasks/main_win.yml b/roles/ad_joined/tasks/main_win.yml index 79481e3..f2de3a9 100644 --- a/roles/ad_joined/tasks/main_win.yml +++ b/roles/ad_joined/tasks/main_win.yml @@ -1,18 +1,22 @@ - name: Set OU set_fact: ou_path: "OU={{locations[0]}},OU=Ucilnice,DC=fri1,DC=uni-lj,DC=si" + - name: "Rename" # Racunalnik najprej preimenujmo, da ne bosta v domeni obenem 2 z istim imenom win_hostname: name: "{{inventory_hostname}}" register: hostname_res + - name: "Reboot after hostname change" win_reboot: when: hostname_res.reboot_required + - name: Stop Windows Update Service win_service: name: wuauserv state: stopped + - name: Clear WSUS ID from registry win_regedit: path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate @@ -24,25 +28,30 @@ - AccountDomainSid - SusClientId - SusClientIDValidation + - name: Start Windows Update Service win_service: name: wuauserv state: started + - name: "Join domain" win_domain_membership: - domain_admin_user: "{{adjoin_user}}" - domain_admin_password: "{{adjoin_password}}" + domain_admin_user: "{{ad_join_user}}" + domain_admin_password: "{{ad_join_password}}" dns_domain_name: "{{domain_name}}" domain_ou_path: "{{ou_path}}" hostname: "{{inventory_hostname}}" state: domain register: domain_state + - name: Reset WSUS authorization win_command: wuauclt.exe /resetauthorization /detectnow ignore_errors: yes + - name: Update windows win_command: wuauclt.exe /updatenow ignore_errors: yes + - name: Reboot win_command: "shutdown /r" when: domain_state.reboot_required diff --git a/roles/ad_joined/templates/sssd.conf b/roles/ad_joined/templates/sssd.conf index 117793c..46c5c5b 100644 --- a/roles/ad_joined/templates/sssd.conf +++ b/roles/ad_joined/templates/sssd.conf @@ -29,3 +29,4 @@ ldap_id_mapping = True use_fully_qualified_names = True fallback_homedir = /home/%u@%d access_provider = ad +krb5_ccname_template = FILE:%d/krb5cc_%U diff --git a/roles/all_classes/meta/main.yml b/roles/all_classes/meta/main.yml index 49394c4..b50b0b3 100644 --- a/roles/all_classes/meta/main.yml +++ b/roles/all_classes/meta/main.yml @@ -2,6 +2,7 @@ dependencies: - role: fri_base - role: AAHRP-63263 - role: APS1-63279 + - role: APS1-63711 - role: ARP1-63545C - role: BMO-63259 - role: DF-63530 @@ -11,6 +12,7 @@ dependencies: - role: EP-63249 - role: FP-63507 - role: GO-63715 + - role: IS-63266 - role: IS-63714 - role: IVZ-63521 - role: KCR-63550 @@ -24,17 +26,22 @@ dependencies: - role: NRG-63553 - role: OBSS-63514 - role: ODV-63204 + - role: OIS-63215 - role: OO-63271 + - role: OPB-63208 - role: OR-63717 - role: ORS-63218 + - role: OS-63217 - role: OS-63709 - role: OS-63741 - role: OUI-63214 + - role: P1-63277 + - role: P1-63702 - role: P2-63278 - role: P2-63706 - role: PA-63737 - - role: PB2-63713 - role: PB-63707 + - role: PB2-63713 - role: PJC-63769 - role: PPJ-63220 - role: PS-63261 @@ -48,6 +55,7 @@ dependencies: - role: RPOI-90066 - role: RZP-63523 - role: SP-63255 + - role: SPO-63264 - role: ST-63727 - role: SU-63519 - role: TINR-63740 diff --git a/roles/altair/tasks/main.yml b/roles/altair/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/altair/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/altair/tasks/main_lin.yml b/roles/altair/tasks/main_lin.yml new file mode 100644 index 0000000..72354a1 --- /dev/null +++ b/roles/altair/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install altair + apt: + name: python3-altair + state: latest diff --git a/roles/altair/tasks/main_win.yml b/roles/altair/tasks/main_win.yml new file mode 100644 index 0000000..74d8219 --- /dev/null +++ b/roles/altair/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install altair + win_command: pip install altair diff --git a/roles/android_studio/tasks/androidsdk_packages.yml b/roles/android_studio/tasks/androidsdk_packages.yml index 2705a0f..bfd9d77 100644 --- a/roles/android_studio/tasks/androidsdk_packages.yml +++ b/roles/android_studio/tasks/androidsdk_packages.yml @@ -2,9 +2,8 @@ AndroidSDK_packages: - add-ons;addon-google_apis-google-24 - add-ons;addon-google_apis-google-24 - build-tools;34.0.0-rc3 - - build-tools;35.0.0 - - cmake;3.22.1 - #- cmake;latest + - build-tools;36.0.0 + - cmake;4.0.3 - cmdline-tools;latest - emulator - extras;android;m2repository @@ -22,15 +21,15 @@ AndroidSDK_packages: # - patcher;v4 - platform-tools - platforms;android-34 - - platforms;android-35 + - platforms;android-36 - platforms;android-32 - - platforms;android-UpsideDownCakePrivacySandbox + # - platforms;android-UpsideDownCakePrivacySandbox - skiaparser;3 - - sources;android-35 + - sources;android-36 - sources;android-34 - - system-images;android-35;google_apis;x86_64 + - system-images;android-36;google_apis;x86_64 - system-images;android-34;google_apis;x86_64 - system-images;android-32;google_apis;x86_64 - - system-images;android-35;google_apis_playstore;x86_64 + - system-images;android-36;google_apis_playstore;x86_64 - system-images;android-34;google_apis_playstore;x86_64 - - system-images;android-UpsideDownCakePrivacySandbox;google_apis_playstore;x86_64 + # - system-images;android-UpsideDownCakePrivacySandbox;google_apis_playstore;x86_64 diff --git a/roles/android_studio/tasks/main_win.yml b/roles/android_studio/tasks/main_win.yml index 1199913..e4de8ee 100644 --- a/roles/android_studio/tasks/main_win.yml +++ b/roles/android_studio/tasks/main_win.yml @@ -1,63 +1,90 @@ - name: Set Android Studio version set_fact: - sdk_path: C:\android-sdk - studio_version: "2025.1.2.11" - tools_version: "latest" + studio_path: "{{ large_prog_dir }}\\android-studio" + studio_version: "2025.1.2.13" + tools_version: "13114758_latest" + +- name: Set Android command-line tools path + set_fact: + tools_path: "{{ studio_path }}\\cmdline-tools\\latest" + +- name: Check Android Studio + win_stat: + path: "{{ studio_path }}\\bin\\studio64.exe" + register: studio + +- when: not studio.stat.exists + block: + - name: Download Android Studio + win_get_url: + url: "https://redirector.gvt1.com/edgedl/android/studio/ide-zips/{{ studio_version }}/android-studio-{{ studio_version }}-windows.zip" + dest: "{{ large_prog_dir }}\\" + + - name: Extract Android Studio + win_unzip: + src: "{{ large_prog_dir }}\\android-studio-{{ studio_version }}-windows.zip" + dest: "{{ large_prog_dir }}\\" + delete_archive: yes - name: Check Android Studio tools win_stat: - path: "{{ sdk_path }}\\cmdline-tools\\cmdline-tools\\bin\\sdkmanager.bat" + path: "{{ tools_path }}\\bin\\sdkmanager.bat" register: tools - when: not tools.stat.exists block: - name: Download Android Studio tools win_get_url: - # url: "https://dl.google.com/android/repository/commandlinetools-win-{{ tools_version }}.zip" - url: "https://dl.google.com/android/repository/platform-tools-{{ tools_version }}-windows.zip" - dest: C:\ + url: "https://dl.google.com/android/repository/commandlinetools-win-{{ tools_version }}.zip" + # url: "https://dl.google.com/android/repository/platform-tools-{{ tools_version }}-windows.zip" + dest: "{{ studio_path }}" - name: Extract Android Studio tools win_unzip: - src: "C:\\commandlinetools-win-{{ tools_version }}.zip" - dest: "{{ sdk_path }}\\cmdline-tools" + # src: "{{ large_prog_dir }}\\platform-tools-{{ tools_version }}-windows.zip" + src: "{{ studio_path}}\\commandlinetools-win-{{ tools_version }}.zip" + dest: "{{ studio_path }}\\cmdline-tools\\" delete_archive: yes - -- name: Accept Android SDK licenses - win_shell: sh -c "yes | /c/android-sdk/cmdline-tools/cmdline-tools/bin/sdkmanager.bat --licenses" - -- name: Include Android SDK packages - include_vars: androidsdk_packages.yml - -- name: Install Android SDK - win_shell: | - {{ sdk_path }}\\cmdline-tools\\cmdline-tools\\bin\\sdkmanager --install "{{ item }}" - loop: "{{ AndroidSDK_packages }}" - - -# {{ sdk_path }}\\cmdline-tools\\cmdline-tools\\bin\\sdkmanager --install "{{ AndroidSDK_packages | join(' ') }}" -# {{ sdk_path }}\\cmdline-tools\\cmdline-tools\\bin\\sdkmanager --install "build-tools;33.0.0" "cmdline-tools;latest" "emulator" "ndk-bundle" "ndk;25.1.8937393" "platform-tools" "platforms;android-33" "sources;android-33" "system-images;android-33;google_apis;arm64-v8a" "system-images;android-33;google_apis;x86_64" - -- name: Install Android Studio - win_package: - path: "https://redirector.gvt1.com/edgedl/android/studio/install/{{ studio_version }}/android-studio-{{ studio_version }}-windows.exe" - arguments: /S /AllUsers - expected_return_code: [0, 1223, 3010] - creates_path: "%ProgramFiles%\\Android\\Android Studio\\bin\\studio64.exe" + - name: Move cmdline-tools to expected location + ansible.windows.win_powershell: + script: move "{{ studio_path }}\\cmdline-tools\\cmdline-tools" "{{ tools_path }}" - name: Create Android Studio data directory win_file: - path: D:\.android + path: "{{ large_prog_dir }}\\.android" state: directory - name: Set Android Studio environment variables win_environment: level: machine variables: - ANDROID_HOME: "{{ sdk_path }}" - ANDROID_PREFS_ROOT: D:\ - GRADLE_USER_HOME: D:\.gradle + ANDROID_HOME: "{{ studio_path }}" + ANDROID_SDK_ROOT: "{{ studio_path }}" + ANDROID_PREFS_ROOT: "{{ large_prog_dir }}\\" + GRADLE_USER_HOME: "{{ large_prog_dir }}\\.gradle" + +# - name: Accept Android SDK licenses +# win_shell: sh -c "yes | /c/android-sdk/cmdline-tools/cmdline-tools/bin/sdkmanager.bat --licenses" + +- name: Include Android SDK packages + include_vars: androidsdk_packages.yml + +- name: Install Android SDK packages + win_shell: | + {{ tools_path }}\bin\sdkmanager.bat --install "{{ item }}" + loop: "{{ AndroidSDK_packages }}" + + +# {{ sdk_path }}\\cmdline-tools\\cmdline-tools\\bin\\sdkmanager --install "{{ AndroidSDK_packages | join(' ') }}" +# {{ sdk_path }}\\cmdline-tools\\cmdline-tools\\bin\\sdkmanager --install "build-tools;33.0.0" "cmdline-tools;latest" "emulator" "ndk-bundle" "ndk;25.1.8937393" "platform-tools" "platforms;android-33" "sources;android-33" "system-images;android-33;google_apis;arm64-v8a" "system-images;android-33;google_apis;x86_64" + +#- name: Install Android Studio +# win_package: +# path: "https://redirector.gvt1.com/edgedl/android/studio/install/{{ studio_version }}/android-studio-{{ studio_version }}-windows.exe" +# arguments: /S /AllUsers +# expected_return_code: [0, 1223, 3010] +# creates_path: "%ProgramFiles%\\Android\\Android Studio\\bin\\studio64.exe" #- name: Check HAXM install status # win_stat: # path: "%ProgramFiles%\\Intel\\HAXM" diff --git a/roles/arduino/tasks/main_win.yml b/roles/arduino/tasks/main_win.yml index a607b37..ab4558a 100644 --- a/roles/arduino/tasks/main_win.yml +++ b/roles/arduino/tasks/main_win.yml @@ -8,8 +8,9 @@ - name: Install Arduino-cli win_package: # path: https://downloads.arduino.cc/arduino-ide/arduino-ide_2.0.0_Windows_64bit.exe - path: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_64bit.zip - arguments: /S /AllUsers + path: https://github.com/arduino/arduino-cli/releases/download/v1.3.0/arduino-cli_1.3.0_Windows_64bit.msi + # path: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_64bit.zip + # arguments: /S /AllUsers # creates_path: "%ProgramFiles%\\Arduino IDE\\Arduino IDE.exe" diff --git a/roles/chrome/tasks/main_lin.yml b/roles/chrome/tasks/main_lin.yml index 390d25c..5433e42 100644 --- a/roles/chrome/tasks/main_lin.yml +++ b/roles/chrome/tasks/main_lin.yml @@ -1,9 +1,13 @@ - name: Add Chromium not-a-snap repository - apt_repository: - repo: ppa:xtradeb/apps + apt: + deb: https://launchpad.net/~xtradeb/+archive/ubuntu/apps/+files/xtradeb-apt-source_0.4_all.deb state: present - update_cache: True - validate_certs: False + + #apt_repository: + # repo: ppa:xtradeb/apps + # state: present + # update_cache: True + # validate_certs: False - name: Install Chromium instead of Chrome apt: diff --git a/roles/cocotb/tasks/main.yml b/roles/cocotb/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/cocotb/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/cocotb/tasks/main_lin.yml b/roles/cocotb/tasks/main_lin.yml new file mode 100644 index 0000000..94db275 --- /dev/null +++ b/roles/cocotb/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install Cocotb + pip: + executable: pipx + name: cocotb[bus] diff --git a/roles/cocotb/tasks/main_win.yml b/roles/cocotb/tasks/main_win.yml new file mode 100644 index 0000000..54148f4 --- /dev/null +++ b/roles/cocotb/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install cocoTB + win_command: pip install cocotb[bus] diff --git a/roles/cp2102_driver/tasks/main_win.yml b/roles/cp2102_driver/tasks/main_win.yml index 7f30792..5dcc415 100644 --- a/roles/cp2102_driver/tasks/main_win.yml +++ b/roles/cp2102_driver/tasks/main_win.yml @@ -2,3 +2,5 @@ win_chocolatey: ignore_checksums: true name: cp210x-vcp-drivers-win10 + #TODO remove ignore_errors once the package is repaired/updated + ignore_errors: true diff --git a/roles/datasets/tasks/main.yml b/roles/datasets/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/datasets/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/datasets/tasks/main_lin.yml b/roles/datasets/tasks/main_lin.yml new file mode 100644 index 0000000..e2e237b --- /dev/null +++ b/roles/datasets/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install datasets + pip: + executable: pipx + name: datasets diff --git a/roles/datasets/tasks/main_win.yml b/roles/datasets/tasks/main_win.yml new file mode 100644 index 0000000..a614c33 --- /dev/null +++ b/roles/datasets/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install datasets + win_command: pip install datasets diff --git a/roles/eclipse/tasks/main_win.yml b/roles/eclipse/tasks/main_win.yml index 5e39d7c..f26c809 100644 --- a/roles/eclipse/tasks/main_win.yml +++ b/roles/eclipse/tasks/main_win.yml @@ -12,4 +12,4 @@ win_lineinfile: path: "%ProgramFiles%\\Eclipse {{ target_version }}\\eclipse\\eclipse.ini" regexp: "osgi.instance.area.default" - line: "-Dosgi.instance.area.default=H:/Documents/eclipse-workspace" + line: "-Dosgi.instance.area.default=D:/Documents/eclipse-workspace" diff --git a/roles/evaluate/tasks/main.yml b/roles/evaluate/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/evaluate/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/evaluate/tasks/main_lin.yml b/roles/evaluate/tasks/main_lin.yml new file mode 100644 index 0000000..104c9da --- /dev/null +++ b/roles/evaluate/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install evaluate + pip: + executable: pipx + name: evaluate diff --git a/roles/evaluate/tasks/main_win.yml b/roles/evaluate/tasks/main_win.yml new file mode 100644 index 0000000..7698d3f --- /dev/null +++ b/roles/evaluate/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install evaluate + win_command: pip install evaluate diff --git a/roles/facts/tasks/main.yml b/roles/facts/tasks/main.yml new file mode 100644 index 0000000..4b5c6fe --- /dev/null +++ b/roles/facts/tasks/main.yml @@ -0,0 +1,26 @@ +- name: Send valid bash or ps command with different results + raw: | + echo \#\# + register: raw_result + +- name: Set shell type + set_fact: + ansible_shell_type: "{% if raw_result['stdout'][-4] == '#' %}sh{% else %}powershell{%endif%}" + +- name: Set connection parameters and paths for Windows + become: false + set_fact: + ansible_become_method: runas + ansible_become_flags: "" + ansible_become_user: "{{ windows_user }}" + logon_type: interactive + installers: \\ucilnicesmb.fri1.uni-lj.si\ucilnice_d\install + when: ansible_shell_type == "powershell" + +- name: Set connection parameters and paths for Ubuntu + set_fact: + ansible_become_method: sudo + ansible_become_flags: "" + ansible_ssh_extra_args: '-o ForwardX11=yes' + installers: /mnt/ucilnice_d/install + when: ansible_shell_type == "sh" diff --git a/roles/firefox/tasks/main_lin.yml b/roles/firefox/tasks/main_lin.yml index eb729c0..8cd61d2 100644 --- a/roles/firefox/tasks/main_lin.yml +++ b/roles/firefox/tasks/main_lin.yml @@ -1,5 +1,21 @@ - name: Add Firefox not-a-snap repository block: + - name: add Mozilla apt key + ansible.builtin.get_url: + url: https://packages.mozilla.org/apt/repo-signing-key.gpg + dest: /etc/apt/keyrings/packages.mozilla.org.asc + + - name: add Mozilla apt source + ansible.builtin.apt_repository: + repo: "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" + state: present + + #- name: Add Firefox PPA + # apt_repository: + # repo: ppa:mozillateam/ppa + # state: present + # update_cache: True + # validate_certs: False - name: Pin Firefox PPA package priority template: src: mozilla-firefox-apt-preferences @@ -8,12 +24,6 @@ template: src: mozilla-firefox-unattended-upgrades dest: /etc/apt/apt.conf.d/51unattended-upgrades-firefox - - name: Add Firefox PPA - apt_repository: - repo: ppa:mozillateam/ppa - state: present - update_cache: True - validate_certs: False - name: Install Firefox apt: diff --git a/roles/flask/tasks/main.yml b/roles/flask/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/flask/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/flask/tasks/main_lin.yml b/roles/flask/tasks/main_lin.yml new file mode 100644 index 0000000..1d7c92f --- /dev/null +++ b/roles/flask/tasks/main_lin.yml @@ -0,0 +1,7 @@ +- name: Install flask + apt: + name: + - python3-flask + - python-flask-doc + state: latest + diff --git a/roles/fri_base/files/authorized_keys b/roles/fri_base/files/authorized_keys new file mode 100644 index 0000000..bffc05c --- /dev/null +++ b/roles/fri_base/files/authorized_keys @@ -0,0 +1,4 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM2Tn8+rH+fkFkBycxYrJ7TzhXQhuf3U+w23JFlZoRiX polz@povzpetnik" +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDRpoWIH5u2g12IM39WNRzLsPksfSjfL/82fPnuZwZ7H polz@it-polz" +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCq7NrrDD53pe9Zpn/dRSPxWQLDIZ9INS0kz/ps/9fGsM8/H/J7jr/ecj0j0jfYig6QdV8G7VnpLWjcuJ65ul3u2rnQSN78Ms/hxlAhmyahQtBA2q2D2zqI2PDWsKAySWmfFg+2W5fYmE1+F9GEB0OWNOuClmfo2A1c8Ve76qSiehHgjYo0G1CQrXkmE00GBLqyqkbyyStLa9DUfaDwrbOu4tJChHo4jDGuLH5QCYcN+RRXjwPQKgk0L2yfu1479L0XqhbEo+KHoIZH501fkoE+gUKVyLERvkhKSiCgPhJmAgRN1bRsiyTwvQzoED4q1RwFmG0AKg0U5bHnAAOd77uyuIYmcFiaRGHROQ9ZbyB9tJ07QrFlzRkderDd5Z18mO7LtgDjFZ2B2DlRY6zxMiUqJyDRnHjDF3+3DTlHIUCC3aEtoYS8MPyRL1b8XenIqswXkM+vkYFeKh2ynjNu3C6VqDCXZFvIi6f1X0ojZXRrDmbiON8Y74HjxP0z6TB1U30= polz@ucilnicenfs-2020 + diff --git a/roles/fri_base/tasks/main_lin.yml b/roles/fri_base/tasks/main_lin.yml index 1cc6e95..e60504a 100644 --- a/roles/fri_base/tasks/main_lin.yml +++ b/roles/fri_base/tasks/main_lin.yml @@ -27,8 +27,9 @@ - wine32:i386 - wine-binfmt - dosbox - - webext-ublock-origin-chromium - - webext-ublock-origin-firefox + - snapper + # - webext-ublock-origin-chromium + # - webext-ublock-origin-firefox - nethack-console - zsh - tmux @@ -49,6 +50,8 @@ - neovim-qt - binwalk - iotop + - evince + - okular - htop - jdupes state: latest @@ -132,8 +135,8 @@ state: mounted opts: guest,soft,nofail -- name: Set time to local RTC - shell: "timedatectl set-local-rtc 1 --adjust-system-clock" +# - name: Set time to local RTC +# shell: "timedatectl set-local-rtc 1 --adjust-system-clock" - name: Install ethtool apt: @@ -144,3 +147,18 @@ copy: dest: /etc/udev/rules.d/ src: 99-wakeonlan.rules + +- name: Shorten PS1 prompt + replace: + path: "{{ item }}" + regexp: 'PS1=(.*)\\u@\\h' + replace: PS1=\1${USER%@*} + loop: + - /etc/skel/.bashrc + - /etc/profile + - /etc/bash.bashrc + +- name: Copy authorized_keys + copy: + src: authorized_keys + dest: ~/.ssh/authorized_keys diff --git a/roles/fri_base/tasks/main_win.yml b/roles/fri_base/tasks/main_win.yml index 40d9e2f..9e3b5e5 100644 --- a/roles/fri_base/tasks/main_win.yml +++ b/roles/fri_base/tasks/main_win.yml @@ -1,18 +1,34 @@ +- name: Set RTC to UTC + win_regedit: + path: HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation + name: RealTimeIsUniversal + data: 1 + type: dword + - name: Set timezone win_timezone: timezone: Central Europe Standard Time + - name: Show file extensions in Explorer win_regedit: path: HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced name: HideFileExt data: 0 type: dword + - name: Allow SMB insecure guest access win_regedit: path: HKLM:\Software\Policies\Microsoft\Windows\LanmanWorkstation name: AllowInsecureGuestAuth data: 1 type: dword + +- name: Enable Unified Write Filter + win_optional_feature: + include_parent: true + name: Client-UnifiedWriteFilter + state: present + - name: Install PSCX community.windows.win_psmodule: name: Pscx @@ -20,5 +36,15 @@ allow_clobber: true state: present +- name: Copy admin ssh keys to authorized_keys + win_copy: + src: authorized_keys + dest: "%USERPROFILE%\\.ssh" + +- name: Copy admin keys to administrators_authorized_keys + win_copy: + src: authorized_keys + dest: C:\ProgramData\ssh\administrators_authorized_keys + # TODO: turn on GPO to allow guest SMB logins # TODO: open firewall for Samba diff --git a/roles/gns3/tasks/main_lin.yml b/roles/gns3/tasks/main_lin.yml index df2807d..7b8fb8a 100644 --- a/roles/gns3/tasks/main_lin.yml +++ b/roles/gns3/tasks/main_lin.yml @@ -1,9 +1,23 @@ - name: Add GNS3 repository - apt_repository: - repo: ppa:gns3/ppa - state: present - update_cache: True - validate_certs: False + block: + - name: add GNS3 apt key + ansible.builtin.get_url: + url: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb83aaabffbd82d21b543c8ea86c22c2ec6a24d7f + dest: /etc/apt/keyrings/gns3-ppa.asc + - name: add GNS3 apt deb source + ansible.builtin.apt_repository: + repo: "deb [signed-by=/etc/apt/keyrings/gns3-ppa.asc] https://ppa.launchpadcontent.net/gns3/ppa/ubuntu {{ ansible_distribution_release }} main " + state: present + - name: add GNS3 apt deb-src source + ansible.builtin.apt_repository: + repo: "deb-src [signed-by=/etc/apt/keyrings/gns3-ppa.asc] https://ppa.launchpadcontent.net/gns3/ppa/ubuntu {{ ansible_distribution_release }} main " + state: present +# apt_repository: +# repo: ppa:gns3/ppa +# state: present +# update_cache: True +# validate_certs: False + - name: Install gns3 server ansible.builtin.apt: name: gns3-server diff --git a/roles/inkscape/tasks/main_lin.yml b/roles/inkscape/tasks/main_lin.yml index 4c8441a..69a9e9c 100644 --- a/roles/inkscape/tasks/main_lin.yml +++ b/roles/inkscape/tasks/main_lin.yml @@ -1,10 +1,20 @@ - name: Add Inkscape repository - apt_repository: - repo: ppa:inkscape.dev/stable - state: present - update_cache: True - validate_certs: False + block: + - name: add Inkscape trunk apt key + ansible.builtin.get_url: + url: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1F46021FF9A0C56504CE42CD06E315A37AAEF27A + dest: /etc/apt/keyrings/inkscape-trunk-ppa.asc + - name: add Inkscape trunk apt deb source + ansible.builtin.apt_repository: + repo: "deb [signed-by=/etc/apt/keyrings/inkscape-trunk-ppa.asc] https://ppa.launchpadcontent.net/reviczky/inkscape-1.4/ubuntu {{ ansible_distribution_release }} main " + state: present + +# apt_repository: +# repo: ppa:inkscape.dev/stable +# state: present +# update_cache: True +# validate_certs: False - name: Install Inkscape apt: - name: inkscape + name: inkscape-trunk state: latest diff --git a/roles/iverilog/tasks/main.yml b/roles/iverilog/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/iverilog/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/iverilog/tasks/main_lin.yml b/roles/iverilog/tasks/main_lin.yml new file mode 100644 index 0000000..fc76453 --- /dev/null +++ b/roles/iverilog/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install Icarus + apt: + name: iverilog + state: latest diff --git a/roles/iverilog/tasks/main_win.yml b/roles/iverilog/tasks/main_win.yml new file mode 100644 index 0000000..d8d6d03 --- /dev/null +++ b/roles/iverilog/tasks/main_win.yml @@ -0,0 +1,5 @@ +- name: Install Icarus Verilog + win_chocolatey: + name: iverilog + version: '11.0' + state: present diff --git a/roles/jdk/tasks/main_lin.yml b/roles/jdk/tasks/main_lin.yml index eaaa1b3..8c2a94e 100644 --- a/roles/jdk/tasks/main_lin.yml +++ b/roles/jdk/tasks/main_lin.yml @@ -1,6 +1,11 @@ -- name: Install OpenJDK 21 +- name: Install latest OpenJDK (25) apt: - name: openjdk-21-jdk + name: openjdk-25-jdk + state: latest + +- name: Install latest Java docs + apt: + name: openjdk-25-doc state: latest - name: Install OpenJDK 17 @@ -31,11 +36,7 @@ - libc6-x32 state: latest -- name: Install Oracle JDK 22 +- name: Install Oracle JDK 24 apt: - deb: "https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.deb" - -- name: Install Java docs - apt: - deb: "https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.deb" + deb: "https://download.oracle.com/java/24/latest/jdk-24_linux-x64_bin.deb" diff --git a/roles/jdk/tasks/main_win.yml b/roles/jdk/tasks/main_win.yml index ceb1996..be8ea09 100644 --- a/roles/jdk/tasks/main_win.yml +++ b/roles/jdk/tasks/main_win.yml @@ -1,6 +1,6 @@ - name: Install Oracle JDK win_package: - path: https://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.msi + path: https://download.oracle.com/java/24/latest/jdk-24_windows-x64_bin.msi arguments: INSTALLLEVEL=3 - name: Find Java version @@ -28,6 +28,13 @@ state: present scope: machine +- name: Add Java bin dir to PATH + win_path: + name: PATH + elements: "{{ reg['raw_value'] }}\\bin" + state: present + scope: machine + - name: Disable Java updates win_regedit: path: HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy diff --git a/roles/logisim/tasks/main_lin.yml b/roles/logisim/tasks/main_lin.yml index d35c8f5..c9a2213 100644 --- a/roles/logisim/tasks/main_lin.yml +++ b/roles/logisim/tasks/main_lin.yml @@ -11,3 +11,13 @@ dest: /opt/logisim remote_src: yes creates: /opt/logisim/META-INF/MANIFEST.MF + - name: Create destination for Logisim - Evolution + file: + path: /opt/logisim-evolution + state: directory + - name: Download and unpack Logisim - Evolution + unarchive: + src: https://github.com/logisim-evolution/logisim-evolution/releases/download/v3.9.0/logisim-evolution-3.9.0-all.jar + dest: /opt/logisim-evolution + remote_src: yes + creates: /opt/logisim-evolution/META-INF/MANIFEST.MF diff --git a/roles/matlab/tasks/main_lin.yml b/roles/matlab/tasks/main_lin.yml index 200fd19..2942237 100644 --- a/roles/matlab/tasks/main_lin.yml +++ b/roles/matlab/tasks/main_lin.yml @@ -1,6 +1,6 @@ - name: Set Matlab version and destination set_fact: - target_version: "R2024a_Update_5" + target_version: "R2025a_Update_1" install_dir: "/mnt/ucilnice_d/install/matlab/" license_path: "/mnt/ucilnice_d/install/matlab/network.lic" dest_dir: /opt/matlab @@ -23,7 +23,7 @@ - name: Install Matlab command: cmd: /tmp/matlab_iso/install -inputFile "/tmp/matlab_installer_input.txt" - # creates: "{{ dest_dir }}/VersionInfo.xml" + creates: "{{ dest_dir }}/licenses/license_info.xml" #- name: Unmount Matlab ISO # win_disk_image: # image_path: "{{ installers }}\\matlab\\matlab-{{ target_version }}_windows.iso" diff --git a/roles/matlab/tasks/main_win.yml b/roles/matlab/tasks/main_win.yml index ee89c98..4fd79ff 100644 --- a/roles/matlab/tasks/main_win.yml +++ b/roles/matlab/tasks/main_win.yml @@ -2,7 +2,7 @@ set_fact: target_version: "R2025a_Update_1" license_path: \\ucilnicesmb.fri1.uni-lj.si\ucilnice_d\install\matlab\network.lic - dest_dir: D:\matlab + dest_dir: "{{ large_prog_dir }}\\matlab" - name: Set ISO path set_fact: @@ -17,21 +17,27 @@ - name: Prepare installer_input.txt template: src: installer_input.txt - dest: d:\matlab_installer_input.txt + dest: c:\matlab_installer_input.txt - name: Install Matlab win_package: path: "{{ disk_image.mount_paths[0] }}\\setup.exe" - arguments: -inputFile "d:\\matlab_installer_input.txt" + arguments: -inputFile "c:\\matlab_installer_input.txt" - name: Unmount Matlab ISO win_disk_image: image_path: "{{ iso_path }}" state: absent + ignore_errors: true -# TODO MATLAB throws license error -83 when run -- name: Install Matlab license - win_copy: - dest: "{{ dest_dir }}\\licenses\\network.lic" - src: "{{ installers }}\\matlab\\network.lic" - remote_src: yes +- name: Create licenses directory + win_file: + dest: "{{ dest_dir }}\\licenses" + state: directory + +# MATLAB will no longer be used with concurrent licenses - let them license their own! +#- name: Install Matlab license +# win_copy: +# dest: "{{ dest_dir }}\\licenses\\network.lic" +# src: "{{ installers }}\\matlab\\network.lic" +# remote_src: yes diff --git a/roles/matlab/templates/installer_input.txt b/roles/matlab/templates/installer_input.txt index 4207b6d..7ce76e9 100644 --- a/roles/matlab/templates/installer_input.txt +++ b/roles/matlab/templates/installer_input.txt @@ -13,7 +13,8 @@ agreeToLicense=yes ## Users must log in to their MathWorks Account when MATLAB starts. ## ## NOTE: This flag is valid in silent installations only. -enableLNU=no +# enableLNU=no +enableLNU=yes improveMATLAB=no diff --git a/roles/matplotlib/tasks/main_lin.yml b/roles/matplotlib/tasks/main_lin.yml index b64ec33..a509286 100644 --- a/roles/matplotlib/tasks/main_lin.yml +++ b/roles/matplotlib/tasks/main_lin.yml @@ -1,4 +1,11 @@ -- name: Install maptplotlib +- name: Install matplotlib apt: - name: matplotlib - state: latest \ No newline at end of file + name: + - python3-matplotlib + - python3-matplotlib-inline + - python3-matplotlib-venn + - python3-mpl-animators + - python3-mpl-scatter-density + - python3-mplcursors + - python3-mplexporter + state: latest diff --git a/roles/mlxtend/tasks/main.yml b/roles/mlxtend/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/mlxtend/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/mlxtend/tasks/main_lin.yml b/roles/mlxtend/tasks/main_lin.yml new file mode 100644 index 0000000..393f093 --- /dev/null +++ b/roles/mlxtend/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install mlxtend + pip: + executable: pipx + name: mlxtend diff --git a/roles/mlxtend/tasks/main_win.yml b/roles/mlxtend/tasks/main_win.yml new file mode 100644 index 0000000..a486f76 --- /dev/null +++ b/roles/mlxtend/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install pandas + win_command: pip install mlxtend diff --git a/roles/mysql_workbench/tasks/main_lin.yml b/roles/mysql_workbench/tasks/main_lin.yml index 27c4fa3..f5dea85 100644 --- a/roles/mysql_workbench/tasks/main_lin.yml +++ b/roles/mysql_workbench/tasks/main_lin.yml @@ -1,8 +1,104 @@ -- name: Download mysql workbench +- name: Create mysql workbench build directory + file: + path: /tmp/mysql-workbench + state: directory + +- name: Download mysql workbench source get_url: - url: https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community_8.0.38-1ubuntu24.04_amd64.deb - dest: /tmp/mysql-workbench-community_8.0.38-1ubuntu24.04_amd64.deb + url: https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-8.0.43-src.tar.gz + dest: /tmp/mysql-workbench/mysql-workbench.tgz http_agent: "Wget/1.21.3" -- name: Install mysql workbench + register: mysql_download + +- name: Install mysql workbench build dependencies apt: - deb: /tmp/mysql-workbench-community_8.0.38-1ubuntu24.04_amd64.deb + package: + - build-essential + - cmake + - cmake-data + - autoconf + - automake + - pkg-config + - libtool + - libzip-dev + - libxml2-dev + - libsigc++-2.0-dev + - libglade2-dev + - libglu1-mesa-dev + - libgl1-mesa-dev + - mesa-common-dev + - libmysqlclient-dev + - libmysqlcppconn-dev + - uuid-dev + - libpixman-1-dev + - libpcre3-dev + - libpango1.0-dev + - libcairo2-dev + - python3-dev + - libboost-dev + - default-mysql-client + - libsqlite3-dev + - swig4.1 + - libvsqlitepp-dev + - libgdal-dev + - libgtk-3-dev + - libgtkmm-3.0-dev + - libssl-dev + - libsecret-1-dev + - libproj-dev + - libssh-dev + - rapidjson-dev + - unixodbc-dev + - unixodbc + +- name: Create /usr/local/share/java + file: + path: /usr/local/share/java + state: directory + +- name: Download antlr jar + get_url: + url: https://www.antlr.org/download/antlr-4.13.2-complete.jar + dest: /usr/local/share/java/antlr-4.13.2-complete.jar + + +- name: Create antlr4 build dir + file: + path: /tmp/antlr4/build + state: directory + +- name: Checkout antlr4 (cpp runtime) + git: + repo: https://github.com/antlr/antlr4/ + dest: /tmp/antlr4/antlr4 + +- name: Build antlr4 cpp runtime + shell: + cmd: "cd /tmp/antlr4/build; cmake ../antlr4/runtime/Cpp; make; make install" + +- name: Extract MySQL Workbench source + unarchive: + src: "{{ mysql_download.dest }}" + remote_src: true + dest: /tmp/mysql-workbench + +- name: Create build dir + file: + path: /tmp/mysql-workbench/build + state: directory + +- name: Build Mysql Workbench + shell: + cmd: "cd /tmp/mysql-workbench/build; cmake -DUSE_UNIXODBC=True -DODBC_LIBRARIES=-lodbc -DANTLR_JAR_PATH=/usr/local/share/java -DSWIG_EXECUTABLE=/usr/bin/swig4.1 -DSWIG_DIR=/usr/share/swig4.1 ../mysql-workbench-*-src; make; make install" + +#- name: Download mysql workbench +# get_url: +# url: https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community_8.0.38-1ubuntu24.04_amd64.deb +# dest: /tmp/mysql-workbench-community_8.0.38-1ubuntu24.04_amd64.deb +# http_agent: "Wget/1.21.3" + + + +#- name: Install mysql workbench +# apt: +# deb: /tmp/mysql-workbench-community_8.0.38-1ubuntu24.04_amd64.deb diff --git a/roles/netbeans/tasks/main_win.yml b/roles/netbeans/tasks/main_win.yml index 72b2659..afb9134 100644 --- a/roles/netbeans/tasks/main_win.yml +++ b/roles/netbeans/tasks/main_win.yml @@ -2,8 +2,22 @@ set_fact: target_version: "26" +#- name: Install Netbeans from Chocolatey +# win_chocolatey: +# name: NetBeans +# state: upgrade + + +# https://downloads.apache.org/netbeans/netbeans/26/netbeans-26-bin.zip +- name: Download Netbeans + win_get_url: + url: "https://github.com/Friends-of-Apache-NetBeans/netbeans-installers/releases/download/v{{ target_version }}-build1/Apache-NetBeans-{{ target_version }}.exe" + dest: "c:\\Apache-NetBeans-{{ target_version }}.exe" + - name: Install Netbeans - win_package: - path: "https://dlcdn.apache.org/netbeans/netbeans-installers/{{ target_version }}/Apache-NetBeans-{{ target_version }}-bin-windows-x64.exe" - arguments: --silent - creates_path: "%ProgramFiles%\\NetBeans-{{ target_version }}\\netbeans\\bin\\netbeans.exe" + win_package: + path: "c:\\Apache-NetBeans-{{ target_version }}.exe" + # path: "https://github.com/Friends-of-Apache-NetBeans/netbeans-installers/releases/download/v{{ target_version }}-build1/Apache-NetBeans-{{ target_version }}.exe" + # path: "https://dlcdn.apache.org/netbeans/netbeans-installers/{{ target_version }}/Apache-NetBeans-{{ target_version }}-bin-windows-x64.exe" + arguments: "\"/DIR={{ ansible_env['ProgramFiles'] }}\\NetBeans-{{ target_version }}\" /SUPPRESSMSGBOXES /VERYSILENT /SP-" + creates_path: "%ProgramFiles%\\NetBeans-{{ target_version }}\\bin\\netbeans.exe" diff --git a/roles/networkx/tasks/main.yml b/roles/networkx/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/networkx/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/networkx/tasks/main_lin.yml b/roles/networkx/tasks/main_lin.yml new file mode 100644 index 0000000..17ef570 --- /dev/null +++ b/roles/networkx/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install networkx + apt: + name: python3-networkx + state: latest diff --git a/roles/networkx/tasks/main_win.yml b/roles/networkx/tasks/main_win.yml new file mode 100644 index 0000000..a66ad83 --- /dev/null +++ b/roles/networkx/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install networkx + win_command: pip install networkx diff --git a/roles/nodejs/tasks/main_lin.yml b/roles/nodejs/tasks/main_lin.yml index 601d761..76f3fb2 100644 --- a/roles/nodejs/tasks/main_lin.yml +++ b/roles/nodejs/tasks/main_lin.yml @@ -1,7 +1,7 @@ - name: Add NodeJS repo key - apt_key: + get_url: url: https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key - keyring: /etc/apt/keyrings/nodesource.gpg + dest: /etc/apt/keyrings/nodesource.asc #- name: Add NodeJS repo url # apt_repository: @@ -9,10 +9,5 @@ - name: Add NodeJS LTS repo url apt_repository: - repo: "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" - -- name: Install NodeJS - apt: - name: nodejs - state: latest + repo: "deb [signed-by=/etc/apt/keyrings/nodesource.asc] https://deb.nodesource.com/node_22.x nodistro main" diff --git a/roles/nodejs/tasks/main_win.yml b/roles/nodejs/tasks/main_win.yml index 80cb160..177e2ec 100644 --- a/roles/nodejs/tasks/main_win.yml +++ b/roles/nodejs/tasks/main_win.yml @@ -2,6 +2,7 @@ win_chocolatey: name: nodejs -- name: Install NodeJS-LTS - win_chocolatey: - name: nodejs-lts +# Install fails if multiple versions are installed +# - name: Install NodeJS-LTS +# win_chocolatey: +# name: nodejs-lts diff --git a/roles/numpy/tasks/main.yml b/roles/numpy/tasks/main.yml new file mode 100644 index 0000000..66e93fe --- /dev/null +++ b/roles/numpy/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' \ No newline at end of file diff --git a/roles/numpy/tasks/main_lin.yml b/roles/numpy/tasks/main_lin.yml new file mode 100644 index 0000000..66e66b2 --- /dev/null +++ b/roles/numpy/tasks/main_lin.yml @@ -0,0 +1,5 @@ +- name: Install numpy + apt: + name: + - python3-numpy + state: latest diff --git a/roles/numpy/tasks/main_win.yml b/roles/numpy/tasks/main_win.yml new file mode 100644 index 0000000..ee12580 --- /dev/null +++ b/roles/numpy/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install numpy + win_command: pip install numpy diff --git a/roles/omnetpp/tasks/main_win.yml b/roles/omnetpp/tasks/main_win.yml index 17ebf56..d17b337 100644 --- a/roles/omnetpp/tasks/main_win.yml +++ b/roles/omnetpp/tasks/main_win.yml @@ -1,7 +1,9 @@ +# TODO: omnetpp na Windows sedaj zahteva WSL. Premisli, kaj storiti glede tega + - name: Set OMNet++ version set_fact: target_version: "6.2.0" - target_dir: "C:\\OMNeT++" + target_dir: "{{large_prog_dir}}\\OMNeT++" - name: Check OMNet++ install status win_stat: @@ -12,18 +14,24 @@ block: - name: Download OMNet++ win_get_url: - url: "https://github.com/omnetpp/omnetpp/releases/download/omnetpp-{{ target_version }}/omnetpp-{{ target_version }}-windows-x86_64.zip" - dest: C:\ + url: "https://github.com/omnetpp/omnetpp/releases/download/omnetpp-{{ target_version }}/omnetpp-{{ target_version }}-windows-x86_64.7z" + dest: "{{ large_prog_dir }}" register: download - name: Unzip OMNet++ win_unzip: src: "{{ download.dest }}" - dest: C:\ + dest: "{{ large_prog_dir }}" delete_archive: yes - name: Move OMNet++ to final location - win_command: cmd.exe /c move "C:\omnetpp-{{ target_version }}" "{{ target_dir }}" + ansible.windows.win_powershell: + script: move "{{ large_prog_dir }}\omnetpp-{{ target_version }}" "{{ target_dir }}" + # win_robocopy: + # src: "{{ large_prog_dir }}\\omnetpp-{{ target_version }}" + # dest: "{{ target_dir }}" + # flags: "/move" + # win_command: cmd.exe /c move "c:\omnetpp-{{ target_version }}" "{{ target_dir }}" - name: Create OMNet++ compile script win_copy: @@ -38,7 +46,7 @@ line: call "%HOME%\\tools\\win32.x86_64\\msys2_shell.cmd" -mingw64 -c "./configure && make -j4" & exit - name: Compile OMNet++ - win_command: cmd.exe /c "{{ target_dir }}\\mingwenv-install.cmd" + win_command: cmd.exe /c "{{ target_dir }}\mingwenv-install.cmd" - name: Copy OMNet++ shortcut win_copy: diff --git a/roles/plotly/tasks/main.yml b/roles/plotly/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/plotly/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/plotly/tasks/main_lin.yml b/roles/plotly/tasks/main_lin.yml new file mode 100644 index 0000000..60b4d6e --- /dev/null +++ b/roles/plotly/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install plotly + apt: + name: python3-plotly + state: latest diff --git a/roles/plotly/tasks/main_win.yml b/roles/plotly/tasks/main_win.yml new file mode 100644 index 0000000..3e6e29d --- /dev/null +++ b/roles/plotly/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install plotly + win_command: pip install plotly diff --git a/roles/powerdesigner/tasks/main_win.yml b/roles/powerdesigner/tasks/main_win.yml index 9bd6760..2e45bca 100644 --- a/roles/powerdesigner/tasks/main_win.yml +++ b/roles/powerdesigner/tasks/main_win.yml @@ -1,4 +1,16 @@ +# The installer does not work from powershell in silent mode. +# +- name: Prepare PowerDesigner setup.iss + template: + src: setup.iss + dest: c:\powerdesigner_setup.iss + - name: Install PowerDesigner - win_package: - path: "{{ installers }}\\PowerDesigner 12.5\\cd1\\setup\\setup.exe" - arguments: "/s /f1\"{{ installers }}\\PowerDesigner 12.5\\setup.iss\" /f2\"C:\\powerdesigner_log.iss\"" + win_shell: | + {{ installers }}\PowerDesigner_12.5\cd1\setup\setup.exe /s /f1"c:\powerdesigner_setup.iss" /f2"C:\powerdesigner_log.iss" + args: + executable: cmd + + +# path: "{{ installers }}\\PowerDesigner 12.5\\cd1\\setup\\setup.exe" +# arguments: "/hide_progress /hide_splash /hide_usd /s /f1\"{{ installers }}\\PowerDesigner 12.5\\setup.iss\" /f2\"C:\\powerdesigner_log.iss\"" diff --git a/roles/powerdesigner/templates/setup.iss b/roles/powerdesigner/templates/setup.iss index 8503670..7519aaf 100755 --- a/roles/powerdesigner/templates/setup.iss +++ b/roles/powerdesigner/templates/setup.iss @@ -3,37 +3,37 @@ Version=v7.00 File=Response File [File Transfer] OverwrittenReadOnly=NoToAll -[{{ powerdesigner_key }}-DlgOrder] -Dlg0={{ powerdesigner_key }}-SdWelcome-0 +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-DlgOrder] +Dlg0={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdWelcome-0 Count=10 -Dlg1={{ powerdesigner_key }}-SybSelectInstallMode-0 -Dlg2={{ powerdesigner_key }}-SybFlexLM-0 -Dlg3={{ powerdesigner_key }}-SybSelectPackage-0 -Dlg4={{ powerdesigner_key }}-Sybase License-0 -Dlg5={{ powerdesigner_key }}-SdAskDestPath-0 -Dlg6={{ powerdesigner_key }}-SdComponentTree-0 -Dlg7={{ powerdesigner_key }}-Graphic Select Folder-0 -Dlg8={{ powerdesigner_key }}-SdStartCopy-0 -Dlg9={{ powerdesigner_key }}-SdFinish-0 -[{{ powerdesigner_key }}-SdWelcome-0] +Dlg1={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybSelectInstallMode-0 +Dlg2={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybFlexLM-0 +Dlg3={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybSelectPackage-0 +Dlg4={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-Sybase License-0 +Dlg5={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdAskDestPath-0 +Dlg6={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdComponentTree-0 +Dlg7={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-Graphic Select Folder-0 +Dlg8={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdStartCopy-0 +Dlg9={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdFinish-0 +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdWelcome-0] Result=1 -[{{ powerdesigner_key }}-SybSelectInstallMode-0] +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybSelectInstallMode-0] Mode=3 Result=1 -[{{ powerdesigner_key }}-SybFlexLM-0] -LicenseServer=todo.fri1.uni-lj.si +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybFlexLM-0] +LicenseServer=todo.fri.uni-lj.si PortNumber=27000 Result=1 -[{{ powerdesigner_key }}-SybSelectPackage-0] +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybSelectPackage-0] Package=Studio Enterprise Result=1 -[{{ powerdesigner_key }}-Sybase License-0] +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-Sybase License-0] Sybase_License=accept -[{{ powerdesigner_key }}-SdAskDestPath-0] -szDir=C:\Program Files (x86)\Sybase\PowerDesigner 12 +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdAskDestPath-0] +szDir={{ large_prog_dir }}\PowerDesigner 12 Result=1 -[{{ powerdesigner_key }}-SdComponentTree-0] -szDir=C:\Program Files (x86)\Sybase\PowerDesigner 12 +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdComponentTree-0] +szDir={{ large_prog_dir }}\PowerDesigner 12 CR\FRM-type=string CR\FRM-count=2 CR\FRM-0=CR\FRM\FRM_Xem @@ -108,11 +108,6 @@ PDM-1=PDM\PDM_Examples PDM-2=PDM\PDM_Report PDM-3=PDM\PDM_Tools PDM-4=PDM\PDM_Addins -RQM-type=string -RQM-count=3 -RQM-0=RQM\RQM_License -RQM-1=RQM\RQM_Examples -RQM-2=RQM\RQM_Report XSM-type=string XSM-count=4 XSM-0=XSM\XSM_License @@ -135,6 +130,19 @@ PDF-5=PDF\PDF_PDM PDF-6=PDF\PDF_RQM PDF-7=PDF\PDF_XSM PDF-8=PDF\PDF_RPY +VIDEO-type=string +VIDEO-count=11 +VIDEO-0=VIDEO\Video_int +VIDEO-1=VIDEO\Video_Gen +VIDEO-2=VIDEO\Video_BPM +VIDEO-3=VIDEO\Video_CDM +VIDEO-4=VIDEO\Video_ILM +VIDEO-5=VIDEO\Video_OOM +VIDEO-6=VIDEO\Video_PDM +VIDEO-7=VIDEO\Video_RQM +VIDEO-8=VIDEO\Video_xsm +VIDEO-9=VIDEO\Video_RPY +VIDEO-10=VIDEO\Video_htm Component-type=string Component-count=10 Component-0=CR @@ -143,15 +151,15 @@ Component-2=CDM Component-3=ILM Component-4=OOM Component-5=PDM -Component-6=RQM -Component-7=XSM -Component-8=RPY -Component-9=PDF +Component-6=XSM +Component-7=RPY +Component-8=PDF +Component-9=VIDEO Result=1 -[{{ powerdesigner_key }}-Graphic Select Folder-0] +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-Graphic Select Folder-0] szFolder=Sybase\PowerDesigner 12 Result=1 -[{{ powerdesigner_key }}-SdStartCopy-0] +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdStartCopy-0] Keep_Settings=0 Result=1 [Application] @@ -159,7 +167,7 @@ Name=Sybase PowerDesigner 12.5 Version=12.5.2169 Company=Sybase Lang=0009 -[{{ powerdesigner_key }}-SdFinish-0] +[{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdFinish-0] Result=1 bOpt1=0 bOpt2=0 diff --git a/roles/processing/tasks/main_win.yml b/roles/processing/tasks/main_win.yml index 2caf84a..e8fda8a 100644 --- a/roles/processing/tasks/main_win.yml +++ b/roles/processing/tasks/main_win.yml @@ -1,7 +1,7 @@ - name: Set Processing version set_fact: - target_version: 4.4.4 - target_build: 1304 + target_version: 4.4.6 + target_build: 1306 - name: Check Processing install status win_stat: @@ -22,20 +22,21 @@ state: directory - name: Download Processing win_get_url: - dest: 'C:\Program Files\Processing\processing.zip' - url: https://github.com/processing/processing4/releases/download/processing-{{ target_build }}-{{ target_version }}/processing-{{ target_version }}-windows-x64.zip + dest: 'C:\Program Files\processing.zip' + url: https://github.com/processing/processing4/releases/download/processing-{{ target_build }}-{{ target_version }}/processing-{{ target_version }}-windows-x64-portable.zip - name: Unzip Processing win_unzip: - dest: 'C:\Program Files\Processing' - src: 'C:\Program Files\Processing\processing.zip' - - name: Install Processing - win_copy: - dest: C:\Program Files\Processing\ - src: 'C:\Program Files\Processing\processing-{{ target_version }}\' - remote_src: yes + src: 'C:\Program Files\processing.zip' + dest: 'C:\Program Files\' + creates: 'C:\Program Files\Processing\Processing.exe' + #- name: Install Processing + # win_copy: + # dest: C:\Program Files\Processing\ + # src: 'C:\Program Files\Processing\processing-{{ target_version }}\' + # remote_src: yes - name: Disable telemetry win_lineinfile: - path: C:\Program Files\Processing\lib\defaults.txt + path: C:\Program Files\Processing\app\resources\lib\defaults.txt regexp: 'update.check' line: 'update.check = false' - name: Create Processing shortcut @@ -44,8 +45,8 @@ dest: "C:\\Users\\Public\\Desktop\\Processing.lnk" - name: Remove temporary files win_file: - path: C:\Program Files\Processing\{{ item }} + # path: C:\Program Files\Processing\{{ item }} + path: C:\Program Files\processing.zip state: absent loop: - processing.zip - - processing-{{ target_version }} diff --git a/roles/pycharm/tasks/main_win.yml b/roles/pycharm/tasks/main_win.yml index ae51dbd..2b4516a 100644 --- a/roles/pycharm/tasks/main_win.yml +++ b/roles/pycharm/tasks/main_win.yml @@ -8,4 +8,4 @@ state: upgrade version: "{{ target_version }}" -# TODO set default project directory to H:\something +# TODO set default project directory to {{large_prog_dir}}\something diff --git a/roles/python3/tasks/main_lin.yml b/roles/python3/tasks/main_lin.yml index 56ce94f..8c183df 100644 --- a/roles/python3/tasks/main_lin.yml +++ b/roles/python3/tasks/main_lin.yml @@ -5,6 +5,8 @@ - name: Install ipython apt: - name: python3-ipython + name: + - python3-ipython + - ipython3 state: latest diff --git a/roles/qcadesigner-e/tasks/main_lin.yml b/roles/qcadesigner-e/tasks/main_lin.yml index dd955bc..78f8f49 100644 --- a/roles/qcadesigner-e/tasks/main_lin.yml +++ b/roles/qcadesigner-e/tasks/main_lin.yml @@ -15,7 +15,7 @@ - name: Clone QCADesigner-E repo # ansible.builtin.git: - repo: https://github.com/FSillT/QCADesigner-E + repo: https://github.com/polz113/QCADesigner-E force: yes dest: /opt/QCADesigner-E - name: Build QCADesigner-E diff --git a/roles/rstudio/tasks/main_lin.yml b/roles/rstudio/tasks/main_lin.yml index a21785b..423cd11 100644 --- a/roles/rstudio/tasks/main_lin.yml +++ b/roles/rstudio/tasks/main_lin.yml @@ -1,13 +1,14 @@ -- name: Add R repository - block: - - name: R repo - apt key - ansible.builtin.get_url: - url: https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc - dest: /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc - - name: R repo - url - ansible.builtin.apt_repository: - repo: "deb https://cloud.r-project.org/bin/linux/ubuntu {{ansible_distribution_release}}-cran40/" - state: present +#- name: Add R repository +# block: +# - name: R repo - apt key +# ansible.builtin.get_url: +# url: https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc +# dest: /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc +# - name: R repo - url +# ansible.builtin.apt_repository: +# repo: "deb https://cloud.r-project.org/bin/linux/ubuntu {{ansible_distribution_release}}-cran40/" +# state: present +# ignore_errors: true - name: Install R ansible.builtin.apt: name: r-base diff --git a/roles/scikit/tasks/main.yml b/roles/scikit/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/scikit/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/scikit/tasks/main_lin.yml b/roles/scikit/tasks/main_lin.yml new file mode 100644 index 0000000..1db3705 --- /dev/null +++ b/roles/scikit/tasks/main_lin.yml @@ -0,0 +1,6 @@ +- name: Install scikit + apt: + name: + - python3-sklearn + - python3-sklearn-pandas + state: latest diff --git a/roles/scikit/tasks/main_win.yml b/roles/scikit/tasks/main_win.yml new file mode 100644 index 0000000..3b59e53 --- /dev/null +++ b/roles/scikit/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install scikit + win_command: pip install scikit-learn diff --git a/roles/seaborn/tasks/main.yml b/roles/seaborn/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/seaborn/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/seaborn/tasks/main_lin.yml b/roles/seaborn/tasks/main_lin.yml new file mode 100644 index 0000000..23b99fa --- /dev/null +++ b/roles/seaborn/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install seaborn + apt: + name: python3-seaborn + state: latest diff --git a/roles/seaborn/tasks/main_win.yml b/roles/seaborn/tasks/main_win.yml new file mode 100644 index 0000000..4ff22ad --- /dev/null +++ b/roles/seaborn/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install seaborn + win_command: pip install seaborn diff --git a/roles/sifive/tasks/main_win.yml b/roles/sifive/tasks/main_win.yml index 1030ce1..e874141 100644 --- a/roles/sifive/tasks/main_win.yml +++ b/roles/sifive/tasks/main_win.yml @@ -5,7 +5,7 @@ - name: Set SiFive Studio install location set_fact: - download_filedest: C:\FreedomStudio-4.18.0.2021-04-1-x86_64-w64-mingw32.zip + download_filedest: "{{ large_prog_dir }}\\FreedomStudio-4.18.0.2021-04-1-x86_64-w64-mingw32.zip" - name: Download SiFive win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/bulic_fri1_uni-lj_si/EdiSnJpoClJLtc3AtcAtEQ4BI76_PeDvL-ZmhxG4OEyvig?e=xBRYcb&download=1" -O "{{ download_filedest }}" args: @@ -14,12 +14,12 @@ - name: Unzip SiFive Studio win_unzip: src: "{{ download_filedest }}" - dest: C:\SiFive\ - creates: C:\SiFive\plugins + dest: "{{ large_prog_dir }}\\SiFive\\" + creates: "{{ large_prog_dir }}\\SiFive\\plugins" delete_archive: yes - name: Create desktop shortcut win_shortcut: description: "SiFive Freedom Studio" - src: C:\SiFive\FreedomStudio.exe + src: "{{ large_prog_dir }}\\SiFive\\FreedomStudio.exe" dest: '%public%\Desktop\SiFive.lnk' diff --git a/roles/stm32algobuilder/tasks/main_win.yml b/roles/stm32algobuilder/tasks/main_win.yml index ff0e92e..c707e81 100644 --- a/roles/stm32algobuilder/tasks/main_win.yml +++ b/roles/stm32algobuilder/tasks/main_win.yml @@ -1,31 +1,34 @@ -# TODO check install status +# Deprecated - replace by mems-studio +- name: Do not install AlgoBuilder + debug: + msg: "Do not install AlgoBuilder on Windows - deprecated" # TODO: Exe file is missing - Problem on ST site -- name: Check AlgoBuilder install status - win_stat: - path: C:\Program Files (x86)\Thonny\thonny.exe - register: file +# - name: Check AlgoBuilder install status +# win_stat: +# path: C:\Program Files (x86)\Thonny\thonny.exe +# register: file -- when: not file.stat.exists - block: - - name: Download AlgoBuilder - win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EdBQJN3I6fVFj7qgs6SjRp4BZ0QbWIV26NUlLv_4d9JsDQ?e=hA4Cbl&download=1" -O C:\AlgoBuilderSuite.exe - args: - creates: C:\AlgoBuilderSuite.exe - #win_get_url: - # follow_redirects: all - # http_agent: Wget/1.21.3 - # url: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EdBQJN3I6fVFj7qgs6SjRp4BZ0QbWIV26NUlLv_4d9JsDQ?e=hA4Cbl?download=1 - # dest: C:\AlgoBuilderSuite.exe - #register: download +# - when: not file.stat.exists +# block: +# - name: Download AlgoBuilder +# win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EdBQJN3I6fVFj7qgs6SjRp4BZ0QbWIV26NUlLv_4d9JsDQ?e=hA4Cbl&download=1" -O C:\AlgoBuilderSuite.exe +# args: +# creates: C:\AlgoBuilderSuite.exe +# #win_get_url: +# # follow_redirects: all +# # http_agent: Wget/1.21.3 +# # url: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EdBQJN3I6fVFj7qgs6SjRp4BZ0QbWIV26NUlLv_4d9JsDQ?e=hA4Cbl?download=1 +# # dest: C:\AlgoBuilderSuite.exe +# #register: download - - name: Install AlgoBuilder - win_package: - path: C:\AlgoBuilderSuite.exe - # path: "{{ download.dest }}" - arguments: /Verysilent /AllUsers +# - name: Install AlgoBuilder +# win_package: +# path: C:\AlgoBuilderSuite.exe +# # path: "{{ download.dest }}" +# arguments: /Verysilent /AllUsers - - name: Remove temporary files - win_file: - path: C:\AlgoBuilderSuite.exe - # path: "{{ download.dest }}" - state: absent +# - name: Remove temporary files +# win_file: +# path: C:\AlgoBuilderSuite.exe +# # path: "{{ download.dest }}" +# state: absent diff --git a/roles/stm32cube/tasks/main_lin.yml b/roles/stm32cube/tasks/main_lin.yml index 01ba7fc..2c2f7ab 100644 --- a/roles/stm32cube/tasks/main_lin.yml +++ b/roles/stm32cube/tasks/main_lin.yml @@ -8,13 +8,14 @@ # register: download - name: Set filename set_fact: - dest_fname: /tmp/st-stm32cubeide_1.16.0_21983_20240628_1741_amd64.sh + dest_fname: /tmp/st-stm32cubeide_1.19.0_25607_20250703_0907_amd64.sh - name: Download stm32 command: - cmd: wget 'https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EUrIkoWbod5OilNHLnReBvYBMK7mlwI-R1Qeqhb-ux7hjg?e=HGloHF&download=1' -O {{ dest_fname }} + # cmd: wget 'https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/ERLZDFSgbO1Hm6TT9CLhyUIBZS-4anic7RWtvQliqN-thA?e=KZq4VJ' -O {{ dest_fname }} + cmd: wget {{ installers }}\RAVINOR\2025\st-stm32cubeide_1.19.0_25607_20250703_0907_amd64.sh -O {{ dest_fname }} creates: "{{ dest_fname }} " - # url: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EUrIkoWbod5OilNHLnReBvYBMK7mlwI-R1Qeqhb-ux7hjg?e=HGloHF?download=1 + # url: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/ERLZDFSgbO1Hm6TT9CLhyUIBZS-4anic7RWtvQliqN-thA?e=KZq4VJ - name: Change script permissions file: diff --git a/roles/stm32cube/tasks/main_win.yml b/roles/stm32cube/tasks/main_win.yml index 752db87..c01c4bc 100644 --- a/roles/stm32cube/tasks/main_win.yml +++ b/roles/stm32cube/tasks/main_win.yml @@ -7,18 +7,18 @@ block: - name: Set download filenames set_fact: - cubemx_download_file: C:\CubeMX.exe + # cubemx_download_file: C:\CubeMX.exe not needed separately cubeprogrammer_download_file: C:\CubeProgrammer.exe cubemonitor_download_file: C:\CubeMonitor.exe cufinder_download_file: C:\CUFinder.exe - cubeide_download_file: C:\st-stm32cubeide_1.16.0_21983_20240628_1741_x86_64.exe - - name: Download CubeMX - # # win_get_url: - win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EZhqHxJoAfdEjdlMu0uGWGcBOqrT0vTVv2_nhynWZ3fOwQ?e=ilAlzP&download=1" -O "{{ cubemx_download_file }}" - # #dest: C:\CubeMX.exe - # #register: cubemx_download - args: - creates: "{{ cubemx_download_file }}" + cubeide_download_file: C:\st-stm32cubeide_1.19.0_25607_20250703_0907_x86_64.exe + # - name: Download CubeMX + # # # win_get_url: + # win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EZhqHxJoAfdEjdlMu0uGWGcBOqrT0vTVv2_nhynWZ3fOwQ?e=ilAlzP&download=1" -O "{{ cubemx_download_file }}" + # # #dest: C:\CubeMX.exe + # # #register: cubemx_download + # args: + # creates: "{{ cubemx_download_file }}" #- name: Install CubeMX # win_package: @@ -26,7 +26,8 @@ # arguments: /S - name: Download CubeProgrammer - win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EXHsKDjM6hVAuEGwEWcMyBEB6bHd3HuOP38D7Wjt41vjTw?e=7jatnu&download=1" -O "{{ cubeprogrammer_download_file }}" + win_command: wget "{{ installers }}\RAVINOR\2025\SetupSTM32CubeProgrammer_win64.exe" -O "{{ cubeprogrammer_download_file }}" + #win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EXHsKDjM6hVAuEGwEWcMyBEBgx7D9i_M3QAkhpe9RR9zPQ?e=VcUvvu" -O "{{ cubeprogrammer_download_file }}" #win_get_url: # dest: C:\CubeProgrammer.exe #register: cubeprogrammer_download @@ -39,10 +40,11 @@ arguments: /S - name: Download CubeMonitor - # TODO 2024: only zip distributions exists in zip file - # TODO 2024: URL: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/ERUUr7knYFNNuv5rViOb-PgB596EvC3ev4P_Aa_MjRL57Q?e=tZssk4 - # TODO 2024: Have extracted setup exe - not sure if this is enough! - win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EQnm_b359Q5IpmfCUuDG-PABH10q94ixaLx4_CMrYKoNtQ?e=rKp3cV&download=1" -O "{{ cubemonitor_download_file }}" + # TODO 2025: only zip distributions exists in zip file + # TODO 2025: URL: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EcU8MQwONYZKuk22puks-IgBd1qLM94DH3AA_CEclIgTZg?e=jRcA3v + # TODO 2025: Have extracted setup exe - not sure if this is enough! + # win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EbVvZi3q7QRNqwocCSgMvGgB-eYM2mtb-IidD1UTaMgtbw?e=QDxd29" -O "{{ cubemonitor_download_file }}" + win_command: wget "{{ installers }}\RAVINOR\2025\setupSTM32CubeMonitor_1.10.0.exe" -O "{{ cubemonitor_download_file }}" #win_get_url: # dest: C:\CubeMonitor.exe #register: cubemonitor_download @@ -54,23 +56,24 @@ path: "{{ cubemonitor_download_file }}" arguments: /S - - name: Download STM CUFinder - win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EfesbSW7EftDoSjtt-nr_eYBH_EBzXnysW0Lk1wnNzx2Mw?e=HSSmDz&download=1" -O "{{ cufinder_download_file }}" - # #win_get_url: - # # dest: C:\CUFinder.exe - # #register: cubecufinder_download - args: - creates: "{{ cufinder_download_file }}" - - - name: Install STM CUFinder - win_package: - path: "{{ cubecufinder_download_file }}" - arguments: /S + # 2025: CUFinder not needed anymore + # - name: Download STM CUFinder + # win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EfesbSW7EftDoSjtt-nr_eYBH_EBzXnysW0Lk1wnNzx2Mw?e=HSSmDz&download=1" -O "{{ cufinder_download_file }}" + # # #win_get_url: + # # # dest: C:\CUFinder.exe + # # #register: cubecufinder_download + # args: + # creates: "{{ cufinder_download_file }}" + # - name: Install STM CUFinder + # win_package: + # path: "{{ cubecufinder_download_file }}" + # arguments: /S - name: Download CubeIDE # win_get_url: - win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/ERpqeASbQ2hDrL9ANNWJf5QBJNhHieXoqaNtduppk42qwg?e=zI8rjI&download=1" -O "{{ cubeide_download_file }}" - #dest: C:\st-stm32cubeide_1.16.0_21983_20240628_1741_x86_64.exe + #win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EZLOLK_5IxpPvnI_rYH6hSMBuQyH3EEq9bqZr9X_n6cgzA?e=P218RC" -O "{{ cubeide_download_file }}" + win_command: wget "{{ installers }}\RAVINOR\2025\st-stm32cubeide_1.19.0_25607_20250703_0907_x86_64.exe" -O "{{ cubeide_download_file }}" + #dest: C:\st-stm32cubeide_1.19.0_25607_20250703_0907_x86_64.exe #register: cubeide_download args: creates: "{{ cubeide_download_file }}" @@ -83,12 +86,13 @@ - name: Set CubeIDE default workspace win_lineinfile: - path: C:\ST\STM32CubeIDE_1.10.1\STM32CubeIDE\stm32cubeide.ini + path: C:\ST\STM32CubeIDE_1.19.0\STM32CubeIDE\stm32cubeide.ini regexp: "osgi.instance.area.default" line: "-Dosgi.instance.area.default=D:/RAVINOR/CubeIDE_Workspace" - # Replace -installIU... with -list to get available packages. - - name: Install QEMU - win_command: stm32cubeidec.exe -application org.eclipse.equinox.p2.director -nosplash -repository https://download.eclipse.org/embed-cdt/updates/v6/ -installIU org.eclipse.embedcdt.debug.gdbjtag.qemu.feature.group - args: - chdir: C:\ST\STM32CubeIDE_1.10.1\STM32CubeIDE + # 2025: QEMU not needed anymore + # # Replace -installIU... with -list to get available packages. + # - name: Install QEMU + # win_command: stm32cubeidec.exe -application org.eclipse.equinox.p2.director -nosplash -repository https://download.eclipse.org/embed-cdt/updates/v6/ -installIU org.eclipse.embedcdt.debug.gdbjtag.qemu.feature.group + # args: + # chdir: C:\ST\STM32CubeIDE_1.19.0\STM32CubeIDE diff --git a/roles/stm32duino/tasks/main_win.yml b/roles/stm32duino/tasks/main_win.yml index 63b56ed..7022561 100644 --- a/roles/stm32duino/tasks/main_win.yml +++ b/roles/stm32duino/tasks/main_win.yml @@ -5,19 +5,17 @@ # arguments: /S /AllUsers # creates_path: "%ProgramFiles%\\Arduino IDE\\Arduino IDE.exe" -# 2024: update: Full directory structure ready zip for Windows only on this URL: +# 2025: update: Full directory structure ready zip for Windows only on this URL: # https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EYTFhlsJOFtFk9xsaViP0eYBtILVS24ZF_dlkgodu_L9Nw?e=geavvJ - name: Create STM32Duino directory win_file: - path: "D:\\RAVINOR\\STM32Duino" + path: "{{large_prog_dir}}\\RAVINOR\\STM32Duino" state: directory -- name: Install Logisim - win_get_url: - url: "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EYTFhlsJOFtFk9xsaViP0eYBtILVS24ZF_dlkgodu_L9Nw?e=geavvJ" - dest: "D:\\RAVINOR\\STM32Duino" - # TODO Don't know if unzipping is required? - +- name: Install preinstalled STM32Duino & Arduino environment + win_unzip: + src: {{ installers }}\RAVINOR\2025\arduino-1.8.19.zip + dest: "{{large_prog_dir}}\\RAVINOR\\STM32Duino" # TODO check if anything else is needed (esp8266com)? diff --git a/roles/stm32mems-studio/tasks/main.yml b/roles/stm32mems-studio/tasks/main.yml new file mode 100644 index 0000000..146eef8 --- /dev/null +++ b/roles/stm32mems-studio/tasks/main.yml @@ -0,0 +1,5 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' + diff --git a/roles/stm32mems-studio/tasks/main_lin.yml b/roles/stm32mems-studio/tasks/main_lin.yml new file mode 100644 index 0000000..fca4773 --- /dev/null +++ b/roles/stm32mems-studio/tasks/main_lin.yml @@ -0,0 +1,3 @@ +- name: Do not install mems-studio + debug: + msg: "Do not install mems-studio on Linux" diff --git a/roles/stm32mems-studio/tasks/main_win.yml b/roles/stm32mems-studio/tasks/main_win.yml new file mode 100644 index 0000000..7e51423 --- /dev/null +++ b/roles/stm32mems-studio/tasks/main_win.yml @@ -0,0 +1,32 @@ +# TODO +- name: Check MEMS-Studio install status + win_stat: + path: C:\Program Files (x86)\STMicroelectronics\Unicleo-GUI\Unicleo-GUI.exe + register: file +- when: not file.stat.exists + block: + - name: Download MEMS-Studio + #win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EXgZSDD5LgtMrikaKszPliwB1vXrwUxea3eYYObT3zXBaQ?e=eNJyLA" -O C:\mems-studio-2.1.2.exe + win_command: copy "{{ installers }}\RAVINOR\2025\mems-studio-2.1.2.exe" -O { large_prog_dir }\mems-studio-2.1.2.exe + args: + creates: {large_prog_dir}\mems-studio-2.1.2.exe + #win_get_url: + # follow_redirects: all + # http_agent: Wget/1.21.3 + # url: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EQG4vStF7ApBsN2TDm5AjGQBiU0iFbZZiz91UqGeHKX9FA?e=QOQky2?download=1 + # dest: C:\Unicleo-GUI_Setup.exe + #register: download + + - name: Install MEMS-Studio + win_package: + path: {large_prog_dir}\mems-studio-2.1.2.exe + # path: "{{ download.dest }}" + arguments: /Verysilent /AllUsers + + - name: Remove temporary files + win_file: + path: {large_prog_dir}\mems-studio-2.1.2.exe + # path: "{{ download.dest }}" + state: absent + + diff --git a/roles/stm32unicleogui/tasks/main_win.yml b/roles/stm32unicleogui/tasks/main_win.yml index 5397607..b40d13c 100644 --- a/roles/stm32unicleogui/tasks/main_win.yml +++ b/roles/stm32unicleogui/tasks/main_win.yml @@ -1,31 +1,35 @@ -# TODO check install status -- name: Check UnicleoGUI install status - win_stat: - path: C:\Program Files (x86)\STMicroelectronics\Unicleo-GUI\Unicleo-GUI.exe - register: file -- when: not file.stat.exists - block: - - name: Download UnicleoGUI - win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EQG4vStF7ApBsN2TDm5AjGQBiU0iFbZZiz91UqGeHKX9FA?e=QOQky2&download=1" -O C:\Unicleo-GUI_Setup.exe - args: - creates: C:\Unicleo-GUI_Setup.exe - #win_get_url: - # follow_redirects: all - # http_agent: Wget/1.21.3 - # url: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EQG4vStF7ApBsN2TDm5AjGQBiU0iFbZZiz91UqGeHKX9FA?e=QOQky2?download=1 - # dest: C:\Unicleo-GUI_Setup.exe - #register: download +# Deprecated - replace by mems-studio +- name: Do not install UnicleoGUI + debug: + msg: "Do not install UnicleoGUI on Windows - deprecated" +# # TODO check install status +# - name: Check UnicleoGUI install status +# win_stat: +# path: C:\Program Files (x86)\STMicroelectronics\Unicleo-GUI\Unicleo-GUI.exe +# register: file +# - when: not file.stat.exists +# block: +# - name: Download UnicleoGUI +# win_command: wget "https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EQG4vStF7ApBsN2TDm5AjGQBiU0iFbZZiz91UqGeHKX9FA?e=QOQky2&download=1" -O C:\Unicleo-GUI_Setup.exe +# args: +# creates: C:\Unicleo-GUI_Setup.exe +# #win_get_url: +# # follow_redirects: all +# # http_agent: Wget/1.21.3 +# # url: https://unilj-my.sharepoint.com/:u:/g/personal/rozman_fri1_uni-lj_si/EQG4vStF7ApBsN2TDm5AjGQBiU0iFbZZiz91UqGeHKX9FA?e=QOQky2?download=1 +# # dest: C:\Unicleo-GUI_Setup.exe +# #register: download - - name: Install UnicleoGUI - win_package: - path: C:\Unicleo-GUI_Setup.exe - # path: "{{ download.dest }}" - arguments: /Verysilent /AllUsers +# - name: Install UnicleoGUI +# win_package: +# path: C:\Unicleo-GUI_Setup.exe +# # path: "{{ download.dest }}" +# arguments: /Verysilent /AllUsers - - name: Remove temporary files - win_file: - path: C:\Unicleo-GUI_Setup.exe - # path: "{{ download.dest }}" - state: absent +# - name: Remove temporary files +# win_file: +# path: C:\Unicleo-GUI_Setup.exe +# # path: "{{ download.dest }}" +# state: absent diff --git a/roles/streamlit/tasks/main.yml b/roles/streamlit/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/streamlit/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/streamlit/tasks/main_lin.yml b/roles/streamlit/tasks/main_lin.yml new file mode 100644 index 0000000..6068e2d --- /dev/null +++ b/roles/streamlit/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install streamlit + pip: + executable: pipx + name: streamlit diff --git a/roles/streamlit/tasks/main_win.yml b/roles/streamlit/tasks/main_win.yml new file mode 100644 index 0000000..56e74a6 --- /dev/null +++ b/roles/streamlit/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install streamlit + win_command: pip install streamlit diff --git a/roles/surfer-project/tasks/main.yml b/roles/surfer-project/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/surfer-project/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/surfer-project/tasks/main_lin.yml b/roles/surfer-project/tasks/main_lin.yml new file mode 100644 index 0000000..707d76c --- /dev/null +++ b/roles/surfer-project/tasks/main_lin.yml @@ -0,0 +1,17 @@ +# https://surfer-project.org/ +- name: create Surfer direcotry + file: + path: /opt/surfer + state: directory + +- name: Download and unpack Surfer + unarchive: + src: https://gitlab.com/api/v4/projects/42073614/jobs/artifacts/main/raw/surfer_linux.zip?job=linux_build + dest: /opt/surfer + remote_src: yes + +- name: Add symlink to /usr/local/bin + file: + src: /opt/surfer/surfer + path: /usr/local/bin/surfer + state: link diff --git a/roles/surfer-project/tasks/main_win.yml b/roles/surfer-project/tasks/main_win.yml new file mode 100644 index 0000000..fd75ce3 --- /dev/null +++ b/roles/surfer-project/tasks/main_win.yml @@ -0,0 +1,11 @@ +- name: Download Surfer + win_get_url: + dest: "{{ large_prog_dir }}" + url: https://gitlab.com/api/v4/projects/42073614/jobs/artifacts/main/raw/surfer_win.zip?job=windows_build + register: downloaded_surfer + +- name: Unpack Surfer + win_unzip: + src: "{{ downloaded_surfer['dest']}}" + dest: "{{ large_prog_dir }}" + delete_archive: yes diff --git a/roles/thonny/tasks/main_win.yml b/roles/thonny/tasks/main_win.yml index 6a14128..bb7cb8c 100644 --- a/roles/thonny/tasks/main_win.yml +++ b/roles/thonny/tasks/main_win.yml @@ -1,6 +1,6 @@ - name: Set Thonny version set_fact: - target_version: 4.0.1 + target_version: 4.1.7 - name: Check Thonny install status win_stat: diff --git a/roles/torch/tasks/main.yml b/roles/torch/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/torch/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/torch/tasks/main_lin.yml b/roles/torch/tasks/main_lin.yml new file mode 100644 index 0000000..51cf087 --- /dev/null +++ b/roles/torch/tasks/main_lin.yml @@ -0,0 +1,12 @@ +- name: Install torch + apt: + name: + - python3-torch + - python3-skorch + - python3-torch-cluster + - python3-torch-geometric + - python3-ignite + - python3-sparse + - python3-torchaudio + - python3-torchvision + state: latest diff --git a/roles/torch/tasks/main_win.yml b/roles/torch/tasks/main_win.yml new file mode 100644 index 0000000..4d1b27b --- /dev/null +++ b/roles/torch/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install torch + win_command: pip install torch torchvision diff --git a/roles/transformers/tasks/main.yml b/roles/transformers/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/transformers/tasks/main.yml @@ -0,0 +1,4 @@ +- import_tasks: main_win.yml + when: ansible_os_family == 'Windows' +- import_tasks: main_lin.yml + when: ansible_os_family == 'Debian' diff --git a/roles/transformers/tasks/main_lin.yml b/roles/transformers/tasks/main_lin.yml new file mode 100644 index 0000000..c9ece9b --- /dev/null +++ b/roles/transformers/tasks/main_lin.yml @@ -0,0 +1,4 @@ +- name: Install transformers + pip: + executable: pipx: + name: transformers diff --git a/roles/transformers/tasks/main_win.yml b/roles/transformers/tasks/main_win.yml new file mode 100644 index 0000000..1b4f207 --- /dev/null +++ b/roles/transformers/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install transformers + win_command: pip install transformers diff --git a/roles/vscode/tasks/main_lin.yml b/roles/vscode/tasks/main_lin.yml index 08ae21d..1989fff 100644 --- a/roles/vscode/tasks/main_lin.yml +++ b/roles/vscode/tasks/main_lin.yml @@ -1,11 +1,11 @@ - name: Add VS repo key - apt_key: + get_url: url: https://packages.microsoft.com/keys/microsoft.asc - keyring: /etc/apt/trusted.gpg.d/microsoft.gpg + dest: /etc/apt/keyrings/microsoft.asc - name: Add VS repo url apt_repository: - repo: "deb https://packages.microsoft.com/repos/vscode stable main" + repo: "deb [arch=amd64 signed-by=/etc/apt/keyrings/microsoft.asc] https://packages.microsoft.com/repos/vscode stable main" - name: Install VSCode apt: @@ -16,6 +16,6 @@ include_vars: vscode_extensions.yml - name: Install VS Code extensions - command: code --no-sandbox --user-data-dir "/usr/share/code/resources/app" --extensions-dir "/usr/share/code/resources/app/extensions" --install-extension "{{ item }}" + command: code --no-sandbox --user-data-dir "/usr/share/code/resources/app" --extensions-dir "/usr/share/code/resources/app/extensions" --install-extension --force "{{ item }}" loop: "{{VSCode_Extensions}}" notify: fix VS code extensions diff --git a/roles/winidea/tasks/main_win.yml b/roles/winidea/tasks/main_win.yml index ff8e2c2..6900fc8 100644 --- a/roles/winidea/tasks/main_win.yml +++ b/roles/winidea/tasks/main_win.yml @@ -7,7 +7,8 @@ block: - name: Install WinIDEA win_package: - path: "https://www.isystem.com/downloads/winIDEA/setup/winIDEA_x64_9_21_253_178621.exe" + path: "https://www.isystem.com/downloads/winIDEA/setup/winIDEA_x64_9_21_351_224956.exe" +# 2024: path: "https://www.isystem.com/downloads/winIDEA/setup/winIDEA_x64_9_21_253_178621.exe" arguments: /q - name: Download QEMU diff --git a/roles/wireshark/tasks/main_win.yml b/roles/wireshark/tasks/main_win.yml index 5c38680..407a8d8 100644 --- a/roles/wireshark/tasks/main_win.yml +++ b/roles/wireshark/tasks/main_win.yml @@ -1,9 +1,9 @@ # npcap=0.96 is the last version to support silent installation -- name: Install npcap - win_package: - path: https://npcap.com/dist/npcap-0.96.exe - arguments: /S - creates_path: "%ProgramFiles%\\Npcap\\npcap.cat" +#- name: Install npcap +# win_package: +# path: https://npcap.com/dist/npcap-0.96.exe +# arguments: /S +# creates_path: "%ProgramFiles%\\Npcap\\npcap.cat" - name: Install Wireshark win_chocolatey: diff --git a/roles/xampp/tasks/main_win.yml b/roles/xampp/tasks/main_win.yml index 44bbc71..154de4a 100644 --- a/roles/xampp/tasks/main_win.yml +++ b/roles/xampp/tasks/main_win.yml @@ -1,6 +1,7 @@ - name: Install XAMPP win_chocolatey: name: xampp-81 + install_args: "" - name: Make XAMPP config world writable win_acl: @@ -12,7 +13,7 @@ - name: Add firewall rules for XAMPP win_firewall_rule: name: "Allow inbound traffic for XAMPP: {{ item }}" - program: "%SystemDrive%\\xampp\\{{ item }}" + program: "C:\\xampp\\{{ item }}" action: allow direction: in protocol: tcp diff --git a/roles/xgboost/tasks/main_lin.yml b/roles/xgboost/tasks/main_lin.yml index 7046677..c8b94d7 100644 --- a/roles/xgboost/tasks/main_lin.yml +++ b/roles/xgboost/tasks/main_lin.yml @@ -1,7 +1,6 @@ - name: Install xgboost apt: name: - - xgboost - python3-xgboost state: latest diff --git a/setup.yml b/setup.yml new file mode 100644 index 0000000..6d854ff --- /dev/null +++ b/setup.yml @@ -0,0 +1,23 @@ +- name: Gather facts / setup connection + hosts: '*' + gather_facts: false + become: false + vars_files: + - vars/credentials.yml + roles: + - facts + +- name: Install software + hosts: '*' + become: true + debugger: on_failed + vars_files: + - vars/software_keys.yml + - vars/dirs.yml + roles: + - all_classes + # - all_classes + # - fri_base + # - android_studio + # - jdk + # - powerdesigner diff --git a/unattended_install/ubuntu/autoinstall.yml b/unattended_install/ubuntu/autoinstall.yml new file mode 100644 index 0000000..d3d80e8 --- /dev/null +++ b/unattended_install/ubuntu/autoinstall.yml @@ -0,0 +1,194 @@ +#cloud-config +autoinstall: + apt: + disable_components: [] + fallback: offline-install + geoip: true + mirror-selection: + primary: + - country-mirror + - arches: &id001 + - amd64 + - i386 + uri: http://archive.ubuntu.com/ubuntu/ + - arches: &id002 + - s390x + - arm64 + - armhf + - powerpc + - ppc64el + - riscv64 + uri: http://ports.ubuntu.com/ubuntu-ports + preserve_sources_list: false + security: + - arches: *id001 + uri: http://security.ubuntu.com/ubuntu/ + - arches: *id002 + uri: http://ports.ubuntu.com/ubuntu-ports + codecs: + install: true + drivers: + install: true + identity: + hostname: ucilnica + password: $6$TlnOwdSPWxPW4DBb$.QyE0mgGQ8y7eavPpa/RgakcsBbwDRXobcYdZJMek3yNuGmVKdYEMfVG.biguVblI08dNfSa/JgOxMgl2IqHb. + realname: IT FRI + username: local_admin + kernel: + package: linux-generic + keyboard: + layout: si + toggle: null + variant: '' + locale: en_US.UTF-8 + network: + ethernets: + ens18: + dhcp4: true + version: 2 + oem: + install: auto + source: + id: xubuntu-desktop + search_drivers: true + ssh: + allow-pw: true + authorized-keys: [] + install-server: false + storage: + config: + - ptable: gpt + path: /dev/vda + preserve: true + name: '' + grub_device: false + id: disk-vda + type: disk + - device: disk-vda + size: 639631360 + flag: boot + number: 1 + preserve: true + grub_device: true + offset: 1048576 + partition_type: c12a7328-f81f-11d2-ba4b-00a0c93ec93b + partition_name: EFI system partition + path: /dev/vda1 + uuid: 269e71a1-6ae2-4591-a060-b6ac82ffe698 + id: partition-vda1 + type: partition + - device: disk-vda + size: 16777216 + flag: msftres + number: 2 + preserve: true + grub_device: false + offset: 642777088 + partition_type: e3c9e316-0b5c-4db8-817d-f92df00215ae + partition_name: Microsoft reserved partition + path: /dev/vda2 + uuid: ab263f9b-a6ef-4131-946c-8db62cc2fce3 + id: partition-vda2 + type: partition + - device: disk-vda + size: 354904178688 + number: 3 + preserve: true + grub_device: false + offset: 659554304 + partition_type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 + partition_name: Basic data partition + path: /dev/vda3 + uuid: 1e6326a1-a4d4-4225-820a-eca56bfbba1b + id: partition-vda3 + type: partition + - device: disk-vda + size: 762314752 + number: 4 + preserve: true + grub_device: false + offset: 355563732992 + partition_type: de94bba4-06d1-4d40-a16a-bfd50179d6ac + path: /dev/vda4 + uuid: 53e306ac-91a6-4841-81a7-d965910fd1c6 + id: partition-vda4 + type: partition + - device: disk-vda + size: 120000086016 + wipe: superblock + flag: linux + number: 5 + preserve: true + grub_device: false + offset: 356326047744 + partition_type: 0fc63daf-8483-4772-8e79-3d69d8477de4 + path: /dev/vda5 + uuid: 9db5f9d0-33a0-4ca0-9562-649c24ca7499 + id: partition-vda5 + type: partition + - fstype: btrfs + volume: partition-vda5 + preserve: false + id: format-0 + type: format + - path: / + device: format-0 + id: mount-0 + type: mount + - fstype: vfat + volume: partition-vda1 + preserve: true + id: format-partition-vda1 + type: format + - path: /boot/efi + device: format-partition-vda1 + id: mount-1 + type: mount + - device: disk-vda + size: 8000634880 + wipe: superblock + flag: linux + number: 6 + preserve: true + grub_device: false + offset: 476326133760 + partition_type: 0fc63daf-8483-4772-8e79-3d69d8477de4 + path: /dev/vda6 + uuid: 2c990bfc-89d7-43b7-bb1b-0151d44f72cb + id: partition-vda6 + type: partition + - fstype: btrfs + volume: partition-vda6 + preserve: false + id: format-1 + type: format + - path: /home + device: format-1 + id: mount-2 + type: mount + - device: disk-vda + size: 19256049664 + number: 7 + preserve: true + grub_device: false + offset: 484326768640 + partition_type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 + partition_name: Basic data partition + path: /dev/vda7 + uuid: 3cc1570d-e2ed-4337-b520-f57bbe953c66 + id: partition-vda7 + type: partition + timezone: Europe/Ljubljana + updates: security + packages: + - openssh-server + late-commands: + - 'echo "#cloud-config" >> /target/etc/cloud/cloud.cfg.d/99-ssh_keys.cfg' + - 'echo "users:" >> /target/etc/cloud/cloud.cfg.d/99-ssh_keys.cfg' + - 'echo " - name: local_admin" >> /target/etc/cloud/cloud.cfg.d/99-ssh_keys.cfg' + - 'echo " ssh_authorized_keys:" >> /target/etc/cloud/cloud.cfg.d/99-ssh_keys.cfg' + - 'echo " - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM2Tn8+rH+fkFkBycxYrJ7TzhXQhuf3U+w23JFlZoRiX polz@povzpetnik" >> /target/etc/cloud/cloud.cfg.d/99-ssh_keys.cfg' + - 'echo " - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDRpoWIH5u2g12IM39WNRzLsPksfSjfL/82fPnuZwZ7H polz@it-polz" >> /target/etc/cloud/cloud.cfg.d/99-ssh_keys.cfg' + - 'echo " - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCq7NrrDD53pe9Zpn/dRSPxWQLDIZ9INS0kz/ps/9fGsM8/H/J7jr/ecj0j0jfYig6QdV8G7VnpLWjcuJ65ul3u2rnQSN78Ms/hxlAhmyahQtBA2q2D2zqI2PDWsKAySWmfFg+2W5fYmE1+F9GEB0OWNOuClmfo2A1c8Ve76qSiehHgjYo0G1CQrXkmE00GBLqyqkbyyStLa9DUfaDwrbOu4tJChHo4jDGuLH5QCYcN+RRXjwPQKgk0L2yfu1479L0XqhbEo+KHoIZH501fkoE+gUKVyLERvkhKSiCgPhJmAgRN1bRsiyTwvQzoED4q1RwFmG0AKg0U5bHnAAOd77uyuIYmcFiaRGHROQ9ZbyB9tJ07QrFlzRkderDd5Z18mO7LtgDjFZ2B2DlRY6zxMiUqJyDRnHjDF3+3DTlHIUCC3aEtoYS8MPyRL1b8XenIqswXkM+vkYFeKh2ynjNu3C6VqDCXZFvIi6f1X0ojZXRrDmbiON8Y74HjxP0z6TB1U30= polz@ucilnicenfs-2020" >> /target/etc/cloud/cloud.cfg.d/99-ssh_keys.cfg' + - 'curtin in-target -- sed -i "s/\\(%sudo.*\\) ALL/\\1 NOPASSWD: ALL/" /etc/sudoers' + version: 1 diff --git a/unattended_install/win/autounattend.xml b/unattended_install/win/autounattend.xml new file mode 100644 index 0000000..6ee0db5 --- /dev/null +++ b/unattended_install/win/autounattend.xml @@ -0,0 +1,549 @@ + + + + + + + + en-US + + 0409:00000424;0409:00000409 + en-US + en-US + en-US + + + + + + 0 + 3 + + + + + + YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY + OnError + + true + + false + + + 1 + cmd.exe /c ">>"X:\diskpart.txt" (echo:REM)" + + + 2 + cmd.exe /c "diskpart.exe /s "X:\diskpart.txt" >>"X:\diskpart.log" || ( type "X:\diskpart.log" & echo diskpart encountered an error. & pause & exit /b 1 )" + + + + + + + + ucilnica + + + + + 1 + powershell.exe -WindowStyle Normal -NoProfile -Command "$xml = [xml]::new(); $xml.Load('C:\Windows\Panther\unattend.xml'); $sb = [scriptblock]::Create( $xml.unattend.Extensions.ExtractScript ); Invoke-Command -ScriptBlock $sb -ArgumentList $xml;" + + + 2 + powershell.exe -WindowStyle Normal -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\Specialize.ps1' -Raw | Invoke-Expression;" + + + 3 + reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT" + + + 4 + powershell.exe -WindowStyle Normal -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\DefaultUser.ps1' -Raw | Invoke-Expression;" + + + 5 + reg.exe unload "HKU\DefaultUser" + + + + + + + + + 0409:00000424;0409:00000409 + en-US + en-US + en-US + + + + + + local_admin + FRI IT + Administrators + + 6tfc5rdx + true</PlainText> + </Password> + </LocalAccount> + <LocalAccount wcm:action="add"> + <Name>Student</Name> + <DisplayName>Student</DisplayName> + <Group>Users</Group> + <Password> + <Value>vaje</Value> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + </UserAccounts> + <AutoLogon> + <Username>local_admin</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value>6tfc5rdx</Value> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <OOBE> + <ProtectYourPC>3</ProtectYourPC> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <HideOnlineAccountScreens>false</HideOnlineAccountScreens> + </OOBE> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>powershell.exe -WindowStyle Normal -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\FirstLogon.ps1' -Raw | Invoke-Expression;"</CommandLine> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> + <Extensions xmlns="https://schneegans.de/windows/unattend-generator/"> + <ExtractScript> +param( + [xml] $Document +); + +foreach( $file in $Document.unattend.Extensions.File ) { + $path = [System.Environment]::ExpandEnvironmentVariables( $file.GetAttribute( 'path' ) ); + mkdir -Path( $path | Split-Path -Parent ) -ErrorAction 'SilentlyContinue'; + $encoding = switch( [System.IO.Path]::GetExtension( $path ) ) { + { $_ -in '.ps1', '.xml' } { [System.Text.Encoding]::UTF8; } + { $_ -in '.reg', '.vbs', '.js' } { [System.Text.UnicodeEncoding]::new( $false, $true ); } + default { [System.Text.Encoding]::Default; } + }; + $bytes = $encoding.GetPreamble() + $encoding.GetBytes( $file.InnerText.Trim() ); + [System.IO.File]::WriteAllBytes( $path, $bytes ); +} + </ExtractScript> + <File path="C:\Windows\Setup\Scripts\RemovePackages.ps1"> +$selectors = @( + 'Microsoft.Microsoft3DViewer'; + 'Microsoft.BingSearch'; + 'Microsoft.WindowsCalculator'; + 'Microsoft.WindowsCamera'; + 'Microsoft.WindowsAlarms'; + 'Microsoft.549981C3F5F10'; + 'Microsoft.Windows.DevHome'; + 'MicrosoftCorporationII.MicrosoftFamily'; + 'Microsoft.WindowsFeedbackHub'; + 'Microsoft.Edge.GameAssist'; + 'Microsoft.Getstarted'; + 'Microsoft.WindowsMaps'; + 'Microsoft.MixedReality.Portal'; + 'Microsoft.BingNews'; + 'Microsoft.MicrosoftOfficeHub'; + 'Microsoft.Paint'; + 'Microsoft.Windows.Photos'; + 'Microsoft.PowerAutomateDesktop'; + 'MicrosoftCorporationII.QuickAssist'; + 'Microsoft.SkypeApp'; + 'Microsoft.MicrosoftSolitaireCollection'; + 'Microsoft.MicrosoftStickyNotes'; + 'Microsoft.Todos'; + 'Microsoft.Wallet'; + 'Microsoft.YourPhone'; +); +$getCommand = { + Get-AppxProvisionedPackage -Online; +}; +$filterCommand = { + $_.DisplayName -eq $selector; +}; +$removeCommand = { + [CmdletBinding()] + param( + [Parameter( Mandatory, ValueFromPipeline )] + $InputObject + ); + process { + $InputObject | Remove-AppxProvisionedPackage -AllUsers -Online -ErrorAction 'Continue'; + } +}; +$type = 'Package'; +$logfile = 'C:\Windows\Setup\Scripts\RemovePackages.log'; +&amp; { + $installed = &amp; $getCommand; + foreach( $selector in $selectors ) { + $result = [ordered] @{ + Selector = $selector; + }; + $found = $installed | Where-Object -FilterScript $filterCommand; + if( $found ) { + $result.Output = $found | &amp; $removeCommand; + if( $? ) { + $result.Message = "$type removed."; + } else { + $result.Message = "$type not removed."; + $result.Error = $Error[0]; + } + } else { + $result.Message = "$type not installed."; + } + $result | ConvertTo-Json -Depth 3 -Compress; + } +} *&gt;&amp;1 &gt;&gt; $logfile; + </File> + <File path="C:\Windows\Setup\Scripts\RemoveCapabilities.ps1"> +$selectors = @( + 'Print.Fax.Scan'; + 'Language.Handwriting'; + 'Browser.InternetExplorer'; + 'MathRecognizer'; + 'OneCoreUAP.OneSync'; + 'Microsoft.Windows.MSPaint'; + 'Microsoft.Windows.PowerShell.ISE'; + 'App.Support.QuickAssist'; + 'Language.Speech'; + 'Language.TextToSpeech'; + 'App.StepsRecorder'; + 'Hello.Face.18967'; + 'Hello.Face.Migration.18967'; + 'Hello.Face.20134'; + 'Microsoft.Windows.WordPad'; +); +$getCommand = { + Get-WindowsCapability -Online | Where-Object -Property 'State' -NotIn -Value @( + 'NotPresent'; + 'Removed'; + ); +}; +$filterCommand = { + ($_.Name -split '~')[0] -eq $selector; +}; +$removeCommand = { + [CmdletBinding()] + param( + [Parameter( Mandatory, ValueFromPipeline )] + $InputObject + ); + process { + $InputObject | Remove-WindowsCapability -Online -ErrorAction 'Continue'; + } +}; +$type = 'Capability'; +$logfile = 'C:\Windows\Setup\Scripts\RemoveCapabilities.log'; +&amp; { + $installed = &amp; $getCommand; + foreach( $selector in $selectors ) { + $result = [ordered] @{ + Selector = $selector; + }; + $found = $installed | Where-Object -FilterScript $filterCommand; + if( $found ) { + $result.Output = $found | &amp; $removeCommand; + if( $? ) { + $result.Message = "$type removed."; + } else { + $result.Message = "$type not removed."; + $result.Error = $Error[0]; + } + } else { + $result.Message = "$type not installed."; + } + $result | ConvertTo-Json -Depth 3 -Compress; + } +} *&gt;&amp;1 &gt;&gt; $logfile; + </File> + <File path="C:\Windows\Setup\Scripts\RemoveFeatures.ps1"> +$selectors = @( + 'Microsoft-RemoteDesktopConnection'; + 'Recall'; +); +$getCommand = { + Get-WindowsOptionalFeature -Online | Where-Object -Property 'State' -NotIn -Value @( + 'Disabled'; + 'DisabledWithPayloadRemoved'; + ); +}; +$filterCommand = { + $_.FeatureName -eq $selector; +}; +$removeCommand = { + [CmdletBinding()] + param( + [Parameter( Mandatory, ValueFromPipeline )] + $InputObject + ); + process { + $InputObject | Disable-WindowsOptionalFeature -Online -Remove -NoRestart -ErrorAction 'Continue'; + } +}; +$type = 'Feature'; +$logfile = 'C:\Windows\Setup\Scripts\RemoveFeatures.log'; +&amp; { + $installed = &amp; $getCommand; + foreach( $selector in $selectors ) { + $result = [ordered] @{ + Selector = $selector; + }; + $found = $installed | Where-Object -FilterScript $filterCommand; + if( $found ) { + $result.Output = $found | &amp; $removeCommand; + if( $? ) { + $result.Message = "$type removed."; + } else { + $result.Message = "$type not removed."; + $result.Error = $Error[0]; + } + } else { + $result.Message = "$type not installed."; + } + $result | ConvertTo-Json -Depth 3 -Compress; + } +} *&gt;&amp;1 &gt;&gt; $logfile; + </File> + <File path="C:\Windows\Setup\Scripts\VirtIoGuestTools.ps1"> +&amp; { + foreach( $letter in 'DEFGHIJKLMNOPQRSTUVWXYZ'.ToCharArray() ) { + $exe = "${letter}:\virtio-win-guest-tools.exe"; + if( Test-Path -LiteralPath $exe ) { + Start-Process -FilePath $exe -ArgumentList '/passive', '/norestart' -Wait; + return; + } + } + 'VirtIO Guest Tools image (virtio-win-*.iso) is not attached to this VM.'; +} *&gt;&amp;1 &gt;&gt; 'C:\Windows\Setup\Scripts\VirtIoGuestTools.log'; + </File> + <File path="C:\Windows\Setup\Scripts\unattend-01.ps1"> +Get-WindowsCapability -Name OpenSSH.Server* -Online | + Add-WindowsCapability -Online + +$firewallParams = @{ + Name = 'sshd-Server-In-TCP' + DisplayName = 'Inbound rule for OpenSSH Server (sshd) on TCP port 22' + Action = 'Allow' + Direction = 'Inbound' + Enabled = 'True' # This is not a boolean but an enum + Profile = 'Any' + Protocol = 'TCP' + LocalPort = 22 +} +New-NetFirewallRule @firewallParams + +$shellParams = @{ + Path = 'HKLM:\SOFTWARE\OpenSSH' + Name = 'DefaultShell' + Value = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' + PropertyType = 'String' + Force = $true +} +New-ItemProperty @shellParams + +# Set default to powershell.exe +$shellParams = @{ + Path = 'HKLM:\SOFTWARE\OpenSSH' + Name = 'DefaultShell' + Value = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' + PropertyType = 'String' + Force = $true +} +New-ItemProperty @shellParams + +# Set real-time clock to UTC +$shellParams = @{ + Path = 'HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation' + Name = 'RealTimeIsUniversal' + Value = '1' + PropertyType = 'DWord' +} +New-ItemProperty @shellParams + + +Set-Service -Name sshd -StartupType Automatic -Status Running + </File> + <File path="C:\Windows\Setup\Scripts\Specialize.ps1"> +$scripts = @( + { + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f; + }; + { + Remove-Item -LiteralPath 'Registry::HKLM\Software\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate' -Force -ErrorAction 'SilentlyContinue'; + }; + { + Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\RemovePackages.ps1' -Raw | Invoke-Expression; + }; + { + Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\RemoveCapabilities.ps1' -Raw | Invoke-Expression; + }; + { + Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\RemoveFeatures.ps1' -Raw | Invoke-Expression; + }; + { + net.exe accounts /maxpwage:UNLIMITED; + }; + { + netsh.exe advfirewall firewall set rule group="@FirewallAPI.dll,-28752" new enable=Yes; + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f; + }; + { + icacls.exe C:\ /remove:g "*S-1-5-11" + }; + { + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /f; + }; + { + reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v AllowNewsAndInterests /t REG_DWORD /d 0 /f; + }; + { + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\BitLocker" /v "PreventDeviceEncryption" /t REG_DWORD /d 1 /f; + }; + { + Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\unattend-01.ps1' -Raw | Invoke-Expression; + }; +); + +&amp; { + [float] $complete = 0; + [float] $increment = 100 / $scripts.Count; + foreach( $script in $scripts ) { + Write-Progress -Activity 'Running scripts to customize your Windows installation. Do not close this window.' -PercentComplete $complete; + '*** Will now execute command &#xAB;{0}&#xBB;.' -f $( + $str = $script.ToString().Trim() -replace '\s+', ' '; + $max = 100; + if( $str.Length -le $max ) { + $str; + } else { + $str.Substring( 0, $max - 1 ) + '&#x2026;'; + } + ); + $start = [datetime]::Now; + &amp; $script; + '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds; + "`r`n" * 3; + $complete += $increment; + } +} *&gt;&amp;1 &gt;&gt; "C:\Windows\Setup\Scripts\Specialize.log"; + </File> + <File path="C:\Windows\Setup\Scripts\UserOnce.ps1"> +$scripts = @( + { + Set-WinHomeLocation -GeoId 212; + }; + { + Get-AppxPackage -Name 'Microsoft.Windows.Ai.Copilot.Provider' | Remove-AppxPackage; + }; + { + Set-ItemProperty -LiteralPath 'Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'LaunchTo' -Type 'DWord' -Value 1; + }; +); + +&amp; { + [float] $complete = 0; + [float] $increment = 100 / $scripts.Count; + foreach( $script in $scripts ) { + Write-Progress -Activity 'Running scripts to configure this user account. Do not close this window.' -PercentComplete $complete; + '*** Will now execute command &#xAB;{0}&#xBB;.' -f $( + $str = $script.ToString().Trim() -replace '\s+', ' '; + $max = 100; + if( $str.Length -le $max ) { + $str; + } else { + $str.Substring( 0, $max - 1 ) + '&#x2026;'; + } + ); + $start = [datetime]::Now; + &amp; $script; + '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds; + "`r`n" * 3; + $complete += $increment; + } +} *&gt;&amp;1 &gt;&gt; "$env:TEMP\UserOnce.log"; + </File> + <File path="C:\Windows\Setup\Scripts\DefaultUser.ps1"> +$scripts = @( + { + reg.exe add "HKU\DefaultUser\Software\Policies\Microsoft\Windows\WindowsCopilot" /v TurnOffWindowsCopilot /t REG_DWORD /d 1 /f; + }; + { + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f; + }; + { + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v "UnattendedSetup" /t REG_SZ /d "powershell.exe -WindowStyle Normal -NoProfile -Command \""Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\UserOnce.ps1' -Raw | Invoke-Expression;\""" /f; + }; +); + +&amp; { + [float] $complete = 0; + [float] $increment = 100 / $scripts.Count; + foreach( $script in $scripts ) { + Write-Progress -Activity 'Running scripts to modify the default user&#x2019;&#x2019;s registry hive. Do not close this window.' -PercentComplete $complete; + '*** Will now execute command &#xAB;{0}&#xBB;.' -f $( + $str = $script.ToString().Trim() -replace '\s+', ' '; + $max = 100; + if( $str.Length -le $max ) { + $str; + } else { + $str.Substring( 0, $max - 1 ) + '&#x2026;'; + } + ); + $start = [datetime]::Now; + &amp; $script; + '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds; + "`r`n" * 3; + $complete += $increment; + } +} *&gt;&amp;1 &gt;&gt; "C:\Windows\Setup\Scripts\DefaultUser.log"; + </File> + <File path="C:\Windows\Setup\Scripts\FirstLogon.ps1"> +$scripts = @( + { + Set-ItemProperty -LiteralPath 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name 'AutoLogonCount' -Type 'DWord' -Force -Value 0; + }; + { + Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\VirtIoGuestTools.ps1' -Raw | Invoke-Expression; + }; +); + +&amp; { + [float] $complete = 0; + [float] $increment = 100 / $scripts.Count; + foreach( $script in $scripts ) { + Write-Progress -Activity 'Running scripts to finalize your Windows installation. Do not close this window.' -PercentComplete $complete; + '*** Will now execute command &#xAB;{0}&#xBB;.' -f $( + $str = $script.ToString().Trim() -replace '\s+', ' '; + $max = 100; + if( $str.Length -le $max ) { + $str; + } else { + $str.Substring( 0, $max - 1 ) + '&#x2026;'; + } + ); + $start = [datetime]::Now; + &amp; $script; + '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds; + "`r`n" * 3; + $complete += $increment; + } +} *&gt;&amp;1 &gt;&gt; "C:\Windows\Setup\Scripts\FirstLogon.log"; + </File> + </Extensions> +</unattend> \ No newline at end of file diff --git a/winsetup.yml b/winsetup.yml index c8a4fb3..89aac70 100644 --- a/winsetup.yml +++ b/winsetup.yml @@ -3,19 +3,25 @@ become_method: runas debugger: on_failed vars: - ansible_connection: winrm - ansible_winrm_transport: ntlm - ansible_winrm_server_cert_validation: ignore - ansible_port: 5985 + # ansible_connection: winrm + # ansible_winrm_transport: ntlm + # ansible_winrm_server_cert_validation: ignore + # ansible_port: 5985 + ansible_connection: ssh + ansible_port: 22 + ansible_shell_type: powershell logon_type: interactive installers: \\ucilnicesmb.fri1.uni-lj.si\ucilnice_d\install vars_files: - vars/credentials.yml - vars/software_keys.yml roles: + - fri_base # - all_classes + # - matlab # - stm32cube - - android_studio + # - firefox + # - android_studio #- OR-63717 #- RA-63703 #- VN-63728