diff --git a/README.md b/README.md index 907b298..74c99c4 100644 --- a/README.md +++ b/README.md @@ -1,5 +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 or, for Apple computers: - ansible-playbook --user -k -K -i inventory.yml macsetup.py + 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). + diff --git a/join_ad.yml b/join_ad.yml new file mode 100644 index 0000000..68ba724 --- /dev/null +++ b/join_ad.yml @@ -0,0 +1,19 @@ +- name: Gather facts / setup connection + hosts: '*' + gather_facts: false + become: false + vars_files: + - vars/credentials.yml + roles: + - facts + +- name: Join AD + hosts: '*' + become: true + debugger: on_failed + vars_files: + - vars/credentials.yml + vars: + domain_name: "FRI1.UNI-LJ.SI" + roles: + - ad_joined 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/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/KRV-63528/meta/main.yml b/roles/KRV-63528/meta/main.yml index 300873b..200842b 100644 --- a/roles/KRV-63528/meta/main.yml +++ b/roles/KRV-63528/meta/main.yml @@ -7,3 +7,6 @@ dependencies: - role: jupyter - role: openssl + - role: cryptodome + - role: pwntools + - role: python3 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/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/PJC-63769/meta/main.yml b/roles/PJC-63769/meta/main.yml index 0c5fab1..caa2298 100644 --- a/roles/PJC-63769/meta/main.yml +++ b/roles/PJC-63769/meta/main.yml @@ -2,4 +2,4 @@ # Tomaz.Dobravec@fri.uni-lj.si # Windows, Pelles C dependencies: - - role: pelles-c + - role: clion 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 f92403c..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 diff --git a/roles/VN-63728/meta/main.yml b/roles/VN-63728/meta/main.yml index 3bced19..411c38d 100644 --- a/roles/VN-63728/meta/main.yml +++ b/roles/VN-63728/meta/main.yml @@ -2,7 +2,7 @@ # 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 diff --git a/roles/VP-63775/meta/main.yml b/roles/VP-63775/meta/main.yml index 9185ffc..ea90757 100644 --- a/roles/VP-63775/meta/main.yml +++ b/roles/VP-63775/meta/main.yml @@ -14,4 +14,5 @@ dependencies: - role: jdk - role: jupyter - role: pycharm + - role: cryptography - role: flask 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..ab206be --- /dev/null +++ b/roles/ad_joined/files/pam_mount.conf.xml @@ -0,0 +1,38 @@ + + + + + + + + + + local_admin + root + lightdm + users + + + + + 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..748036b 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,40 @@ - 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: Fix broken display settings - start CDPSvc + win_regedit: + path: "{{item}}" + name: "Start" + type: dword + data: 0x00000002 + with_items: + - HKLM\SYSTEM\CurrentControlSet\Services\CDPSvc + - HKLM\SYSTEM\CurrentControlSet\Services\CDPUserSvc + - 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..e69948b 100644 --- a/roles/ad_joined/templates/sssd.conf +++ b/roles/ad_joined/templates/sssd.conf @@ -3,6 +3,7 @@ config_file_version = 2 domains = fri1.uni-lj.si enable_files_domain = False services = nss, pam +default_domain_suffix = student.uni-lj.si [nss] filtered_groups = root @@ -27,5 +28,7 @@ krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True use_fully_qualified_names = True +full_name_format = %1$s@%3$s fallback_homedir = /home/%u@%d access_provider = ad +krb5_ccname_template = FILE:%d/krb5cc_%U 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/main_win.yml b/roles/android_studio/tasks/main_win.yml index a209379..60ab850 100644 --- a/roles/android_studio/tasks/main_win.yml +++ b/roles/android_studio/tasks/main_win.yml @@ -1,27 +1,80 @@ - 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" + sdk_path: "{{ large_prog_dir }}\\android-sdk" + 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 }}\\platform-tools\\adb.exe" + 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:\\platform-tools-{{ tools_version }}-windows.zip" - dest: "{{ sdk_path }}\\" + # 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: 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: "{{ large_prog_dir }}\\.android" + state: directory + +- name: Create Android Studio SDK directory + win_file: + path: "{{ sdk_path }}" + state: directory + + +- name: Create Android Studio shortcut + win_shortcut: + dest: "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Android Studio\\Android Studio.lnk" + src: "{{ studio_path }}\\bin\\studio64.exe" + +- name: Set Android Studio environment variables + win_environment: + level: machine + variables: + ANDROID_HOME: "{{ studio_path }}" + ANDROID_SDK_ROOT: "{{ sdk_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" @@ -29,35 +82,21 @@ - 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 }}" +- 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: Create Android Studio data directory - win_file: - path: D:\.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 - +#- 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/blender/tasks/main_lin.yml b/roles/blender/tasks/main_lin.yml index 7a3281e..9e82934 100644 --- a/roles/blender/tasks/main_lin.yml +++ b/roles/blender/tasks/main_lin.yml @@ -1,4 +1,32 @@ -- name: Install blender - apt: - name: blender - state: latest +#- name: Add blender PPA +# command: add-apt-repository -y ppa:savoury1/blender + +#- name: Add blender PPA +# apt_repository: +# repo: ppa:savoury1/blender +# state: present +# update_cache: True + +#- name: Install blender +# apt: +# name: blender +# state: latest +- name: Download and unpack blender + unarchive: + src: https://download.blender.org/release/Blender4.5/blender-4.5.3-linux-x64.tar.xz + dest: /usr/local/lib/ + remote_src: yes + creates: /usr/local/lib/blender-4.5.3-linux-x64/blender-launcher + +- name: Create blender symlink + file: + src: /usr/local/lib/blender-4.5.3-linux-x64/blender-launcher + dest: /usr/local/bin/blender + state: link + +- name: Copy blender .desktop file + copy: + src: "/usr/local/lib/blender-4.5.3-linux-x64/blender.desktop" + dest: "/usr/local/share/applications" + remote_src: yes + diff --git a/roles/blender/tasks/main_win.yml b/roles/blender/tasks/main_win.yml index 8985fd2..fa91d4f 100644 --- a/roles/blender/tasks/main_win.yml +++ b/roles/blender/tasks/main_win.yml @@ -1,3 +1,3 @@ - name: Install Blender win_package: - path: https://ftp.nluug.nl/pub/graphics/blender/release/Blender3.3/blender-3.3.0-windows-x64.msi + path: https://ftp.nluug.nl/pub/graphics/blender/release/Blender4.5/blender-4.5.3-windows-x64.msi diff --git a/roles/chrome/tasks/main_lin.yml b/roles/chrome/tasks/main_lin.yml index 5433e42..3d07a4f 100644 --- a/roles/chrome/tasks/main_lin.yml +++ b/roles/chrome/tasks/main_lin.yml @@ -8,6 +8,10 @@ # state: present # update_cache: True # validate_certs: False +- name: Remove Chromium snap + community.general.snap: + name: chromium + state: absent - name: Install Chromium instead of Chrome apt: diff --git a/roles/clion/files/clion.desktop b/roles/clion/files/clion.desktop new file mode 100644 index 0000000..001239c --- /dev/null +++ b/roles/clion/files/clion.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=CLion +GenericName=CLion +Comment=JetBrains CLion IDE +MimeType=text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-moc;text/x-c;text/x-c++; +Exec=/opt/CLion/bin/clion.sh +Icon=clion +Terminal=false +Type=Application +Categories=Education;Development;ComputerScience; +StartupNotify=true diff --git a/roles/clion/tasks/main.yml b/roles/clion/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/clion/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/clion/tasks/main_lin.yml b/roles/clion/tasks/main_lin.yml new file mode 100644 index 0000000..6b33b9f --- /dev/null +++ b/roles/clion/tasks/main_lin.yml @@ -0,0 +1,32 @@ +- name: Install CLion + block: + - name: Create destination for JetBrains CLion + file: + path: /opt/CLion + state: directory + - name: Download and unpack JetBrains CLion + unarchive: + src: https://data.services.jetbrains.com/products/download?code=CL&platform=linux + dest: /opt/CLion + extra_opts: --strip-components=1 + creates: /opt/CLion/build.txt + remote_src: yes + +- name: Install icon + block: + - file: + path: /usr/local/share/icons + state: directory + - copy: + src: /opt/CLion/bin/clion.svg + remote_src: true + dest: /usr/local/share/icons/clion.svg + +- name: Create .desktop file + block: + - file: + path: /usr/local/share/applications + state: directory + - copy: + dest: /usr/local/share/applications/clion.desktop + src: clion.desktop diff --git a/roles/clion/tasks/main_win.yml b/roles/clion/tasks/main_win.yml new file mode 100644 index 0000000..f66ef50 --- /dev/null +++ b/roles/clion/tasks/main_win.yml @@ -0,0 +1,7 @@ + +# TODO fix / test this +- name: Install Clion + win_package: + path: "https://data.services.jetbrains.com/products/download?code=CL&platform=windows" + arguments: /S + creates_path: "%ProgramFiles(x86)%\\JetBrains\\IntelliJ IDEA Community Edition {{ target_version }}\\bin\\idea64.exe" 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/cryptodome/tasks/main.yml b/roles/cryptodome/tasks/main.yml new file mode 100644 index 0000000..66e93fe --- /dev/null +++ b/roles/cryptodome/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/cryptodome/tasks/main_lin.yml b/roles/cryptodome/tasks/main_lin.yml new file mode 100644 index 0000000..de920ed --- /dev/null +++ b/roles/cryptodome/tasks/main_lin.yml @@ -0,0 +1,5 @@ +- name: Install python-pycryptodome + apt: + name: + - python3-pycryptodome + state: latest diff --git a/roles/cryptodome/tasks/main_win.yml b/roles/cryptodome/tasks/main_win.yml new file mode 100644 index 0000000..1b9bc48 --- /dev/null +++ b/roles/cryptodome/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install python3-pycryptodome + win_command: pip install pycryptodome diff --git a/roles/cryptography/tasks/main.yml b/roles/cryptography/tasks/main.yml new file mode 100644 index 0000000..66e93fe --- /dev/null +++ b/roles/cryptography/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/cryptography/tasks/main_lin.yml b/roles/cryptography/tasks/main_lin.yml new file mode 100644 index 0000000..eb361bb --- /dev/null +++ b/roles/cryptography/tasks/main_lin.yml @@ -0,0 +1,5 @@ +- name: Install python-cryptography + apt: + name: + - python3-cryptography + state: latest diff --git a/roles/cryptography/tasks/main_win.yml b/roles/cryptography/tasks/main_win.yml new file mode 100644 index 0000000..b5759ef --- /dev/null +++ b/roles/cryptography/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install python3-cryptography + win_command: pip install cryptography 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/firefox/files/policies.json b/roles/firefox/files/policies.json new file mode 100644 index 0000000..1d48a1d --- /dev/null +++ b/roles/firefox/files/policies.json @@ -0,0 +1,17 @@ +{ + "policies": { + "OverrideFirstRunPage": "https://ucilnica.fri.uni-lj.si", + "OverridePostUpdatePage": "https://ucilnica.fri.uni-lj.si", + "DisableAppUpdate": true, + "DisableSystemAddonUpdate": true, + "DisableTelemetry": true, + "UserMessaging": { + "WhatsNew": false, + "ExtensionRecommendations": false, + "FeatureRecommendations": false, + "UrlbarInterventions": false, + "SkipOnboarding": true, + "MoreFromMozilla": false + } + } +} diff --git a/roles/firefox/tasks/main_lin.yml b/roles/firefox/tasks/main_lin.yml index 8cd61d2..fa3fd83 100644 --- a/roles/firefox/tasks/main_lin.yml +++ b/roles/firefox/tasks/main_lin.yml @@ -31,3 +31,13 @@ - firefox state: latest allow_downgrade: True + +- name: Create Firefox policies directory + file: + path: /etc/firefox/policies + state: directory + +- name: Set Firefox policies + copy: + dest: /etc/firefox/policies/policies.json + src: policies.json diff --git a/roles/firefox/tasks/main_win.yml b/roles/firefox/tasks/main_win.yml index 53987a9..a1c24b3 100644 --- a/roles/firefox/tasks/main_win.yml +++ b/roles/firefox/tasks/main_win.yml @@ -8,19 +8,4 @@ - name: Set Firefox policies copy: dest: C:\Program Files\Mozilla Firefox\distribution\policies.json - content: | - { - "policies": { - "DisableAppUpdate": true, - "DisableSystemAddonUpdate": true, - "DisableTelemetry": true, - "UserMessaging": { - "WhatsNew": false, - "ExtensionRecommendations": false, - "FeatureRecommendations": false, - "UrlbarInterventions": false, - "SkipOnboarding": true, - "MoreFromMozilla": false - } - } - } + src: policies.json diff --git a/roles/fri_base/files/authorized_keys b/roles/fri_base/files/authorized_keys new file mode 100644 index 0000000..57dc2c0 --- /dev/null +++ b/roles/fri_base/files/authorized_keys @@ -0,0 +1,5 @@ +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 + +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDRpoWIH5u2g12IM39WNRzLsPksfSjfL/82fPnuZwZ7H polz@it-polz diff --git a/roles/fri_base/files/hide_users.conf b/roles/fri_base/files/hide_users.conf new file mode 100644 index 0000000..b3a9f7e --- /dev/null +++ b/roles/fri_base/files/hide_users.conf @@ -0,0 +1,4 @@ +[Users] +MinimumUid=999 +MaximumUid=999 +RememberLastUser=false diff --git a/roles/fri_base/files/user.dconf b/roles/fri_base/files/user.dconf new file mode 100644 index 0000000..9cef8c7 --- /dev/null +++ b/roles/fri_base/files/user.dconf @@ -0,0 +1 @@ +service-db:keyfile/user diff --git a/roles/fri_base/meta/main.yml b/roles/fri_base/meta/main.yml index ca40277..54b3e1e 100644 --- a/roles/fri_base/meta/main.yml +++ b/roles/fri_base/meta/main.yml @@ -9,3 +9,4 @@ dependencies: - role: sumatrapdf - role: vlc - role: wget + - role: prometheus-exporter diff --git a/roles/fri_base/tasks/main_lin.yml b/roles/fri_base/tasks/main_lin.yml index d301d09..fd34a57 100644 --- a/roles/fri_base/tasks/main_lin.yml +++ b/roles/fri_base/tasks/main_lin.yml @@ -1,6 +1,55 @@ - name: Enable multiarch command: dpkg --add-architecture i386 +- name: Create swap btrfs subvolume + command: btrfs subvolume create /swap + ignore_errors: True + +- name: Create swap directory if it does not exist + file: + path: /swap + state: directory + +- name: Create btrfs swap + command: btrfs filesystem mkswapfile --size 4g /swap/swap.img + ignore_errors: True + +- name: Create swap image if it does not exist + shell: fallocate -l 4G /swap/swap.img && mkswap /swap/swap.img + args: + creates: /swap/swap.img + ignore_errors: True + +- name: Change swap file permissions + file: path="/swap/swap.img" + owner=root + group=root + mode=0600 + +- name: Write swap entry in fstab + mount: name=none + src=/swap/swap.img + fstype=swap + opts=sw + passno=0 + dump=0 + state=present + +- name: Activate swap + command: "swapon /swap/swap.img" + ignore_errors: True + +- name: Make sure default swap entry does not exist + mount: + path: none + src: /swap.img + fstype: swap + state: absent + +- name: Make sure default swap is not used + command: swapoff /swap/swap.img + ignore_errors: True + - name: Install generally useful packages apt: name: @@ -13,7 +62,6 @@ - kwrite - kate - krita - - blender - inkscape - pcmanfm-qt - qutebrowser @@ -24,9 +72,13 @@ - qemu-utils - virt-manager - wine + - wine64 - wine32:i386 - wine-binfmt - dosbox + - htop + - btop + - iotop # - webext-ublock-origin-chromium # - webext-ublock-origin-firefox - nethack-console @@ -49,8 +101,11 @@ - neovim-qt - binwalk - iotop + - evince + - okular - htop - jdupes + - snapper state: latest update_cache: yes @@ -59,8 +114,33 @@ name: - xfce4-screensaver - xscreensaver + - thunderbird + - kmail state: absent +- name: Set volumes for snapper + set_fact: + snapper_volumes: + - { confname: 'root', subvolume: '/'} + - { confname: 'opt', subvolume: '/opt'} + +- name: Create snapper configs + command: snapper -c {{item.confname}} create-config {{item.subvolume}} + ignore_errors: true + loop: "{{snapper_volumes}}" + +- name: Overwrite snapper configs + template: + src: snapper + dest: /etc/snapper/configs/{{item.confname}} + loop: "{{ snapper_volumes }}" + +- name: Disable APT snapshots for snapper + lineinfile: + path: /etc/default/snapper + regexp: '^DISABLE_APT_SNAPSHOT=' + line: 'DISABLE_APT_SNAPSHOT="yes"' + - name: Set up additional groups for students vars: additional_groups: @@ -100,7 +180,7 @@ mount: boot: true fstype: ntfs-3g - src: UUID=A09E30889E30594C + src: "PARTLABEL=Basic\\040data\\040partition" path: /mnt/C state: mounted opts: defaults,nofail @@ -109,7 +189,7 @@ mount: boot: true fstype: ntfs-3g - src: "LABEL=D:" + src: "PARTLABEL=D:" path: /mnt/D state: mounted opts: defaults,nofail @@ -144,3 +224,42 @@ copy: dest: /etc/udev/rules.d/ src: 99-wakeonlan.rules + +- name: Put dconf files in XDG_RUNTIME_DIR so dconf works on network-mounted homes + block: + - file: + path: /etc/dconf/profile + state: directory + - copy: + dest: /etc/dconf/profile/user + src: user.dconf + +- 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: Hide users in lightdm + lineinfile: + path: /etc/lightdm/lightdm.conf + regexp: "#?greeter-hide-users=" + line: greeter-hide-users=true + +- name: Hide users in sddm + copy: + dest: /etc/sddm.conf.d/ + src: hide_users.conf + + +- name: Copy authorized_keys + become: false + ansible.posix.authorized_key: + user: "{{ ansible_user }}" + key: "{{ lookup('file', 'authorized_keys') }}" + state: present + exclusive: true diff --git a/roles/fri_base/tasks/main_win.yml b/roles/fri_base/tasks/main_win.yml index 0a68dbd..9e3b5e5 100644 --- a/roles/fri_base/tasks/main_win.yml +++ b/roles/fri_base/tasks/main_win.yml @@ -36,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/idea/files/idea.desktop b/roles/idea/files/idea.desktop new file mode 100644 index 0000000..1c69ffe --- /dev/null +++ b/roles/idea/files/idea.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=IDEA +GenericName=IDEA +Comment=JetBrains IDEA +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=/opt/IDEA/bin/idea.sh +Icon=idea +Terminal=false +Type=Application +Categories=Development;ComputerScience; +StartupNotify=true diff --git a/roles/idea/tasks/main_lin.yml b/roles/idea/tasks/main_lin.yml index 89023cd..e70fb5e 100644 --- a/roles/idea/tasks/main_lin.yml +++ b/roles/idea/tasks/main_lin.yml @@ -6,7 +6,27 @@ state: directory - name: Download and unpack JetBrains IDEA unarchive: - src: https://download.jetbrains.com/idea/ideaIC-2023.2.1.tar.gz + src: https://data.services.jetbrains.com/products/download?code=IIU&platform=linux dest: /opt/IDEA - creates: /opt/IDEA/idea-IC-232.9559.62/build.txt + extra_opts: --strip-components=1 + creates: /opt/IDEA/build.txt remote_src: yes + +- name: Install icon + block: + - file: + path: /usr/local/share/icons + state: directory + - copy: + src: /opt/IDEA/bin/idea.svg + remote_src: true + dest: /usr/local/share/icons/idea.svg + +- name: Create .desktop file + block: + - file: + path: /usr/local/share/applications + state: directory + - copy: + dest: /usr/local/share/applications/idea.desktop + src: idea.desktop 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 04dd67e..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 diff --git a/roles/jdk/tasks/main_win.yml b/roles/jdk/tasks/main_win.yml index 4aad6a4..be8ea09 100644 --- a/roles/jdk/tasks/main_win.yml +++ b/roles/jdk/tasks/main_win.yml @@ -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 0885e90..c9a2213 100644 --- a/roles/logisim/tasks/main_lin.yml +++ b/roles/logisim/tasks/main_lin.yml @@ -11,6 +11,10 @@ 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 diff --git a/roles/matlab/tasks/main_win.yml b/roles/matlab/tasks/main_win.yml index e0cddc2..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: C:\matlab + dest_dir: "{{ large_prog_dir }}\\matlab" - name: Set ISO path set_fact: 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/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/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/ocaml/tasks/main_lin.yml b/roles/ocaml/tasks/main_lin.yml index 6695909..4d0e80c 100644 --- a/roles/ocaml/tasks/main_lin.yml +++ b/roles/ocaml/tasks/main_lin.yml @@ -2,3 +2,14 @@ apt: name: ocaml state: latest + +- name: Install opam + apt: + name: opam + state: latest + +- name: Init opam home + command: opam init --reinit --root=/opt/opam --dot-profile=/etc/profile.d/opam.sh --comp=4.14.2 -a + +- name: Install required opam packages + shell: source /etc/profile.d/opam.sh; eval $(opam env --root=/opt/opam --set-root --switch=4.14.2); opam install --yes ocaml-lsp-server odoc ocamlformat utop dune menhir diff --git a/roles/omnetpp/tasks/main_win.yml b/roles/omnetpp/tasks/main_win.yml index 833b000..d17b337 100644 --- a/roles/omnetpp/tasks/main_win.yml +++ b/roles/omnetpp/tasks/main_win.yml @@ -3,7 +3,7 @@ - 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: @@ -15,17 +15,23 @@ - name: Download OMNet++ win_get_url: url: "https://github.com/omnetpp/omnetpp/releases/download/omnetpp-{{ target_version }}/omnetpp-{{ target_version }}-windows-x86_64.7z" - dest: C:\ + 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: @@ -40,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 96773f2..2e45bca 100644 --- a/roles/powerdesigner/tasks/main_win.yml +++ b/roles/powerdesigner/tasks/main_win.yml @@ -1,9 +1,13 @@ # 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_shell: | - {{ installers }}\PowerDesigner_12.5\cd1\setup\setup.exe /s /f1"{{ installers }}\PowerDesigner_12.5\setup.iss" /f2"C:\powerdesigner_log.iss" - + {{ installers }}\PowerDesigner_12.5\cd1\setup\setup.exe /s /f1"c:\powerdesigner_setup.iss" /f2"C:\powerdesigner_log.iss" args: executable: cmd 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/prometheus-exporter/tasks/main.yml b/roles/prometheus-exporter/tasks/main.yml new file mode 100644 index 0000000..3077b7e --- /dev/null +++ b/roles/prometheus-exporter/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/prometheus-exporter/tasks/main_lin.yml b/roles/prometheus-exporter/tasks/main_lin.yml new file mode 100644 index 0000000..98b2923 --- /dev/null +++ b/roles/prometheus-exporter/tasks/main_lin.yml @@ -0,0 +1,5 @@ +- name: Install prometheus-exporter + apt: + name: + - prometheus-node-exporter + state: latest diff --git a/roles/prometheus-exporter/tasks/main_win.yml b/roles/prometheus-exporter/tasks/main_win.yml new file mode 100644 index 0000000..76d90ac --- /dev/null +++ b/roles/prometheus-exporter/tasks/main_win.yml @@ -0,0 +1,3 @@ +- name: Install prometheus exporter + win_chocolatey: + name: prometheus-windows-exporter.install diff --git a/roles/pulseview/tasks/main_win.yml b/roles/pulseview/tasks/main_win.yml index 1fa7568..469843f 100644 --- a/roles/pulseview/tasks/main_win.yml +++ b/roles/pulseview/tasks/main_win.yml @@ -10,6 +10,10 @@ path: "{{ download.dest }}" arguments: /S /Verysilent /AllUsers +- name: Create PulseView Shortcut + win_shortcut: + src: "C:\\Program Files (x86)\\sigrok\\PulseView\\pulseview.exe" + dest: "C:\\Users\\Public\\Desktop\\PulseView.lnk" #- name: Remove temporary files # win_file: # path: "{{ download.dest }}" diff --git a/roles/pwntools/tasks/main.yml b/roles/pwntools/tasks/main.yml new file mode 100644 index 0000000..66e93fe --- /dev/null +++ b/roles/pwntools/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/pwntools/tasks/main_lin.yml b/roles/pwntools/tasks/main_lin.yml new file mode 100644 index 0000000..009cd6f --- /dev/null +++ b/roles/pwntools/tasks/main_lin.yml @@ -0,0 +1,5 @@ +- name: Install python-pwntools + apt: + name: + - python3-pwntools + state: latest diff --git a/roles/pwntools/tasks/main_win.yml b/roles/pwntools/tasks/main_win.yml new file mode 100644 index 0000000..6b254c8 --- /dev/null +++ b/roles/pwntools/tasks/main_win.yml @@ -0,0 +1,2 @@ +- name: Install python3-pwntools + win_command: pip install pwntools diff --git a/roles/pycharm/files/pycharm.desktop b/roles/pycharm/files/pycharm.desktop new file mode 100644 index 0000000..5a90f0a --- /dev/null +++ b/roles/pycharm/files/pycharm.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=PyCharm +GenericName=PyCharm +Comment=JetBrains PyCharm IDE +MimeType=text/x-python; +Exec=/opt/PyCharm/bin/pycharm.sh +Icon=pycharm +Terminal=false +Type=Application +Categories=Development;ComputerScience; +StartupNotify=true diff --git a/roles/pycharm/tasks/main_lin.yml b/roles/pycharm/tasks/main_lin.yml index b85c36b..7e8fe1d 100644 --- a/roles/pycharm/tasks/main_lin.yml +++ b/roles/pycharm/tasks/main_lin.yml @@ -6,7 +6,27 @@ state: directory - name: Download and unpack JetBrains PyCharm unarchive: - src: https://download.jetbrains.com/python/pycharm-community-2023.2.1.tar.gz + src: https://data.services.jetbrains.com/products/download?code=PCP&platform=linux dest: /opt/PyCharm - creates: /opt/PyCharm/pycharm-community-2023.2.1/build.txt + extra_opts: --strip-components=1 + creates: /opt/PyCharm/build.txt remote_src: yes + +- name: Install icon + block: + - file: + path: /usr/local/share/icons + state: directory + - copy: + src: /opt/PyCharm/bin/pycharm.svg + remote_src: true + dest: /usr/local/share/icons/clion.svg + +- name: Create .desktop file + block: + - file: + path: /usr/local/share/applications + state: directory + - copy: + dest: /usr/local/share/applications/pycharm.desktop + src: pycharm.desktop 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 8c183df..8c13a70 100644 --- a/roles/python3/tasks/main_lin.yml +++ b/roles/python3/tasks/main_lin.yml @@ -10,3 +10,7 @@ - ipython3 state: latest +- name: Install generally useful libraries + apt: + name: + - python3-tqdm 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/smlnj/files/ml b/roles/smlnj/files/ml new file mode 100644 index 0000000..31caf23 --- /dev/null +++ b/roles/smlnj/files/ml @@ -0,0 +1,2 @@ +#!/bin/bash +rlwrap sml "$@" diff --git a/roles/smlnj/tasks/main_lin.yml b/roles/smlnj/tasks/main_lin.yml index 7096389..eb46412 100644 --- a/roles/smlnj/tasks/main_lin.yml +++ b/roles/smlnj/tasks/main_lin.yml @@ -10,4 +10,8 @@ apt: name: elpa-sml-mode state: latest - +- name: Create ml wrapper + copy: + src: ml + dest: /usr/local/bin/ml + mode: 775 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 6779104..7022561 100644 --- a/roles/stm32duino/tasks/main_win.yml +++ b/roles/stm32duino/tasks/main_win.yml @@ -10,14 +10,12 @@ - name: Create STM32Duino directory win_file: - path: "D:\\RAVINOR\\STM32Duino" + path: "{{large_prog_dir}}\\RAVINOR\\STM32Duino" state: directory - name: Install preinstalled STM32Duino & Arduino environment - 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? - + 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 index 3077b7e..146eef8 100644 --- a/roles/stm32mems-studio/tasks/main.yml +++ b/roles/stm32mems-studio/tasks/main.yml @@ -2,3 +2,4 @@ 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 index fccdf44..fca4773 100644 --- a/roles/stm32mems-studio/tasks/main_lin.yml +++ b/roles/stm32mems-studio/tasks/main_lin.yml @@ -1,4 +1,3 @@ -- name: Do not install UnicleoGUI +- name: Do not install mems-studio debug: - msg: "Do not install UnicleoGUI on Linux" - + 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 index 8a1ea31..7e51423 100644 --- a/roles/stm32mems-studio/tasks/main_win.yml +++ b/roles/stm32mems-studio/tasks/main_win.yml @@ -6,9 +6,10 @@ - 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: 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: C:\mems-studio-2.1.2.exe + creates: {large_prog_dir}\mems-studio-2.1.2.exe #win_get_url: # follow_redirects: all # http_agent: Wget/1.21.3 @@ -18,13 +19,13 @@ - name: Install MEMS-Studio win_package: - path: C:\mems-studio-2.1.2.exe + path: {large_prog_dir}\mems-studio-2.1.2.exe # path: "{{ download.dest }}" arguments: /Verysilent /AllUsers - name: Remove temporary files win_file: - path: C:\mems-studio-2.1.2.exe + 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/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/vivado/tasks/main_win.yml b/roles/vivado/tasks/main_win.yml index 4640904..7288499 100644 --- a/roles/vivado/tasks/main_win.yml +++ b/roles/vivado/tasks/main_win.yml @@ -1 +1,10 @@ -# TODO +- name: Add firewall rules for Vitis + win_firewall_rule: + name: "Allow inbound traffic for Vitis: {{ item }}" + program: "{{ large_prog_dir }}\\{{ item }}" + action: allow + direction: in + protocol: tcp + loop: + - "xilinx\\2025.1\\vitis\\bin\\unwrapped\\win64.o\\hw_server.exe" + - "xilinx\\2025.1\\vitis\\bin\\unwrapped\\win64.o\\cs_server.exe" diff --git a/roles/vscode/tasks/main_lin.yml b/roles/vscode/tasks/main_lin.yml index 1989fff..9c5eab8 100644 --- a/roles/vscode/tasks/main_lin.yml +++ b/roles/vscode/tasks/main_lin.yml @@ -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 --force "{{ item }}" + command: code --no-sandbox --user-data-dir "/usr/share/code/resources/app" --extensions-dir "/usr/share/code/resources/app/extensions" --install-extension "{{ item }}" --force loop: "{{VSCode_Extensions}}" notify: fix VS code extensions diff --git a/roles/vscode/tasks/vscode_extensions.yml b/roles/vscode/tasks/vscode_extensions.yml index 5c47d87..2aff754 100644 --- a/roles/vscode/tasks/vscode_extensions.yml +++ b/roles/vscode/tasks/vscode_extensions.yml @@ -13,6 +13,8 @@ VSCode_Extensions: - stonebuddha.vscode-better-sml - vscode-icons-team.vscode-icons - vscjava.vscode-java-pack + - shd101wyy.markdown-preview-enhanced + # - oracle.oracle-java - dan-c-underwood.arm # RA-63703 - marus25.cortex-debug # RA-63703 - NateAGeek.memory-viewer # RA-63703 @@ -20,4 +22,6 @@ VSCode_Extensions: - platformio.platformio-ide # ORS-63218 - stmicroelectronics.stm32-vscode-extension # RA-63703 - danielpinto8zz6.c-cpp-compile-run + - danielraggi.sml-environment-2024 + - ocamllabs.ocaml-platform # - vadimcn.vscode-lldb diff --git a/roles/xampp/tasks/main_win.yml b/roles/xampp/tasks/main_win.yml index 44bbc71..43c35ac 100644 --- a/roles/xampp/tasks/main_win.yml +++ b/roles/xampp/tasks/main_win.yml @@ -1,18 +1,19 @@ - name: Install XAMPP win_chocolatey: name: xampp-81 + install_args: "" -- name: Make XAMPP config world writable +- name: Make XAMPP world writable win_acl: user: 'Authenticated Users' - path: "C:\\xampp\\xampp-control.ini" + path: "C:\\xampp\\" type: allow - rights: Write + rights: FullControl - 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/setup.yml b/setup.yml index 9e7cd09..3fdbf55 100644 --- a/setup.yml +++ b/setup.yml @@ -10,12 +10,22 @@ - name: Install software hosts: '*' become: true + debugger: on_failed vars_files: - vars/software_keys.yml + - vars/dirs.yml roles: - - all_classes - # - matplotlib - # - nodejs - # - qcadesigner-e + # - firefox + # - blender + - fri_base + # - vscode + # - smlnj + # - ocaml + # - vivado + # - pulseview + # - 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..8893885 --- /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 + + + + + + NW6C2-QMPVW-D7KKK-3GKT6-VCFB2 + 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> diff --git a/vars/dirs.yml b/vars/dirs.yml new file mode 100644 index 0000000..8c80daa --- /dev/null +++ b/vars/dirs.yml @@ -0,0 +1 @@ +large_prog_dir: "E:" 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