Showing preview only (1,133K chars total). Download the full file or copy to clipboard to get everything.
Repository: danmons/retronas
Branch: main
Commit: 45cdaaa9e802
Files: 535
Total size: 998.8 KB
Directory structure:
gitextract_oklxbxnr/
├── .github/
│ └── ISSUE_TEMPLATE/
│ ├── bug-report.yml
│ └── config.yml
├── .gitignore
├── LICENSE
├── README.md
├── SECURITY
├── ansible/
│ ├── ansible.cfg
│ ├── hosts.yml
│ ├── install_3ds_qr_codes.yml
│ ├── install_adtpro.yml
│ ├── install_affstools.yml
│ ├── install_amitools.yml
│ ├── install_analoguepocket_cifs.yml
│ ├── install_apfs-fuse.yml
│ ├── install_aria2.yml
│ ├── install_assembly64.yml
│ ├── install_atarist-sidecart.yml
│ ├── install_batocera_cifs.yml
│ ├── install_cockpit-retronas.yml
│ ├── install_cockpit.yml
│ ├── install_cue2pops.yml
│ ├── install_curlftpfs.yml
│ ├── install_deluge.yml
│ ├── install_dhcpcd.yml
│ ├── install_disable-laptop-lid.yml
│ ├── install_disc-image-creator.yml
│ ├── install_dnsmasq-retro.yml
│ ├── install_dnsmasq.yml
│ ├── install_doc.yml
│ ├── install_dreampi.yml
│ ├── install_dvdauth.yml
│ ├── install_eccedc.yml
│ ├── install_emudeck_cifs.yml
│ ├── install_emuelec_cifs.yml
│ ├── install_etherdfs.yml
│ ├── install_ethflopd.yml
│ ├── install_extract-xiso.yml
│ ├── install_extradirs.yml
│ ├── install_far2l.yml
│ ├── install_fenrir-ode-webserver.yml
│ ├── install_filesystems.yml
│ ├── install_firewalld-zones.yml
│ ├── install_firewalld.yml
│ ├── install_flippydrive.yml
│ ├── install_freestation.yml
│ ├── install_fsp.yml
│ ├── install_gogrepo.yml
│ ├── install_hb-store-cdn.yml
│ ├── install_hdldump.yml
│ ├── install_hdparm.yml
│ ├── install_hfsutils.yml
│ ├── install_hostapd.yml
│ ├── install_kermit.yml
│ ├── install_lighttpd.yml
│ ├── install_linux-dexdrive.yml
│ ├── install_linux-gadgets.yml
│ ├── install_litch.yml
│ ├── install_lynx.yml
│ ├── install_macproxy_classic.yml
│ ├── install_mc.yml
│ ├── install_megatools.yml
│ ├── install_minicom.yml
│ ├── install_mister-organize.yml
│ ├── install_mister_cifs.yml
│ ├── install_mtcp-netdrive.yml
│ ├── install_mysticbbs.yml
│ ├── install_nabu.yml
│ ├── install_nbd-client.yml
│ ├── install_netatalk2.yml
│ ├── install_netatalk2x.yml
│ ├── install_netatalk3.yml
│ ├── install_netatalk3_source.yml
│ ├── install_netatalk4.yml
│ ├── install_netlink.yml
│ ├── install_netmount.yml
│ ├── install_network-presets-ethernet-dhcp.yml
│ ├── install_network-presets-standalone.yml
│ ├── install_network-presets-zoned.yml
│ ├── install_networkmanager.yml
│ ├── install_nfs.yml
│ ├── install_nginx.yml
│ ├── install_ntp.yml
│ ├── install_open-iscsi.yml
│ ├── install_openssh.yml
│ ├── install_pandoc.yml
│ ├── install_pfsshell.yml
│ ├── install_pi1541.yml
│ ├── install_piscsi.yml
│ ├── install_proftpd.yml
│ ├── install_ps2_openps2loader.yml
│ ├── install_ps2_udpbd.yml
│ ├── install_ps3netsrv.yml
│ ├── install_pygopherd.yml
│ ├── install_rclone.yml
│ ├── install_recalbox_cifs.yml
│ ├── install_redumper.yml
│ ├── install_retroaimserver.yml
│ ├── install_retroarch_cifs.yml
│ ├── install_retrodeck_cifs.yml
│ ├── install_romdir.yml
│ ├── install_romimport.yml
│ ├── install_romm_cifs.yml
│ ├── install_sabretools.yml
│ ├── install_samba.yml
│ ├── install_seaweedfs.yml
│ ├── install_sit.yml
│ ├── install_smbmounter.yml
│ ├── install_sslcert.yml
│ ├── install_syncthing.yml
│ ├── install_tcpser.yml
│ ├── install_telnet.yml
│ ├── install_tftpd-hpa.yml
│ ├── install_tnfs.yml
│ ├── install_troubleshooting.yml
│ ├── install_ucon64.yml
│ ├── install_waybackproxy.yml
│ ├── install_webone.yml
│ ├── install_wrp.yml
│ ├── install_xbox.yml
│ ├── install_xbox360.yml
│ ├── install_xbox360_netiso.yml
│ ├── install_xboxmanager.yml
│ ├── install_xlink-kai.yml
│ ├── install_ytree.yml
│ ├── install_zterm.yml
│ ├── migrate_mister_cifs_issue21.yml
│ ├── retronas_create_dirs.yml
│ ├── retronas_dependencies.yml
│ ├── retronas_system_config.yml
│ ├── retronas_systems.yml
│ ├── retronas_update_user.yml
│ ├── retronas_vars.yml.default
│ ├── roles/
│ │ ├── retronas.role.apt-backports/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.cache/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.cockpit/
│ │ │ ├── handlers/
│ │ │ │ └── main.yaml
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.cockpit-packages/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ ├── templates/
│ │ │ │ └── install_cockpit-packages/
│ │ │ │ └── cockpit-packages.sh.j2
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.createdirs/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.curlftpfs/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ ├── templates/
│ │ │ │ └── install_curlftpfs.sh.j2
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.dotnetcore3/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.dotnetcore6/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.dotnetcore8/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.extradirs/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.filesystems/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.firewalld.port/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.htpasswd/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yml
│ │ ├── retronas.role.nfs/
│ │ │ ├── handlers/
│ │ │ │ └── main.yaml
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.nginx/
│ │ │ ├── handlers/
│ │ │ │ └── main.yaml
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ ├── templates/
│ │ │ │ └── install_nginx/
│ │ │ │ ├── conf/
│ │ │ │ │ ├── includes/
│ │ │ │ │ │ ├── autoindex.conf
│ │ │ │ │ │ ├── listen-80.conf
│ │ │ │ │ │ └── ssl.conf
│ │ │ │ │ └── sites-available/
│ │ │ │ │ ├── 10-retronas.conf
│ │ │ │ │ └── 99-retronas-files.conf
│ │ │ │ └── www/
│ │ │ │ └── index.html
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.package.latest/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.paths/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.romdir/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.samba/
│ │ │ ├── handlers/
│ │ │ │ └── main.yaml
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ ├── templates/
│ │ │ │ └── retronas.conf.j2
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.samba.system/
│ │ │ ├── tasks/
│ │ │ │ ├── link.yml
│ │ │ │ ├── main.yaml
│ │ │ │ └── nolink.yml
│ │ │ └── templates/
│ │ │ └── retronas_system.conf.j2
│ │ ├── retronas.role.sslcert/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.system-config/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.templates/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.update-user/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ └── retronas.role.x11vnc/
│ │ ├── tasks/
│ │ │ └── main.yaml
│ │ ├── templates/
│ │ │ └── install_x11vnc/
│ │ │ └── x11vnc_wrapper.sh.j2
│ │ └── vars/
│ │ └── main.yaml
│ └── templates/
│ ├── install_3ds_qr_codes/
│ │ ├── 3ds_qr.sh.j2
│ │ └── retronas_3ds_qr.cron.j2
│ ├── install_adtpro/
│ │ ├── ADTPro.properties.j2
│ │ ├── adtpro.service.j2
│ │ ├── adtpro_retronas.sh.j2
│ │ └── install_adtpro.sh.j2
│ ├── install_affstools/
│ │ └── install_affstools.sh.j2
│ ├── install_amitools/
│ │ └── install_amitools.sh.j2
│ ├── install_apfs-fuse/
│ │ └── install_apfs-fuse.sh.j2
│ ├── install_assembly64/
│ │ ├── assembly64.service.j2
│ │ ├── assembly64_retronas.sh.j2
│ │ └── install_assembly64.sh.j2
│ ├── install_atarist-sidecart/
│ │ ├── 99-retronas-sidecart.conf.j2
│ │ ├── atarist-sidecart-generate-roms.sh.j2
│ │ ├── atarist-sidecart-mirrordb.sh.j2
│ │ ├── atarist-sidecart-updatedb.sh.j2
│ │ ├── index.html.j2
│ │ └── retronas_atarist.conf.j2
│ ├── install_cockpit-retronas/
│ │ └── install_cockpit-retronas.sh.j2
│ ├── install_cue2pops/
│ │ └── install_cue2pops.sh.j2
│ ├── install_deluge/
│ │ ├── auth.j2
│ │ ├── autoadd.conf.j2
│ │ ├── core.conf.j2
│ │ ├── deluge-web.service.j2
│ │ ├── deluged.j2
│ │ ├── deluged.service.j2
│ │ └── upgrade_deluge.sh.j2
│ ├── install_disable-laptop-lid/
│ │ └── retronas.conf.j2
│ ├── install_disc-image-creator/
│ │ └── install_disc-image-creator.sh.j2
│ ├── install_dnsmasq-retro/
│ │ ├── dnsmasq-retro.service.j2
│ │ └── retro/
│ │ ├── dhcp-retro-ethernet.conf.j2
│ │ ├── dhcp-retro-wifi.conf.j2
│ │ ├── dhcp.conf.j2
│ │ ├── dns.conf.j2
│ │ ├── dnsmasq.conf.j2
│ │ ├── interfaces.conf.j2
│ │ └── ipv6.conf.j2
│ ├── install_dreampi/
│ │ ├── dreampi.conf.j2
│ │ └── install_dreampi.sh.j2
│ ├── install_dvdauth/
│ │ └── install_dvdauth.sh.j2
│ ├── install_eccedc/
│ │ └── install_eccedc.sh.j2
│ ├── install_etherdfs/
│ │ ├── etherdfs.service.j2
│ │ ├── install_etherdfs.sh.j2
│ │ └── retronas_dos.conf.j2
│ ├── install_ethflopd/
│ │ ├── ethflopd.service.j2
│ │ └── install_ethflopd.sh.j2
│ ├── install_extract-xiso/
│ │ └── install_extract-xiso.sh.j2
│ ├── install_far2l/
│ │ └── install_far2l.sh.j2
│ ├── install_fenrir-ode-webserver/
│ │ ├── fenrir-ode-webserver.service.j2
│ │ └── install_fenrir-ode-webserver.sh.j2
│ ├── install_firewalld/
│ │ └── workarounds/
│ │ ├── clear-python-bytecode.j2
│ │ └── override.conf.j2
│ ├── install_firewalld-zones/
│ │ ├── policies/
│ │ │ └── retro_to_modern.xml.j2
│ │ ├── services/
│ │ │ ├── ps3netsrv.xml.j2
│ │ │ └── samba-modern.xml.j2
│ │ └── zones/
│ │ ├── modern.xml.j2
│ │ └── retro.xml.j2
│ ├── install_flippydrive/
│ │ ├── flippydrive.service.j2
│ │ ├── flippydrive.sh.j2
│ │ └── install_flippydrive.sh.j2
│ ├── install_freestation/
│ │ ├── retronas_freestation_cifs.conf.j2
│ │ └── retronas_freestation_nfs.conf.j2
│ ├── install_fsp/
│ │ ├── fspd.conf.j2
│ │ ├── fspd.service.j2
│ │ └── install_fsp.sh.j2
│ ├── install_gogrepo/
│ │ ├── gogrepo-wrapper.sh.j2
│ │ ├── gogrepo_download.sh.j2
│ │ ├── gogrepo_import-cookies.sh.j2
│ │ ├── gogrepo_login.sh.j2
│ │ └── gogrepo_update.sh.j2
│ ├── install_hb-store-cdn/
│ │ ├── config.ini.j2
│ │ ├── hb-store-cdn-check.sh.j2
│ │ ├── hb-store-cdn.cron.j2
│ │ ├── hb-store-cdn.service.j2
│ │ └── install_hb-store-cdn.sh.j2
│ ├── install_hdldump/
│ │ └── install_hdldump.sh.j2
│ ├── install_hdparm/
│ │ ├── hdparm-manager.sh.j2
│ │ ├── hdparm.service.j2
│ │ ├── hdparm.sh.j2
│ │ └── hdparm.timer.j2
│ ├── install_hfsutils/
│ │ └── install_hfsutils.sh.j2
│ ├── install_hostapd/
│ │ ├── hostapd-dnsmasq.conf.j2
│ │ ├── hostapd-retronas.conf.j2
│ │ └── hostapd-retronas.service.j2
│ ├── install_kermit/
│ │ ├── iksd.socket.j2
│ │ └── iksd@.service.j2
│ ├── install_lighttpd/
│ │ └── 99-retronas.conf.j2
│ ├── install_linux-dexdrive/
│ │ ├── dexdrive_dumper.sh.j2
│ │ ├── install_linux-dexdrive.sh.j2
│ │ ├── linux-dexdrive.service.j2
│ │ └── makefile.patch.j2
│ ├── install_linux-gadgets/
│ │ └── gadget-mass-storage-manage.sh.j2
│ ├── install_litch/
│ │ ├── litch_claim.sh.j2
│ │ ├── litch_download.sh.j2
│ │ ├── litch_download_clean.sh.j2
│ │ └── litch_login.sh.j2
│ ├── install_macproxy_classic/
│ │ └── macproxy.service.j2
│ ├── install_megatools/
│ │ └── install_megatools.sh.j2
│ ├── install_minicom/
│ │ ├── minicom.sh.j2
│ │ └── minirc.dfl.j2
│ ├── install_mister-organize/
│ │ ├── install_mister-organize.sh.j2
│ │ └── mister-organize.sh.j2
│ ├── install_mister_cifs/
│ │ ├── retronas-mister-dirs.service.j2
│ │ └── retronas-mister-dirs.timer.j2
│ ├── install_mtcp-netdrive/
│ │ ├── install_mtcp-netdrive.sh.j2
│ │ ├── mtcp-netdrive.service.j2
│ │ ├── mtcp-netdrive.sh.j2
│ │ └── mtcp-netdrive.xml.j2
│ ├── install_mysticbbs/
│ │ ├── create_filebone_na.py.j2
│ │ ├── install_mysticbbs.sh.j2
│ │ ├── mysticbbs-mis.service.j2
│ │ ├── mysticbbs.sh.j2
│ │ ├── mysticbbs.xml.j2
│ │ ├── retronas_create_fileareas.ini.j2
│ │ └── retronas_massupload.ini.j2
│ ├── install_nabu/
│ │ ├── install_nabu.sh.j2
│ │ └── nabu.sh.j2
│ ├── install_nbd-client/
│ │ └── nbd.conf.j2
│ ├── install_netatalk2/
│ │ ├── AppleVolumes.default.j2
│ │ ├── afpd.conf.j2
│ │ └── default.j2
│ ├── install_netatalk2x/
│ │ ├── AppleVolumes.default.j2
│ │ ├── afpd.conf.j2
│ │ ├── afpexpect.sh.j2
│ │ ├── atalkd.conf.j2
│ │ ├── default.j2
│ │ └── install_netatalk2x.sh.j2
│ ├── install_netatalk3/
│ │ ├── install_netatalk3.sh.j2
│ │ ├── netatalk.service.j2
│ │ └── retronas.conf.j2
│ ├── install_netatalk4/
│ │ ├── atalkd.service.j2
│ │ ├── install_netatalk4.sh.j2
│ │ ├── netatalk.service.j2
│ │ └── retronas.conf.j2
│ ├── install_netlink/
│ │ ├── install_netlink.sh.j2
│ │ ├── netlink.conf.j2
│ │ ├── netlink.patch.j2
│ │ └── netlink.service.j2
│ ├── install_netmount/
│ │ ├── install_netmount.sh.j2
│ │ ├── netmount-confman.py.j2
│ │ ├── netmount-confman.sh.j2
│ │ └── retronas.yaml.j2
│ ├── install_network-presets-standalone/
│ │ └── dhcpcd.conf.j2
│ ├── install_network-presets-zoned/
│ │ └── dhcpcd.conf.j2
│ ├── install_nfs/
│ │ ├── exports.j2
│ │ └── nfs-kernel-server.j2
│ ├── install_open-iscsi/
│ │ └── iscsi-manager-target-login.sh.j2
│ ├── install_pfsshell/
│ │ └── install_pfsshell.sh.j2
│ ├── install_pi1541/
│ │ └── pi1541.sh.j2
│ ├── install_piscsi/
│ │ ├── install_piscsi.sh.j2
│ │ ├── install_piscsi_standard.sh.j2
│ │ ├── piscsi.service.j2
│ │ └── piscsi_retronas_patch.diff.j2
│ ├── install_proftpd/
│ │ ├── ftp.service.j2
│ │ └── retronas.conf.j2
│ ├── install_ps2_openps2loader/
│ │ └── retronas_ps2.conf.j2
│ ├── install_ps2_udpbd/
│ │ ├── install_ps2_udpbd.sh.j2
│ │ ├── ps2_udpbd.service.j2
│ │ └── udpbd_manager.sh.j2
│ ├── install_ps3netsrv/
│ │ ├── install_ps3netsrv.sh.j2
│ │ ├── ps3netsrv-perms.service.j2
│ │ ├── ps3netsrv-perms.timer.j2
│ │ └── ps3netsrv.service.j2
│ ├── install_pygopherd/
│ │ ├── install_pygopherd.sh.j2
│ │ ├── pygopherd.conf.j2
│ │ └── pygopherd.service.j2
│ ├── install_rclone/
│ │ └── rclone-webui.service.j2
│ ├── install_redumper/
│ │ └── install_redumper.sh.j2
│ ├── install_retroaimserver/
│ │ ├── install_retroaimserver.sh.j2
│ │ ├── retro-aim-server.service.j2
│ │ ├── retroaimserver.xml.j2
│ │ └── retroainserver.xml.j2
│ ├── install_romimport/
│ │ └── romimport.sh.j2
│ ├── install_romm_cifs/
│ │ ├── retronas-romm-dirs.service.j2
│ │ ├── retronas-romm-dirs.sh.j2
│ │ └── retronas-romm-dirs.timer.j2
│ ├── install_sabretools/
│ │ └── install_sabretools.sh.j2
│ ├── install_seaweedfs/
│ │ ├── install_seaweedfs.sh.j2
│ │ ├── seaweedfs-credentials.sh.j2
│ │ ├── seaweedfs-retronas.service.j2
│ │ ├── seaweedfs.xml.j2
│ │ └── weed-retronas-s3.json.j2
│ ├── install_sit/
│ │ └── install_sit.sh.j2
│ ├── install_smbmounter/
│ │ └── retronas_smbmounter.conf.j2
│ ├── install_tcpser/
│ │ ├── install_tcpser.sh.j2
│ │ └── tcpser@.service.j2
│ ├── install_telnet/
│ │ └── telnet.j2
│ ├── install_tftpd-hpa/
│ │ └── tftpd-hpa.j2
│ ├── install_tnfs/
│ │ ├── install_tnfs.sh.j2
│ │ └── tnfsd.service.j2
│ ├── install_ucon64/
│ │ └── install_ucon64.sh.j2
│ ├── install_waybackproxy/
│ │ ├── config.json.j2
│ │ ├── install_waybackproxy.sh.j2
│ │ └── waybackproxy.service.j2
│ ├── install_webone/
│ │ ├── install_webone.sh.j2
│ │ └── webone.service.j2
│ ├── install_wrp/
│ │ ├── install_wrp.sh.j2
│ │ └── wrp.service.j2
│ ├── install_x11vnc/
│ │ └── x11vnc_wrapper.sh.j2
│ ├── install_xbox/
│ │ └── retronas_xbox.conf.j2
│ ├── install_xbox360/
│ │ └── retronas_xbox360.conf.j2
│ ├── install_xbox360_netiso/
│ │ ├── dummy.iso.j2
│ │ ├── install_xbox360_netiso.sh.j2
│ │ └── xbox360_netiso.service.j2
│ ├── install_xboxmanager/
│ │ └── xboxmanager.cfg.j2
│ ├── install_xlink-kai/
│ │ └── xlink-kai.service.j2
│ ├── install_ytree/
│ │ └── install_ytree.sh.j2
│ └── install_zterm/
│ ├── install_zterm.sh.j2
│ └── zterm.service.j2
├── config/
│ ├── menu/
│ │ ├── 3ds_qr.json
│ │ ├── _template.json
│ │ ├── adtpro.json
│ │ ├── assembly64.json
│ │ ├── atarist-sidecart.json
│ │ ├── cockpit.json
│ │ ├── config.json
│ │ ├── deluge.json
│ │ ├── dexdrive.json
│ │ ├── doc.json
│ │ ├── dreampi.json
│ │ ├── etherdfs.json
│ │ ├── ethflopd.json
│ │ ├── experimental.json
│ │ ├── fenrirodewebserver.json
│ │ ├── flippydrive.json
│ │ ├── fsp.json
│ │ ├── gogrepo.json
│ │ ├── hbstorecdn.json
│ │ ├── hdparm.json
│ │ ├── install.json
│ │ ├── lighttpd.json
│ │ ├── linux-gadgets.json
│ │ ├── litch.json
│ │ ├── lynx.json
│ │ ├── macproxy_classic.json
│ │ ├── main.json
│ │ ├── minicom.json
│ │ ├── mister-organize.json
│ │ ├── mister_cifs.json
│ │ ├── mtcp-netdrive.json
│ │ ├── mysticbbs.json
│ │ ├── nabu.json
│ │ ├── netatalk-legacy.json
│ │ ├── netatalk.json
│ │ ├── netlink.json
│ │ ├── netmount.json
│ │ ├── network-manual.json
│ │ ├── network-presets.json
│ │ ├── network-setup-modern.json
│ │ ├── network-setup-retro.json
│ │ ├── network-setup-wifiap.json
│ │ ├── network-setup.json
│ │ ├── network.json
│ │ ├── nginx.json
│ │ ├── ntp.json
│ │ ├── open-iscsi.json
│ │ ├── openssh.json
│ │ ├── pi1541.json
│ │ ├── piscsi.json
│ │ ├── profiles.json
│ │ ├── proftpd.json
│ │ ├── ps2_udpbd.json
│ │ ├── ps3netsrv.json
│ │ ├── rclone.json
│ │ ├── retroaimserver.json
│ │ ├── romimport.json
│ │ ├── romimportsystem.json
│ │ ├── romm_cifs.json
│ │ ├── samba.json
│ │ ├── seaweedfs.json
│ │ ├── services.json
│ │ ├── sslcert.json
│ │ ├── syncthing.json
│ │ ├── tcpser.json
│ │ ├── telnet.json
│ │ ├── tftpd-hpa.json
│ │ ├── tnfs.json
│ │ ├── tools.json
│ │ ├── update.json
│ │ ├── webone.json
│ │ ├── wrp.json
│ │ ├── xbox360_netiso.json
│ │ ├── xlinkkai.json
│ │ └── zterm.json
│ └── retronas.cfg
├── dialog/
│ ├── adtpro_ethernet_edit.sh
│ ├── adtpro_localhost_edit.sh
│ ├── adtpro_serial_edit.sh
│ ├── d_input.sh
│ ├── d_menu.sh
│ ├── d_yn.sh
│ ├── dexdrive_memcards.sh
│ ├── dexdrive_serial_edit.sh
│ ├── disclaimer.sh
│ ├── gogrepo.sh
│ ├── profiles.sh
│ ├── retronas_fixperms.sh
│ ├── retronas_password.sh
│ ├── romimportsystem.sh
│ ├── tcpser_edit.sh
│ ├── tcpser_status.sh
│ ├── wifi_password.sh
│ └── zterm_edit.sh
├── dist/
│ ├── install_preseed.sh
│ └── retronas
├── install_retronas.sh
├── lib/
│ ├── ansible_runner.sh
│ ├── common.sh
│ ├── markup_runner.sh
│ └── script_runner.sh
├── retronas.sh
└── scripts/
├── maint/
│ ├── git-changes-summary.sh
│ ├── install-profile.py
│ ├── migrate_romdirs.py
│ ├── retronas-systems-manager.py
│ ├── sort_menu_json.py
│ └── tests/
│ ├── lint-yaml.sh
│ └── test-retronas-json.py
├── patch/
│ ├── cache-dir.sh
│ ├── git-config.sh
│ ├── install-jq.sh
│ ├── new-startup-file.sh
│ └── update-retronas_vars.sh
└── static/
├── check-samba-user.sh
├── clean-broken-symlinks.sh
├── get-drives.sh
├── get-interfaces.sh
├── git-switch-branch.sh
├── network-example-presets-standalone.sh
├── network-example-presets-zoned.sh
├── permissions.sh
├── run-local-module.sh
├── service-samba.sh
├── set-etherdfs-nic.sh
├── set-top-level-dir.sh
├── update-group.sh
├── update-passwd.sh
├── update-retronas.sh
├── update-system-history.sh
├── update-system.sh
├── update-username.sh
├── wifi-show-passwd.sh
└── wifi-update-passwd.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: "Bug report"
description: Report problematic behaviour.
body:
- type: markdown
attributes:
value: |
If this is a new feature request please use the RetroNAS Discussion area.
Before raising an issue confirm you are using a supported distribution by checking the wiki and include as much detail as possible about your issue
- type: textarea
attributes:
label: Details
description: |
Any relevant details, e.g Error message text or screenshot, retronas branch, linux distribution information, ansible version etc.
placeholder: |
Installer <RETRONAS INSTALLER ended in with failure message <MESSAGE>, on retronas <BRANCH>.
I am using a supported distribution <DISTRO> <VERSION> with Ansible <VERSION> installed.
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: Discussions
url: https://github.com/orgs/retronas/discussions
about: For questions, feature requests etc.
- name: "#retronas"
url: https://libera.chat/guides/connect
about: General chatter on Libera IRC
- name: r/retroNAS
url: https://www.reddit.com/r/retroNAS/
about: Community support (not monitored)
================================================
FILE: .gitignore
================================================
bin
scripts/*.sh
!scripts/static/*.sh
src
log
doc
ansible/retronas_vars.yml
etc/*
config/installed.json
ansible/collections
.fuse*
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2021 Dan Mons
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================

# RetroNAS
## Project Information
* [Status](https://github.com/retronas/retronas/wiki/Status)
* [About](https://github.com/retronas/retronas/wiki/About)
* [HowTo](https://github.com/retronas/retronas/wiki)
* [Contributing](https://github.com/retronas/retronas/wiki/Contributing)
* [Thanks and Credits](https://github.com/retronas/retronas/wiki/Credits)
## WARNINGS
* [SECURITY](https://github.com/retronas/retronas/wiki/SECURITY-WARNING)
* [FILENAMES](https://github.com/retronas/retronas/wiki/Filenames)
## Community
* [Guides](https://github.com/retronas/retronas/wiki/Guides)
* [Coverage](https://github.com/retronas/retronas/wiki/Coverage)
* [Other Projects](https://github.com/retronas/retronas/wiki/Other-projects-and-sites)
================================================
FILE: SECURITY
================================================
=============================================================================
WARNING / TERMS OF USE / LICENSE
=============================================================================
RetroNAS is a compilation of existing opensource products.
RetroNAS is made available under the MIT license
https://github.com/retronas/retronas/blob/main/LICENSE
Due to the nature of retro computing, many of the tools and protocols used in
this project are COMPLETELY INSECURE. It is at the users behest which tools
are installed and as such all liabilies are transfered to you as the user in
the use of RetroNAS.
Most of these tools offer little to NO ENCRYPTION of neither data nor passwords,
some tools offer access to your system WITHOUT any AUTHENTICATION, and some of
the protocols have known EXPLOITS that cannot be fixed due to their legacy
design. It is your responsiblity to secure your infrastructure.
The RetroNAS team only support use of this software on a PRIVATE NETWORK
A private network is considered one where at the very least the RetroNAS is
located behind a firewall that denies inbound traffic from the internet.
DO NOT expose a configured RetroNAS to the public INTERNET
Doing so may result is unintentional DATA LOSS and or exposure of your network
and subsequent contents beit computer and/or data to BAD ACTORS. It is your
responsiblity to secure your infrastructure.
The services RetroNAS installs will attempt to run as unprivileged user accounts
where possible, but the RetroNAS installer scripts themselves all run as root
(the "Adminstrator" account in Linux). These have the power to dramatically
change and break working systems, so please ensure you undeerstand the consequence
of the code you are about to run, i.e code review etc but the onus is on you.
RetroNAS provides automatic compilation, installation and configuration of many
third party tools these tools may be vulnerable to supply chain attacks of which
we have no control over at installation time. If a project is shown to have been
exploited we may remove or modify installation support at any time. It is your
responsibility to ensure the options you are selecting for installation are as
per the third party project authors intent and the onus is on said authors to
secure their products.
If you are UNSURE if ANY of the ABOVE statements apply to you.
DO NOT CONTINUE to use this project.
If you have questions in regards to RetroNAS use and/or risk you may
ask your question on the github discussion boards for the project.
The RetroNAS team may in turn use this enquiry to revise support
documentation for the benefit of the project
https://github.com/retronas/retronas
The RetroNAS team are retro computing ENTHUSIASTS
The RetroNAS team should not be considered computer, networking nor security
experts and as such you are responsible to EDUCATE YOURSELF to the use of
and/or risks associated with the tools in this project.
This is NOT A NAS project for use with modern computing
If you understand the above fully and accept all subsequent liabilties as your
own in use of this project type AGREE at the prompt otherwise cease use of this
project immediately.
================================================
FILE: ansible/ansible.cfg
================================================
[defaults]
deprecation_warnings = False
command_warnings = False
inventory = /opt/retronas/ansible/hosts.yml
log_path = /opt/retronas/log/ansible.log
callbacks_enabled = ansible.posix.profile_tasks,ansible.posix.profile_roles
callbacks_whitelist = ansible.posix.profile_tasks,ansible.posix.profile_roles
cache = True
gathering = smart
fact_caching=jsonfile
fact_caching_connection=/opt/retronas/cache
fact_caching_timeout=86400
collections_paths = /opt/retronas/ansible/collections
roles_path = /opt/retronas/ansible/roles
private_role_vars = True
================================================
FILE: ansible/hosts.yml
================================================
---
all:
hosts:
localhost:
vars:
ansible_connection: local
cache_plugin: jsonfile
================================================
FILE: ansible/install_3ds_qr_codes.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "3DS QR Codes"
my_file: "install_3ds_qr_codes"
rom_path: "{{ retronas_path }}/3ds"
module_name: "3ds_qr_codes"
dirs:
- cia
- qr
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.nginx
- name: "{{ my_name }} - configure 3DS directory"
ansible.builtin.file:
path: "{{ rom_path }}"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: directory
- name: "{{ my_name }} - create dirs"
ansible.builtin.file:
path: "{{ rom_path }}/{{ item }}"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: directory
with_items: "{{ dirs }}"
- name: "{{ my_name }} - link 3DS cia directory"
ansible.builtin.file:
src: "{{ rom_path }}/cia"
dest: "{{ retronas_path }}/roms/nintendo/3ds/cia"
state: link
- name: "{{ my_name }} - install qrencode"
ansible.builtin.apt:
name: qrencode
state: latest
- name: "{{ my_name }} - configure QR generator script"
ansible.builtin.template:
src: "templates/{{ my_file }}/3ds_qr.sh.j2"
dest: "{{ retronas_root }}/scripts/3ds_qr.sh"
owner: root
group: root
mode: '0755'
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_adtpro.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "adtpro"
my_file: "install_{{ my_name }}"
my_dir: /opt/adtpro
module_name: "adtpro"
systemd_units:
- { name: "adtpro", type: 'service', state: "stopped", enabled: "no", restart: "no", instance: "no" }
packages:
- default-jre
- xvfb
- x11vnc
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "ADTPro.properties", dest: "{{ my_dir }}", force: no }
- { name: "adtpro_retronas.sh", dest: "{{ my_dir }}", mode: "0755" }
paths:
- { name: "{{ my_name }}", dest: "/opt", state: "directory", mode: "0755"}
# - { name: "{{ my_name }}", dest: "{{ retronas_path }}", state: "directory", mode: "0755"}
firewalld_ports:
- { port: 60000, protocol: tcp }
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.x11vnc
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - disks symlink"
ansible.builtin.file:
src: "roms/apple/appleii"
dest: "{{ retronas_path }}/{{ my_name }}"
state: "link"
- name: "{{ my_name }} - Install"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root}} {{ my_dir }}/adtpro.sh"
- name: "{{ my_name }} - create startup service(s) instance"
ansible.builtin.template:
src: templates/{{ my_file }}/{{ item.name }}.{{ item.type }}.j2
dest: /usr/lib/systemd/system/{{ item.name }}@.{{ item.type }}
owner: root
group: root
mode: 0644
with_items: "{{ systemd_units }}"
notify: "{{ my_name }} daemon-reload"
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} daemon-reload"
ansible.builtin.systemd:
daemon_reload: true
================================================
FILE: ansible/install_affstools.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "affstools"
my_file: "install_{{ my_name }}"
module_name: "affstools"
packages:
- make
- autoconf
- gcc
- curl
- build-essential
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "/usr/local/sbin/mkaffs"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_amitools.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "amitools"
my_file: "install_{{ my_name }}"
module_name: "amitools"
packages:
- python3
- python3-pip
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_analoguepocket_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "analoguepocket CIFS"
my_file: "install_analoguepocket_cifs"
module_name: "analoguepocket_cifs"
system_key: "analoguepocket"
top_level_paths:
- { name: "Assets", enabled: yes, generic: "roms", systems: yes }
- { name: "Cores", enabled: yes, generic: "", systems: no }
- { name: "Platforms", enabled: yes, generic: "", systems: no }
- { name: "Presets", enabled: yes, generic: "", systems: no }
- { name: "Saves", enabled: yes, generic: "", systems: no }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_apfs-fuse.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "apfs-fuse"
my_file: "install_apfs-fuse"
module_name: "apfs-fuse"
packages:
- git
- fuse
- libfuse3-dev
- bzip2
- libbz2-dev
- cmake
- g++
- libattr1-dev
- zlib1g-dev
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "{{ retronas_root }}/bin/apfs-fuse"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_aria2.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "aria2"
my_file: "install_aria2"
module_name: "aria2"
module_state: "present"
packages:
- aria2
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_assembly64.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "assembly64"
my_file: "install_{{ my_name }}"
my_dir: /opt/{{ my_name }}
module_name: "assembly64"
module_state: "present"
packages:
- xvfb
- x11vnc
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}_retronas.sh", dest: "/opt/{{ my_name }}", mode: "0755" }
- { name: "{{ my_name }}.service", dest: "/etc/systemd/system", mode: "0644" }
paths:
- { name: "{{ my_name }}", dest: "/opt", state: "directory", mode: "0755"}
firewalld_ports:
- { port: "66000", protocol: tcp}
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} daemon-reload"
- name: "{{ my_name }} - disks symlink"
ansible.builtin.file:
src: "roms/apple/appleii"
dest: "{{ retronas_path }}/{{ my_name }}"
state: "link"
- name: "{{ my_name }} - Install"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root}} {{ my_dir }}/{{ my_file }}.sh"
- ansible.builtin.import_role:
name: retronas.role.x11vnc
- name: "{{ my_name }} - firewalld"
ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} daemon-reload"
ansible.builtin.systemd:
daemon_reload: true
================================================
FILE: ansible/install_atarist-sidecart.yml
================================================
---
- hosts: localhost
gather_facts: false
roles:
- retronas.role.romdir
- retronas.role.nginx
- retronas.role.samba
vars:
my_name: "atarist-sidecart"
my_file: "install_{{ my_name }}"
base_path: "{{ retronas_path }}/atarist"
script_url: "https://raw.githubusercontent.com/diegoparrilla/atarist-sidecart-raspberry-pico/main/roms/update_json"
script_dest: "{{ retronas_root }}/bin/{{ my_name }}-generate-roms.sh"
module_name: "atarist-sidecart"
packages:
- python3-boto3
paths:
- { name: "bin", dest: "{{ retronas_root }}" }
- { name: "atarist", dest: "{{ retronas_path }}" }
- { name: "sidecart", dest: "{{ base_path }}" }
- { name: "db", dest: "{{ base_path }}/sidecart" }
links:
- { src: "{{ retronas_path }}/roms/atari/st/cart", dest: "{{ base_path }}/roms" }
- { src: "{{ retronas_path }}/roms/atari/st/flop", dest: "{{ base_path }}/floppies" }
templates:
- { name: "retronas_atarist.conf", dest: "/etc/samba" }
- { name: "{{ my_name }}-updatedb.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}-mirrordb.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}-generate-roms.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "99-retronas-sidecart.conf", dest: "/etc/nginx/sites-available" }
- { name: "index.html", dest: "{{ base_path }}/sidecart", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
firewalld_rules:
- { zone: "retro", service: "http" }
tasks:
- name: "{{ my_name }} - Install packages"
ansible.builtin.package:
name: "{{ packages }}"
state: latest
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - symlinks"
ansible.builtin.file:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
state: "link"
with_items: "{{ links }}"
- name: "{{ my_name }} - get update script"
ansible.builtin.shell: curl -kLso "{{ script_dest }}" {{ script_url }}
- name: "{{ my_name }} - make script executable"
file:
path: "{{ script_dest }}"
mode: '0755'
- name: "{{ my_name }} - configure includes file"
ansible.builtin.ini_file:
path: /etc/samba/smb.conf
section: atarist
option: "include"
value: "/etc/samba/retronas_atarist.conf"
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_batocera_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "Batocera CIFS"
my_file: "install_batocera_cifs"
module_name: "batocera_cifs"
system_key: "batocera"
top_level_paths:
- { name: "ROMS", enabled: yes, generic: "roms", systems: yes }
- { name: "SAVES", enabled: yes, generic: "saves", systems: yes }
- { name: "BIOS", enabled: yes, generic: "bios", systems: yes }
internal_symlinks:
- { src: 'sega/megadrive', dest: 'msu-md' }
- { src: 'sharp/mz', dest: 'mz700' }
- { src: 'sharp/mz', dest: 'mz800' }
- { src: 'sharp/mzb', dest: 'mz2500' }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_cockpit-retronas.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "cockpit-retronas"
my_file: "install_cockpit-retronas"
package_dir: "/usr/share/cockpit"
module_name: "cockpit-retronas"
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.include_role:
name: retronas.role.filesystems
- ansible.builtin.include_role:
name: retronas.role.cockpit
- name: "{{ my_name }} - create package directory"
ansible.builtin.file:
path: "{{ package_dir }}/{{ my_name }}"
owner: root
group: root
mode: 0755
state: directory
- name: "{{ my_name }} - Generate scripts"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ my_file }}.sh.j2"
dest: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
owner: root
group: root
mode: 0755
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
- ansible.builtin.include_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_cockpit.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
module_name: "cockpit"
roles:
- retronas.role.filesystems
- retronas.role.apt-backports
- retronas.role.cockpit
- retronas.role.cockpit-packages
- retronas.role.system-config
================================================
FILE: ansible/install_cue2pops.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "cue2pops"
my_file: "install_cue2pops"
module_name: "cue2pops"
packages:
- git
- coreutils
- make
- gcc
- g++
- build-essential
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Run installer"
ansible.builtin.shell:
cmd: "./{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
chdir: "{{ retronas_root }}/scripts"
executable: /bin/bash
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_curlftpfs.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
module_name: "curlftpfs"
roles:
- retronas.role.curlftpfs
- retronas.role.system-config
================================================
FILE: ansible/install_deluge.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "Deluge"
my_file: "install_deluge"
module_name: "bittorrent"
packages:
- geoip-bin
- geoip-database
- deluged
- deluge-web
- deluge-console
systemd_units:
- { name: "deluged", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
- { name: "deluge-web", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
paths:
- { name: "deluged", dest: "/var/lib", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "config", dest: "/var/lib/deluged", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "bittorrent", dest: "{{ retronas_path }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "torrents", dest: "{{ retronas_path }}/bittorrent", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "auto-add", dest: "{{ retronas_path }}/bittorrent", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "downloading", dest: "{{ retronas_path }}/bittorrent", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "complete", dest: "{{ retronas_path }}/bittorrent", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
templates:
- { name: "autoadd.conf", dest: "/var/lib/deluged/config" }
- { name: "deluged", dest: "/etc/default" }
- { name: "core.conf", dest: "/var/lib/deluged/config" }
- { name: "auth", dest: "/var/lib/deluged/config" }
- { name: "upgrade_deluge.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "deluged.service", dest: '/usr/lib/systemd/system' }
- { name: "deluge-web.service", dest: '/usr/lib/systemd/system' }
firewalld_ports:
- { zone: retro, port: "8112", protocol: "tcp" }
- { zone: modern, port: "8112", protocol: "tcp" }
- { zone: retro, port: "58846", protocol: "tcp" }
- { zone: modern, port: "58846", protocol: "tcp" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - firewalld"
ansible.builtin.import_role:
name: retronas.role.firewalld.port
- name: "{{ my_name }} -remove legacy deluged startup file"
file:
path: "/etc/init.d/deluged"
state: absent
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.instance == 'no'
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: restarted
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.restart == 'yes'
- item.instance == 'no'
================================================
FILE: ansible/install_dhcpcd.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "dhcpcd"
my_file: "install_{{ my_name }}"
module_name: "dhcpcd"
packages:
- dhcpcd
changed: false
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - restart if imported because handlers will not run"
service:
name: "{{ item }}"
state: restarted
enabled: true
with_items: "{{ my_services }}"
when: changed is true
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_disable-laptop-lid.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "Disable Laptop Lid"
my_file: "install_disable-laptop-lid"
service: "systemd-logind.service"
module_name: "disable-laptop-lid"
paths:
- { name: "logind.conf.d", dest: "/etc/systemd/", state: "directory", mode: "0755"}
templates:
- { name: "retronas.conf", dest: "/etc/systemd/logind.conf.d", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ service }}"
state: restarted
================================================
FILE: ansible/install_disc-image-creator.yml
================================================
# Dependencies
- ansible.builtin.import_playbook: install_dvdauth.yml
- ansible.builtin.import_playbook: install_eccedc.yml
- hosts: localhost
gather_facts: false
vars:
my_name: "Disc Image Creator"
my_file: "install_disc-image-creator"
module_name: "disc-image-creator"
packages:
- git
- coreutils
- make
- gcc
- g++
- curl
- build-essential
- unzip
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts/", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Run installer"
ansible.builtin.shell:
cmd: "./{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
chdir: "{{ retronas_root }}/scripts"
executable: /bin/bash
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_dnsmasq-retro.yml
================================================
---
# Dependencies
- import_playbook: install_ntp.yml
- import_playbook: install_dnsmasq.yml
- hosts: localhost
gather_facts: false
vars:
my_name: "dnsmasq-retro"
my_service: "{{ my_name }}"
my_file: "install_{{ my_name }}"
module_name: "dnsmasq-retro"
templates:
- { name: "dhcp-retro-ethernet.conf", sub: "retro", dest: "/etc/dnsmasq.d/retro", force: no }
- { name: "dhcp-retro-wifi.conf", sub: "retro", dest: "/etc/dnsmasq.d/retro", force: no }
- { name: "dhcp.conf", sub: "retro", dest: "/etc/dnsmasq.d/retro", force: no }
- { name: "dns.conf", sub: "retro", dest: "/etc/dnsmasq.d/retro", force: no }
- { name: "dnsmasq.conf", sub: "retro", dest: "/etc/dnsmasq.d/retro", force: no }
- { name: "interfaces.conf", sub: "retro", dest: "/etc/dnsmasq.d/retro", force: no }
- { name: "ipv6.conf", sub: "retro", dest: "/etc/dnsmasq.d/retro", force: no }
- { name: "dnsmasq-retro.service", sub: "", dest: "/etc/systemd/system"}
paths:
- { name: "dnsmasq.d", dest: "/etc", state: "directory", mode: "0755" }
- { name: "retro", dest: "/etc/dnsmasq.d", state: "directory", mode: "0755" }
net_settings:
- { option: "interface", value: "{{ retronas_net_retro_interface }}", match_regex: "^interface {{ retronas_net_retro_interface }}$", after_regex: "", state: "present", dest: "/etc/dhcpcd.conf" }
#- { option: "interface", value: "{{ retronas_net_wifi_interface }}", match_regex: "^interface {{ retronas_net_wifi_interface }}$", after_regex: "", state: "present", dest: "/etc/dhcpcd.conf" }
- { option: "static", value: 'ip_address\={{ retronas_net_retro_ip }}/{{ retronas_net_retro_subnet }}', after_regex: "^interface {{ retronas_net_retro_interface }}$", state: "present", dest: "/etc/dhcpcd.conf" }
- { option: "static", value: 'domain_name_servers\={{ retronas_net_retro_dns }}', after_regex: "^interface ip_address=.+$", state: "present", dest: "/etc/dhcpcd.conf" }
my_services:
- dhcpcd
- "{{ my_name }}"
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - mask default dnsmasq service"
service:
name: "dnsmasq"
state: stopped
daemon_reload: true
enabled: false
masked: true
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart services"
- name: "{{ my_name }} - checking for dhcpcd"
stat:
path: "/etc/dhcpcd.conf"
register: dhcpcd_check
- name: "{{ my_name }} - setup dhcpcd"
lineinfile:
path: "{{ item.dest }}"
search_string: "{{ item.match_regex | default('^$') }}"
insertbefore: "{{ item.before_regex | default(omit) }}"
insertafter: "{{ item.after_regex | default(omit) }}"
line: "{{ item.option }} {{ item.value }}"
with_items: "{{ net_settings }}"
when: dhcpcd_check.stat.exists
notify: "{{ my_name }} - Restart services"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart services"
service:
name: "{{ item }}"
state: restarted
daemon_reload: true
enabled: true
with_items: "{{ my_service }}"
================================================
FILE: ansible/install_dnsmasq.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "dnsmasq"
my_file: "install_{{ my_name }}"
module_name: "dnsmasq"
packages:
- dnsmasq
my_services:
- dnsmasq
changed: false
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - restart if imported because handlers will not run"
service:
name: "{{ item }}"
state: restarted
enabled: true
with_items: "{{ my_services }}"
when: changed is true
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_doc.yml
================================================
# Dependencies
- ansible.builtin.import_playbook: install_lynx.yml
- hosts: localhost
gather_facts: false
vars:
my_name: "retronas_docs"
my_file: "install_retronas_docs"
module_name: "retronas_docs"
packages:
- git
- pandoc
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Clone local copy of RetroNAS wiki"
ansible.builtin.git:
repo: https://github.com/retronas/retronas.wiki.git
dest: "{{ retronas_root }}/doc"
update: false
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_dreampi.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "dreampi"
my_file: "install_dreampi"
module_name: "dreampi"
packages:
- git
- dnsmasq
- dnsutils
- libnetfilter-queue-dev
- libnetfilter-queue1
- ppp
- arping
- nftables
- tcpd
- wvdial
- python3-pip
groups:
- dialout
- dip
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}.conf", dest: "/etc/dnsmasq.d", force: no }
paths:
- { name: "dnsmasq.d", dest: "/etc" }
systemd_patches:
- { unit: "dreampi.service", line: "Restart=on-failure", regex: "^Restart=on-failure$", after: "^ExecStart=.*$" }
- { unit: "dreampi.service", line: "RestartSec=30s", regex: "^RestartSec=.+", after: "^Restart=.*$" }
tasks:
- name: "{{ my_name }} - Checking hw platform compatiblity"
ansible.builtin.debug:
msg: "INCOMPATIBLE PLATFORM, only arm platforms are supported"
when: ansible_architecture is not search('arm') and
ansible_architecture != 'aarch64'
- ansible.builtin.meta: end_play
when: ansible_architecture is not search('arm') and
ansible_architecture != 'aarch64'
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Run installer"
ansible.builtin.shell:
cmd: "./{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
chdir: "{{ retronas_root }}/scripts"
executable: /bin/bash
notify: "{{ my_name }} Restart Services"
- name: "{{ my_name }} - Patch systemd service"
ansible.builtin.lineinfile:
path: /etc/systemd/system/{{ item.unit }}
regex: "{{ item.regex }}"
insertafter: "{{ item.after }}"
line: "{{ item.line }}"
state: present
with_items: "{{ systemd_patches }}"
notify: "{{ my_name }} Restart Services"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} Restart Services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
daemon_reload: true
with_items:
- "{{ my_name }}.service"
================================================
FILE: ansible/install_dvdauth.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "DVDAuth"
my_file: "install_dvdauth"
module_name: "dvdauth"
packages:
- git
- coreutils
- make
- gcc
- g++
- curl
- build-essential
- unzip
- util-linux
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Run installer"
ansible.builtin.shell:
cmd: "./{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
chdir: "{{ retronas_root }}/scripts"
executable: /bin/bash
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_eccedc.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "EccEDC"
my_file: "install_eccedc"
module_name: "eccedc"
packages:
- coreutils
- make
- gcc
- g++
- curl
- build-essential
- unzip
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Run installer"
ansible.builtin.shell:
cmd: "./{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
chdir: "{{ retronas_root }}/scripts"
executable: /bin/bash
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_emudeck_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "EmuDeck CIFS"
my_file: "install_emudeck_cifs"
system_key: "emudeck"
module_name: "emudeck_cifs"
top_level_paths:
- { name: "roms", enabled: yes, generic: "roms", systems: yes }
# - { name: "saves", enabled: yes, generic: "saves", systems: yes }
- { name: "bios", enabled: yes, generic: "bios", systems: yes }
internal_symlinks:
- { src: 'commodore/amiga', dest: 'ags' }
- { src: 'commodore/amiga', dest: 'amiga600' }
- { src: 'atari/jaguar', dest: 'atarijaguarcd' }
- { src: 'capcom/cps1', dest: 'cps' }
- { src: 'nintendo/gamecube', dest: 'gc' }
- { src: 'mame/mame', dest: 'mame-advmame' }
- { src: 'mame/mame', dest: 'mame-mame4all' }
- { src: 'mame/mame', dest: 'mame-mame4all' }
- { src: 'sega/megacd', dest: 'segacd' }
- { src: 'sega/megacd', dest: 'megacdjp' }
- { src: 'sega/megadrive', dest: 'genesis' }
- { src: 'sega/megadrive', dest: 'megadrivejp' }
- { src: 'nintendo/3ds', dest: 'n3ds' }
- { src: 'snk/neogeocd', dest: 'neogeocdjp' }
- { src: 'sony/playstation1', dest: 'psx' }
- { src: 'sega/saturn', dest: 'saturnjp' }
- { src: 'sega/32x', dest: 'sega32xjp' }
- { src: 'sega/32x', dest: 'sega32xna' }
- { src: 'nintendo/superfamicom', dest: 'sneshd' }
- { src: 'nintendo/superfamicom', dest: 'snesna' }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_emuelec_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "EmuElec CIFS"
my_file: "install_emuelec_cifs"
module_name: "emuelec_cifs"
system_key: "emuelec"
internal_symlinks:
- { src: 'nintendo/famicom', dest: 'nesh' }
- { src: 'nintendo/gameboyadvance', dest: 'gbah' }
- { src: 'nintendo/gameboy', dest: 'gbh' }
- { src: 'nintendo/gameboycolor', dest: 'gbch' }
- { src: 'nintendo/superfamicom', dest: 'snesh' }
- { src: 'sega/gamegear', dest: 'gamegearh' }
- { src: 'sega/megadrive', dest: 'genh' }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_etherdfs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "EtherDFS"
my_file: "install_etherdfs"
module_name: "etherdfs"
packages:
- make
- automake
- autoconf
- gcc
- g++
- git
- build-essential
- coreutils
paths:
- { name: "dos", dest: "{{ retronas_path }}", state: "directory", owner: "{{ retronas_user }}", group: "{{ retronas_group }}", mode: "0755" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "etherdfs.service", dest: "/usr/lib/systemd/system/" }
- { name: "retronas_dos.conf", dest: "/etc/samba/" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root }}/bin/ethersrv"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - configure includes file"
ansible.builtin.ini_file:
path: /etc/samba/smb.conf
section: dos
option: "include"
value: "/etc/samba/retronas_dos.conf"
notify: "{{ my_name }} - Install Samba"
- name: "{{ my_name }} - enable startup service"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
daemon_reload: true
with_items:
- etherdfs
- ansible.builtin.import_role:
name: retronas.role.samba
vars:
changed: "{{ install_changed }}"
when: install_changed is defined and
install_changed is true
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
daemon_reload: true
with_items:
- etherdfs
- name: "{{ my_name }} - Install Samba"
set_fact:
install_changed: true
================================================
FILE: ansible/install_ethflopd.yml
================================================
- hosts: localhost
gather_facts: false
vars:
my_name: "ethflopd"
my_file: "install_{{ my_name }}"
module_name: "ethflopd"
packages:
- make
- automake
- autoconf
- gcc
- g++
- git
- build-essential
- coreutils
paths:
- { name: "dos", dest: "{{ retronas_path }}", state: "directory", owner: "{{ retronas_user }}", group: "{{ retronas_group }}", mode: "0755" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "ethflopd.service", dest: "/usr/lib/systemd/system/" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root }}/bin/{{ my_name }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup service"
ansible.builtin.service:
name: "{{ my_name }}.service"
state: started
enabled: true
daemon_reload: true
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ my_name }}.service"
state: restarted
daemon_reload: true
================================================
FILE: ansible/install_extract-xiso.yml
================================================
- hosts: localhost
gather_facts: false
vars:
my_name: "extract-xiso"
my_file: "install_extract-xiso"
module_name: "extract-xiso"
packages:
- make
- gcc
- coreutils
- cmake
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "/usr/local/bin/extract-xiso"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_extradirs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
module_name: "extradirs"
tasks:
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_far2l.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "far2l"
my_file: "install_{{ my_name }}"
module_name: "far2l"
packages:
- gawk
- m4
- libpcre2-dev
- libxerces-c-dev
- libspdlog-dev
- libuchardet-dev
- libssh-dev
- libssl-dev
- libsmbclient-dev
- libnfs-dev
- libneon27-dev
- libarchive-dev
- cmake
- g++
- gcc
- git
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_fenrir-ode-webserver.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "fenrir-ode-webserver"
my_file: "install_fenrir-ode-webserver"
module_name: "fenrir-ode-webserver"
packages:
- make
- gcc
- g++
- coreutils
- cmake
fenrir_ode_path: "{{ retronas_path }}/fenrir-ode-webserver"
fenrir_ode_port: "31994"
fenrir_ode_bin: "/usr/local/bin/FenrirServer"
my_service: "{{ my_name }}.service"
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}.service", dest: "/usr/lib/systemd/system" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - run build tool"
ansible.builtin.shell:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "{{ fenrir_ode_bin }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - create share link"
ansible.builtin.file:
src: "roms/sega/saturn"
dest: "{{ fenrir_ode_path }}"
state: link
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
enabled: true
daemon_reload: true
with_items: "{{ my_service }}"
================================================
FILE: ansible/install_filesystems.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
module_name: "filesystems"
roles:
- retronas.role.filesystems
- retronas.role.system-config
================================================
FILE: ansible/install_firewalld-zones.yml
================================================
---
# Dependencies
- ansible.builtin.import_playbook: install_dnsmasq.yml
- ansible.builtin.import_playbook: install_firewalld.yml
- hosts: localhost
gather_facts: false
vars:
my_name: "firewalld-zones"
my_service: firewalld
my_file: "install_{{ my_name }}"
module_name: "firewalld-zones"
templates:
- { name: "retro_to_modern.xml", sub: "policies", dest: "/etc/{{ my_service }}/policies", force: no }
- { name: "samba-modern.xml", sub: "services", dest: "/etc/{{ my_service }}/services", force: no }
- { name: "ps3netsrv.xml", sub: "services", dest: "/etc/{{ my_service }}/services", force: no }
- { name: "modern.xml", sub: "zones", dest: "/etc/{{ my_service }}/zones", force: no }
- { name: "retro.xml", sub: "zones", dest: "/etc/{{ my_service }}/zones", force: no }
paths:
- { name: "{{ my_service }}", dest: "/etc", state: "directory", mode: "0750" }
- { name: "{{ my_service }}/policies", dest: "/etc", state: "directory", mode: "0750" }
- { name: "{{ my_service }}/services", dest: "/etc", state: "directory", mode: "0750" }
- { name: "{{ my_service }}/zones", dest: "/etc", state: "directory", mode: "0750" }
firewalld_rules:
- { zone: "retro", service: "ssh" }
- { zone: "modern", service: "ssh" }
- { zone: "retro", service: "cockpit" }
- { zone: "modern", service: "cockpit" }
tasks:
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Reload firewalld to pickup the new zones"
ansible.builtin.service:
name: "firewalld"
state: restarted
daemon_reload: true
enabled: true
force: true
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Reload firewalld"
ansible.builtin.set_fact:
install_changed: true
- ansible.builtin.import_playbook: install_firewalld.yml
vars:
changed: "{{ install_changed }}"
when: install_changed is defined and
install_changed is true
================================================
FILE: ansible/install_firewalld.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "firewalld"
my_file: "install_{{ my_name }}"
my_services: "firewalld.service"
module_name: "firewalld"
templates:
- { name: "clear-python-bytecode", sub: "workarounds", dest: "/usr/local/sbin", mode: '0750' }
- { name: "override.conf", sub: "workarounds", dest: "/etc/systemd/system" }
paths:
- { name: "{{ my_name }}", dest: "/etc", state: "directory", mode: "0750" }
- { name: "{{ my_name }}.service.d", dest: "/etc/systemd/system/", state: "directory", mode: "0750" }
packages:
- firewalld
- python3-firewall
collections:
- { collection: ansible.posix, creates: ansible/posix }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - install related ansible collections"
ansible.builtin.command:
cmd: /usr/bin/ansible-galaxy collection install {{ item.collection }}
creates: /opt/retronas/ansible/collections/ansible_collections/{{ item.creates }}
with_items: "{{ collections }}"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
daemon_reload: true
enabled: true
force: true
with_items: "{{ my_services }}"
================================================
FILE: ansible/install_flippydrive.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "Flippydrive"
my_file: "install_flippydrive"
my_service: "flippydrive"
module_name: "flippydrive"
paths:
- { name: "gamecube", dest: "{{ retronas_path }}" }
- { name: "{{ my_service }}", dest: "/opt" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_service }}.sh", dest: "/opt/{{ my_service }}", mode: "0755" }
- { name: "{{ my_service }}.service", dest: "/etc/systemd/system/" }
firewalld_ports:
- { port: 7031, protocol: tcp }
packages:
- unzip
- curl
tasks:
- ansible.builtin.assert:
that: ansible_architecture == "x86_64"
fail_msg: "Unsupported architecture"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Load RetroNAS systems"
ansible.builtin.include_vars: retronas_systems.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from repo"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup service"
ansible.builtin.service:
name: "{{ my_service }}"
state: started
enabled: true
daemon_reload: true
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ my_service }}"
state: restarted
daemon_reload: false
================================================
FILE: ansible/install_freestation.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "freestation"
my_file: "install_{{ my_name }}"
module_name: "freestation"
system_key: "freestation"
top_level_paths:
- { name: "games", enabled: yes, generic: "roms", systems: yes }
- { name: "bios", enabled: yes, generic: "bios", systems: yes }
templates:
- { name: "retronas_freestation_cifs.conf", name_dest: "retronas_freestation.conf", dest: "/etc/samba"}
- { name: "retronas_freestation_nfs.conf", name_dest: "retronas_freestation.conf", dest: "/etc/exports.d"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.nfs
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_fsp.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "FSP for Swiss"
my_file: "install_fsp"
my_service: "fspd"
module_name: "fsp"
packages:
- python3
- python-is-python3
- build-essential
- flex
- gcc
- scons
swiss_rw:
- .FSP_OK_ADD
- .FSP_OK_DEL
- .FSP_OK_MKDIR
- .FSP_OK_RENAME
paths:
- { name: "fsp", dest: "{{ retronas_root }}/bin/" }
- { name: "etc", dest: "{{ retronas_root }}/bin/fsp/" }
- { name: "gamecube", dest: "{{ retronas_path }}" }
- { name: "swiss", dest: "{{ retronas_path }}/gamecube" }
- { name: "swiss", dest: "{{ retronas_path }}/gamecube/swiss" } # ????
- { name: "tmp", dest: "{{ retronas_path }}/gamecube/swiss" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
- { name: "{{ my_service }}.conf", dest: "{{ retronas_root }}/bin/fsp/etc" }
- { name: "fspd.service", dest: "/usr/lib/systemd/system/" }
firewalld_ports:
- { port: 2121, protocol: udp }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Load RetroNAS systems"
ansible.builtin.include_vars: retronas_systems.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- name: "{{ my_name }} - build layout"
ansible.builtin.file:
src: "../../roms/{{ item.src }}"
dest: "{{ retronas_path }}/gamecube/swiss/{{ item.fspd }}"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: link
loop: "{{ system_map }}"
when:
item.fspd | length > 0
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - Set write permissions top level"
ansible.builtin.copy:
content: ""
dest: "{{ retronas_path }}/gamecube/{{ item.0 }}/{{ item.1 }}"
force: false
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
mode: 0644
with_nested:
- ["swiss", "swiss/swiss"]
- "{{ swiss_rw }}"
- name: "{{ my_name }} - enable startup service"
ansible.builtin.service:
name: "{{ my_service }}"
state: started
enabled: true
daemon_reload: true
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ my_service }}"
state: restarted
daemon_reload: false
================================================
FILE: ansible/install_gogrepo.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "gogrepo"
my_file: "install_gogrepo"
module_name: "gogrepo"
packages:
- python3
- python-is-python3
- python3-html5lib
- git
- sudo
templates:
- { name: "gogrepo_login.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
- { name: "gogrepo_import-cookies.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
- { name: "gogrepo_download.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
- { name: "gogrepo_update.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
- { name: "gogrepo-wrapper.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - create GOG dir"
ansible.builtin.file:
path: "{{ retronas_path }}/{{ item }}"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
mode: "0775"
state: directory
with_items:
- gog
- name: "{{ my_name }} - download gogrepo+patches (sairuk)"
ansible.builtin.shell:
chdir: "{{ retronas_root }}/bin"
cmd: "git clone https://github.com/sairuk/gogrepo.git"
creates: "{{ retronas_root }}/bin/gogrepo"
- name: "{{ my_name }} - update gogrepo"
ansible.builtin.shell:
chdir: "{{ retronas_root }}/bin/gogrepo"
cmd: "git pull"
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_hb-store-cdn.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: hb-store-cdn
my_file: "install_{{ my_name }}"
module_name: "hb-store-cdn"
systemd_units:
- { name: "{{ my_name }}", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
packages:
- git
- npm
- gcc
- g++
- build-essential
packages_debian:
debian12:
- libnode108
debian13:
- libnode115
paths:
- { name: "{{ my_name }}", dest: "{{ retronas_root }}/bin", state: "directory", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "bin", dest: "{{ retronas_root }}/bin/{{ my_name }}", state: "directory", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "ps4", dest: "{{ retronas_path }}", state: "directory", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
templates:
- { name: "{{ my_name }}-check.sh", dest: "{{ retronas_root }}/bin/{{ my_name }}", mode: "0755"}
- { name: "{{ my_name }}.cron", dest: "/etc/cron.d" }
- { name: "config.ini", dest: "{{ retronas_root }}/bin/{{ my_name }}" }
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}.service", dest: "/usr/lib/systemd/system" }
firewalld_ports:
- { port: 6449, protocol: "tcp" }
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.package.latest
vars:
packages: "{{ packages_debian['debian' + ansible_distribution_major_version ] }}"
when: ansible_distribution == 'Debian'
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.paths
- name: "{{ my_name }} - build layout"
ansible.builtin.file:
src: "{{ retronas_path }}/roms/sony/playstation4/pkg"
dest: "{{ retronas_path }}/ps4/{{ my_name }}"
state: link
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root }}/bin/{{ my_name }}/hb-store-cdn-cli-server"
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items:
"{{ systemd_units }}"
when:
- item.instance == 'no'
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items:
"{{ systemd_units }}"
when:
- item.instance == 'no'
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: restarted
daemon_reload: true
with_items:
"{{ systemd_units }}"
when:
- item.restart == 'yes'
- item.instance == 'no'
- name: "{{ my_name }} - Restart instances"
ansible.builtin.service:
name: "{{ item.1.name }}{{ item.0.dest }}.{{ item.1.type }}"
state: restarted
daemon_reload: true
with_items:
- "{{ system_map }}"
- "{{ systemd_units }}"
when:
- item.1.restart == 'yes'
- item.1.instance == 'yes'
================================================
FILE: ansible/install_hdldump.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "hdldump"
my_file: "install_{{ my_name }}"
module_name: "hdldump"
packages:
- make
- gcc
- coreutils
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "/usr/local/bin/hdldump"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_hdparm.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "hdparm"
my_file: "install_{{ my_name }}"
module_name: "hdparm"
packages:
- hdparm
- coreutils
scripts:
- "{{ my_name }}.sh"
- "{{ my_name }}-manager.sh"
symlinks:
- hdparm-manager-disable-apm
- hdparm-manager-disable-standby
- hdparm-manager-start-service
- hdparm-manager-query-service
- hdparm-manager-stop-service
- hdparm-manager-drive-selector
systemd_units:
- { name: "{{ my_name }}", type: "timer", state: "stopped", instance: "no", enabled: "no", restart: "no" }
- { name: "{{ my_name }}", type: "service", state: "stopped", instance: "no", enabled: "no", restart: "no" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - check dir"
ansible.builtin.file:
path: /usr/lib/systemd/system
owner: root
group: root
mode: 0755
state: directory
- name: "{{ my_name }} - install script"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ item }}.j2"
dest: "{{ retronas_root }}/scripts/{{ item }}"
owner: root
group: root
mode: '0755'
with_items:
- "{{ scripts }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - create startup service"
ansible.builtin.template:
src: templates/{{ my_file }}/{{ item.name }}.{{ item.type }}.j2
dest: /usr/lib/systemd/system/{{ item.name }}.{{ item.type }}
owner: root
group: root
mode: 0644
with_items:
- "{{ systemd_units }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - create symlinks for webui"
ansible.builtin.file:
src: "{{ retronas_root }}/scripts/{{ my_name }}-manager.sh"
dest: "{{ retronas_root }}/scripts/{{ item }}.sh"
owner: root
group: root
state: link
with_items:
- "{{ symlinks }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup service"
ansible.builtin.service:
name: "{{ item.name }}"
state: started
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items:
- "{{ systemd_units }}"
when:
- item.enabled == "yes"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
daemon_reload: true
with_items:
- "{{ systemd_units }}"
when:
- item.restart == "yes"
================================================
FILE: ansible/install_hfsutils.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "hfsutils"
my_file: "install_hfsutils"
module_name: "hfsutils"
packages:
- git
- autoconf
- build-essential
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_hostapd.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "hostapd"
my_file: "install_{{ my_name }}"
module_name: "hostapd"
packages:
- hostapd
- pwgen
my_services: "hostapd-retronas.service"
templates:
- { name: "hostapd-retronas.conf", sub: "", dest: "/etc/{{ my_name }}", force: no, mode: "0640" }
- { name: "hostapd-dnsmasq.conf", sub: "", dest: "/etc/dnsmasq.d/retro/", force: no, mode: "0640" }
- { name: "hostapd-retronas.service", sub: "", dest: "/etc/systemd/system" }
paths:
- { name: "dnsmasq.d", dest: "/etc", state: "directory", mode: "0755" }
- { name: "retro", dest: "/etc/dnsmasq.d", state: "directory", mode: "0755" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - generate password"
shell:
cmd: pwgen -s 12 1
no_log: true
register: retronas_wifi_password
- name: "{{ my_name }} - generate unique ssid"
shell:
cmd: echo "retronas-$(pwgen 8 -A -0 -B 1)"
no_log: true
register: retronas_net_wifi_ssid
when: retronas_net_wifi_ssid == ""
- name: "{{ my_name }} - update wifi ssid config"
lineinfile:
path: /opt/retronas/ansible/retronas_vars.yml
regexp: ^retronas_net_wifi_ssid.*
line: 'retronas_net_wifi_ssid: "{{ retronas_net_wifi_ssid.stdout_lines[0] }}"'
when: retronas_net_wifi_ssid is defined
- name: "{{ my_name }} - Re-read RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - enable"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
daemon_reload: true
force: true
with_items: "{{ my_services }}"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
daemon_reload: true
force: true
with_items: "{{ my_services }}"
================================================
FILE: ansible/install_kermit.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "kermit"
my_file: "install_{{ my_name }}"
module_name: "kermit"
packages:
- ckermit
systemd_units:
- { name: "iksd.socket", enabled: yes, state: 'restarted' }
templates:
- { name: "iksd@.service", dest: "/etc/systemd/system" }
- { name: "iksd.socket", dest: "/etc/systemd/system" }
firewalld_ports:
- { port: 1649, protocol: tcp }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - manage startup services"
ansible.builtin.service:
name: "{{ item.name }}"
state: "{{ item.state|default('stopped') }}"
enabled: "{{ item.enabled|default('no') }}"
daemon_reload: true
with_items: "{{ systemd_units }}"
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_lighttpd.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "lighttpd"
my_file: "install_{{ my_name }}"
module_name: "lighttpd"
packages:
- { name: "nginx", state: "absent" }
- { name: "{{ my_name }}", state: "latest" }
config_settings_absent:
- { section: null, option: "server.document-root"}
- { section: null, option: "server.username"}
- { section: null, option: "server.groupname"}
templates:
- { name: "99-retronas.conf", dest: "/etc/{{ my_name }}/conf-available", mode: "0640"}
conf_enable:
- "99-retronas.conf"
systemd_units:
- { name: "{{ my_name }}", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
firewalld_rules:
- { service: "http" }
- { service: "https" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - manage packages"
ansible.builtin.package:
name: "{{ item.name }}"
state: "{{ item.state }}"
with_items: "{{ packages }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - configure main config"
ansible.builtin.ini_file:
path: /etc/{{ my_name }}/{{ my_name }}.conf
section: "{{ item.section }}"
option: "{{ item.option }}"
state: absent
with_items: "{{ config_settings_absent }}"
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - enable conf"
ansible.builtin.file:
src: /etc/{{ my_name }}/conf-available/{{ item }}
dest: /etc/{{ my_name }}/conf-enabled/{{ item }}
state: "link"
with_items: "{{ conf_enable }}"
- name: "{{ my_name }} - set logfile permissions"
ansible.builtin.file:
path: /var/log/{{ my_name }}
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: directory
recurse: true
- name: "{{ my_name }} - set run dir permissions"
ansible.builtin.file:
path: /var/run/{{ my_name }}
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: directory
recurse: true
- name: "{{ my_name }} - configure server.errorlog"
ansible.builtin.ini_file:
path: /etc/{{ my_name }}/{{ my_name }}.conf
section: null
option: server.errorlog
state: absent
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: "{{ item.name }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
with_items: "{{ systemd_units }}"
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}"
state: restarted
with_items: "{{ systemd_units }}"
when: item.restart == "yes"
================================================
FILE: ansible/install_linux-dexdrive.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "linux-dexdrive"
my_file: "install_{{ my_name }}"
module_name: "linux-dexdrive"
packages:
- git
- build-essential
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "makefile.patch", dest: "/tmp" }
- { name: "dexdrive_dumper.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}.service", dest: "/etc/systemd/system" }
systemd_units:
- { name: "{{ my_name }}", type: 'service', state: "stopped", enabled: "no", restart: "no", instance: "no" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Load RetroNAS systems"
ansible.builtin.include_vars: retronas_systems.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} daemon-reload"
- name: "{{ my_name }} - build source"
ansible.builtin.shell:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "/usr/local/bin/dexattach"
- name: "{{ my_name }} - dexdrive module"
ansible.builtin.lineinfile:
path: /etc/modules-load.d/modules.conf
regex: "^dexdrive$"
line: "dexdrive"
- name: "{{ my_name }} - {{ retronas_user }} groups"
ansible.builtin.user:
name: "{{ retronas_user }}"
group: "disk"
append: true
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} daemon-reload"
ansible.builtin.systemd:
daemon_reload: true
================================================
FILE: ansible/install_linux-gadgets.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "linux-gadgets"
my_file: "install_{{ my_name }}"
module_name: "linux-gadgets"
templates:
- { name: "gadget-mass-storage-manage.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
paths:
- { name: "images", dest: "{{ retronas_path }}", state: "directory", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_group }}"}
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_litch.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "litch"
my_file: "install_litch"
module_name: "litch"
packages:
- python3
- python3-bs4
- git
templates:
- { name: "litch_login.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "litch_download.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "litch_download_clean.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "litch_claim.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - create GOG dir"
ansible.builtin.file:
path: "{{ retronas_path }}/itchio"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
mode: "0775"
state: directory
- name: "{{ my_name }} - download litch"
ansible.builtin.shell:
chdir: "{{ retronas_root }}/bin"
cmd: "git clone https://github.com/sairuk/litch.git"
creates: "{{ retronas_root }}/bin/litch"
- name: "{{ my_name }} - update litch"
ansible.builtin.shell:
chdir: "{{ retronas_root }}/bin/litch"
cmd: "git pull"
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_lynx.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "lynx"
my_file: "install_lynx"
module_name: "lynx"
packages:
- lynx
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_macproxy_classic.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "macproxy_classic"
my_file: "install_macproxy_classic"
module_name: "macproxy_classic"
packages:
- python3
- python3-venv
- python3-pip
service_name: "macproxy"
templates:
- { name: "{{ service_name }}.service", dest: "/etc/systemd/system" }
repo: https://github.com/rdmark/macproxy_classic.git
firewalld_ports:
- { port: 5001, protocol: tcp }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - clone repo"
ansible.builtin.git:
repo: "{{ repo }}"
dest: /opt/{{ my_name }}
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} Restart Services"
ansible.builtin.service:
name: "{{ service_name }}.service"
state: started
enabled: true
daemon_reload: true
================================================
FILE: ansible/install_mc.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "mc"
my_file: "install_mc"
module_name: "mc"
packages:
- mc
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Load RetroNAS systems"
ansible.builtin.include_vars: retronas_systems.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_megatools.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "megatools"
my_file: "install_megatools"
module_name: "megatools"
packages_build:
- build-essential
- libglib2.0-dev
- libssl-dev
- libcurl4-openssl-dev
- make
- gcc
- coreutils
- meson
- ninja-build
packages:
- megatools
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- block:
- name: "{{ my_name }} - Install distro package"
ansible.builtin.import_role:
name: retronas.role.package.latest
rescue:
- ansible.builtin.set_fact:
package_distro: false
- meta: clear_host_errors
- block:
- ansible.builtin.import_role:
name: retronas.role.package.latest
vars:
packages: "{{ packages_build }}"
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "/usr/local/bin/megatools"
when: not package_distro|default(true)
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_minicom.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "minicom"
my_file: "install_{{ my_name }}"
my_dir: ""
module_name: "minicom"
append_user_group: "dialout"
packages:
- minicom
- lrzsz
templates:
- { name: "minirc.dfl", dest: "/etc/minicom", mode: "0644", owner: "{{ retronas_user }}", group: "{{ retronas_user }}", force: no }
- { name: "minicom.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
script_links:
- { dest: "minicom-config.sh", src: "minicom.sh" }
paths:
- { name: "{{ my_name }}", dest: "/etc", state: "directory", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_user }}" }
- { name: "{{ my_name }}", dest: "{{ retronas_path }}", state: "directory", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_user }}"}
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.update-user
- name: "{{ my_name }} - script links"
ansible.builtin.file:
dest: "{{ retronas_root }}/scripts/{{ item.dest }}"
src: "{{ retronas_root }}/scripts/{{ item.src }}"
state: link
with_items: "{{ script_links }}"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_mister-organize.yml
================================================
---
- hosts: localhost
vars:
my_name: "MiSTer Organize"
my_file: "install_mister-organize"
module_name: "mister-organize"
packages:
- git
- curl
- unzip
paths:
- { name: "mister-organize", dest: "{{ retronas_path }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "romimport", dest: "{{ retronas_path }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755", force: true}
- { name: "mister-organize.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- ansible.builtin.assert:
that: ansible_architecture == "x86_64"
fail_msg: "Unsupported architecture"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Load RetroNAS Systems"
ansible.builtin.include_vars: retronas_systems.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from project repo"
ansible.builtin.git:
repo: "https://github.com/MiSTerOrganize/MiSTerOrganize.git"
dest: "{{ retronas_path}}/{{ module_name }}"
single_branch: true
clone: true
update: true
force: true
- name: "{{ my_name }} - setup local"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1"
- ansible.builtin.import_role:
name: retronas.role.system-config
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
vars:
system_key: "{{ module_name }}"
================================================
FILE: ansible/install_mister_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "MiSTer CIFS"
my_file: "install_mister_cifs"
module_name: "mister_cifs"
system_key: "mister"
top_level_paths:
- { name: "games", enabled: yes, generic: "roms", systems: yes }
- { name: "saves", enabled: yes, generic: "saves", systems: yes }
- { name: "savestates", enabled: yes, generic: "savestates", systems: yes }
- { name: "BIOS", enabled: yes, generic: "bios", systems: yes }
- { name: "wallpapers", enabled: yes, generic: "wallpapers", systems: no }
save_overrides:
- { name: "GAMEBOY2P", src: "nintendo/gameboy2p" }
- { name: "GBA2P", src: "nintendo/gameboyadvance2p" }
templates:
# - { name: "retronas_mister.conf", dest: "/etc/samba" }
- { name: "retronas-mister-dirs.service", dest: "/etc/systemd/system" }
- { name: "retronas-mister-dirs.timer", dest: "/etc/systemd/system" }
systemd_units:
- { name: "retronas-mister-dirs", type: 'service', state: "stopped", enabled: "no", restart: "no", instance: "no" }
- { name: "retronas-mister-dirs", type: 'timer', state: "stopped", enabled: "no", restart: "no", instance: "no" }
dirs_only: false
savedirs:
- "saves"
- "savestates"
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- name: "{{ my_name }} - create custom save directories"
ansible.builtin.file:
dest: "{{ retronas_path }}/{{ item.1 }}/{{ item.0.src|lower }}"
state: directory
loop: "{{ save_overrides|product(savedirs)|list }}"
- name: "{{ my_name }} - create custom save links"
ansible.builtin.file:
src: "../../{{ item.1 }}/{{ item.0.src|lower }}"
dest: "{{ retronas_path }}/{{ system_key }}/{{ item.1 }}/{{ item.0.name }}"
state: link
loop: "{{ save_overrides|product(savedirs)|list }}"
- ansible.builtin.import_role:
name: retronas.role.templates
when: dirs_only is false
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} daemon-reload"
ansible.builtin.systemd:
daemon_reload: true
================================================
FILE: ansible/install_mtcp-netdrive.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "mtcp-netdrive"
my_file: "install_mtcp-netdrive"
module_name: "mtcp-netdrive"
packages:
- screen
- curl
- unzip
paths:
- { name: "{{ my_name }}", dest: "/opt", state: "directory", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
templates:
- { name: "install_mtcp-netdrive.sh", dest: "{{ retronas_root }}/scripts", mode: "0755", force: "yes" }
- { name: "mtcp-netdrive.service", dest: "/etc/systemd/system", force: "yes" }
- { name: "mtcp-netdrive.sh", dest: "{{ retronas_root }}/scripts", mode: "0755", force: "yes" }
firewalld_rules:
- { zones: retro, service: mtcp-netdrive }
my_services:
- mtcp-netdrive
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - install mtcp-netdrive"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
daemon-reload: true
with_items: "{{ my_services }}"
#
# FIREWALL
#
- name: "{{ my_name }} - checking firewall rule"
ansible.builtin.stat:
path: /etc/firewalld/services
register: firewalld_services
- name: "{{ my_name }} - Generate firewall service"
ansible.builtin.template:
src: "templates/{{ my_file }}/mtcp-netdrive.xml.j2"
dest: "/etc/firewalld/services/mtcp-netdrive.xml"
owner: root
group: root
mode: 0644
when: firewalld_services.stat.exists
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_mysticbbs.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "mysticbbs"
my_file: "install_mysticbbs"
module_name: "mysticbbs"
packages:
- p7zip-full
- p7zip-rar
- screen
paths:
- { name: "{{ my_name }}", dest: "/opt", state: "directory", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
templates:
- { name: "mysticbbs.sh", dest: "{{ retronas_root }}/scripts", mode: "0755", force: "yes" }
- { name: "install_mysticbbs.sh", dest: "{{ retronas_root }}/scripts", mode: "0755", force: "yes" }
- { name: "mysticbbs-mis.service", dest: "/etc/systemd/system", force: "yes" }
- { name: "retronas_create_fileareas.ini", dest: "/opt/mysticbbs", force: "yes" }
- { name: "retronas_massupload.ini", dest: "/opt/mysticbbs", force: "yes" }
- { name: "create_filebone_na.py", dest: "/opt/mysticbbs", force: "yes" }
firewalld_rules:
- { zones: retro, service: mysticbbs }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Enable non-free repo for p7zip-rar"
ansible.builtin.apt_repository:
repo: deb http://deb.debian.org/debian/ {{ ansible_distribution_release }} main non-free-firmware non-free
state: present
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - install mysticbbs"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
- name: "{{ my_name }} - daemon-reload"
ansible.builtin.command:
cmd: "systemctl daemon-reload"
#
# FIREWALL
#
- name: "{{ my_name }} - checking firewall rule"
ansible.builtin.stat:
path: /etc/firewalld/services
register: firewalld_services
- name: "{{ my_name }} - Generate firewall service"
ansible.builtin.template:
src: "templates/{{ my_file }}/mysticbbs.xml.j2"
dest: "/etc/firewalld/services/mysticbbs.xml"
owner: root
group: root
mode: 0644
when: firewalld_services.stat.exists
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_nabu.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "nabu"
my_file: "install_{{ my_name }}"
my_dir: /opt/nabu
module_name: "nabu"
systemd_units:
- { name: "nabu", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
packages:
- unzip
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
links:
- { dest: "/home/{{ retronas_user }}/NABU Internet Adapter", src: "{{ retronas_path }}/roms/nabu" }
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - add {{ retronas_user }} to dialout group"
ansible.builtin.user:
name: "{{ retronas_user }}"
group: "dialout"
append: true
- name: "{{ my_name }} - links"
ansible.builtin.file:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
state: "{{ item.state|default('link') }}"
with_items: "{{ links }}"
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root}} {{ my_dir }}/nabu.sh"
================================================
FILE: ansible/install_nbd-client.yml
================================================
---
- hosts: localhost
vars:
my_name: "nbd-client"
my_file: "install_nbd-client"
module_name: "nbd-client"
packages:
- nbd-client
templates:
- { name: "nbd.conf", dest: "/etc/modules-load.d/" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - enable ndb kernel module"
ansible.builtin.shell:
cmd: "modprobe nbd"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_netatalk2.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "Netatalk2"
my_file: "install_netatalk2"
packages:
- libacl1
- libattr1
- libavahi-client3
- libavahi-common3
- libc6
- libcomerr2
- libcrack2
- libcups2
- libdb5.3
- libgcrypt20
- libgssapi-krb5-2
- libk5crypto3
- libkrb5-3
- libldap-2.4-2
- libpam0g
- libpam-modules
- libwrap0
- netbase
- perl
- aria2
- avahi-daemon
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.debug:
msg: "No longer supported, use Netatalk 4"
- ansible.builtin.assert:
that: true == false
- name: "{{ my_name }} - unhold netatalk package"
ansible.builtin.shell: "/usr/bin/apt-mark unhold netatalk"
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - download package for arm64"
ansible.builtin.shell:
chdir: "/tmp"
cmd: "aria2c --allow-overwrite=true http://mirror.aarnet.edu.au/pub/debian/pool/main/n/netatalk/netatalk_2.2.5-2+deb9u1_arm64.deb http://ftp.debian.org/debian/pool/main/n/netatalk/netatalk_2.2.5-2+deb9u1_arm64.deb"
when: ansible_architecture == "aarch64"
- name: "{{ my_name }} - download package for armhf"
ansible.builtin.shell:
chdir: "/tmp"
cmd: "aria2c --allow-overwrite=true http://mirror.aarnet.edu.au/pub/debian/pool/main/n/netatalk/netatalk_2.2.5-2+deb9u1_armhf.deb http://ftp.debian.org/debian/pool/main/n/netatalk/netatalk_2.2.5-2+deb9u1_armhf.deb"
when: ansible_architecture == "armhf"
- name: "{{ my_name }} - download package for x86_64"
ansible.builtin.shell:
chdir: "/tmp"
cmd: "aria2c --allow-overwrite=true http://mirror.aarnet.edu.au/pub/debian/pool/main/n/netatalk/netatalk_2.2.5-2+deb9u1_amd64.deb http://ftp.debian.org/debian/pool/main/n/netatalk/netatalk_2.2.5-2+deb9u1_amd64.deb"
when: ansible_architecture == "x86_64"
- name: "{{ my_name }} - download package for x86"
ansible.builtin.shell:
chdir: "/tmp"
cmd: "aria2c --allow-overwrite=true http://mirror.aarnet.edu.au/pub/debian/pool/main/n/netatalk/netatalk_2.2.5-2+deb9u1_i386.deb http://ftp.debian.org/debian/pool/main/n/netatalk/netatalk_2.2.5-2+deb9u1_i386.deb"
when: ansible_architecture == "i386"
- name: "{{ my_name }} - install package"
ansible.builtin.shell:
chdir: "/tmp"
cmd: "dpkg -i netatalk_2.2.5*.deb"
- name: "{{ my_name }} - hold netatalk package"
ansible.builtin.shell: "/usr/bin/apt-mark hold netatalk"
- name: "{{ my_name }} - configure /etc/default/netatalk"
ansible.builtin.template:
src: "templates/{{ my_file }}/default.j2"
dest: /etc/default/netatalk
owner: root
group: root
mode: '0644'
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - configure AppleVolumes.default"
ansible.builtin.template:
src: "templates/{{ my_file }}/AppleVolumes.default.j2"
dest: /etc/netatalk/AppleVolumes.default
owner: root
group: root
mode: '0644'
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - configure afpd.conf"
ansible.builtin.template:
src: "templates/{{ my_file }}/afpd.conf.j2"
dest: /etc/netatalk/afpd.conf
owner: root
group: root
mode: '0644'
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
with_items:
- avahi-daemon
- netatalk
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
with_items:
- avahi-daemon
- netatalk
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "netatalk2"
module_state: "present"
================================================
FILE: ansible/install_netatalk2x.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "Netatalk2.X"
my_file: "install_netatalk2x"
packages:
- avahi-daemon
- build-essential
- make
- automake
- autoconf
- libdb-dev
- libdb++-dev
- libavahi-common-dev
- libavahi-client-dev
- libavahi-core-dev
- libdbus-1-dev
- libssl-dev
- autotools-dev
- libtool
- libcups2-dev
- libavahi-client-dev
- libgcrypt20-dev
- expect
- libltdl-dev
- libtool-bin
- libevent-dev
services:
- avahi-daemon
- atalkd
- afpd
- papd
- timelord
- a2boot
templates:
- { name: "afpexpect.sh", dest: "{{ retronas_root }}/bin/netatalk2x/bin", mode: "0754" }
- { name: "AppleVolumes.default", dest: "{{ retronas_root }}/bin/netatalk2x/etc/netatalk" }
- { name: "afpd.conf", dest: "{{ retronas_root }}/bin/netatalk2x/etc/netatalk" }
- { name: "atalkd.conf", dest: "{{ retronas_root }}/bin/netatalk2x/etc/netatalk" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - check if netatalk package is available"
ansible.builtin.shell: "/usr/bin/apt-cache search netatalk | grep netatalk"
register: result
failed_when:
- result.rc >= 2
when:
- ansible_distribution == "Debian"
- block:
- name: "{{ my_name }} - unhold netatalk package"
ansible.builtin.shell: "/usr/bin/apt-mark unhold netatalk"
- name: "{{ my_name }} - remove package-based Netatalk"
ansible.builtin.package:
name: netatalk
state: absent
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - create install script"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ my_file }}.sh.j2"
dest: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
owner: root
group: root
mode: '0755'
- name: "{{ my_name }} - install from source"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
- name: "{{ my_name }} - templates"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ item.name }}.j2"
dest: "{{ item.dest }}/{{ item.name }}"
owner: "{{ item.owner|default('root') }}"
group: "{{ item.group|default('root') }}"
mode: "{{ item.mode|default('0644') }}"
with_items: "{{ templates }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
with_items: "{{ services }}"
when:
- result is defined
- result.rc == 0
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
with_items: "{{ services }}"
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "netatalk2x"
module_state: "present"
================================================
FILE: ansible/install_netatalk3.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "Netatalk3"
my_file: "install_netatalk3"
packages:
- avahi-daemon
- netatalk
my_services:
- avahi-daemon
- netatalk
config_settings:
- { section: "Global", option: "uam list", value: "uams_guest.so uams_clrtxt.so uams_dhx.so uams_dhx2.so" }
- { section: "Global", option: "hostname", value: "retroafp" }
- { section: "Global", option: "mimic model", value: "PowerMac" }
- { section: "Global", option: "zeroconf", value: "yes" }
- { section: "Global", option: "log level", value: "info" }
- { section: "Global", option: "log file", value: "/var/log/afp.log" }
- { section: "Global", option: "afp listen", value: "0.0.0.0" }
- { section: "Global", option: "include", value: "/etc/netatalk/retronas.conf" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - check if netatalk package is available"
ansible.builtin.shell: "/usr/bin/apt-cache search netatalk | grep netatalk"
register: result
failed_when:
- result.rc >= 2
- name: "{{ my_name }} - set fact if netatalk is not present"
ansible.builtin.set_fact:
no_netatalk: true
when: result.rc == 1
- name: "{{ my_name }} - end play if no netatalk package"
ansible.builtin.meta: end_play
when: no_netatalk is defined and no_netatalk is true
- name: "{{ my_name }} - unhold netatalk package"
ansible.builtin.shell: "/usr/bin/apt-mark unhold netatalk"
when: result.rc == 0
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - configure"
ansible.builtin.ini_file:
dest: /etc/netatalk/afp.conf
section: "{{ item.section }}"
option: "{{ item.option }}"
value: "{{ item.value }}"
with_items: "{{ config_settings }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - configure retro shares"
ansible.builtin.template:
src: "templates/{{ my_file }}/retronas.conf.j2"
dest: /etc/netatalk/retronas.conf
owner: root
group: root
mode: '0644'
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
with_items: "{{ my_services }}"
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
with_items: "{{ my_services }}"
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "netatalk3"
module_state: "present"
when: no_netatalk is undefined
================================================
FILE: ansible/install_netatalk3_source.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "Netatalk3"
my_file: "install_netatalk3"
packages:
- avahi-daemon
- build-essential
- libevent-dev
- libssl-dev
- libgcrypt-dev
- libkrb5-dev
- libpam0g-dev
- libwrap0-dev
- libdb-dev
- libtdb-dev
- libavahi-client-dev
- libacl1-dev
- libldap2-dev
- libcrack2-dev
- systemtap-sdt-dev
- libdbus-1-dev
- libdbus-glib-1-dev
- libglib2.0-dev
- libio-socket-inet6-perl
- tracker
packages_debian:
debian11:
- libmysqlclient-dev
- libtracker-sparql-2.0-dev
debian12:
- default-libmysqlclient-dev
- libtracker-sparql-3.0-dev
packages_ubuntu:
- libmysqlclient-dev
- libtracker-sparql-2.0-dev
- libtracker-miner-2.0-dev
my_services:
- avahi-daemon
- netatalk
config_settings:
- { section: "Global", option: "uam list", value: "uams_guest.so uams_clrtxt.so uams_dhx.so uams_dhx2.so" }
- { section: "Global", option: "hostname", value: "retroafp" }
- { section: "Global", option: "mimic model", value: "PowerMac" }
- { section: "Global", option: "zeroconf", value: "yes" }
- { section: "Global", option: "log level", value: "info" }
- { section: "Global", option: "log file", value: "/var/log/afp.log" }
- { section: "Global", option: "afp listen", value: "0.0.0.0" }
- { section: "Global", option: "include", value: "/etc/netatalk/retronas.conf" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts/", mode: '0755'}
- { name: "netatalk.service", dest: "/etc/systemd/system"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - check if netatalk package is available"
ansible.builtin.shell: "/usr/bin/apt-cache search netatalk | grep netatalk"
register: result
failed_when:
- result.rc >= 2
- name: "{{ my_name }} - unhold netatalk package"
ansible.builtin.shell: "/usr/bin/apt-mark unhold netatalk"
when: result.rc == 0
- name: "{{ my_name }} - remove package-based Netatalk"
ansible.builtin.package:
name: netatalk
state: absent
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - Install build tools (debian)"
ansible.builtin.package:
name: "{{ packages_debian['debian' + ansible_distribution_major_version ] }}"
state: latest
when: ansible_distribution == 'Debian'
- name: "{{ my_name }} - Install build tools (ubuntu)"
ansible.builtin.package:
name: "{{ packages_ubuntu }}"
state: latest
when: ansible_distribution == 'Ubuntu'
- name: "{{ my_name }} - templates"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ item.name }}.j2"
dest: "{{ item.dest }}/{{ item.name }}"
owner: "{{ item.owner|default('root') }}"
group: "{{ item.group|default('root') }}"
mode: "{{ item.mode|default('0644') }}"
with_items: "{{ templates }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - install from source"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
- name: "{{ my_name }} - configure"
ansible.builtin.ini_file:
dest: /etc/netatalk/afp.conf
section: "{{ item.section }}"
option: "{{ item.option }}"
value: "{{ item.value }}"
with_items: "{{ config_settings }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - configure retro shares"
ansible.builtin.template:
src: "templates/{{ my_file }}/retronas.conf.j2"
dest: /etc/netatalk/retronas.conf
owner: root
group: root
mode: '0644'
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
with_items: "{{ my_services }}"
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
daemon-reload: true
with_items: "{{ my_services }}"
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "netatalk3"
module_state: "present"
================================================
FILE: ansible/install_netatalk4.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "Netatalk4"
my_file: "install_netatalk4"
module_name: "netatalk4"
packages:
- avahi-daemon
- avahi-utils
- bison
- build-essential
- cmark
- flex
- libacl1-dev
- libavahi-client-dev
- libcmark-dev
- libcrack2-dev
- libdb-dev
- libdbus-1-dev
- libdbus-glib-1-dev
- libevent-dev
- libgcrypt-dev
- libglib2.0-dev
- libiniparser-dev
- libio-socket-inet6-perl
- libkrb5-dev
- libldap2-dev
- libmptcpwrap0
- libpam0g-dev
- libssl-dev
- libtdb-dev
- libtirpc-dev
- libtirpc3
- libwrap0-dev
- meson
- ninja-build
- po4a
- systemtap-sdt-dev
- tracker
packages_debian:
debian11:
- libmysqlclient-dev
- libtracker-sparql-2.0-dev
debian12:
- default-libmysqlclient-dev
- libtracker-sparql-3.0-dev
debian13:
- default-libmysqlclient-dev
- libtracker-sparql-3.0-dev
packages_ubuntu:
- libmysqlclient-dev
- libtracker-sparql-2.0-dev
- libtracker-miner-2.0-dev
my_services:
- avahi-daemon
- atalkd
- netatalk
afp_settings:
- { section: "Global", option: "uam list", value: "uams_guest.so uams_clrtxt.so uams_dhx.so uams_dhx2.so" }
- { section: "Global", option: "hostname", value: "retroafp" }
- { section: "Global", option: "mimic model", value: "PowerMac" }
- { section: "Global", option: "zeroconf", value: "yes" }
- { section: "Global", option: "log level", value: "info" }
- { section: "Global", option: "log file", value: "/var/log/afp.log" }
- { section: "Global", option: "afp listen", value: "0.0.0.0" }
- { section: "Global", option: "appletalk", value: "yes" }
- { section: "Global", option: "spotlight", value: "yes" }
- { section: "Global", option: "legacy icon", value: "globe" }
# - { section: "Global", option: "include", value: "/opt/retronas/bin/netatalk4/etc/retronas.conf" }
- { section: "retronas", option: "path", value: "{{ retronas_path }}" }
- { section: "retronas", option: "rwlist", value: "{{ retronas_user }}" }
- { section: "retronas", option: "rolist", value: "guest" }
- { section: "retronas", option: "follow symlinks", value: "yes" }
paths:
- { name: "netatalk4", dest: "/opt/retronas/bin", mode: '0755' }
- { name: "etc", dest: "/opt/retronas/bin/netatalk4", mode: '0755' }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts/", mode: '0755' }
# - { name: "retronas.conf", dest: "/opt/retronas/bin/netatalk4/etc" }
old_services:
- { name: "atalkd.service", dest: "/etc/systemd/system"}
- { name: "netatalk.service", dest: "/etc/systemd/system"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - check if netatalk package is available"
ansible.builtin.shell: "/usr/bin/apt-cache search netatalk | grep netatalk"
register: result
failed_when:
- result.rc >= 2
- name: "{{ my_name }} - unhold netatalk package"
ansible.builtin.shell: "/usr/bin/apt-mark unhold netatalk"
when: result.rc == 0
- name: "{{ my_name }} - remove package-based Netatalk"
ansible.builtin.package:
name: netatalk
state: absent
- name: "{{ my_name }} - remove old service files"
ansible.builtin.stat:
path: "{{ item.dest }}/{{ item.name }}"
loop: "{{ old_services }}"
register: old_services_check
- name: "{{ my_name }} - Stopping existing netatalk service(s) during installation"
ansible.builtin.service:
name: "{{ item.stat.path }}"
state: stopped
daemon-reload: true
loop: "{{ old_services_check.results }}"
when: old_services_check is defined and
item.stat.exists is true
- name: "{{ my_name }} - Remove old service files"
ansible.builtin.file:
path: "{{ item.stat.path }}"
state: absent
loop: "{{ old_services_check.results }}"
when: old_services_check is defined and
item.stat.exists is true
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - Install build tools (debian)"
ansible.builtin.package:
name: "{{ packages_debian['debian' + ansible_distribution_major_version ] }}"
state: latest
when: ansible_distribution == 'Debian'
- name: "{{ my_name }} - Install build tools (ubuntu)"
ansible.builtin.package:
name: "{{ packages_ubuntu }}"
state: latest
when: ansible_distribution == 'Ubuntu'
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - install from source"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
- name: "{{ my_name }} - configure"
ansible.builtin.ini_file:
dest: /opt/retronas/bin/netatalk4/etc/afp.conf
section: "{{ item.section }}"
option: "{{ item.option }}"
value: "{{ item.value }}"
with_items: "{{ afp_settings }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - atalkd"
ansible.builtin.lineinfile:
path: /opt/retronas/bin/netatalk4/etc/atalkd.conf
regexp: "^{{ ansible_default_ipv4.interface }}.*"
line: "{{ ansible_default_ipv4.interface }} -router -phase 2 -net 1 -zone \"retroafp\""
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
with_items: "{{ my_services }}"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
daemon-reload: true
with_items: "{{ my_services }}"
================================================
FILE: ansible/install_netlink.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "netlink"
my_file: "install_netlink"
module_name: "netlink"
packages:
- curl
- unzip
- dnsmasq
- dnsutils
- libnetfilter-queue-dev
- libnetfilter-queue1
- ppp
- arping
- nftables
- tcpd
- wvdial
- python3-pip
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}.service", dest: "/etc/systemd/system" }
- { name: "{{ my_name }}.conf", dest: "/etc/dnsmasq.d" }
- { name: "{{ my_name }}.patch", dest: "/tmp" }
paths:
- { name: "dnsmasq.d", dest: "/etc" }
firewalld_ports:
- { zone: modern, port: 65432, protocol: tcp }
- { zone: modern, port: 20001, protocol: udp }
- { zone: modern, port: 20002, protocol: udp }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Run installer"
ansible.builtin.shell:
cmd: "./{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
chdir: "{{ retronas_root }}/scripts"
executable: /bin/bash
notify: "{{ my_name }} Restart Services"
- name: "{{ my_name }} - Patch com port range detection"
ansible.builtin.patch:
src: /tmp/{{ my_name }}.patch
dest: /opt/{{ my_name }}/tunnel.py
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} Restart Services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
daemon_reload: true
with_items:
- "{{ my_name }}.service"
================================================
FILE: ansible/install_netmount.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "netmount"
my_file: "install_netmount"
module_name: "netmount"
packages:
- bzip2
- python3
- python3-yaml
systemd_units:
- { name: "netmount-drives-retronas", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "netmount-confman.py", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "netmount-confman.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "retronas.yaml", dest: "{{ retronas_path }}/config/netmount", mode: "0755" }
firewalld_rules:
- { zones: retro, service: netmount }
paths:
- dos
- config/netmount
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - build top level"
ansible.builtin.file:
path: "{{ retronas_path }}/{{ item }}"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: directory
mode: "0775"
loop: "{{ paths }}"
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from git"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "/opt/netmount/netmount"
- name: "{{ my_name }} - Build service files"
ansible.builtin.shell: "python3 {{ retronas_root }}/scripts/netmount-confman.py"
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.instance == 'no'
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: restarted
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.restart == 'yes'
- item.instance == 'no'
================================================
FILE: ansible/install_network-presets-ethernet-dhcp.yml
================================================
---
# networkmanager
- ansible.builtin.import_playbook: install_networkmanager.yml
- hosts: localhost
gather_facts: false
vars:
my_name: "network-presets-standalone-ethernet-dhcp"
my_file: "install_{{ my_name }}"
connections:
- { name: "ethernet", state: "absent" } # remove it first because modules are a pain some times
- { name: "wifi-retronas", state: "absent" }
- { name: "ethernet", ipv4method: "auto", ifname: "{{ retronas_net_retro_interface }}", type: "ethernet" }
disable_services:
- dhcpcd
- dnsmasq-retro
- firewalld
- hostapd-retronas
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "config connections"
community.general.nmcli:
type: "{{ item.type | default('ethernet') }}"
conn_name: "{{ item.name }}"
ip4: "{{ item.ipv4addr | default(omit) }}"
gw4: "{{ item.ipv4gw | default(omit) }}"
dns4: "{{ item.ipv4dns | default(omit) }}"
method4: "{{ item.ipv4method | default('manual') }}"
ifname: "{{ item.ifname | default(omit) }}"
route_metric4: "{{ item.metric | default(omit) }}"
state: "{{ item.state| default('present') }}"
autoconnect: true
with_items:
- '{{ connections }}'
- name: "{{ my_name }} - check which services is installed"
ansible.builtin.stat:
path: /usr/lib/systemd/system/{{ item }}.service
loop: "{{ disable_services }}"
register: services_installed
- name: "{{ my_name }} - back to dhcp, turn off our services"
ansible.builtin.service:
name: "{{ item.item }}"
state: stopped
enabled: false
force: true
loop: "{{ services_installed.results }}"
when: item.stat.exists is true
# alt presets removed
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "network-presets-standalone"
module_state: "absent"
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "network-presets-zoned"
module_state: "absent"
================================================
FILE: ansible/install_network-presets-standalone.yml
================================================
---
# networkmanager
- ansible.builtin.import_playbook: install_networkmanager.yml
# hostapd
# using NM api mode now
# - ansible.builtin.import_playbook: install_hostapd.yml
# dnsmassq
# IMPORTED IN DNSMASQ-RETRO - ansible.builtin.import_playbook: install_dnsmasq.yml
- ansible.builtin.import_playbook: install_dnsmasq-retro.yml
# ntp
- ansible.builtin.import_playbook: install_ntp.yml
# dhpcd
# - ansible.builtin.import_playbook: install_dhcpcd.yml
- hosts: localhost
gather_facts: true
vars:
my_name: "network-presets-standalone"
my_file: "install_{{ my_name }}"
templates:
- { name: "dhcpcd.conf", dest: "/etc", mode: "0640", force: "yes" }
connections:
- { name: "ethernet", state: "absent" }
- { name: "wifi-retronas", state: "absent" }
my_packages:
- pwgen
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Install packages"
ansible.builtin.package:
name: "{{ my_packages }}"
state: latest
- name: "{{ my_name }} - generate password"
shell:
cmd: pwgen -s 12 1
no_log: true
changed_when: false
register: retronas_wifi_password
- name: "{{ my_name }} - generate unique ssid"
shell:
cmd: echo "retronas-$(pwgen 8 -A -0 -B 1)"
register: retronas_net_wifi_ssid_generated
changed_when: false
when: retronas_net_wifi_ssid == ""
- name: "{{ my_name }} - config connections"
community.general.nmcli:
type: "{{ item.type | default('ethernet') }}"
conn_name: "{{ item.name }}"
ip4: "{{ item.ipv4addr | default(omit) }}"
gw4: "{{ item.ipv4gw | default(omit) }}"
dns4: "{{ item.ipv4dns | default(omit) }}"
method4: "{{ item.ipv4method | default('manual') }}"
ifname: "{{ item.ifname | default(omit) }}"
route_metric4: "{{ item.metric | default(omit) }}"
state: "{{ item.state| default('present') }}"
autoconnect: true
with_items:
- '{{ connections }}'
- name: "{{ my_name }} - config ethernet"
community.general.nmcli:
type: "ethernet"
conn_name: "ethernet"
ifname: "{{ retronas_net_retro_interface }}"
ip4: "{{ retronas_net_retro_ip }}/{{ retronas_net_retro_subnet }}"
gw4: "{{ retronas_net_retro_router }}"
dns4: "{{ retronas_net_retro_dns }}"
method4: "manual"
state: "present"
autoconnect: true
- name: "{{ my_name }} - configure wifi ap"
community.general.nmcli:
type: "wifi"
conn_name: "wifi-retronas"
ifname: "{{ retronas_net_wifi_interface }}"
ssid: "{{ retronas_net_wifi_ssid if retronas_net_wifi_ssid_generated == '' else retronas_net_wifi_ssid_generated.stdout }}"
ip4: "{{ retronas_net_wifi_ip }}/{{ retronas_net_wifi_subnet }}"
# gw4: "{{ retronas_net_wifi_router }}"
never_default4: true
dns4: "{{ retronas_net_wifi_dns }}"
method4: "manual"
wifi_sec:
key-mgmt: wpa-psk
psk: "{{ retronas_wifi_password.stdout }}"
wifi:
mode: "ap"
channel: "{{ retronas_net_wifi_channel }}"
band: "{{ retronas_net_wifi_hwmode }}"
state: present
autoconnect: true
- name: "{{ my_name }} - templates"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ item.name }}.j2"
dest: "{{ item.dest }}/{{ item.name }}"
owner: "{{ item.owner|default('root') }}"
group: "{{ item.group|default('root') }}"
mode: "{{ item.mode|default('0644') }}"
force: "{{ item.force|default('yes') }}"
loop: "{{ templates }}"
- name: "{{ my_name }} - check firewalld is installed"
ansible.builtin.stat:
path: /usr/lib/systemd/system/firewalld.service
register: firewalld_installed
- name: "{{ my_name }} - everything is retro here so disabling the firewalld zoned config"
ansible.builtin.service:
name: firewalld.service
state: stopped
enabled: false
force: true
when: firewalld_installed.stat.exists is true
- name: "{{ my_name }} - check dhcpcd is installed"
ansible.builtin.stat:
path: /usr/lib/systemd/system/dhcpcd.service
register: dhcpcd_installed
- name: "{{ my_name }} - restart dhcpcd"
ansible.builtin.service:
name: dhcpcd.service
state: stopped
enabled: false
force: true
when: dhcpcd_installed.stat.exists is true
- name: "{{ my_name }} - check hostapd is installed"
ansible.builtin.stat:
path: /usr/lib/systemd/system/hostapd.service
register: hostapd_installed
- name: "{{ my_name }} - remove hostapd dnsmasq configuration"
ansible.builtin.file:
path: /etc/dnsmasq.d/retro/hostapd-dnsmasq.conf
state: absent
when: hostapd_installed.stat.exists is true
- name: "{{ my_name }} - stop hostapd"
ansible.builtin.service:
name: hostapd-retronas.service
state: stopped
enabled: false
force: true
when: hostapd_installed.stat.exists is true
- name: "{{ my_name }} - restart dnsmasq"
ansible.builtin.service:
name: dnsmasq-retro.service
state: restarted
enabled: true
force: true
# alt preset removed
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "network-presets-zoned"
module_state: "absent"
# this preset added
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "network-presets-standalone"
module_state: "present"
================================================
FILE: ansible/install_network-presets-zoned.yml
================================================
---
# networkmanager
- ansible.builtin.import_playbook: install_networkmanager.yml
# firewalld
- ansible.builtin.import_playbook: install_firewalld.yml
- ansible.builtin.import_playbook: install_firewalld-zones.yml
# dnsmasq
# IMPORTED IN DNSMASQ-RETRO - ansible.builtin.import_playbook: install_dnsmasq.yml
- ansible.builtin.import_playbook: install_dnsmasq-retro.yml
# ntp
- ansible.builtin.import_playbook: install_ntp.yml
# dhcpcd
- ansible.builtin.import_playbook: install_dhcpcd.yml
- hosts: localhost
gather_facts: false
vars:
my_name: "network-presets-zoned"
my_file: "install_{{ my_name }}"
templates:
- { name: "dhcpcd.conf", dest: "/etc", mode: "0640", force: "yes" }
connections:
- { name: "ethernet", state: "absent" } # remove it first because modules are a pain some times
- { name: "wifi-retronas", state: "absent" }
- { name: "ethernet", ipv4addr: "{{ retronas_net_retro_ip }}/{{ retronas_net_retro_subnet }}", ipv4dns: "{{ retronas_net_retro_dns }}", ipv4method: "manual", ifname: "{{ retronas_net_retro_interface }}", type: "ethernet", ipv4never_default4: true }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "config connections"
community.general.nmcli:
type: "{{ item.type | default('ethernet') }}"
conn_name: "{{ item.name }}"
ip4: "{{ item.ipv4addr | default(omit) }}"
gw4: "{{ item.ipv4gw | default(omit) }}"
never_default4: "{{ item.ipv4never_default4 | default(omit) }}"
dns4: "{{ item.ipv4dns | default(omit) }}"
method4: "{{ item.ipv4method | default('manual') }}"
ifname: "{{ item.ifname | default(omit) }}"
route_metric4: "{{ item.metric | default(omit) }}"
state: "{{ item.state| default('present') }}"
autoconnect: true
with_items:
- '{{ connections }}'
- name: "{{ my_name }} - check hostapd is installed"
ansible.builtin.stat:
path: /usr/lib/systemd/system/hostapd.service
register: hostapd_installed
- name: "{{ my_name }} - remove hostapd dnsmasq configuration"
ansible.builtin.file:
path: /etc/dnsmasq.d/retro/hostapd-dnsmasq.conf
state: absent
when: hostapd_installed.stat.exists is true
- name: "{{ my_name }} - stop hostapd"
ansible.builtin.service:
name: hostapd-retronas.service
state: stopped
enabled: false
force: true
when: hostapd_installed.stat.exists is true
- name: "{{ my_name }} - templates"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ item.name }}.j2"
dest: "{{ item.dest }}/{{ item.name }}"
owner: "{{ item.owner|default('root') }}"
group: "{{ item.group|default('root') }}"
mode: "{{ item.mode|default('0644') }}"
force: "{{ item.force|default('yes') }}"
with_items: "{{ templates }}"
- name: "{{ my_name }} - restart dhcpcd"
ansible.builtin.service:
name: dhcpcd.service
state: restarted
enabled: true
force: true
- name: "{{ my_name }} - restart dnsmasq"
ansible.builtin.service:
name: dnsmasq-retro.service
state: restarted
enabled: true
force: true
- name: "{{ my_name }} - start firewalld"
ansible.builtin.service:
name: firewalld.service
state: restarted
enabled: true
force: true
# alt preset removed
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "network-presets-standalone"
module_state: "absent"
# this preset added
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "network-presets-zoned"
module_state: "present"
================================================
FILE: ansible/install_networkmanager.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "network manager"
my_file: "install_{{ my_name }}"
my_services: "NetworkManager.service"
collections:
- { collection: community.general, creates: community/general/nmcli }
tasks:
- name: "{{ my_name }} - does nothing"
debug:
msg: "currently does nothing"
================================================
FILE: ansible/install_nfs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
module_name: "nfs"
tasks:
- ansible.builtin.import_role:
name: retronas.role.nfs
================================================
FILE: ansible/install_nginx.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
module_name: "nginx"
roles:
- retronas.role.sslcert
- retronas.role.nginx
- retronas.role.system-config
================================================
FILE: ansible/install_ntp.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "ntp"
my_service: "openntpd"
my_file: "install_ntp"
module_name: "ntp"
packages:
- openntpd
remove_packages:
- ntp
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Load RetroNAS systems"
ansible.builtin.include_vars: retronas_systems.yml
- name: "{{ my_name }} - remove packages"
ansible.builtin.package:
name: "{{ remove_packages }}"
state: absent
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - listen"
ansible.builtin.lineinfile:
path: "/etc/openntpd/ntpd.conf"
search_string: "^listen on *$"
insertafter: "^# Addresses to listen on (ntpd does not listen by default)$"
line: "listen on *"
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "openntpd.service"
state: restarted
daemon_reload: true
enabled: true
================================================
FILE: ansible/install_open-iscsi.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "open-iscsi"
my_file: "install_{{ my_name }}"
module_name: "open-iscsi"
packages:
- open-iscsi
my_services:
- open-iscsi
templates:
- { name: "iscsi-manager-target-login.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Enable startup services"
ansible.builtin.service:
name: ssh
state: started
enabled: true
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_openssh.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "OpenSSH"
module_name: "openssh"
packages:
- openssh-client
- openssh-server
- openssh-sftp-server
firewalld_rules:
- { zone: retro, service: ssh }
- { zone: modern, service: ssh }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
notify: "{{ my_name }} - Restart ssh"
- name: "{{ my_name }} - Enable startup services"
ansible.builtin.service:
name: ssh
state: started
enabled: true
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart ssh"
ansible.builtin.service:
name: ssh
state: restarted
================================================
FILE: ansible/install_pandoc.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
- my_name: "pandoc"
- my_file: "install_pandoc"
- packages:
- pandoc
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Install packages"
package:
name: "{{ packages }}"
state: latest
- ansible.builtin.import_playbook: retronas_system_config.yml
vars:
module_name: "pandoc"
module_state: "present"
================================================
FILE: ansible/install_pfsshell.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "pfsshell"
my_file: "install_pfsshell"
module_name: "pfsshell"
packages:
- make
- gcc
- coreutils
- meson
- ninja-build
- libfuse-dev
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - install script"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ my_file }}.sh.j2"
dest: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
owner: root
group: root
mode: '0750'
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "/usr/local/bin/pfsfuse"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_pi1541.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "pi1541"
my_file: "install_{{ my_name }}"
module_name: "pi1541"
paths:
- { name: "{{ my_name }}", dest: "{{ retronas_path }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "{{ my_name }}", dest: "/mnt" }
templates:
- { name: "{{ my_name }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_piscsi.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "piscsi"
my_file: "install_piscsi"
module_name: "piscsi"
packages:
- bridge-utils
- build-essential
- disktype
- clang
- genisoimage
- git
- libev-dev
- libevdev2
- libgmock-dev
- libpcap-dev
- libpcap0.8-dev
- libprotobuf-dev
- libspdlog-dev
- man2html
- nginx-light
- protobuf-compiler
- python3
- python3-dev
- python3-pip
- python3-setuptools
- python3-venv
- python3-wheel
- unar
- unzip
- ca-certificates
- dosfstools
- kpartx
- unzip
- unar
- gettext
- rsyslog
paths:
- { name: "{{ my_name }}", dest: "{{ retronas_path }}", owner: "{{ retronas_user }}", group: '{{ retronas_group }}' }
- { name: "src", dest: "{{ retronas_root }}", owner: "{{ retronas_user }}", group: '{{ retronas_group }}' }
- { name: "{{ my_name }}", src: "{{ retronas_path }}/{{ my_name }}", dest: "/home/{{ retronas_user }}", state: "link" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
- { name: "{{ my_file }}_standard.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
- { name: "{{ my_name }}_retronas_patch.diff", dest: "{{ retronas_root }}/src"}
- { name: "{{ my_name }}.service", dest: "/etc/systemd/system"}
systemd_units:
- { name: "rsyslog", type: 'service', state: "restarted", enabled: "yes", restart: "yes", instance: "no" }
- { name: "piscsi", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
include_vars: retronas_vars.yml
# libpcap can conflict with libpcap from backport (tcpdump etc)
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/install_{{ my_name }}.sh"
creates: "{{ retronas_root }}/bin/{{ my_name }}/{{ my_name }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - password file"
ansible.builtin.copy:
dest: /etc/{{ my_name }}_passwd
content: retronas
mode: 0600
owner: root
group: root
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.instance == 'no'
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: restarted
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.restart == 'yes'
- item.instance == 'no'
================================================
FILE: ansible/install_proftpd.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "ProFTPd"
my_file: "install_proftpd"
module_name: "proftpd"
packages:
- avahi-daemon
- proftpd-core
templates:
- { name: "retronas.conf", dest: "/etc/proftpd/conf.d" }
- { name: "ftp.service", dest: "/etc/avahi/services" }
firewalld_rules:
- { name: ftp, zone: retro }
- { name: ftp, zone: modern }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - remove mod_unique_id.c"
ansible.builtin.ini_file:
path: /etc/proftpd/modules.conf
section: null
option: "LoadModule mod_unique_id.c"
state: absent
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: proftpd
state: started
enabled: true
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
with_items:
- avahi-daemon
- proftpd
================================================
FILE: ansible/install_ps2_openps2loader.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "PS2 OpenPS2Loader"
my_file: "install_ps2_openps2loader"
my_dir: "{{ retronas_path }}/ps2/OpenPS2Loader"
module_name: "ps2_openps2loader"
paths:
- { name: "APPS", dest: "{{ my_dir }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "ART", dest: "{{ my_dir }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "CFG", dest: "{{ my_dir }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "CHT", dest: "{{ my_dir }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "LNG", dest: "{{ my_dir }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "THM", dest: "{{ my_dir }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
- { name: "VMC", dest: "{{ my_dir }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
templates:
- { name: "retronas_ps2.conf", dest: "/etc/samba" }
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.paths
- name: "{{ my_name }} - check old pops dir"
ansible.builtin.stat:
path: "{{ my_dir }}/POPS"
register: old_pops
- debug:
msg: "{{ old_pops }}"
- name: "{{ my_name }} - rename old pops dir"
ansible.builtin.shell:
cmd: "mv {{ my_dir }}/POPS {{ my_dir }}/POPS-OLD"
when: old_pops.stat.exists is true
- name: "{{ my_name }} - build symlinks"
ansible.builtin.file:
src: "../../roms/{{ item.src }}"
dest: "{{ my_dir }}/{{ item.ops2l }}"
state: link
loop: "{{ system_map }}"
when:
- item.ops2l | length > 0
- name: "{{ my_name }} - configure includes file"
ansible.builtin.ini_file:
path: /etc/samba/smb.conf
section: ps2
option: "include"
value: "/etc/samba/retronas_ps2.conf"
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.system-config
- ansible.builtin.import_role:
name: retronas.role.samba
================================================
FILE: ansible/install_ps2_udpbd.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "ps2_udpbd"
my_file: "install_ps2_udpbd"
module_name: "ps2_udpbd"
append_user_group: "disk"
systemd_units:
- { name: "ps2_udpbd", type: 'service', state: "stopped", enabled: "no", restart: "no", instance: "no" }
packages:
- make
- gcc
- g++
- git
- build-essential
paths:
- { name: "{{ my_name }}", dest: "{{ retronas_path }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
templates:
- { name: "udpbd_manager.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}.service", dest: "/etc/systemd/system" }
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root}} /bin/ps2_udpbd"
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.instance == 'no'
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.update-user
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: restarted
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.restart == 'yes'
- item.instance == 'no'
================================================
FILE: ansible/install_ps3netsrv.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "ps3netsrv"
my_file: "install_ps3netsrv"
module_name: "ps3netsrv"
system_key: "ps3netsrv"
systemd_units:
- { name: "ps3netsrv", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
- { name: "ps3netsrv-perms", type: 'service', state: "started", enabled: "no", restart: "yes", instance: "no" }
- { name: "ps3netsrv-perms", type: 'timer', state: "started", enabled: "yes", restart: "yes", instance: "no" }
packages:
- make
- automake
- autoconf
- gcc
- g++
- meson
- ninja-build
- curl
- wget
- build-essential
- unzip
- libmbedtls-dev
- coreutils
- jq
packages_debian:
debian10:
- libmbedtls12
debian11:
- libmbedtls12
debian12:
- libmbedtls14
debian13:
- libmbedtls21
packages_ubuntu:
- libmbedtls14
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "ps3netsrv.service", dest: "/usr/lib/systemd/system" }
- { name: "ps3netsrv-perms.service", dest: "/usr/lib/systemd/system" }
- { name: "ps3netsrv-perms.timer", dest: "/usr/lib/systemd/system" }
firewalld_rules:
- { zones: retro, service: ps3netsrv }
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - Install build tools (debian)"
ansible.builtin.package:
name: "{{ packages_debian['debian' + ansible_distribution_major_version] }}"
state: latest
when: ansible_distribution == 'Debian'
- name: "{{ my_name }} - Install build tools (ubuntu)"
ansible.builtin.package:
name: "{{ packages_ubuntu }}"
state: latest
when: ansible_distribution == 'Ubuntu'
- name: "{{ my_name }} - build top level"
ansible.builtin.file:
path: "{{ retronas_path }}/ps3/ps3netsrv"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: directory
mode: "0775"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - build layout"
ansible.builtin.file:
src: "../../roms/{{ item.src }}"
dest: "{{ retronas_path }}/ps3/ps3netsrv/{{ item.ps3netsrv }}"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: link
loop: "{{ system_map }}"
when:
- item.ps3netsrv | length > 0
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root}}/bin/ps3netsrv"
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.instance == 'no'
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: restarted
daemon_reload: true
with_items: "{{ systemd_units }}"
when:
- item.restart == 'yes'
- item.instance == 'no'
- name: "{{ my_name }} - Restart instances"
ansible.builtin.service:
name: "{{ item.1.name }}{{ item.0.dest }}.{{ item.1.type }}"
state: restarted
daemon_reload: true
with_items:
- "{{ system_map }}"
- "{{ systemd_units }}"
when:
- item.1.restart == 'yes'
- item.1.instance == 'yes'
================================================
FILE: ansible/install_pygopherd.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "pygopherd"
my_file: "install_pygopherd"
module_name: "pygopherd"
packages:
- python3
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "{{ my_name }}.conf", dest: "{{ retronas_root }}/etc" }
- { name: "{{ my_name }}.service", dest: "/usr/lib/systemd/system" }
firewalld_ports:
- { port: 70, protocol: tcp }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "opt/pygopherd/bin/pygopherd"
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
daemon_reload: true
with_items:
- "{{ my_name }}"
================================================
FILE: ansible/install_rclone.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "rclone"
my_file: "install_rclone"
module_name: "rclone"
packages:
- rclone
templates:
- { name: "{{ my_name }}-webui.service", dest: "/etc/systemd/system", mode: "0644" }
services:
- "{{ my_name }}-webui.service"
firewalld_ports:
- { port: 5572, protocol: tcp, zone: retro }
- { port: 5572, protocol: tcp, zone: modern }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.htpasswd
notify: "{{ my_name }} - Restart service"
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
enabled: true
state: restarted
daemon_reload: true
loop: "{{ services }}"
================================================
FILE: ansible/install_recalbox_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "Recalbox CIFS"
my_file: "install_recalbox_cifs"
module_name: "recalbox_cifs"
system_key: "recalbox"
top_level_paths:
- { name: "ROMS", enabled: yes, generic: "roms", systems: yes }
- { name: "SAVES", enabled: yes, generic: "saves", systems: yes }
- { name: "BIOS", enabled: yes, generic: "bios", systems: yes }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_redumper.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "redumper"
my_file: "install_{{ my_name }}"
module_name: "redumper"
packages:
- unzip
- jq
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root}}/bin/ps3netsrv"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_retroaimserver.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "retroaimserver"
my_file: "install_retroaimserver"
my_dir: "/opt/retro-aim-server"
module_name: "retroaimserver"
systemd_units:
- { name: "retro-aim-server", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
packages:
- curl
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "retro-aim-server.service", dest: "/etc/systemd/system/" }
firewalld_rules:
- { zones: retro, service: retroaimserver }
settings_env:
- { regex: "^export OSCAR_HOST=.*", line: "export OSCAR_HOST={{ retronas_net_retro_ip }}" }
- { regex: "^export DISABLE_AUTH=true", line: "export DISABLE_AUTH=false" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ my_dir }}/retro_aim_server"
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items: "{{ systemd_units }}"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - configure defaults"
ansible.builtin.lineinfile:
path: "{{ my_dir }}/settings.env"
regexp: "{{ item.regex }}"
line: "{{ item.line }}"
with_items: "{{ settings_env }}"
#
# FIREWALL
#
- name: "{{ my_name }} - checking firewall rule"
ansible.builtin.stat:
path: /etc/firewalld/services
register: firewalld_services
- name: "{{ my_name }} - Generate firewall service"
ansible.builtin.template:
src: "templates/{{ my_file }}/retroaimserver.xml.j2"
dest: "/etc/firewalld/services/retroaimserver.xml"
owner: root
group: root
mode: 0644
when: firewalld_services.stat.exists
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: restarted
daemon_reload: true
with_items: "{{ systemd_units }}"
================================================
FILE: ansible/install_retroarch_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "RetroArch Based Systems CIFS"
my_file: "install_retroarch_cifs"
module_name: "retroarch_cifs"
system_key: "retroarch"
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_retrodeck_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "retrodeck CIFS"
my_file: "install_retrodeck_cifs"
module_name: "retrodeck_cifs"
system_key: "retrodeck"
top_level_paths:
- { name: "roms", enabled: yes, generic: "roms", systems: yes }
# - { name: "saves", enabled: yes, generic: "saves", systems: yes }
- { name: "bios", enabled: yes, generic: "bios", systems: yes }
internal_symlinks:
- { src: 'commodore/amiga', dest: 'ags' }
- { src: 'commodore/amiga', dest: 'amiga600' }
- { src: 'capcom/cps1', dest: 'cps' }
- { src: 'mame/mame', dest: 'mame-advmame' }
- { src: 'nec/pcenginecd', dest: 'tg-cd' }
- { src: 'sega/megacd', dest: 'segacd' }
- { src: 'sega/megacd', dest: 'megacdjp' }
- { src: 'sega/megadrive', dest: 'genesis' }
- { src: 'sega/megadrive', dest: 'megadrivejp' }
- { src: 'snk/neogeocd', dest: 'neogeocdjp' }
- { src: 'sega/saturn', dest: 'saturnjp' }
- { src: 'sega/32x', dest: 'sega32xjp' }
- { src: 'sega/32x', dest: 'sega32xna' }
- { src: 'nintendo/superfamicom', dest: 'sneshd' }
- { src: 'nintendo/superfamicom', dest: 'snesna' }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_romdir.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
module_name: "romdir"
tasks:
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_romimport.yml
================================================
---
- hosts: localhost
vars:
my_name: "ROM Import"
my_file: "install_romimport"
module_name: "romimport"
packages:
- python3
- git
paths:
- { name: "romimport", dest: "{{ retronas_path }}", owner: "{{ retronas_user }}", group: "{{ retronas_group }}" }
templates:
- { name: "romimport.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Load RetroNAS Systems"
ansible.builtin.include_vars: retronas_systems.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Install from source code"
ansible.builtin.shell: "git clone https://github.com/frederic-mahe/Hardware-Target-Game-Database.git"
args:
chdir: "{{ retronas_root}}/bin"
creates: "{{ retronas_root}}/bin/Hardware-Target-Game-Database"
- name: "{{ my_name }} - set SMBD permissions"
ansible.builtin.shell: "chown -R {{ retronas_user}}:{{ retronas_user }} Hardware-Target-Game-Database"
args:
chdir: "{{ retronas_root}}/bin"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_romm_cifs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "RomM CIFS"
my_file: "install_romm_cifs"
module_name: "romm_cifs"
system_key: "romm"
script_url: 'https://raw.githubusercontent.com/minorOffense/romdirflattener/refs/heads/main/flatten-romdir.sh'
script_dest: "{{ retronas_root }}/bin/flatten-romdir.sh"
fattenerscript: "retronas-romm-dirs"
top_level_paths:
- { name: "roms", enabled: yes, generic: "roms", systems: yes }
templates:
- { name: "retronas-romm-dirs.service", dest: "/etc/systemd/system" }
- { name: "retronas-romm-dirs.timer", dest: "/etc/systemd/system" }
- { name: "retronas-romm-dirs.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
systemd_units:
- { name: "retronas-romm-dirs", type: 'service', state: "stopped", enabled: "no", restart: "no", instance: "no" }
- { name: "retronas-romm-dirs", type: 'timer', state: "started", enabled: "yes", restart: "no", instance: "no" }
# needs review or be handled in the flatten script
#internal_symlinks:
# - { src: 'sega/advancedpicobeena', dest: 'beena' }
# - { src: 'panasonic/3do', dest: 'panasonic-m2' }
# - { src: 'apple/pippin', dest: 'pippin' }
# - { src: 'interton/vc4000', dest: 'vc-4000' }
# - { src: 'tandy/vis', dest: 'vis' }
# - { src: 'tapwave/zodiac', dest: 'zod' }
# # 'amiga-cd', # ??
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - get update script"
ansible.builtin.shell: curl -kLso "{{ script_dest }}" {{ script_url }}
- name: "{{ my_name }} - make script executable"
file:
path: "{{ script_dest }}"
mode: '0755'
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.samba
- ansible.builtin.import_role:
name: retronas.role.samba.system
vars:
nolink: true
writable: "no"
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - create startup service(s) instance"
ansible.builtin.template:
src: templates/{{ my_file }}/{{ item.name }}.{{ item.type }}.j2
dest: /etc/systemd/system/{{ item.name }}.{{ item.type }}
owner: root
group: root
mode: 0644
with_items: "{{ systemd_units }}"
notify: "{{ my_name }} daemon-reload"
- name: "Import system-config role"
ansible.builtin.import_role:
name: retronas.role.system-config
- name: Run flatten-romdir.sh for each src/dest (no top_level)
ansible.builtin.shell: "{{ retronas_root }}/bin/flatten-romdir.sh {{ retronas_path }}/roms/{{ item.src }} {{ retronas_path }}/{{ system_key }}/roms/{{ item[system_key] }}"
become: true
loop: "{{ system_map }}"
when: top_level_paths is defined and
item[system_key] is defined and
item[system_key] | length > 0
- name: patch up perms
ansible.builtin.shell: "chown -R {{ retronas_user }}:{{ retronas_group }} {{ retronas_path }}/{{ system_key }}"
become: true
handlers:
- name: "{{ my_name }} daemon-reload"
ansible.builtin.systemd:
daemon_reload: true
================================================
FILE: ansible/install_sabretools.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "SabreTools"
my_file: "install_sabretools"
module_name: "sabretools"
packages:
- git
- coreutils
- unzip
my_arch: "x86_64"
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755"}
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - Run installer"
ansible.builtin.shell:
cmd: "./{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
chdir: "{{ retronas_root }}/scripts"
executable: /bin/bash
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_samba.yml
================================================
---
- hosts: localhost
gather_facts: false
roles:
- retronas.role.samba
vars:
module_name: "samba"
tasks:
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_seaweedfs.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "seaweedfs"
my_file: "install_{{ my_name }}"
module_name: "seaweedfs"
systemd_units:
- { name: "{{ my_name }}-retronas", type: 'service', state: "started", enabled: "yes", restart: "yes", instance: "no" }
packages:
- pwgen
firewalld_rules:
- { zones: retro, service: "{{ my_name }}" }
- { zones: modern, service: "{{ my_name }}" }
templates:
- { name: "{{ my_name }}-retronas.service", dest: "/etc/systemd/system" }
- { name: "install_{{ my_name }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "seaweedfs-credentials.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "weed-retronas-s3.json", dest: "{{ retronas_root }}/bin", mode: "0640", force: no }
paths:
- { name: "s3", dest: "{{ retronas_path }}", state: "directory", mode: "0755"}
tasks:
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "generate access key"
shell:
cmd: pwgen -s 32 1
no_log: true
register: retronas_s3_access_key
- name: "generate secret key"
shell:
cmd: pwgen -s 64 1
no_log: true
register: retronas_s3_secret_key
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - Install release"
ansible.builtin.shell: "{{ retronas_root }}/scripts/{{ my_file }}.sh 2>&1 | tee {{ retronas_root }}/log/{{ my_file }}.log"
args:
creates: "{{ retronas_root}}/bin/weed"
- name: "{{ my_name }} - enable service(s)"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: "{{ item.state }}"
enabled: "{{ item.enabled }}"
daemon_reload: true
with_items: "{{ systemd_units }}"
notify: "{{ my_name }} - Restart service"
#
# FIREWALL
#
- name: "{{ my_name }} - checking firewall rule"
ansible.builtin.stat:
path: /etc/firewalld/services
register: firewalld_services
- name: "{{ my_name }} - templates"
ansible.builtin.template:
src: "templates/{{ my_file }}/{{ my_name }}.xml.j2"
dest: /etc/firewalld/services/{{ my_name }}.xml
owner: root
group: root
mode: 0644
force: true
when: firewalld_services.stat.exists
- ansible.builtin.shell:
cmd: 'sleep 10'
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item.name }}.{{ item.type }}"
state: restarted
daemon_reload: true
with_items: "{{ systemd_units }}"
================================================
FILE: ansible/install_sit.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "sit"
my_file: "install_sit"
module_name: "sit"
packages:
- make
- gcc
- git
- coreutils
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "/usr/local/bin/sit"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_smbmounter.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "smbmounter"
my_file: "install_{{ my_name }}"
module_name: "smbmounter"
system_key: "smbmounter"
templates:
- { name: "retronas_{{ my_name }}.conf", dest: "/etc/samba" }
tasks:
- name: "{{ my_name }} - Include systems map"
ansible.builtin.include_vars: "retronas_systems.yml"
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.romdir
- ansible.builtin.import_role:
name: retronas.role.extradirs
- ansible.builtin.import_role:
name: retronas.role.samba
- name: "{{ my_name }} - link romdir"
ansible.builtin.file:
src: "{{ retronas_path }}/roms/commodore/amiga"
dest: "{{ retronas_path }}/amiga"
owner: "{{ retronas_user }}"
group: "{{ retronas_group }}"
state: link
mode: "0775"
- name: "{{ my_name }} - configure includes file"
ansible.builtin.ini_file:
path: /etc/samba/smb.conf
section: "amiga"
option: "include"
value: "/etc/samba/retronas_smbmounter.conf"
notify: "restart samba"
- ansible.builtin.import_role:
name: retronas.role.templates
notify: "restart samba"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_sslcert.yml
================================================
---
- hosts: localhost
gather_facts: false
roles:
- retronas.role.sslcert
vars:
module_name: "sslcert"
tasks:
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_syncthing.yml
================================================
---
- hosts: localhost
vars:
my_name: "Syncthing"
my_file: "install_syncthing"
module_name: "syncthing"
packages:
- syncthing
firewalld_rules:
- { zone: modern, service: syncthing }
- { zone: modern, service: syncthing-gui }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- name: "{{ my_name }} - Package signing key"
ansible.builtin.get_url:
url: https://syncthing.net/release-key.gpg
dest: /etc/apt/trusted.gpg.d/syncthing-archive-keyring.gpg
owner: root
group: root
mode: "0644"
- name: "{{ my_name }} - Configure APT repo"
ansible.builtin.apt_repository:
repo: deb https://apt.syncthing.net/ syncthing stable
state: present
filename: syncthing
update_cache: true
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - Web config http://{{ ansible_default_ipv4.address }}:8384"
ansible.builtin.ini_file:
path: /usr/lib/systemd/system/syncthing@.service
section: Service
option: ExecStart
value: "/usr/bin/syncthing serve --no-browser --no-restart --logflags=0 --gui-address=0.0.0.0:8384"
notify: "{{ my_name }} - Restart service"
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
daemon_reload: true
with_items:
- syncthing@{{ retronas_user }}
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart service"
ansible.builtin.service:
name: "{{ item }}"
state: restarted
daemon_reload: true
with_items:
- syncthing@{{ retronas_user }}
================================================
FILE: ansible/install_tcpser.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "tcpser"
my_file: "install_tcpser"
module_name: "tcpser"
append_user_group: "dialout"
packages:
- make
- gcc
- coreutils
- git
paths:
- { name: "{{ my_name }}", dest: "{{ retronas_root }}/etc" }
templates:
- { name: "{{ my_file }}.sh", dest: "{{ retronas_root }}/scripts", mode: "0755" }
- { name: "tcpser@.service", dest: "/usr/lib/systemd/system" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.paths
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.update-user
- name: "{{ my_name }} - build source"
ansible.builtin.command:
cmd: "{{ retronas_root }}/scripts/{{ my_file }}.sh"
creates: "{{ retronas_root }}/bin/tcpser"
- ansible.builtin.import_role:
name: retronas.role.system-config
================================================
FILE: ansible/install_telnet.yml
================================================
---
- hosts: localhost
gather_facts: true
vars:
my_name: "Telnet"
my_file: "install_telnet"
module_name: "telnet"
templates:
- { name: "telnet", dest: "/etc/xinetd.d", force: false }
firewalld_rules:
- { zone: "retro", service: "telnet" }
packages:
- telnet
- telnetd
- xinetd
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- name: "{{ my_name }} - Enable startup services"
ansible.builtin.service:
name: xinetd
state: started
enabled: true
- ansible.builtin.import_role:
name: retronas.role.templates
- ansible.builtin.import_role:
name: retronas.role.firewalld.port
- ansible.builtin.import_role:
name: retronas.role.system-config
handlers:
- name: "{{ my_name }} - Restart services"
ansible.builtin.service:
name: xinetd
state: restarted
================================================
FILE: ansible/install_tftpd-hpa.yml
================================================
---
- hosts: localhost
gather_facts: false
vars:
my_name: "tftpd-hpa"
my_file: "install_tftpd-hpa"
module_name: "tftpd-hpa"
firewalld_rules:
- { zone: "retro", service: "tftp" }
packages:
tftpd-hpa
templates:
- { name: "tftpd-hpa", dest: "/etc/default" }
tasks:
- name: "{{ my_name }} - Load RetroNAS config"
ansible.builtin.include_vars: retronas_vars.yml
- ansible.builtin.import_role:
name: retronas.role.package.latest
- ansible.builtin.import_role:
name: retronas.role.templates
- name: "{{ my_name }} - enable startup services"
ansible.builtin.service:
name: tftpd-hpa
state: started
gitextract_oklxbxnr/
├── .github/
│ └── ISSUE_TEMPLATE/
│ ├── bug-report.yml
│ └── config.yml
├── .gitignore
├── LICENSE
├── README.md
├── SECURITY
├── ansible/
│ ├── ansible.cfg
│ ├── hosts.yml
│ ├── install_3ds_qr_codes.yml
│ ├── install_adtpro.yml
│ ├── install_affstools.yml
│ ├── install_amitools.yml
│ ├── install_analoguepocket_cifs.yml
│ ├── install_apfs-fuse.yml
│ ├── install_aria2.yml
│ ├── install_assembly64.yml
│ ├── install_atarist-sidecart.yml
│ ├── install_batocera_cifs.yml
│ ├── install_cockpit-retronas.yml
│ ├── install_cockpit.yml
│ ├── install_cue2pops.yml
│ ├── install_curlftpfs.yml
│ ├── install_deluge.yml
│ ├── install_dhcpcd.yml
│ ├── install_disable-laptop-lid.yml
│ ├── install_disc-image-creator.yml
│ ├── install_dnsmasq-retro.yml
│ ├── install_dnsmasq.yml
│ ├── install_doc.yml
│ ├── install_dreampi.yml
│ ├── install_dvdauth.yml
│ ├── install_eccedc.yml
│ ├── install_emudeck_cifs.yml
│ ├── install_emuelec_cifs.yml
│ ├── install_etherdfs.yml
│ ├── install_ethflopd.yml
│ ├── install_extract-xiso.yml
│ ├── install_extradirs.yml
│ ├── install_far2l.yml
│ ├── install_fenrir-ode-webserver.yml
│ ├── install_filesystems.yml
│ ├── install_firewalld-zones.yml
│ ├── install_firewalld.yml
│ ├── install_flippydrive.yml
│ ├── install_freestation.yml
│ ├── install_fsp.yml
│ ├── install_gogrepo.yml
│ ├── install_hb-store-cdn.yml
│ ├── install_hdldump.yml
│ ├── install_hdparm.yml
│ ├── install_hfsutils.yml
│ ├── install_hostapd.yml
│ ├── install_kermit.yml
│ ├── install_lighttpd.yml
│ ├── install_linux-dexdrive.yml
│ ├── install_linux-gadgets.yml
│ ├── install_litch.yml
│ ├── install_lynx.yml
│ ├── install_macproxy_classic.yml
│ ├── install_mc.yml
│ ├── install_megatools.yml
│ ├── install_minicom.yml
│ ├── install_mister-organize.yml
│ ├── install_mister_cifs.yml
│ ├── install_mtcp-netdrive.yml
│ ├── install_mysticbbs.yml
│ ├── install_nabu.yml
│ ├── install_nbd-client.yml
│ ├── install_netatalk2.yml
│ ├── install_netatalk2x.yml
│ ├── install_netatalk3.yml
│ ├── install_netatalk3_source.yml
│ ├── install_netatalk4.yml
│ ├── install_netlink.yml
│ ├── install_netmount.yml
│ ├── install_network-presets-ethernet-dhcp.yml
│ ├── install_network-presets-standalone.yml
│ ├── install_network-presets-zoned.yml
│ ├── install_networkmanager.yml
│ ├── install_nfs.yml
│ ├── install_nginx.yml
│ ├── install_ntp.yml
│ ├── install_open-iscsi.yml
│ ├── install_openssh.yml
│ ├── install_pandoc.yml
│ ├── install_pfsshell.yml
│ ├── install_pi1541.yml
│ ├── install_piscsi.yml
│ ├── install_proftpd.yml
│ ├── install_ps2_openps2loader.yml
│ ├── install_ps2_udpbd.yml
│ ├── install_ps3netsrv.yml
│ ├── install_pygopherd.yml
│ ├── install_rclone.yml
│ ├── install_recalbox_cifs.yml
│ ├── install_redumper.yml
│ ├── install_retroaimserver.yml
│ ├── install_retroarch_cifs.yml
│ ├── install_retrodeck_cifs.yml
│ ├── install_romdir.yml
│ ├── install_romimport.yml
│ ├── install_romm_cifs.yml
│ ├── install_sabretools.yml
│ ├── install_samba.yml
│ ├── install_seaweedfs.yml
│ ├── install_sit.yml
│ ├── install_smbmounter.yml
│ ├── install_sslcert.yml
│ ├── install_syncthing.yml
│ ├── install_tcpser.yml
│ ├── install_telnet.yml
│ ├── install_tftpd-hpa.yml
│ ├── install_tnfs.yml
│ ├── install_troubleshooting.yml
│ ├── install_ucon64.yml
│ ├── install_waybackproxy.yml
│ ├── install_webone.yml
│ ├── install_wrp.yml
│ ├── install_xbox.yml
│ ├── install_xbox360.yml
│ ├── install_xbox360_netiso.yml
│ ├── install_xboxmanager.yml
│ ├── install_xlink-kai.yml
│ ├── install_ytree.yml
│ ├── install_zterm.yml
│ ├── migrate_mister_cifs_issue21.yml
│ ├── retronas_create_dirs.yml
│ ├── retronas_dependencies.yml
│ ├── retronas_system_config.yml
│ ├── retronas_systems.yml
│ ├── retronas_update_user.yml
│ ├── retronas_vars.yml.default
│ ├── roles/
│ │ ├── retronas.role.apt-backports/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.cache/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.cockpit/
│ │ │ ├── handlers/
│ │ │ │ └── main.yaml
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.cockpit-packages/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ ├── templates/
│ │ │ │ └── install_cockpit-packages/
│ │ │ │ └── cockpit-packages.sh.j2
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.createdirs/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.curlftpfs/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ ├── templates/
│ │ │ │ └── install_curlftpfs.sh.j2
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.dotnetcore3/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.dotnetcore6/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.dotnetcore8/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.extradirs/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.filesystems/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.firewalld.port/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.htpasswd/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yml
│ │ ├── retronas.role.nfs/
│ │ │ ├── handlers/
│ │ │ │ └── main.yaml
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.nginx/
│ │ │ ├── handlers/
│ │ │ │ └── main.yaml
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ ├── templates/
│ │ │ │ └── install_nginx/
│ │ │ │ ├── conf/
│ │ │ │ │ ├── includes/
│ │ │ │ │ │ ├── autoindex.conf
│ │ │ │ │ │ ├── listen-80.conf
│ │ │ │ │ │ └── ssl.conf
│ │ │ │ │ └── sites-available/
│ │ │ │ │ ├── 10-retronas.conf
│ │ │ │ │ └── 99-retronas-files.conf
│ │ │ │ └── www/
│ │ │ │ └── index.html
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.package.latest/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.paths/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.romdir/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.samba/
│ │ │ ├── handlers/
│ │ │ │ └── main.yaml
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ ├── templates/
│ │ │ │ └── retronas.conf.j2
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.samba.system/
│ │ │ ├── tasks/
│ │ │ │ ├── link.yml
│ │ │ │ ├── main.yaml
│ │ │ │ └── nolink.yml
│ │ │ └── templates/
│ │ │ └── retronas_system.conf.j2
│ │ ├── retronas.role.sslcert/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.system-config/
│ │ │ ├── tasks/
│ │ │ │ └── main.yaml
│ │ │ └── vars/
│ │ │ └── main.yaml
│ │ ├── retronas.role.templates/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ ├── retronas.role.update-user/
│ │ │ └── tasks/
│ │ │ └── main.yaml
│ │ └── retronas.role.x11vnc/
│ │ ├── tasks/
│ │ │ └── main.yaml
│ │ ├── templates/
│ │ │ └── install_x11vnc/
│ │ │ └── x11vnc_wrapper.sh.j2
│ │ └── vars/
│ │ └── main.yaml
│ └── templates/
│ ├── install_3ds_qr_codes/
│ │ ├── 3ds_qr.sh.j2
│ │ └── retronas_3ds_qr.cron.j2
│ ├── install_adtpro/
│ │ ├── ADTPro.properties.j2
│ │ ├── adtpro.service.j2
│ │ ├── adtpro_retronas.sh.j2
│ │ └── install_adtpro.sh.j2
│ ├── install_affstools/
│ │ └── install_affstools.sh.j2
│ ├── install_amitools/
│ │ └── install_amitools.sh.j2
│ ├── install_apfs-fuse/
│ │ └── install_apfs-fuse.sh.j2
│ ├── install_assembly64/
│ │ ├── assembly64.service.j2
│ │ ├── assembly64_retronas.sh.j2
│ │ └── install_assembly64.sh.j2
│ ├── install_atarist-sidecart/
│ │ ├── 99-retronas-sidecart.conf.j2
│ │ ├── atarist-sidecart-generate-roms.sh.j2
│ │ ├── atarist-sidecart-mirrordb.sh.j2
│ │ ├── atarist-sidecart-updatedb.sh.j2
│ │ ├── index.html.j2
│ │ └── retronas_atarist.conf.j2
│ ├── install_cockpit-retronas/
│ │ └── install_cockpit-retronas.sh.j2
│ ├── install_cue2pops/
│ │ └── install_cue2pops.sh.j2
│ ├── install_deluge/
│ │ ├── auth.j2
│ │ ├── autoadd.conf.j2
│ │ ├── core.conf.j2
│ │ ├── deluge-web.service.j2
│ │ ├── deluged.j2
│ │ ├── deluged.service.j2
│ │ └── upgrade_deluge.sh.j2
│ ├── install_disable-laptop-lid/
│ │ └── retronas.conf.j2
│ ├── install_disc-image-creator/
│ │ └── install_disc-image-creator.sh.j2
│ ├── install_dnsmasq-retro/
│ │ ├── dnsmasq-retro.service.j2
│ │ └── retro/
│ │ ├── dhcp-retro-ethernet.conf.j2
│ │ ├── dhcp-retro-wifi.conf.j2
│ │ ├── dhcp.conf.j2
│ │ ├── dns.conf.j2
│ │ ├── dnsmasq.conf.j2
│ │ ├── interfaces.conf.j2
│ │ └── ipv6.conf.j2
│ ├── install_dreampi/
│ │ ├── dreampi.conf.j2
│ │ └── install_dreampi.sh.j2
│ ├── install_dvdauth/
│ │ └── install_dvdauth.sh.j2
│ ├── install_eccedc/
│ │ └── install_eccedc.sh.j2
│ ├── install_etherdfs/
│ │ ├── etherdfs.service.j2
│ │ ├── install_etherdfs.sh.j2
│ │ └── retronas_dos.conf.j2
│ ├── install_ethflopd/
│ │ ├── ethflopd.service.j2
│ │ └── install_ethflopd.sh.j2
│ ├── install_extract-xiso/
│ │ └── install_extract-xiso.sh.j2
│ ├── install_far2l/
│ │ └── install_far2l.sh.j2
│ ├── install_fenrir-ode-webserver/
│ │ ├── fenrir-ode-webserver.service.j2
│ │ └── install_fenrir-ode-webserver.sh.j2
│ ├── install_firewalld/
│ │ └── workarounds/
│ │ ├── clear-python-bytecode.j2
│ │ └── override.conf.j2
│ ├── install_firewalld-zones/
│ │ ├── policies/
│ │ │ └── retro_to_modern.xml.j2
│ │ ├── services/
│ │ │ ├── ps3netsrv.xml.j2
│ │ │ └── samba-modern.xml.j2
│ │ └── zones/
│ │ ├── modern.xml.j2
│ │ └── retro.xml.j2
│ ├── install_flippydrive/
│ │ ├── flippydrive.service.j2
│ │ ├── flippydrive.sh.j2
│ │ └── install_flippydrive.sh.j2
│ ├── install_freestation/
│ │ ├── retronas_freestation_cifs.conf.j2
│ │ └── retronas_freestation_nfs.conf.j2
│ ├── install_fsp/
│ │ ├── fspd.conf.j2
│ │ ├── fspd.service.j2
│ │ └── install_fsp.sh.j2
│ ├── install_gogrepo/
│ │ ├── gogrepo-wrapper.sh.j2
│ │ ├── gogrepo_download.sh.j2
│ │ ├── gogrepo_import-cookies.sh.j2
│ │ ├── gogrepo_login.sh.j2
│ │ └── gogrepo_update.sh.j2
│ ├── install_hb-store-cdn/
│ │ ├── config.ini.j2
│ │ ├── hb-store-cdn-check.sh.j2
│ │ ├── hb-store-cdn.cron.j2
│ │ ├── hb-store-cdn.service.j2
│ │ └── install_hb-store-cdn.sh.j2
│ ├── install_hdldump/
│ │ └── install_hdldump.sh.j2
│ ├── install_hdparm/
│ │ ├── hdparm-manager.sh.j2
│ │ ├── hdparm.service.j2
│ │ ├── hdparm.sh.j2
│ │ └── hdparm.timer.j2
│ ├── install_hfsutils/
│ │ └── install_hfsutils.sh.j2
│ ├── install_hostapd/
│ │ ├── hostapd-dnsmasq.conf.j2
│ │ ├── hostapd-retronas.conf.j2
│ │ └── hostapd-retronas.service.j2
│ ├── install_kermit/
│ │ ├── iksd.socket.j2
│ │ └── iksd@.service.j2
│ ├── install_lighttpd/
│ │ └── 99-retronas.conf.j2
│ ├── install_linux-dexdrive/
│ │ ├── dexdrive_dumper.sh.j2
│ │ ├── install_linux-dexdrive.sh.j2
│ │ ├── linux-dexdrive.service.j2
│ │ └── makefile.patch.j2
│ ├── install_linux-gadgets/
│ │ └── gadget-mass-storage-manage.sh.j2
│ ├── install_litch/
│ │ ├── litch_claim.sh.j2
│ │ ├── litch_download.sh.j2
│ │ ├── litch_download_clean.sh.j2
│ │ └── litch_login.sh.j2
│ ├── install_macproxy_classic/
│ │ └── macproxy.service.j2
│ ├── install_megatools/
│ │ └── install_megatools.sh.j2
│ ├── install_minicom/
│ │ ├── minicom.sh.j2
│ │ └── minirc.dfl.j2
│ ├── install_mister-organize/
│ │ ├── install_mister-organize.sh.j2
│ │ └── mister-organize.sh.j2
│ ├── install_mister_cifs/
│ │ ├── retronas-mister-dirs.service.j2
│ │ └── retronas-mister-dirs.timer.j2
│ ├── install_mtcp-netdrive/
│ │ ├── install_mtcp-netdrive.sh.j2
│ │ ├── mtcp-netdrive.service.j2
│ │ ├── mtcp-netdrive.sh.j2
│ │ └── mtcp-netdrive.xml.j2
│ ├── install_mysticbbs/
│ │ ├── create_filebone_na.py.j2
│ │ ├── install_mysticbbs.sh.j2
│ │ ├── mysticbbs-mis.service.j2
│ │ ├── mysticbbs.sh.j2
│ │ ├── mysticbbs.xml.j2
│ │ ├── retronas_create_fileareas.ini.j2
│ │ └── retronas_massupload.ini.j2
│ ├── install_nabu/
│ │ ├── install_nabu.sh.j2
│ │ └── nabu.sh.j2
│ ├── install_nbd-client/
│ │ └── nbd.conf.j2
│ ├── install_netatalk2/
│ │ ├── AppleVolumes.default.j2
│ │ ├── afpd.conf.j2
│ │ └── default.j2
│ ├── install_netatalk2x/
│ │ ├── AppleVolumes.default.j2
│ │ ├── afpd.conf.j2
│ │ ├── afpexpect.sh.j2
│ │ ├── atalkd.conf.j2
│ │ ├── default.j2
│ │ └── install_netatalk2x.sh.j2
│ ├── install_netatalk3/
│ │ ├── install_netatalk3.sh.j2
│ │ ├── netatalk.service.j2
│ │ └── retronas.conf.j2
│ ├── install_netatalk4/
│ │ ├── atalkd.service.j2
│ │ ├── install_netatalk4.sh.j2
│ │ ├── netatalk.service.j2
│ │ └── retronas.conf.j2
│ ├── install_netlink/
│ │ ├── install_netlink.sh.j2
│ │ ├── netlink.conf.j2
│ │ ├── netlink.patch.j2
│ │ └── netlink.service.j2
│ ├── install_netmount/
│ │ ├── install_netmount.sh.j2
│ │ ├── netmount-confman.py.j2
│ │ ├── netmount-confman.sh.j2
│ │ └── retronas.yaml.j2
│ ├── install_network-presets-standalone/
│ │ └── dhcpcd.conf.j2
│ ├── install_network-presets-zoned/
│ │ └── dhcpcd.conf.j2
│ ├── install_nfs/
│ │ ├── exports.j2
│ │ └── nfs-kernel-server.j2
│ ├── install_open-iscsi/
│ │ └── iscsi-manager-target-login.sh.j2
│ ├── install_pfsshell/
│ │ └── install_pfsshell.sh.j2
│ ├── install_pi1541/
│ │ └── pi1541.sh.j2
│ ├── install_piscsi/
│ │ ├── install_piscsi.sh.j2
│ │ ├── install_piscsi_standard.sh.j2
│ │ ├── piscsi.service.j2
│ │ └── piscsi_retronas_patch.diff.j2
│ ├── install_proftpd/
│ │ ├── ftp.service.j2
│ │ └── retronas.conf.j2
│ ├── install_ps2_openps2loader/
│ │ └── retronas_ps2.conf.j2
│ ├── install_ps2_udpbd/
│ │ ├── install_ps2_udpbd.sh.j2
│ │ ├── ps2_udpbd.service.j2
│ │ └── udpbd_manager.sh.j2
│ ├── install_ps3netsrv/
│ │ ├── install_ps3netsrv.sh.j2
│ │ ├── ps3netsrv-perms.service.j2
│ │ ├── ps3netsrv-perms.timer.j2
│ │ └── ps3netsrv.service.j2
│ ├── install_pygopherd/
│ │ ├── install_pygopherd.sh.j2
│ │ ├── pygopherd.conf.j2
│ │ └── pygopherd.service.j2
│ ├── install_rclone/
│ │ └── rclone-webui.service.j2
│ ├── install_redumper/
│ │ └── install_redumper.sh.j2
│ ├── install_retroaimserver/
│ │ ├── install_retroaimserver.sh.j2
│ │ ├── retro-aim-server.service.j2
│ │ ├── retroaimserver.xml.j2
│ │ └── retroainserver.xml.j2
│ ├── install_romimport/
│ │ └── romimport.sh.j2
│ ├── install_romm_cifs/
│ │ ├── retronas-romm-dirs.service.j2
│ │ ├── retronas-romm-dirs.sh.j2
│ │ └── retronas-romm-dirs.timer.j2
│ ├── install_sabretools/
│ │ └── install_sabretools.sh.j2
│ ├── install_seaweedfs/
│ │ ├── install_seaweedfs.sh.j2
│ │ ├── seaweedfs-credentials.sh.j2
│ │ ├── seaweedfs-retronas.service.j2
│ │ ├── seaweedfs.xml.j2
│ │ └── weed-retronas-s3.json.j2
│ ├── install_sit/
│ │ └── install_sit.sh.j2
│ ├── install_smbmounter/
│ │ └── retronas_smbmounter.conf.j2
│ ├── install_tcpser/
│ │ ├── install_tcpser.sh.j2
│ │ └── tcpser@.service.j2
│ ├── install_telnet/
│ │ └── telnet.j2
│ ├── install_tftpd-hpa/
│ │ └── tftpd-hpa.j2
│ ├── install_tnfs/
│ │ ├── install_tnfs.sh.j2
│ │ └── tnfsd.service.j2
│ ├── install_ucon64/
│ │ └── install_ucon64.sh.j2
│ ├── install_waybackproxy/
│ │ ├── config.json.j2
│ │ ├── install_waybackproxy.sh.j2
│ │ └── waybackproxy.service.j2
│ ├── install_webone/
│ │ ├── install_webone.sh.j2
│ │ └── webone.service.j2
│ ├── install_wrp/
│ │ ├── install_wrp.sh.j2
│ │ └── wrp.service.j2
│ ├── install_x11vnc/
│ │ └── x11vnc_wrapper.sh.j2
│ ├── install_xbox/
│ │ └── retronas_xbox.conf.j2
│ ├── install_xbox360/
│ │ └── retronas_xbox360.conf.j2
│ ├── install_xbox360_netiso/
│ │ ├── dummy.iso.j2
│ │ ├── install_xbox360_netiso.sh.j2
│ │ └── xbox360_netiso.service.j2
│ ├── install_xboxmanager/
│ │ └── xboxmanager.cfg.j2
│ ├── install_xlink-kai/
│ │ └── xlink-kai.service.j2
│ ├── install_ytree/
│ │ └── install_ytree.sh.j2
│ └── install_zterm/
│ ├── install_zterm.sh.j2
│ └── zterm.service.j2
├── config/
│ ├── menu/
│ │ ├── 3ds_qr.json
│ │ ├── _template.json
│ │ ├── adtpro.json
│ │ ├── assembly64.json
│ │ ├── atarist-sidecart.json
│ │ ├── cockpit.json
│ │ ├── config.json
│ │ ├── deluge.json
│ │ ├── dexdrive.json
│ │ ├── doc.json
│ │ ├── dreampi.json
│ │ ├── etherdfs.json
│ │ ├── ethflopd.json
│ │ ├── experimental.json
│ │ ├── fenrirodewebserver.json
│ │ ├── flippydrive.json
│ │ ├── fsp.json
│ │ ├── gogrepo.json
│ │ ├── hbstorecdn.json
│ │ ├── hdparm.json
│ │ ├── install.json
│ │ ├── lighttpd.json
│ │ ├── linux-gadgets.json
│ │ ├── litch.json
│ │ ├── lynx.json
│ │ ├── macproxy_classic.json
│ │ ├── main.json
│ │ ├── minicom.json
│ │ ├── mister-organize.json
│ │ ├── mister_cifs.json
│ │ ├── mtcp-netdrive.json
│ │ ├── mysticbbs.json
│ │ ├── nabu.json
│ │ ├── netatalk-legacy.json
│ │ ├── netatalk.json
│ │ ├── netlink.json
│ │ ├── netmount.json
│ │ ├── network-manual.json
│ │ ├── network-presets.json
│ │ ├── network-setup-modern.json
│ │ ├── network-setup-retro.json
│ │ ├── network-setup-wifiap.json
│ │ ├── network-setup.json
│ │ ├── network.json
│ │ ├── nginx.json
│ │ ├── ntp.json
│ │ ├── open-iscsi.json
│ │ ├── openssh.json
│ │ ├── pi1541.json
│ │ ├── piscsi.json
│ │ ├── profiles.json
│ │ ├── proftpd.json
│ │ ├── ps2_udpbd.json
│ │ ├── ps3netsrv.json
│ │ ├── rclone.json
│ │ ├── retroaimserver.json
│ │ ├── romimport.json
│ │ ├── romimportsystem.json
│ │ ├── romm_cifs.json
│ │ ├── samba.json
│ │ ├── seaweedfs.json
│ │ ├── services.json
│ │ ├── sslcert.json
│ │ ├── syncthing.json
│ │ ├── tcpser.json
│ │ ├── telnet.json
│ │ ├── tftpd-hpa.json
│ │ ├── tnfs.json
│ │ ├── tools.json
│ │ ├── update.json
│ │ ├── webone.json
│ │ ├── wrp.json
│ │ ├── xbox360_netiso.json
│ │ ├── xlinkkai.json
│ │ └── zterm.json
│ └── retronas.cfg
├── dialog/
│ ├── adtpro_ethernet_edit.sh
│ ├── adtpro_localhost_edit.sh
│ ├── adtpro_serial_edit.sh
│ ├── d_input.sh
│ ├── d_menu.sh
│ ├── d_yn.sh
│ ├── dexdrive_memcards.sh
│ ├── dexdrive_serial_edit.sh
│ ├── disclaimer.sh
│ ├── gogrepo.sh
│ ├── profiles.sh
│ ├── retronas_fixperms.sh
│ ├── retronas_password.sh
│ ├── romimportsystem.sh
│ ├── tcpser_edit.sh
│ ├── tcpser_status.sh
│ ├── wifi_password.sh
│ └── zterm_edit.sh
├── dist/
│ ├── install_preseed.sh
│ └── retronas
├── install_retronas.sh
├── lib/
│ ├── ansible_runner.sh
│ ├── common.sh
│ ├── markup_runner.sh
│ └── script_runner.sh
├── retronas.sh
└── scripts/
├── maint/
│ ├── git-changes-summary.sh
│ ├── install-profile.py
│ ├── migrate_romdirs.py
│ ├── retronas-systems-manager.py
│ ├── sort_menu_json.py
│ └── tests/
│ ├── lint-yaml.sh
│ └── test-retronas-json.py
├── patch/
│ ├── cache-dir.sh
│ ├── git-config.sh
│ ├── install-jq.sh
│ ├── new-startup-file.sh
│ └── update-retronas_vars.sh
└── static/
├── check-samba-user.sh
├── clean-broken-symlinks.sh
├── get-drives.sh
├── get-interfaces.sh
├── git-switch-branch.sh
├── network-example-presets-standalone.sh
├── network-example-presets-zoned.sh
├── permissions.sh
├── run-local-module.sh
├── service-samba.sh
├── set-etherdfs-nic.sh
├── set-top-level-dir.sh
├── update-group.sh
├── update-passwd.sh
├── update-retronas.sh
├── update-system-history.sh
├── update-system.sh
├── update-username.sh
├── wifi-show-passwd.sh
└── wifi-update-passwd.sh
SYMBOL INDEX (11 symbols across 5 files) FILE: scripts/maint/install-profile.py function ini2dict (line 16) | def ini2dict(profile): function ansible_run (line 25) | def ansible_run(profile): function main (line 30) | def main(args): FILE: scripts/maint/migrate_romdirs.py function _log (line 24) | def _log(s, level=0): function read_yaml (line 33) | def read_yaml(ydata): function process_dir (line 41) | def process_dir(dirname, tree=[]): function main (line 54) | def main(args): FILE: scripts/maint/retronas-systems-manager.py function main (line 11) | def main(args): FILE: scripts/maint/sort_menu_json.py function main (line 11) | def main(args): FILE: scripts/maint/tests/test-retronas-json.py function _log (line 14) | def _log(s): function main (line 17) | def main():
Condensed preview — 535 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,139K chars).
[
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 779,
"preview": "name: \"Bug report\"\ndescription: Report problematic behaviour.\nbody:\n- type: markdown\n attributes:\n value: |\n If"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 382,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: Discussions\n url: https://github.com/orgs/retronas/discussions\n "
},
{
"path": ".gitignore",
"chars": 132,
"preview": "bin\nscripts/*.sh\n!scripts/static/*.sh\nsrc\nlog\ndoc\nansible/retronas_vars.yml\netc/*\nconfig/installed.json\nansible/collecti"
},
{
"path": "LICENSE",
"chars": 1065,
"preview": "MIT License\n\nCopyright (c) 2021 Dan Mons\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\no"
},
{
"path": "README.md",
"chars": 767,
"preview": "\n# RetroNAS\n\n## Project Information\n* [Status](https://github.com/retronas/retronas/wiki/"
},
{
"path": "SECURITY",
"chars": 3390,
"preview": "=============================================================================\n WARNING / TERMS OF USE"
},
{
"path": "ansible/ansible.cfg",
"chars": 548,
"preview": "[defaults]\ndeprecation_warnings = False\ncommand_warnings = False\ninventory = /opt/retronas/ansible/hosts.yml\nlog_path = "
},
{
"path": "ansible/hosts.yml",
"chars": 98,
"preview": "---\nall:\n hosts:\n localhost:\n vars:\n ansible_connection: local\n cache_plugin: jsonfile\n"
},
{
"path": "ansible/install_3ds_qr_codes.yml",
"chars": 1591,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"3DS QR Codes\"\n my_file: \"install_3ds_qr_codes\"\n "
},
{
"path": "ansible/install_adtpro.yml",
"chars": 2538,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"adtpro\"\n my_file: \"install_{{ my_name }}\"\n my_"
},
{
"path": "ansible/install_affstools.yml",
"chars": 928,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"affstools\"\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_amitools.yml",
"chars": 829,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"amitools\"\n my_file: \"install_{{ my_name }}\"\n m"
},
{
"path": "ansible/install_analoguepocket_cifs.yml",
"chars": 1113,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"analoguepocket CIFS\"\n my_file: \"install_analoguep"
},
{
"path": "ansible/install_apfs-fuse.yml",
"chars": 939,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"apfs-fuse\"\n my_file: \"install_apfs-fuse\"\n modu"
},
{
"path": "ansible/install_aria2.yml",
"chars": 443,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"aria2\"\n my_file: \"install_aria2\"\n module_name:"
},
{
"path": "ansible/install_assembly64.yml",
"chars": 2069,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"assembly64\"\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_atarist-sidecart.yml",
"chars": 2880,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n roles:\n - retronas.role.romdir\n - retronas.role.nginx\n - retron"
},
{
"path": "ansible/install_batocera_cifs.yml",
"chars": 1118,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"Batocera CIFS\"\n my_file: \"install_batocera_cifs\"\n"
},
{
"path": "ansible/install_cockpit-retronas.yml",
"chars": 1154,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"cockpit-retronas\"\n my_file: \"install_cockpit-retro"
},
{
"path": "ansible/install_cockpit.yml",
"chars": 255,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n module_name: \"cockpit\"\n\n roles:\n - retronas.role.filesystem"
},
{
"path": "ansible/install_cue2pops.yml",
"chars": 930,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"cue2pops\"\n my_file: \"install_cue2pops\"\n module"
},
{
"path": "ansible/install_curlftpfs.yml",
"chars": 156,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n module_name: \"curlftpfs\"\n\n roles:\n - retronas.role.curlftpf"
},
{
"path": "ansible/install_deluge.yml",
"chars": 3608,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"Deluge\"\n my_file: \"install_deluge\"\n module_nam"
},
{
"path": "ansible/install_dhcpcd.yml",
"chars": 698,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"dhcpcd\"\n my_file: \"install_{{ my_name }}\"\n mod"
},
{
"path": "ansible/install_disable-laptop-lid.yml",
"chars": 954,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"Disable Laptop Lid\"\n my_file: \"install_disable-la"
},
{
"path": "ansible/install_disc-image-creator.yml",
"chars": 1109,
"preview": "# Dependencies\n- ansible.builtin.import_playbook: install_dvdauth.yml\n- ansible.builtin.import_playbook: install_eccedc."
},
{
"path": "ansible/install_dnsmasq-retro.yml",
"chars": 3776,
"preview": "---\n# Dependencies\n- import_playbook: install_ntp.yml\n- import_playbook: install_dnsmasq.yml\n\n- hosts: localhost\n gathe"
},
{
"path": "ansible/install_dnsmasq.yml",
"chars": 735,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"dnsmasq\"\n my_file: \"install_{{ my_name }}\"\n mo"
},
{
"path": "ansible/install_doc.yml",
"chars": 667,
"preview": "# Dependencies\n- ansible.builtin.import_playbook: install_lynx.yml\n\n- hosts: localhost\n gather_facts: false\n\n vars:\n "
},
{
"path": "ansible/install_dreampi.yml",
"chars": 2577,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"dreampi\"\n my_file: \"install_dreampi\"\n module_na"
},
{
"path": "ansible/install_dvdauth.yml",
"chars": 973,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"DVDAuth\"\n my_file: \"install_dvdauth\"\n module_n"
},
{
"path": "ansible/install_eccedc.yml",
"chars": 939,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"EccEDC\"\n my_file: \"install_eccedc\"\n module_nam"
},
{
"path": "ansible/install_emudeck_cifs.yml",
"chars": 1945,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"EmuDeck CIFS\"\n my_file: \"install_emudeck_cifs\"\n "
},
{
"path": "ansible/install_emuelec_cifs.yml",
"chars": 1058,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"EmuElec CIFS\"\n my_file: \"install_emuelec_cifs\"\n "
},
{
"path": "ansible/install_etherdfs.yml",
"chars": 2370,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"EtherDFS\"\n my_file: \"install_etherdfs\"\n module"
},
{
"path": "ansible/install_ethflopd.yml",
"chars": 1712,
"preview": "- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"ethflopd\"\n my_file: \"install_{{ my_name }}\"\n modul"
},
{
"path": "ansible/install_extract-xiso.yml",
"chars": 851,
"preview": "- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"extract-xiso\"\n my_file: \"install_extract-xiso\"\n mo"
},
{
"path": "ansible/install_extradirs.yml",
"chars": 244,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n module_name: \"extradirs\"\n\n tasks:\n - ansible.builtin.impor"
},
{
"path": "ansible/install_far2l.yml",
"chars": 1030,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"far2l\"\n my_file: \"install_{{ my_name }}\"\n modu"
},
{
"path": "ansible/install_fenrir-ode-webserver.yml",
"chars": 1732,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"fenrir-ode-webserver\"\n my_file: \"install_fenrir-o"
},
{
"path": "ansible/install_filesystems.yml",
"chars": 161,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n module_name: \"filesystems\"\n\n roles:\n - retronas.role.files"
},
{
"path": "ansible/install_firewalld-zones.yml",
"chars": 2495,
"preview": "---\n# Dependencies\n- ansible.builtin.import_playbook: install_dnsmasq.yml\n- ansible.builtin.import_playbook: install_fir"
},
{
"path": "ansible/install_firewalld.yml",
"chars": 1804,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"firewalld\"\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_flippydrive.yml",
"chars": 2058,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"Flippydrive\"\n my_file: \"install_flippydrive\"\n m"
},
{
"path": "ansible/install_freestation.yml",
"chars": 1162,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"freestation\"\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_fsp.yml",
"chars": 3165,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"FSP for Swiss\"\n my_file: \"install_fsp\"\n my_ser"
},
{
"path": "ansible/install_gogrepo.yml",
"chars": 1726,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"gogrepo\"\n my_file: \"install_gogrepo\"\n module_n"
},
{
"path": "ansible/install_hb-store-cdn.yml",
"chars": 4400,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: hb-store-cdn\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_hdldump.yml",
"chars": 826,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"hdldump\"\n my_file: \"install_{{ my_name }}\"\n mo"
},
{
"path": "ansible/install_hdparm.yml",
"chars": 2865,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"hdparm\"\n my_file: \"install_{{ my_name }}\"\n mod"
},
{
"path": "ansible/install_hfsutils.yml",
"chars": 959,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"hfsutils\"\n my_file: \"install_hfsutils\"\n module_"
},
{
"path": "ansible/install_hostapd.yml",
"chars": 2399,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"hostapd\"\n my_file: \"install_{{ my_name }}\"\n mo"
},
{
"path": "ansible/install_kermit.yml",
"chars": 1174,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"kermit\"\n my_file: \"install_{{ my_name }}\"\n mod"
},
{
"path": "ansible/install_lighttpd.yml",
"chars": 3164,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"lighttpd\"\n my_file: \"install_{{ my_name }}\"\n m"
},
{
"path": "ansible/install_linux-dexdrive.yml",
"chars": 1870,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"linux-dexdrive\"\n my_file: \"install_{{ my_name }}\""
},
{
"path": "ansible/install_linux-gadgets.yml",
"chars": 879,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"linux-gadgets\"\n my_file: \"install_{{ my_name }}\"\n"
},
{
"path": "ansible/install_litch.yml",
"chars": 1543,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"litch\"\n my_file: \"install_litch\"\n module_name:"
},
{
"path": "ansible/install_lynx.yml",
"chars": 427,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"lynx\"\n my_file: \"install_lynx\"\n module_name: \""
},
{
"path": "ansible/install_macproxy_classic.yml",
"chars": 1234,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"macproxy_classic\"\n my_file: \"install_macproxy_cla"
},
{
"path": "ansible/install_mc.yml",
"chars": 529,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"mc\"\n my_file: \"install_mc\"\n module_name: \"mc\"\n"
},
{
"path": "ansible/install_megatools.yml",
"chars": 1397,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"megatools\"\n my_file: \"install_megatools\"\n modul"
},
{
"path": "ansible/install_minicom.yml",
"chars": 1707,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"minicom\"\n my_file: \"install_{{ my_name }}\"\n my"
},
{
"path": "ansible/install_mister-organize.yml",
"chars": 1922,
"preview": "---\n- hosts: localhost\n\n vars:\n my_name: \"MiSTer Organize\"\n my_file: \"install_mister-organize\"\n module_name: \""
},
{
"path": "ansible/install_mister_cifs.yml",
"chars": 2577,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"MiSTer CIFS\"\n my_file: \"install_mister_cifs\"\n "
},
{
"path": "ansible/install_mtcp-netdrive.yml",
"chars": 2143,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"mtcp-netdrive\"\n my_file: \"install_mtcp-netdrive\"\n "
},
{
"path": "ansible/install_mysticbbs.yml",
"chars": 2460,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"mysticbbs\"\n my_file: \"install_mysticbbs\"\n modul"
},
{
"path": "ansible/install_nabu.yml",
"chars": 1766,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"nabu\"\n my_file: \"install_{{ my_name }}\"\n my_di"
},
{
"path": "ansible/install_nbd-client.yml",
"chars": 691,
"preview": "---\n- hosts: localhost\n\n vars:\n my_name: \"nbd-client\"\n my_file: \"install_nbd-client\"\n module_name: \"nbd-client"
},
{
"path": "ansible/install_netatalk2.yml",
"chars": 4172,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"Netatalk2\"\n my_file: \"install_netatalk2\"\n\n pack"
},
{
"path": "ansible/install_netatalk2x.yml",
"chars": 3294,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"Netatalk2.X\"\n my_file: \"install_netatalk2x\"\n\n p"
},
{
"path": "ansible/install_netatalk3.yml",
"chars": 2876,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"Netatalk3\"\n my_file: \"install_netatalk3\"\n\n pac"
},
{
"path": "ansible/install_netatalk3_source.yml",
"chars": 4614,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"Netatalk3\"\n my_file: \"install_netatalk3\"\n\n pack"
},
{
"path": "ansible/install_netatalk4.yml",
"chars": 6407,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"Netatalk4\"\n my_file: \"install_netatalk4\"\n modul"
},
{
"path": "ansible/install_netlink.yml",
"chars": 2082,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"netlink\"\n my_file: \"install_netlink\"\n module_n"
},
{
"path": "ansible/install_netmount.yml",
"chars": 2863,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"netmount\"\n my_file: \"install_netmount\"\n module_"
},
{
"path": "ansible/install_network-presets-ethernet-dhcp.yml",
"chars": 2146,
"preview": "---\n# networkmanager\n- ansible.builtin.import_playbook: install_networkmanager.yml\n\n- hosts: localhost\n gather_facts: f"
},
{
"path": "ansible/install_network-presets-standalone.yml",
"chars": 5755,
"preview": "---\n# networkmanager\n- ansible.builtin.import_playbook: install_networkmanager.yml\n\n# hostapd\n# using NM api mode now\n# "
},
{
"path": "ansible/install_network-presets-zoned.yml",
"chars": 3828,
"preview": "---\n# networkmanager\n- ansible.builtin.import_playbook: install_networkmanager.yml\n\n# firewalld\n- ansible.builtin.import"
},
{
"path": "ansible/install_networkmanager.yml",
"chars": 363,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"network manager\"\n my_file: \"install_{{ my_name }}"
},
{
"path": "ansible/install_nfs.yml",
"chars": 155,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n module_name: \"nfs\"\n\n tasks:\n\n - ansible.builtin.import_rol"
},
{
"path": "ansible/install_nginx.yml",
"chars": 177,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n module_name: \"nginx\"\n\n roles:\n - retronas.role.sslcert\n "
},
{
"path": "ansible/install_ntp.yml",
"chars": 1247,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"ntp\"\n my_service: \"openntpd\"\n my_file: \"instal"
},
{
"path": "ansible/install_open-iscsi.yml",
"chars": 831,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"open-iscsi\"\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_openssh.yml",
"chars": 967,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"OpenSSH\"\n module_name: \"openssh\"\n\n packages:\n "
},
{
"path": "ansible/install_pandoc.yml",
"chars": 501,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n - my_name: \"pandoc\"\n - my_file: \"install_pandoc\"\n\n - pac"
},
{
"path": "ansible/install_pfsshell.yml",
"chars": 959,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"pfsshell\"\n my_file: \"install_pfsshell\"\n module"
},
{
"path": "ansible/install_pi1541.yml",
"chars": 764,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"pi1541\"\n my_file: \"install_{{ my_name }}\"\n mod"
},
{
"path": "ansible/install_piscsi.yml",
"chars": 3304,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"piscsi\"\n my_file: \"install_piscsi\"\n module_name"
},
{
"path": "ansible/install_proftpd.yml",
"chars": 1471,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"ProFTPd\"\n my_file: \"install_proftpd\"\n module_n"
},
{
"path": "ansible/install_ps2_openps2loader.yml",
"chars": 2493,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"PS2 OpenPS2Loader\"\n my_file: \"install_ps2_openps2l"
},
{
"path": "ansible/install_ps2_udpbd.yml",
"chars": 2428,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"ps2_udpbd\"\n my_file: \"install_ps2_udpbd\"\n modul"
},
{
"path": "ansible/install_ps3netsrv.yml",
"chars": 4385,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"ps3netsrv\"\n my_file: \"install_ps3netsrv\"\n modul"
},
{
"path": "ansible/install_pygopherd.yml",
"chars": 1400,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"pygopherd\"\n my_file: \"install_pygopherd\"\n modu"
},
{
"path": "ansible/install_rclone.yml",
"chars": 1312,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"rclone\"\n my_file: \"install_rclone\"\n module_nam"
},
{
"path": "ansible/install_recalbox_cifs.yml",
"chars": 909,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"Recalbox CIFS\"\n my_file: \"install_recalbox_cifs\"\n"
},
{
"path": "ansible/install_redumper.yml",
"chars": 864,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"redumper\"\n my_file: \"install_{{ my_name }}\"\n m"
},
{
"path": "ansible/install_retroaimserver.yml",
"chars": 2810,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"retroaimserver\"\n my_file: \"install_retroaimserver\""
},
{
"path": "ansible/install_retroarch_cifs.yml",
"chars": 609,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"RetroArch Based Systems CIFS\"\n my_file: \"install_"
},
{
"path": "ansible/install_retrodeck_cifs.yml",
"chars": 1697,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"retrodeck CIFS\"\n my_file: \"install_retrodeck_cifs"
},
{
"path": "ansible/install_romdir.yml",
"chars": 238,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n module_name: \"romdir\"\n\n tasks:\n - ansible.builtin.import_r"
},
{
"path": "ansible/install_romimport.yml",
"chars": 1422,
"preview": "---\n- hosts: localhost\n\n vars:\n my_name: \"ROM Import\"\n my_file: \"install_romimport\"\n module_name: \"romimport\"\n"
},
{
"path": "ansible/install_romm_cifs.yml",
"chars": 3336,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"RomM CIFS\"\n my_file: \"install_romm_cifs\"\n modu"
},
{
"path": "ansible/install_sabretools.yml",
"chars": 911,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"SabreTools\"\n my_file: \"install_sabretools\"\n mod"
},
{
"path": "ansible/install_samba.yml",
"chars": 202,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n roles:\n - retronas.role.samba\n\n vars:\n module_name: \"samba\"\n\n ta"
},
{
"path": "ansible/install_seaweedfs.yml",
"chars": 3070,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"seaweedfs\"\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_sit.yml",
"chars": 817,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"sit\"\n my_file: \"install_sit\"\n module_name: \"si"
},
{
"path": "ansible/install_smbmounter.yml",
"chars": 1423,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"smbmounter\"\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_sslcert.yml",
"chars": 206,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n roles:\n - retronas.role.sslcert\n\n vars:\n module_name: \"sslcert\"\n\n"
},
{
"path": "ansible/install_syncthing.yml",
"chars": 1967,
"preview": "---\n- hosts: localhost\n\n vars:\n my_name: \"Syncthing\"\n my_file: \"install_syncthing\"\n module_name: \"syncthing\"\n\n"
},
{
"path": "ansible/install_tcpser.yml",
"chars": 1165,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"tcpser\"\n my_file: \"install_tcpser\"\n module_nam"
},
{
"path": "ansible/install_telnet.yml",
"chars": 1055,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"Telnet\"\n my_file: \"install_telnet\"\n module_name"
},
{
"path": "ansible/install_tftpd-hpa.yml",
"chars": 1026,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"tftpd-hpa\"\n my_file: \"install_tftpd-hpa\"\n modu"
},
{
"path": "ansible/install_tnfs.yml",
"chars": 1689,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"TNFS Atari 8-bit and ZX Spectrum\"\n my_file: \"inst"
},
{
"path": "ansible/install_troubleshooting.yml",
"chars": 681,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"troubleshooting\"\n my_file: \"install_troubleshooti"
},
{
"path": "ansible/install_ucon64.yml",
"chars": 817,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"ucon64\"\n my_file: \"install_ucon64\"\n module_nam"
},
{
"path": "ansible/install_waybackproxy.yml",
"chars": 1617,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"waybackproxy\"\n my_file: \"install_{{ my_name }}\"\n "
},
{
"path": "ansible/install_webone.yml",
"chars": 1995,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n vars:\n my_name: \"WebOne proxy\"\n my_file: \"install_webone\"\n modul"
},
{
"path": "ansible/install_wrp.yml",
"chars": 2104,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"wrp\"\n my_file: \"install_{{ my_name }}\"\n module"
},
{
"path": "ansible/install_xbox.yml",
"chars": 1442,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"xbox\"\n my_file: \"install_xbox\"\n module_name: \""
},
{
"path": "ansible/install_xbox360.yml",
"chars": 1348,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"XBox360\"\n my_file: \"install_xbox360\"\n module_n"
},
{
"path": "ansible/install_xbox360_netiso.yml",
"chars": 1888,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n vars:\n my_name: \"XBox360 NetISO\"\n my_file: \"install_xbox360_netiso"
},
{
"path": "ansible/install_xboxmanager.yml",
"chars": 1493,
"preview": "---\n# Dependencies\n- ansible.builtin.import_playbook: install_extract-xiso.yml\n\n- hosts: localhost\n gather_facts: true\n"
},
{
"path": "ansible/install_xlink-kai.yml",
"chars": 2978,
"preview": "---\n- hosts: localhost\n gather_facts: false\n become: true\n\n # https://dist.teamxlink.co.uk/\n\n vars:\n my_name: \"xl"
},
{
"path": "ansible/install_ytree.yml",
"chars": 930,
"preview": "---\n- hosts: localhost\n gather_facts: no\n\n vars:\n my_name: \"ytree\"\n my_file: \"install_{{ my_name }}\"\n module_"
},
{
"path": "ansible/install_zterm.yml",
"chars": 2417,
"preview": "---\n- hosts: localhost\n\n vars:\n my_name: \"zterm\"\n my_file: \"install_{{ my_name }}\"\n module_name: \"zterm\"\n a"
},
{
"path": "ansible/migrate_mister_cifs_issue21.yml",
"chars": 3891,
"preview": "---\n### migration playbook for issue #21\n# this issue is old and the fix is slow so users who haven't updated in a while"
},
{
"path": "ansible/retronas_create_dirs.yml",
"chars": 2782,
"preview": "---\n- name: \"{{ my_name }} - Include systems map\"\n ansible.builtin.include_vars: \"retronas_systems.yml\"\n\n- name: \"{{ my"
},
{
"path": "ansible/retronas_dependencies.yml",
"chars": 1081,
"preview": "---\n- hosts: localhost\n become: yes\n\n vars:\n my_name: \"RetroNAS dependencies\"\n my_file: \"retronas_dependencies\"\n"
},
{
"path": "ansible/retronas_system_config.yml",
"chars": 88,
"preview": "---\n- hosts: localhost\n gather_facts: true\n\n roles:\n - retronas.role.system-config\n"
},
{
"path": "ansible/retronas_systems.yml",
"chars": 232454,
"preview": "---\n# __________________________\n# .-:=[ RetroNAS_Systems_Mapping ]=:-."
},
{
"path": "ansible/retronas_update_user.yml",
"chars": 279,
"preview": "---\n- hosts: localhost\n gather_facts: false\n\n tasks:\n - name: \"Load RetroNAS config\"\n ansible.builtin.include_"
},
{
"path": "ansible/retronas_vars.yml.default",
"chars": 965,
"preview": "retronas_path: \"/data/retronas\"\nretronas_user: \"retronas\"\nretronas_group: \"retronas\"\nretronas_root: \"/opt/retronas\"\nretr"
},
{
"path": "ansible/roles/retronas.role.apt-backports/tasks/main.yaml",
"chars": 2535,
"preview": "---\n- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- name: \"{{ my_nam"
},
{
"path": "ansible/roles/retronas.role.apt-backports/vars/main.yaml",
"chars": 102,
"preview": "---\nmy_name: \"Apt Backports\"\nmy_file: \"install_apt-backports\"\n\npackages:\n - gnupg\n - aria2\n - curl\n"
},
{
"path": "ansible/roles/retronas.role.cache/tasks/main.yaml",
"chars": 698,
"preview": "- name: \"{{ my_name }} - Gather required facts\"\n ansible.builtin.setup:\n gather_subset:\n - date_time\n\n- name: \""
},
{
"path": "ansible/roles/retronas.role.cache/vars/main.yaml",
"chars": 136,
"preview": "retronas_cache_file: \"{{ retronas_root }}/cache/s1_localhost\"\nretronas_systems_file: \"{{ retronas_root }}/ansible/retron"
},
{
"path": "ansible/roles/retronas.role.cockpit/handlers/main.yaml",
"chars": 141,
"preview": "- name: \"{{ my_name }} - Restart service\"\n ansible.builtin.service:\n name: \"{{ my_service }}\"\n state: restarted\n "
},
{
"path": "ansible/roles/retronas.role.cockpit/tasks/main.yaml",
"chars": 1361,
"preview": "- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- name: \"{{ my_name }}"
},
{
"path": "ansible/roles/retronas.role.cockpit/vars/main.yaml",
"chars": 202,
"preview": "my_name: \"Cockpit\"\nmy_file: \"install_cockpit\"\nmy_service: \"cockpit\"\n\npackages:\n - cockpit\n - cockpit-storaged\n - cock"
},
{
"path": "ansible/roles/retronas.role.cockpit-packages/tasks/main.yaml",
"chars": 530,
"preview": "- name: \"{{ my_name }} - install prerequisite packages\"\n ansible.builtin.package:\n name: \"{{ package_tools }}\"\n "
},
{
"path": "ansible/roles/retronas.role.cockpit-packages/templates/install_cockpit-packages/cockpit-packages.sh.j2",
"chars": 1563,
"preview": "#!/bin/bash\n#\n# Clone down additional Cockpit Packages\n#\n\nset -u\n\nRNTMP=/tmp/rn_cpack\nCOCKPIT=/usr/share/cockpit\n\n# clea"
},
{
"path": "ansible/roles/retronas.role.cockpit-packages/vars/main.yaml",
"chars": 133,
"preview": "my_name: \"cockpit-packages\"\nmy_file: \"install_cockpit-packages\"\n\npackage_tools:\n - lm-sensors\n\npackage_data:\n - cockpi"
},
{
"path": "ansible/roles/retronas.role.createdirs/tasks/main.yaml",
"chars": 2877,
"preview": "---\n- name: \"{{ my_name }} - Include systems map\"\n ansible.builtin.include_vars: \"retronas_systems.yml\"\n\n- name: \"{{ my"
},
{
"path": "ansible/roles/retronas.role.curlftpfs/tasks/main.yaml",
"chars": 745,
"preview": "- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- ansible.builtin.impo"
},
{
"path": "ansible/roles/retronas.role.curlftpfs/templates/install_curlftpfs.sh.j2",
"chars": 408,
"preview": "# curlftpfs\n\nset -u\n\nVERS=${1:-0.9.2}\nAPPNAME=curlftpfs-${VERS}\nREPO=https://ixpeering.dl.sourceforge.net/project/curlft"
},
{
"path": "ansible/roles/retronas.role.curlftpfs/vars/main.yaml",
"chars": 249,
"preview": "my_name: \"curlftpfs\"\nmy_file: \"install_{{ my_name }}\"\n\npackages:\n - curl\n - build-essential\n - libglib2.0-dev\n - lib"
},
{
"path": "ansible/roles/retronas.role.dotnetcore3/tasks/main.yaml",
"chars": 1082,
"preview": "- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- ansible.builtin.impo"
},
{
"path": "ansible/roles/retronas.role.dotnetcore3/vars/main.yaml",
"chars": 191,
"preview": "my_name: \"DotNet Core 3.X SDK\"\nmy_file: \"install_dotnetcore3\"\n\npackages:\n - wget\n - curl\n - aria2\n - coreutils\n\nsrcd"
},
{
"path": "ansible/roles/retronas.role.dotnetcore6/tasks/main.yaml",
"chars": 1082,
"preview": "- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- ansible.builtin.impo"
},
{
"path": "ansible/roles/retronas.role.dotnetcore6/vars/main.yaml",
"chars": 182,
"preview": "my_name: \"DotNet Core 6.X SDK\"\nmy_file: \"install_dotnetcore6\"\n\npackages:\n- wget\n- curl\n- aria2\n- coreutils\n\nsrcdir: \"{{ "
},
{
"path": "ansible/roles/retronas.role.dotnetcore8/tasks/main.yaml",
"chars": 1083,
"preview": "- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- ansible.builtin.impo"
},
{
"path": "ansible/roles/retronas.role.dotnetcore8/vars/main.yaml",
"chars": 183,
"preview": "my_name: \"DotNet Core 8.X SDK\"\nmy_file: \"install_dotnetcore8\"\n\npackages:\n- wget\n- curl\n- aria2\n- coreutils\n\nsrcdir: \"{{ "
},
{
"path": "ansible/roles/retronas.role.extradirs/tasks/main.yaml",
"chars": 65,
"preview": "- ansible.builtin.import_role:\n name: retronas.role.createdirs"
},
{
"path": "ansible/roles/retronas.role.extradirs/vars/main.yaml",
"chars": 319,
"preview": "my_name: \"Generic Extra dir(s)\"\nmy_file: \"install_romdir\"\nmodule_name: \"extradirs\"\n\ntop_level_paths:\n - { name: \"saves\""
},
{
"path": "ansible/roles/retronas.role.filesystems/tasks/main.yaml",
"chars": 171,
"preview": "- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n \n- ansible.builtin."
},
{
"path": "ansible/roles/retronas.role.filesystems/vars/main.yaml",
"chars": 291,
"preview": "my_name: \"RetroNAS filesystems\"\nmy_file: \"install_filesystems\"\n\npackages:\n - btrfs-progs\n - ntfs-3g\n - exfatprogs\n -"
},
{
"path": "ansible/roles/retronas.role.firewalld.port/tasks/main.yaml",
"chars": 1092,
"preview": "#\n# FIREWALL\n#\n- name: \"{{ my_name }} - checking firewall rule\"\n ansible.builtin.stat:\n path: /etc/firewalld/service"
},
{
"path": "ansible/roles/retronas.role.htpasswd/tasks/main.yaml",
"chars": 306,
"preview": "---\n- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- name: \"{{ my_nam"
},
{
"path": "ansible/roles/retronas.role.htpasswd/vars/main.yml",
"chars": 48,
"preview": "---\nretronas_htpasswd: \"/etc/retronas.htpasswd\"\n"
},
{
"path": "ansible/roles/retronas.role.nfs/handlers/main.yaml",
"chars": 150,
"preview": "- name: \"{{ my_name }} - Restart service\"\n ansible.builtin.service:\n name: \"{{ item }}\"\n state: restarted\n with_"
},
{
"path": "ansible/roles/retronas.role.nfs/tasks/main.yaml",
"chars": 952,
"preview": "- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- ansible.builtin.impo"
},
{
"path": "ansible/roles/retronas.role.nfs/vars/main.yaml",
"chars": 346,
"preview": "my_name: \"NFS\"\nmy_file: \"install_nfs\"\nmodule_name: \"nfs\"\n\npackages:\n - nfs-common\n - nfs-kernel-server\n\npaths:\n - { n"
},
{
"path": "ansible/roles/retronas.role.nginx/handlers/main.yaml",
"chars": 165,
"preview": "- name: \"restart nginx\"\n ansible.builtin.service:\n name: \"{{ item.name }}\"\n state: restarted\n with_items: \"{{ sy"
},
{
"path": "ansible/roles/retronas.role.nginx/tasks/main.yaml",
"chars": 3933,
"preview": "---\n- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- ansible.builtin."
},
{
"path": "ansible/roles/retronas.role.nginx/templates/install_nginx/conf/includes/autoindex.conf",
"chars": 86,
"preview": "autoindex on;\nautoindex_exact_size off;\nautoindex_format html;\nautoindex_localtime on;"
},
{
"path": "ansible/roles/retronas.role.nginx/templates/install_nginx/conf/includes/listen-80.conf",
"chars": 26,
"preview": "listen 80;\nlisten [::]:80;"
},
{
"path": "ansible/roles/retronas.role.nginx/templates/install_nginx/conf/includes/ssl.conf",
"chars": 228,
"preview": "listen 443 ssl;\nlisten [::]:443 ssl;\n\nssl_certificate /etc/ssl/private/retronas.crt;\nssl_certificate_key /etc/ssl/pr"
},
{
"path": "ansible/roles/retronas.role.nginx/templates/install_nginx/conf/sites-available/10-retronas.conf",
"chars": 486,
"preview": "server {\n server_name retronas;\n server_name retro;\n server_name www.*;\n\n include includes/listen-80.conf;\n "
},
{
"path": "ansible/roles/retronas.role.nginx/templates/install_nginx/conf/sites-available/99-retronas-files.conf",
"chars": 231,
"preview": "server {\n server_name files.*;\n\n include includes/listen-80.conf;\n include includes/ssl.conf;\n\n location / {"
},
{
"path": "ansible/roles/retronas.role.nginx/templates/install_nginx/www/index.html",
"chars": 418,
"preview": "<html lang=\"en\">\n<head>\n<title>retroNAS</title>\n</head>\n<body>\n <a href=\"//files.retro\">files</a><br />\n <"
},
{
"path": "ansible/roles/retronas.role.nginx/vars/main.yaml",
"chars": 714,
"preview": "my_name: \"nginx\"\nmy_file: \"install_{{ my_name }}\"\n\nnginx_sites_available: \"/etc/{{ my_name }}/sites-available\"\nnginx_sit"
},
{
"path": "ansible/roles/retronas.role.package.latest/tasks/main.yaml",
"chars": 153,
"preview": "- name: \"{{ my_name }} - Install packages\"\n ansible.builtin.package:\n name: \"{{ packages }}\"\n state: latest\n u"
},
{
"path": "ansible/roles/retronas.role.paths/tasks/main.yaml",
"chars": 396,
"preview": "- name: \"{{ my_name }} - paths\"\n ansible.builtin.file:\n src: \"{{ item.src | default(omit) }}\"\n dest: \"{{ item.des"
},
{
"path": "ansible/roles/retronas.role.romdir/tasks/main.yaml",
"chars": 70,
"preview": "---\n- ansible.builtin.import_role:\n name: retronas.role.createdirs\n"
},
{
"path": "ansible/roles/retronas.role.romdir/vars/main.yaml",
"chars": 146,
"preview": "---\nmy_name: \"Generic ROM dir\"\nmy_file: \"install_romdir\"\nmodule_name: \"romdir\"\n\ntop_level_paths:\n - { name: \"roms\", ena"
},
{
"path": "ansible/roles/retronas.role.samba/handlers/main.yaml",
"chars": 123,
"preview": "- name: \"restart samba\"\n ansible.builtin.service:\n name: \"{{ item }}\"\n state: restarted\n loop: \"{{ my_services }"
},
{
"path": "ansible/roles/retronas.role.samba/tasks/main.yaml",
"chars": 703,
"preview": "---\n- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- ansible.builtin."
},
{
"path": "ansible/roles/retronas.role.samba/templates/retronas.conf.j2",
"chars": 341,
"preview": "## RetroNAS config.\n## This is autogenerated. Changes will be lost.\ncomment = retronas\npath = {{ retronas_path }}\nguest "
},
{
"path": "ansible/roles/retronas.role.samba/vars/main.yaml",
"chars": 1723,
"preview": "---\nmy_name: \"Samba\"\nmy_file: \"\" # required to clear out any play set var\n\npackages:\n - avahi-daemon\n - samba\n - sam"
},
{
"path": "ansible/roles/retronas.role.samba.system/tasks/link.yml",
"chars": 1985,
"preview": "---\n- name: \"{{ my_name }} - build layout list (set fact) (links)\"\n ansible.builtin.set_fact:\n path_list_ll: \"{{ pat"
},
{
"path": "ansible/roles/retronas.role.samba.system/tasks/main.yaml",
"chars": 1854,
"preview": "---\n- name: \"{{ my_name }} - Include systems map\"\n ansible.builtin.include_vars: \"retronas_systems.yml\"\n\n- name: \"{{ my"
},
{
"path": "ansible/roles/retronas.role.samba.system/tasks/nolink.yml",
"chars": 985,
"preview": "---\n- name: \"{{ my_name }} - build layout nolink list (set fact) (dir)\"\n ansible.builtin.set_fact:\n path_list_ll: \"{"
},
{
"path": "ansible/roles/retronas.role.samba.system/templates/retronas_system.conf.j2",
"chars": 361,
"preview": "## RetroNAS config.\n## This is autogenerated. Changes will be lost.\ncomment = {{ system_key }}\npath = {{ retronas_path }"
},
{
"path": "ansible/roles/retronas.role.sslcert/tasks/main.yaml",
"chars": 629,
"preview": "- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- ansible.builtin.impo"
},
{
"path": "ansible/roles/retronas.role.sslcert/vars/main.yaml",
"chars": 154,
"preview": "my_name: \"sslcert\"\nmy_file: \"install_{{ my_name }}\"\nmy_cert: /etc/ssl/private/retronas.crt\nmy_key: /etc/ssl/private/retr"
},
{
"path": "ansible/roles/retronas.role.system-config/tasks/main.yaml",
"chars": 2626,
"preview": "---\n- name: \"{{ my_name }} - Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- name: \"{{ my_nam"
},
{
"path": "ansible/roles/retronas.role.system-config/vars/main.yaml",
"chars": 580,
"preview": "---\nmy_name: \"retronas user config setup\"\nmodule_state: \"present\"\n\nsystem_user_dirs:\n - config\n - config/modules\n\ngene"
},
{
"path": "ansible/roles/retronas.role.templates/tasks/main.yaml",
"chars": 461,
"preview": "---\n- name: \"{{ my_name }} - templates\"\n ansible.builtin.template:\n src: \"templates/{{ my_file }}/{{ tmpl.sub + '/' "
},
{
"path": "ansible/roles/retronas.role.update-user/tasks/main.yaml",
"chars": 251,
"preview": "- name: \"Load RetroNAS config\"\n ansible.builtin.include_vars: retronas_vars.yml\n\n- name: \"update user\"\n ansible.builti"
},
{
"path": "ansible/roles/retronas.role.x11vnc/tasks/main.yaml",
"chars": 136,
"preview": "- ansible.builtin.import_role:\n name: retronas.role.package.latest\n\n- ansible.builtin.import_role:\n name: retronas"
},
{
"path": "ansible/roles/retronas.role.x11vnc/templates/install_x11vnc/x11vnc_wrapper.sh.j2",
"chars": 310,
"preview": "#!/bin/bash\n\nXDISPLAY=$1\nXAUTH=$2\nPORT=$3\n\nRFBAUTH=/etc/vncpasswd_retronas\n\n# use a local auth file if it exists\nif [ -f"
},
{
"path": "ansible/roles/retronas.role.x11vnc/vars/main.yaml",
"chars": 165,
"preview": "my_name: \"x11vnc\"\nmy_file: \"install_{{ my_name }}\"\n\npackages:\n - xvfb\n - x11vnc\n\ntemplates:\n - { name: \"x11vnc_wrappe"
},
{
"path": "ansible/templates/install_3ds_qr_codes/3ds_qr.sh.j2",
"chars": 2161,
"preview": "#!/bin/bash\n\n## RetroNAS autogenerated\n\nFLUSH=\"\"\nOPTSTRING=\"f\"\n\nwhile getopts $OPTSTRING ARG\ndo\n case $ARG in\n f)\n "
},
{
"path": "ansible/templates/install_3ds_qr_codes/retronas_3ds_qr.cron.j2",
"chars": 201,
"preview": "# RetroNAS automatically generated\n# Every 15 minutes check for new 3DS titles and generate a QR code to match\n*/15 * * "
},
{
"path": "ansible/templates/install_adtpro/ADTPro.properties.j2",
"chars": 334,
"preview": "#ADTPro.properties\nAudioHardwareIndex=0\nAudioPortIndex=0\nClient01xCompatibleProtocol=false\nCommPort=/dev/ttyUSB0\nCommPor"
},
{
"path": "ansible/templates/install_adtpro/adtpro.service.j2",
"chars": 277,
"preview": "[Unit]\nDescription=ADTPro %i\nStartLimitIntervalSec=60\nStartLimitBurst=4\n\n[Service]\nWorkingDirectory={{ my_dir }}\nExecSta"
},
{
"path": "ansible/templates/install_adtpro/adtpro_retronas.sh.j2",
"chars": 502,
"preview": "#!/bin/bash\n\nMODE=${1:-localhost}\nPORT=${2:-60000}\n\nPARENTPID=$(ps -ef | grep -E \"xvfb-run.*adtpro.*$MODE\" | grep -v gre"
},
{
"path": "ansible/templates/install_adtpro/install_adtpro.sh.j2",
"chars": 931,
"preview": "#!/bin/bash\n\nset -u\n\nBINDIR=\"/opt/adtpro\"\nDLDIR=$(mktemp -d)\n\n\necho \"Downloading adtpro release...\"\nRELEASE=$( curl -kLs"
},
{
"path": "ansible/templates/install_affstools/install_affstools.sh.j2",
"chars": 497,
"preview": "#!/bin/bash\n\nAPP=affstools\nSRCDIR=\"{{ retronas_root }}/src\"\nBINDIR=\"/usr/local/sbin\"\n\nBINS=(\n affsck\n mkaffs\n)\n\nec"
},
{
"path": "ansible/templates/install_amitools/install_amitools.sh.j2",
"chars": 309,
"preview": "#!/bin/bash\n\nAPP=amitools\nmv /usr/lib/python3*/EXTERNALLY-MANAGED /usr/lib/python3/EXTERNALLY-MANAGED.old 2> /dev/null\np"
}
]
// ... and 335 more files (download for full content)
About this extraction
This page contains the full source code of the danmons/retronas GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 535 files (998.8 KB), approximately 295.9k tokens, and a symbol index with 11 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.