Compare commits

..

66 commits

Author SHA1 Message Date
Gašper Fele-Žorž
0eaf4a5d40 Replace Pelles-C with CLion 2025-10-02 16:35:06 +02:00
Gašper Fele-Žorž
7c4c3ac93e Add CLion 2025-10-02 16:34:43 +02:00
Gašper Fele-Žorž
889083aee0 Add .desktop files, update download links for JetBrains IDEs on Ubuntu 2025-10-02 16:34:13 +02:00
Gašper Fele-Žorž
61e9e01978 Fix dconf so it works on network-mounted homes 2025-10-02 12:20:53 +02:00
Gašper Fele-Žorž
d39dd739ca Fix chromium repo, remove snap 2025-10-02 12:20:10 +02:00
Gašper Fele-Žorž
725737321d Fix broken display settings 2025-10-01 23:58:09 +02:00
Gašper Fele-Žorž
c1ade197c3 Do not try to mount the home of lightdm; update blender, chromium non-snap repo, add wine64 2025-10-01 15:22:29 +02:00
Gašper Fele-Žorž
04c02ecbef Add hide users config for sddm 2025-09-30 13:39:57 +02:00
Gašper Fele-Žorž
cccf0d86d1 Add it-polz public key to authorized keys 2025-09-29 23:15:20 +02:00
Gašper Fele-Žorž
8ca99c1f3a Fix mount options to allow symlinks, pipes in CIFS-mounted homes 2025-09-29 22:41:11 +02:00
02a44e9186 prometheus-exporter: don’t install prometheus push gateway
This is not what it is for.
2025-09-26 09:53:22 +02:00
Gašper Fele-Žorž
7f57513b1c Fix SSH keys 2025-09-25 09:36:39 +02:00
Gašper Fele-Žorž
f1c8801774 Add prometheus exporter 2025-09-25 07:57:53 +02:00
Gašper Fele-Žorž
eb4a2974ad Add firefox policies for Linux, merge them with windows 2025-09-16 15:47:41 +02:00
Gašper Fele-Žorž
78e7df1fb1 Fix pulseview create link task name 2025-09-12 15:45:32 +02:00
Gašper Fele-Žorž
09138174d4 Fix swap on linux+btrfs 2025-09-12 15:43:10 +02:00
Gašper Fele-Žorž
0f8f8486f0 Add ml wrapper for smlnj 2025-09-12 15:42:30 +02:00
Gašper Fele-Žorž
3e7b20423e Fix cryptodome install 2025-09-12 15:41:59 +02:00
Gašper Fele-Žorž
4c69926932 Create PulseView shortcut 2025-09-12 15:35:34 +02:00
Gašper Fele-Žorž
ca58fd58a1 Add firewall rules for Vitis 2025-09-12 15:35:16 +02:00
Gašper Fele-Žorž
6a6dabe4f4 Add opam 2025-09-12 15:35:00 +02:00
Gašper Fele-Žorž
5f34e04926 Fix installation of extensions 2025-09-12 15:33:37 +02:00
Gašper Fele-Žorž
84c21cd863 Add dependencies for KRV 2025-09-12 15:31:55 +02:00
Gašper Fele-Žorž
99c9ae8848 Update dependencies for KRV 2025-09-12 15:30:07 +02:00
Gašper Fele-Žorž
e4ba740edf Add ml wrapper to SML 2025-09-12 15:15:05 +02:00
Gašper Fele-Žorž
e0de1f5493 Add vscode plugins for PPJ, FP 2025-09-12 13:55:22 +02:00
Gašper Fele-Žorž
ab1e0da566 Add join_ad playbook, define large_prog_dir 2025-09-11 13:20:49 +02:00
Gašper Fele-Žorž
674ea7977c Add various *top programs 2025-09-11 13:19:26 +02:00
Gašper Fele-Žorž
14a0096779 Fix Android Studio after testing 2025-09-11 13:18:33 +02:00
Gašper Fele-Žorž
76dff08c65 Change generic Windows key 2025-09-11 13:17:30 +02:00
Gašper Fele-Žorž
5db95e8709 Enable common homes between Windows and Ubuntu 2025-09-11 13:15:49 +02:00
Gašper Fele-Žorž
d03aa86378 Add python3-cryptography 2025-09-10 14:21:31 +02:00
Gašper Fele-Žorž
a0713cd89a Fix XAMPP after testing 2025-09-10 13:34:04 +02:00
Gašper Fele-Žorž
8b2bbbd240 Fix lightdm user display 2025-09-09 10:19:51 +02:00
Gašper Fele-Žorž
9d90dbffbe Allow students to log in without typing the whole domain 2025-09-09 10:00:29 +02:00
Gašper Fele-Žorž
15eb772ba0 Fix mount for C and D 2025-09-07 19:38:23 +02:00
Gašper Fele-Žorž
bdc4fa2fc5 Add ssh keys 2025-09-06 01:02:27 +02:00
Gašper Fele-Žorž
fc01fec18c Fix iverilog role; stil doesn't work 2025-09-05 00:11:16 +02:00
Gašper Fele-Žorž
99a8aa06db Fix / extend README 2025-09-05 00:08:53 +02:00
Gašper Fele-Žorž
9e9d487d57 Disable CUFinder 2025-09-05 00:06:24 +02:00
r.rozmann@jung-electronic.de
529623497c stm32mems-studio added (replaces unicleogui and algobuilder)
added to VIN recipe
2025-09-05 00:05:42 +02:00
RR
d985d8ff84 2025 corrections for ucilnicesmb storage.... 2025-09-05 00:05:39 +02:00
Gašper Fele-Žorž
07f4a73dae Fix name for adding Java bin dir to PATH 2025-09-02 11:37:40 +02:00
Gašper Fele-Žorž
7559b049a2 Fix README.md 2025-09-02 11:28:05 +02:00
Gašper Fele-Žorž
4d3b5f20a7 Fix README.md 2025-09-02 11:25:00 +02:00
Gašper Fele-Žorž
93b01e5d53 Fix / extend README 2025-09-02 11:22:49 +02:00
Gašper Fele-Žorž
0d1e32c626 Fix path according to Marko Poženel 2025-09-02 10:47:06 +02:00
Gašper Fele-Žorž
c15d6f1edf Fix requirements by Ratko Pilipović 2025-09-02 10:47:06 +02:00
79293545d3 Fix README formatting 2025-09-02 09:52:37 +02:00
Gašper Fele-Žorž
c5754dece2 Do not mount cifs volumes for local users; disable debug 2025-09-01 00:21:18 +02:00
Gašper Fele-Žorž
957cd67eb7 Add user homes on CIFS on Linux 2025-08-31 23:36:23 +02:00
Gašper Fele-Žorž
beb1dbb757 Fix Android install on Windows, install to large_prog_dir 2025-08-30 13:10:28 +02:00
Gašper Fele-Žorž
707090192c Fix indentation 2025-08-30 12:45:18 +02:00
Gašper Fele-Žorž
4175f483db Install PowerDesigner to large_prog_dir 2025-08-30 09:21:05 +02:00
Gašper Fele-Žorž
41b392ee1e Honor requests by Luka Fǔrst, apart from shared homes 2025-08-29 15:13:53 +02:00
Gašper Fele-Žorž
8136635a6f Add unattended install files 2025-08-21 00:14:07 +02:00
Gašper Fele-Žorž
782f385a29 Add snapper 2025-08-21 00:13:35 +02:00
Gašper Fele-Žorž
bcb4d836b2 Fix logisim unpack/install 2025-08-21 00:13:20 +02:00
Gašper Fele-Žorž
d0b2a77216 Add new dependencies and perhaps a maintainer for DPS 2025-08-19 18:03:28 +02:00
Gašper Fele-Žorž
eb1e6012bd Add requirements for Podatkovno Rudarjenje 2025-08-19 17:56:27 +02:00
r.rozmann@jung-electronic.de
e1ac068953 stm32mems-studio added (replaces unicleogui and algobuilder)
added to VIN recipe
2025-08-18 15:59:20 +02:00
rozman
90421ef1d1 Changes for 2025, except stm32 2025-08-18 15:59:14 +02:00
rozman
15ea864ddc Changes for 2025, except stm32 2025-08-18 15:56:09 +02:00
Gašper Fele-Žorž
5620a7ebfe Disable CUFinder 2025-08-18 15:51:54 +02:00
RR
e2b92f7a31 refreshing stm32 tools (Cubeide, programmer, monitor) 2025-08-18 15:51:54 +02:00
RR
5954f4e3ba Minor fixes for deprecated and new packages 2025-08-18 15:51:54 +02:00
131 changed files with 1864 additions and 266 deletions

View file

@ -1,5 +1,39 @@
# Using the ansible scripts
Ansible playbooks for deploying classroom computers. Run with something like: Ansible playbooks for deploying classroom computers. Run with something like:
ansible-playbook --user <local admin> -k -K -i inventory.yml setup.py ansible-playbook --user <local admin> -k -K -i inventory.yml setup.py
or, for Apple computers: or, for Apple computers:
ansible-playbook --user <local admin> -k -K -i inventory.yml macsetup.py ansible-playbook --user <local admin> -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).

19
join_ad.yml Normal file
View file

@ -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

View file

@ -1,8 +1,8 @@
- hosts: ucilnice-prototip - hosts: classroom
become_method: sudo become_method: sudo
become: true become: true
vars: vars:
ansible_port: 1001 # ansible_port: 1001
ansible_ssh_extra_args: '-o ForwardX11=yes' ansible_ssh_extra_args: '-o ForwardX11=yes'
# ansible_become_pass: '{{ lookup("env", "ANSIBLE_PASSWORD") }}' # ansible_become_pass: '{{ lookup("env", "ANSIBLE_PASSWORD") }}'
# ansible_password: '{{ lookup("env", "ANSIBLE_PASSWORD") }}' # ansible_password: '{{ lookup("env", "ANSIBLE_PASSWORD") }}'
@ -12,7 +12,8 @@
- vars/credentials.yml - vars/credentials.yml
- vars/software_keys.yml - vars/software_keys.yml
roles: roles:
# - orange # - nodejs
# - qcadesigner-e
- all_classes - all_classes
# - fri_base # - fri_base
# - powerdesigner # - powerdesigner

View file

@ -1,5 +1,8 @@
# Digitalno načrtovanje # Digitalno načrtovanje
# Nejc.Ilc@fri.uni-lj.si # ratko.pilipovic@fri.uni-lj.si
# Windows, Vivado 2022.1 # Windows, Vivado 2022.1
dependencies: dependencies:
- role: vivado - role: vivado
- role: iverilog
- role: cocotb
- role: surfer-project

View file

@ -1,8 +1,11 @@
# Digitalno procesiranje signalov # Digitalno procesiranje signalov
# Aleks.Huc@fri.uni-lj.si # Aleks.Huc@fri.uni-lj.si
# metod.celestina@dewesoft.si
# Windows, GNU/Linux, Matlab, wfdb, Octave, Audacity # Windows, GNU/Linux, Matlab, wfdb, Octave, Audacity
dependencies: dependencies:
- role: matlab - role: matlab
- role: wfdb - role: wfdb
- role: octave - role: octave
- role: audacity - role: audacity
- role: numpy
- role: matplotlib

View file

@ -7,3 +7,6 @@
dependencies: dependencies:
- role: jupyter - role: jupyter
- role: openssl - role: openssl
- role: cryptodome
- role: pwntools
- role: python3

View file

@ -1,10 +1,10 @@
# Načrtovanje digitalnih naprav # Načrtovanje digitalnih naprav
# Miran.Koprivec@fri.uni-lj.si, 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
# Načrtovanje digitalnih naprav
# Miha.Moskon@fri.uni-lj.si
# Windows, Vivado 2022.1 # Windows, Vivado 2022.1
dependencies: dependencies:
- role: putty - role: putty
- role: vivado - role: vivado
- role: cp2102_driver - role: cp2102_driver
- role: cocotb
- role: iverilog
- role: surfer-project

View file

@ -3,7 +3,7 @@
# Windows, Logisim, Logisim Evolution, RAVINOR, CubeIDE + Tools, VSCode + ST plugin, Putty # Windows, Logisim, Logisim Evolution, RAVINOR, CubeIDE + Tools, VSCode + ST plugin, Putty
dependencies: dependencies:
- role: logisim - role: logisim
- role: stm32cube # - role: stm32cube
- role: vscode - role: vscode
- role: putty - role: putty
- role: stm32duino - role: stm32duino

View file

@ -6,3 +6,4 @@ dependencies:
- role: gedit - role: gedit
- role: mono - role: mono
- role: vscode - role: vscode
- role: notepad++

View file

@ -2,4 +2,4 @@
# Tomaz.Dobravec@fri.uni-lj.si # Tomaz.Dobravec@fri.uni-lj.si
# Windows, Pelles C # Windows, Pelles C
dependencies: dependencies:
- role: pelles-c - role: clion

View file

@ -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

View file

@ -2,7 +2,7 @@
# Ziga.Pusnik@fri.uni-lj.si, Robert.Rozman@fri.uni-lj.si # Ziga.Pusnik@fri.uni-lj.si, Robert.Rozman@fri.uni-lj.si
# Windows, CubeIDE + tools, STMDuino, VSCode, WinIdea 9.21 + GCC + QEMU, Visual2 # Windows, CubeIDE + tools, STMDuino, VSCode, WinIdea 9.21 + GCC + QEMU, Visual2
dependencies: dependencies:
- role: stm32cube # (CubeMonitor sem vzel samo exe) # - role: stm32cube # (CubeMonitor sem vzel samo exe)
- role: stm32duino - role: stm32duino
- role: vscode - role: vscode
- role: putty - role: putty

View file

@ -2,7 +2,7 @@
# Robert.Rozman@fri.uni-lj.si # Robert.Rozman@fri.uni-lj.si
# Windows, CubeIDE + Tools, STMDuino, VSCode, LTSpice, PulseView,Putty, STM32 Algobuilder & Unicleo GUI # Windows, CubeIDE + Tools, STMDuino, VSCode, LTSpice, PulseView,Putty, STM32 Algobuilder & Unicleo GUI
dependencies: dependencies:
- role: stm32cube #- role: stm32cube
- role: stm32duino - role: stm32duino
- role: vscode - role: vscode
- role: ltspice - role: ltspice

View file

@ -14,4 +14,5 @@ dependencies:
- role: jdk - role: jdk
- role: jupyter - role: jupyter
- role: pycharm - role: pycharm
- role: cryptography
- role: flask - role: flask

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<pam_mount>
<!-- Example using CIFS -->
<debug enable="0" />
<volume
fstype="cifs"
server="ucilnicesmb.fri1.uni-lj.si"
path="profiles/%(DOMAIN_USER).%(DOMAIN_NAME)"
mountpoint="~/"
options="sec=krb5i,cruid=%(USERUID),nobrl,sfu,mfsymlinks"
>
<not>
<or>
<user>local_admin</user>
<user>root</user>
<user>lightdm</user>
<sgrp>users</sgrp>
</or>
</not>
</volume>
<!-- <volume
fstype="cifs"
server="ucilnicesmb.fri1.uni-lj.si"
path="profiles/%(DOMAIN_USER).V6"
mountpoint="~/win_profile"
options="sec=krb5i,cruid=%(USERUID)"
>
<not>
<or>
<user>local_admin</user>
<user>root</user>
<sgrp>users</sgrp>
</or>
</not>
</volume> -->
</pam_mount>

View file

@ -1,25 +1,39 @@
- name: Enable create homedir on login - name: Install required packages
command: pam-auth-update --enable mkhomedir apt:
become: true 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 - name: Check whether we already joined
command: /bin/bash -c "/usr/sbin/realm list" command: /bin/bash -c "/usr/sbin/realm list"
register: realm_list_results 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 - name: Join using realmd
expect: 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: responses:
(?i)Password: "{{ad_join_password}}" (?i)Password: "{{ad_join_password}}"
ignore_errors: yes ignore_errors: yes
@ -32,3 +46,20 @@
owner: root owner: root
mode: 0600 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

View file

@ -1,18 +1,22 @@
- name: Set OU - name: Set OU
set_fact: set_fact:
ou_path: "OU={{locations[0]}},OU=Ucilnice,DC=fri1,DC=uni-lj,DC=si" ou_path: "OU={{locations[0]}},OU=Ucilnice,DC=fri1,DC=uni-lj,DC=si"
- name: "Rename" - name: "Rename"
# Racunalnik najprej preimenujmo, da ne bosta v domeni obenem 2 z istim imenom # Racunalnik najprej preimenujmo, da ne bosta v domeni obenem 2 z istim imenom
win_hostname: win_hostname:
name: "{{inventory_hostname}}" name: "{{inventory_hostname}}"
register: hostname_res register: hostname_res
- name: "Reboot after hostname change" - name: "Reboot after hostname change"
win_reboot: win_reboot:
when: hostname_res.reboot_required when: hostname_res.reboot_required
- name: Stop Windows Update Service - name: Stop Windows Update Service
win_service: win_service:
name: wuauserv name: wuauserv
state: stopped state: stopped
- name: Clear WSUS ID from registry - name: Clear WSUS ID from registry
win_regedit: win_regedit:
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate
@ -24,25 +28,40 @@
- AccountDomainSid - AccountDomainSid
- SusClientId - SusClientId
- SusClientIDValidation - SusClientIDValidation
- name: Start Windows Update Service - name: Start Windows Update Service
win_service: win_service:
name: wuauserv name: wuauserv
state: started state: started
- name: "Join domain" - name: "Join domain"
win_domain_membership: win_domain_membership:
domain_admin_user: "{{adjoin_user}}" domain_admin_user: "{{ad_join_user}}"
domain_admin_password: "{{adjoin_password}}" domain_admin_password: "{{ad_join_password}}"
dns_domain_name: "{{domain_name}}" dns_domain_name: "{{domain_name}}"
domain_ou_path: "{{ou_path}}" domain_ou_path: "{{ou_path}}"
hostname: "{{inventory_hostname}}" hostname: "{{inventory_hostname}}"
state: domain state: domain
register: domain_state register: domain_state
- name: Reset WSUS authorization - name: Reset WSUS authorization
win_command: wuauclt.exe /resetauthorization /detectnow win_command: wuauclt.exe /resetauthorization /detectnow
ignore_errors: yes ignore_errors: yes
- name: Update windows - name: Update windows
win_command: wuauclt.exe /updatenow win_command: wuauclt.exe /updatenow
ignore_errors: yes 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 - name: Reboot
win_command: "shutdown /r" win_command: "shutdown /r"
when: domain_state.reboot_required when: domain_state.reboot_required

View file

@ -3,6 +3,7 @@ config_file_version = 2
domains = fri1.uni-lj.si domains = fri1.uni-lj.si
enable_files_domain = False enable_files_domain = False
services = nss, pam services = nss, pam
default_domain_suffix = student.uni-lj.si
[nss] [nss]
filtered_groups = root filtered_groups = root
@ -27,5 +28,7 @@ krb5_store_password_if_offline = True
default_shell = /bin/bash default_shell = /bin/bash
ldap_id_mapping = True ldap_id_mapping = True
use_fully_qualified_names = True use_fully_qualified_names = True
full_name_format = %1$s@%3$s
fallback_homedir = /home/%u@%d fallback_homedir = /home/%u@%d
access_provider = ad access_provider = ad
krb5_ccname_template = FILE:%d/krb5cc_%U

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install altair
apt:
name: python3-altair
state: latest

View file

@ -0,0 +1,2 @@
- name: Install altair
win_command: pip install altair

View file

@ -1,27 +1,80 @@
- name: Set Android Studio version - name: Set Android Studio version
set_fact: set_fact:
sdk_path: C:\android-sdk studio_path: "{{ large_prog_dir }}\\android-studio"
studio_version: "2025.1.2.11" sdk_path: "{{ large_prog_dir }}\\android-sdk"
tools_version: "latest" 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 - name: Check Android Studio tools
win_stat: win_stat:
path: "{{ sdk_path }}\\platform-tools\\adb.exe" path: "{{ tools_path }}\\bin\\sdkmanager.bat"
register: tools register: tools
- when: not tools.stat.exists - when: not tools.stat.exists
block: block:
- name: Download Android Studio tools - name: Download Android Studio tools
win_get_url: win_get_url:
# url: "https://dl.google.com/android/repository/commandlinetools-win-{{ tools_version }}.zip" 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" # url: "https://dl.google.com/android/repository/platform-tools-{{ tools_version }}-windows.zip"
dest: C:\ dest: "{{ studio_path }}"
- name: Extract Android Studio tools - name: Extract Android Studio tools
win_unzip: win_unzip:
src: "C:\\platform-tools-{{ tools_version }}-windows.zip" # src: "{{ large_prog_dir }}\\platform-tools-{{ tools_version }}-windows.zip"
dest: "{{ sdk_path }}\\" src: "{{ studio_path}}\\commandlinetools-win-{{ tools_version }}.zip"
dest: "{{ studio_path }}\\cmdline-tools\\"
delete_archive: yes 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 # - name: Accept Android SDK licenses
# win_shell: sh -c "yes | /c/android-sdk/cmdline-tools/cmdline-tools/bin/sdkmanager.bat --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 - name: Include Android SDK packages
include_vars: androidsdk_packages.yml include_vars: androidsdk_packages.yml
#- name: Install Android SDK - name: Install Android SDK packages
# win_shell: | win_shell: |
# {{ sdk_path }}\\cmdline-tools\\cmdline-tools\\bin\\sdkmanager --install "{{ item }}" {{ tools_path }}\bin\sdkmanager.bat --install "{{ item }}"
# loop: "{{ AndroidSDK_packages }}" loop: "{{ AndroidSDK_packages }}"
# {{ sdk_path }}\\cmdline-tools\\cmdline-tools\\bin\\sdkmanager --install "{{ AndroidSDK_packages | join(' ') }}" # {{ 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" # {{ 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 #- name: Install Android Studio
win_package: # win_package:
path: "https://redirector.gvt1.com/edgedl/android/studio/install/{{ studio_version }}/android-studio-{{ studio_version }}-windows.exe" # path: "https://redirector.gvt1.com/edgedl/android/studio/install/{{ studio_version }}/android-studio-{{ studio_version }}-windows.exe"
arguments: /S /AllUsers # arguments: /S /AllUsers
expected_return_code: [0, 1223, 3010] # expected_return_code: [0, 1223, 3010]
creates_path: "%ProgramFiles%\\Android\\Android Studio\\bin\\studio64.exe" # 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: Check HAXM install status #- name: Check HAXM install status
# win_stat: # win_stat:
# path: "%ProgramFiles%\\Intel\\HAXM" # path: "%ProgramFiles%\\Intel\\HAXM"

View file

@ -8,8 +8,9 @@
- name: Install Arduino-cli - name: Install Arduino-cli
win_package: win_package:
# path: https://downloads.arduino.cc/arduino-ide/arduino-ide_2.0.0_Windows_64bit.exe # 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 path: https://github.com/arduino/arduino-cli/releases/download/v1.3.0/arduino-cli_1.3.0_Windows_64bit.msi
arguments: /S /AllUsers # path: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_64bit.zip
# arguments: /S /AllUsers
# creates_path: "%ProgramFiles%\\Arduino IDE\\Arduino IDE.exe" # creates_path: "%ProgramFiles%\\Arduino IDE\\Arduino IDE.exe"

View file

@ -1,4 +1,32 @@
- name: Install blender #- name: Add blender PPA
apt: # command: add-apt-repository -y ppa:savoury1/blender
name: blender
state: latest #- 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

View file

@ -1,3 +1,3 @@
- name: Install Blender - name: Install Blender
win_package: 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

View file

@ -8,6 +8,10 @@
# state: present # state: present
# update_cache: True # update_cache: True
# validate_certs: False # validate_certs: False
- name: Remove Chromium snap
community.general.snap:
name: chromium
state: absent
- name: Install Chromium instead of Chrome - name: Install Chromium instead of Chrome
apt: apt:

View file

@ -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

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -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

View file

@ -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"

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install Cocotb
pip:
executable: pipx
name: cocotb[bus]

View file

@ -0,0 +1,2 @@
- name: Install cocoTB
win_command: pip install cocotb[bus]

View file

@ -2,3 +2,5 @@
win_chocolatey: win_chocolatey:
ignore_checksums: true ignore_checksums: true
name: cp210x-vcp-drivers-win10 name: cp210x-vcp-drivers-win10
#TODO remove ignore_errors once the package is repaired/updated
ignore_errors: true

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,5 @@
- name: Install python-pycryptodome
apt:
name:
- python3-pycryptodome
state: latest

View file

@ -0,0 +1,2 @@
- name: Install python3-pycryptodome
win_command: pip install pycryptodome

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,5 @@
- name: Install python-cryptography
apt:
name:
- python3-cryptography
state: latest

View file

@ -0,0 +1,2 @@
- name: Install python3-cryptography
win_command: pip install cryptography

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install datasets
pip:
executable: pipx
name: datasets

View file

@ -0,0 +1,2 @@
- name: Install datasets
win_command: pip install datasets

View file

@ -12,4 +12,4 @@
win_lineinfile: win_lineinfile:
path: "%ProgramFiles%\\Eclipse {{ target_version }}\\eclipse\\eclipse.ini" path: "%ProgramFiles%\\Eclipse {{ target_version }}\\eclipse\\eclipse.ini"
regexp: "osgi.instance.area.default" regexp: "osgi.instance.area.default"
line: "-Dosgi.instance.area.default=H:/Documents/eclipse-workspace" line: "-Dosgi.instance.area.default=D:/Documents/eclipse-workspace"

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install evaluate
pip:
executable: pipx
name: evaluate

View file

@ -0,0 +1,2 @@
- name: Install evaluate
win_command: pip install evaluate

View file

@ -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
}
}
}

View file

@ -31,3 +31,13 @@
- firefox - firefox
state: latest state: latest
allow_downgrade: True 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

View file

@ -8,19 +8,4 @@
- name: Set Firefox policies - name: Set Firefox policies
copy: copy:
dest: C:\Program Files\Mozilla Firefox\distribution\policies.json dest: C:\Program Files\Mozilla Firefox\distribution\policies.json
content: | src: policies.json
{
"policies": {
"DisableAppUpdate": true,
"DisableSystemAddonUpdate": true,
"DisableTelemetry": true,
"UserMessaging": {
"WhatsNew": false,
"ExtensionRecommendations": false,
"FeatureRecommendations": false,
"UrlbarInterventions": false,
"SkipOnboarding": true,
"MoreFromMozilla": false
}
}
}

View file

@ -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

View file

@ -0,0 +1,4 @@
[Users]
MinimumUid=999
MaximumUid=999
RememberLastUser=false

View file

@ -0,0 +1 @@
service-db:keyfile/user

View file

@ -9,3 +9,4 @@ dependencies:
- role: sumatrapdf - role: sumatrapdf
- role: vlc - role: vlc
- role: wget - role: wget
- role: prometheus-exporter

View file

@ -1,6 +1,55 @@
- name: Enable multiarch - name: Enable multiarch
command: dpkg --add-architecture i386 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 - name: Install generally useful packages
apt: apt:
name: name:
@ -13,7 +62,6 @@
- kwrite - kwrite
- kate - kate
- krita - krita
- blender
- inkscape - inkscape
- pcmanfm-qt - pcmanfm-qt
- qutebrowser - qutebrowser
@ -24,9 +72,13 @@
- qemu-utils - qemu-utils
- virt-manager - virt-manager
- wine - wine
- wine64
- wine32:i386 - wine32:i386
- wine-binfmt - wine-binfmt
- dosbox - dosbox
- htop
- btop
- iotop
# - webext-ublock-origin-chromium # - webext-ublock-origin-chromium
# - webext-ublock-origin-firefox # - webext-ublock-origin-firefox
- nethack-console - nethack-console
@ -49,8 +101,11 @@
- neovim-qt - neovim-qt
- binwalk - binwalk
- iotop - iotop
- evince
- okular
- htop - htop
- jdupes - jdupes
- snapper
state: latest state: latest
update_cache: yes update_cache: yes
@ -59,8 +114,33 @@
name: name:
- xfce4-screensaver - xfce4-screensaver
- xscreensaver - xscreensaver
- thunderbird
- kmail
state: absent 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 - name: Set up additional groups for students
vars: vars:
additional_groups: additional_groups:
@ -100,7 +180,7 @@
mount: mount:
boot: true boot: true
fstype: ntfs-3g fstype: ntfs-3g
src: UUID=A09E30889E30594C src: "PARTLABEL=Basic\\040data\\040partition"
path: /mnt/C path: /mnt/C
state: mounted state: mounted
opts: defaults,nofail opts: defaults,nofail
@ -109,7 +189,7 @@
mount: mount:
boot: true boot: true
fstype: ntfs-3g fstype: ntfs-3g
src: "LABEL=D:" src: "PARTLABEL=D:"
path: /mnt/D path: /mnt/D
state: mounted state: mounted
opts: defaults,nofail opts: defaults,nofail
@ -144,3 +224,42 @@
copy: copy:
dest: /etc/udev/rules.d/ dest: /etc/udev/rules.d/
src: 99-wakeonlan.rules 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

View file

@ -36,5 +36,15 @@
allow_clobber: true allow_clobber: true
state: present 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: turn on GPO to allow guest SMB logins
# TODO: open firewall for Samba # TODO: open firewall for Samba

View file

@ -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

View file

@ -6,7 +6,27 @@
state: directory state: directory
- name: Download and unpack JetBrains IDEA - name: Download and unpack JetBrains IDEA
unarchive: 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 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 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

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install Icarus
apt:
name: iverilog
state: latest

View file

@ -0,0 +1,5 @@
- name: Install Icarus Verilog
win_chocolatey:
name: iverilog
version: '11.0'
state: present

View file

@ -1,6 +1,11 @@
- name: Install OpenJDK 21 - name: Install latest OpenJDK (25)
apt: apt:
name: openjdk-21-jdk name: openjdk-25-jdk
state: latest
- name: Install latest Java docs
apt:
name: openjdk-25-doc
state: latest state: latest
- name: Install OpenJDK 17 - name: Install OpenJDK 17

View file

@ -28,6 +28,13 @@
state: present state: present
scope: machine 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 - name: Disable Java updates
win_regedit: win_regedit:
path: HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy path: HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy

View file

@ -11,6 +11,10 @@
dest: /opt/logisim dest: /opt/logisim
remote_src: yes remote_src: yes
creates: /opt/logisim/META-INF/MANIFEST.MF 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 - name: Download and unpack Logisim - Evolution
unarchive: unarchive:
src: https://github.com/logisim-evolution/logisim-evolution/releases/download/v3.9.0/logisim-evolution-3.9.0-all.jar src: https://github.com/logisim-evolution/logisim-evolution/releases/download/v3.9.0/logisim-evolution-3.9.0-all.jar

View file

@ -2,7 +2,7 @@
set_fact: set_fact:
target_version: "R2025a_Update_1" target_version: "R2025a_Update_1"
license_path: \\ucilnicesmb.fri1.uni-lj.si\ucilnice_d\install\matlab\network.lic 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 - name: Set ISO path
set_fact: set_fact:

View file

@ -1,4 +1,11 @@
- name: Install maptplotlib - name: Install matplotlib
apt: apt:
name: matplotlib name:
state: latest - python3-matplotlib
- python3-matplotlib-inline
- python3-matplotlib-venn
- python3-mpl-animators
- python3-mpl-scatter-density
- python3-mplcursors
- python3-mplexporter
state: latest

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install mlxtend
pip:
executable: pipx
name: mlxtend

View file

@ -0,0 +1,2 @@
- name: Install pandas
win_command: pip install mlxtend

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install networkx
apt:
name: python3-networkx
state: latest

View file

@ -0,0 +1,2 @@
- name: Install networkx
win_command: pip install networkx

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,5 @@
- name: Install numpy
apt:
name:
- python3-numpy
state: latest

View file

@ -0,0 +1,2 @@
- name: Install numpy
win_command: pip install numpy

View file

@ -2,3 +2,14 @@
apt: apt:
name: ocaml name: ocaml
state: latest 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

View file

@ -3,7 +3,7 @@
- name: Set OMNet++ version - name: Set OMNet++ version
set_fact: set_fact:
target_version: "6.2.0" target_version: "6.2.0"
target_dir: "C:\\OMNeT++" target_dir: "{{large_prog_dir}}\\OMNeT++"
- name: Check OMNet++ install status - name: Check OMNet++ install status
win_stat: win_stat:
@ -15,17 +15,23 @@
- name: Download OMNet++ - name: Download OMNet++
win_get_url: win_get_url:
url: "https://github.com/omnetpp/omnetpp/releases/download/omnetpp-{{ target_version }}/omnetpp-{{ target_version }}-windows-x86_64.7z" 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 register: download
- name: Unzip OMNet++ - name: Unzip OMNet++
win_unzip: win_unzip:
src: "{{ download.dest }}" src: "{{ download.dest }}"
dest: C:\ dest: "{{ large_prog_dir }}"
delete_archive: yes delete_archive: yes
- name: Move OMNet++ to final location - 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 - name: Create OMNet++ compile script
win_copy: win_copy:
@ -40,7 +46,7 @@
line: call "%HOME%\\tools\\win32.x86_64\\msys2_shell.cmd" -mingw64 -c "./configure && make -j4" & exit line: call "%HOME%\\tools\\win32.x86_64\\msys2_shell.cmd" -mingw64 -c "./configure && make -j4" & exit
- name: Compile OMNet++ - 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 - name: Copy OMNet++ shortcut
win_copy: win_copy:

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install plotly
apt:
name: python3-plotly
state: latest

View file

@ -0,0 +1,2 @@
- name: Install plotly
win_command: pip install plotly

View file

@ -1,9 +1,13 @@
# The installer does not work from powershell in silent mode. # 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 - name: Install PowerDesigner
win_shell: | 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: args:
executable: cmd executable: cmd

View file

@ -3,37 +3,37 @@ Version=v7.00
File=Response File File=Response File
[File Transfer] [File Transfer]
OverwrittenReadOnly=NoToAll OverwrittenReadOnly=NoToAll
[{{ powerdesigner_key }}-DlgOrder] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-DlgOrder]
Dlg0={{ powerdesigner_key }}-SdWelcome-0 Dlg0={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdWelcome-0
Count=10 Count=10
Dlg1={{ powerdesigner_key }}-SybSelectInstallMode-0 Dlg1={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybSelectInstallMode-0
Dlg2={{ powerdesigner_key }}-SybFlexLM-0 Dlg2={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybFlexLM-0
Dlg3={{ powerdesigner_key }}-SybSelectPackage-0 Dlg3={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybSelectPackage-0
Dlg4={{ powerdesigner_key }}-Sybase License-0 Dlg4={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-Sybase License-0
Dlg5={{ powerdesigner_key }}-SdAskDestPath-0 Dlg5={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdAskDestPath-0
Dlg6={{ powerdesigner_key }}-SdComponentTree-0 Dlg6={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdComponentTree-0
Dlg7={{ powerdesigner_key }}-Graphic Select Folder-0 Dlg7={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-Graphic Select Folder-0
Dlg8={{ powerdesigner_key }}-SdStartCopy-0 Dlg8={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdStartCopy-0
Dlg9={{ powerdesigner_key }}-SdFinish-0 Dlg9={DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdFinish-0
[{{ powerdesigner_key }}-SdWelcome-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdWelcome-0]
Result=1 Result=1
[{{ powerdesigner_key }}-SybSelectInstallMode-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybSelectInstallMode-0]
Mode=3 Mode=3
Result=1 Result=1
[{{ powerdesigner_key }}-SybFlexLM-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybFlexLM-0]
LicenseServer=todo.fri1.uni-lj.si LicenseServer=todo.fri.uni-lj.si
PortNumber=27000 PortNumber=27000
Result=1 Result=1
[{{ powerdesigner_key }}-SybSelectPackage-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SybSelectPackage-0]
Package=Studio Enterprise Package=Studio Enterprise
Result=1 Result=1
[{{ powerdesigner_key }}-Sybase License-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-Sybase License-0]
Sybase_License=accept Sybase_License=accept
[{{ powerdesigner_key }}-SdAskDestPath-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdAskDestPath-0]
szDir=C:\Program Files (x86)\Sybase\PowerDesigner 12 szDir={{ large_prog_dir }}\PowerDesigner 12
Result=1 Result=1
[{{ powerdesigner_key }}-SdComponentTree-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdComponentTree-0]
szDir=C:\Program Files (x86)\Sybase\PowerDesigner 12 szDir={{ large_prog_dir }}\PowerDesigner 12
CR\FRM-type=string CR\FRM-type=string
CR\FRM-count=2 CR\FRM-count=2
CR\FRM-0=CR\FRM\FRM_Xem CR\FRM-0=CR\FRM\FRM_Xem
@ -108,11 +108,6 @@ PDM-1=PDM\PDM_Examples
PDM-2=PDM\PDM_Report PDM-2=PDM\PDM_Report
PDM-3=PDM\PDM_Tools PDM-3=PDM\PDM_Tools
PDM-4=PDM\PDM_Addins 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-type=string
XSM-count=4 XSM-count=4
XSM-0=XSM\XSM_License XSM-0=XSM\XSM_License
@ -135,6 +130,19 @@ PDF-5=PDF\PDF_PDM
PDF-6=PDF\PDF_RQM PDF-6=PDF\PDF_RQM
PDF-7=PDF\PDF_XSM PDF-7=PDF\PDF_XSM
PDF-8=PDF\PDF_RPY 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-type=string
Component-count=10 Component-count=10
Component-0=CR Component-0=CR
@ -143,15 +151,15 @@ Component-2=CDM
Component-3=ILM Component-3=ILM
Component-4=OOM Component-4=OOM
Component-5=PDM Component-5=PDM
Component-6=RQM Component-6=XSM
Component-7=XSM Component-7=RPY
Component-8=RPY Component-8=PDF
Component-9=PDF Component-9=VIDEO
Result=1 Result=1
[{{ powerdesigner_key }}-Graphic Select Folder-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-Graphic Select Folder-0]
szFolder=Sybase\PowerDesigner 12 szFolder=Sybase\PowerDesigner 12
Result=1 Result=1
[{{ powerdesigner_key }}-SdStartCopy-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdStartCopy-0]
Keep_Settings=0 Keep_Settings=0
Result=1 Result=1
[Application] [Application]
@ -159,7 +167,7 @@ Name=Sybase PowerDesigner 12.5
Version=12.5.2169 Version=12.5.2169
Company=Sybase Company=Sybase
Lang=0009 Lang=0009
[{{ powerdesigner_key }}-SdFinish-0] [{DA53ABD7-6592-45DA-A6DD-287A48F74D37}-SdFinish-0]
Result=1 Result=1
bOpt1=0 bOpt1=0
bOpt2=0 bOpt2=0

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,5 @@
- name: Install prometheus-exporter
apt:
name:
- prometheus-node-exporter
state: latest

View file

@ -0,0 +1,3 @@
- name: Install prometheus exporter
win_chocolatey:
name: prometheus-windows-exporter.install

View file

@ -10,6 +10,10 @@
path: "{{ download.dest }}" path: "{{ download.dest }}"
arguments: /S /Verysilent /AllUsers 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 #- name: Remove temporary files
# win_file: # win_file:
# path: "{{ download.dest }}" # path: "{{ download.dest }}"

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,5 @@
- name: Install python-pwntools
apt:
name:
- python3-pwntools
state: latest

View file

@ -0,0 +1,2 @@
- name: Install python3-pwntools
win_command: pip install pwntools

View file

@ -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

View file

@ -6,7 +6,27 @@
state: directory state: directory
- name: Download and unpack JetBrains PyCharm - name: Download and unpack JetBrains PyCharm
unarchive: 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 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 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

View file

@ -8,4 +8,4 @@
state: upgrade state: upgrade
version: "{{ target_version }}" version: "{{ target_version }}"
# TODO set default project directory to H:\something # TODO set default project directory to {{large_prog_dir}}\something

View file

@ -10,3 +10,7 @@
- ipython3 - ipython3
state: latest state: latest
- name: Install generally useful libraries
apt:
name:
- python3-tqdm

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,6 @@
- name: Install scikit
apt:
name:
- python3-sklearn
- python3-sklearn-pandas
state: latest

View file

@ -0,0 +1,2 @@
- name: Install scikit
win_command: pip install scikit-learn

View file

@ -0,0 +1,4 @@
- import_tasks: main_win.yml
when: ansible_os_family == 'Windows'
- import_tasks: main_lin.yml
when: ansible_os_family == 'Debian'

View file

@ -0,0 +1,4 @@
- name: Install seaborn
apt:
name: python3-seaborn
state: latest

View file

@ -0,0 +1,2 @@
- name: Install seaborn
win_command: pip install seaborn

View file

@ -5,7 +5,7 @@
- name: Set SiFive Studio install location - name: Set SiFive Studio install location
set_fact: 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 - 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 }}" 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: args:
@ -14,12 +14,12 @@
- name: Unzip SiFive Studio - name: Unzip SiFive Studio
win_unzip: win_unzip:
src: "{{ download_filedest }}" src: "{{ download_filedest }}"
dest: C:\SiFive\ dest: "{{ large_prog_dir }}\\SiFive\\"
creates: C:\SiFive\plugins creates: "{{ large_prog_dir }}\\SiFive\\plugins"
delete_archive: yes delete_archive: yes
- name: Create desktop shortcut - name: Create desktop shortcut
win_shortcut: win_shortcut:
description: "SiFive Freedom Studio" description: "SiFive Freedom Studio"
src: C:\SiFive\FreedomStudio.exe src: "{{ large_prog_dir }}\\SiFive\\FreedomStudio.exe"
dest: '%public%\Desktop\SiFive.lnk' dest: '%public%\Desktop\SiFive.lnk'

Some files were not shown because too many files have changed in this diff Show more