""" * Author: "PeppermintOS Team(peppermintosteam@proton.me) * * License: SPDX-License-Identifier: GPL-3.0-or-later * * Set the infrastructure for bubbles to begin the ISO build * This copied needed confog files to the binary and chroot * locations, based o the build base and architecture """ import os import sys import collections from pathlib import Path import shutil import paths # Public Variables used in the classes BSTRING_ISO_CONFIGS = '~/bubbles/iso_configs' HOME_FOLDER = str(Path(BSTRING_ISO_CONFIGS).expanduser()) WPCHROOT = "/fusato/config/includes.chroot" BINARYPTH = "/fusato/config/includes.binary" BOOTSTRAP = "/fusato/config/includes.bootstrap" FUSATOCONFIG = "/fusato/config" term_size = os.get_terminal_size() class Processing(list): def __enter__(self): self._stdout = sys.stdout sys.stdout = self._stringio = StringIO() return self def __exit__(self, *args): self.extend(self._stringio.getvalue().splitlines()) del self._stringio # free up some memory sys.stdout = self._stdout class ChrootFolders: """ Copy all the needed folders to CHROOT Depending on the architecture it will, copy folders as needed """ def __init__(self,sbase,sarch): print('=' * term_size.columns) print("Copy Chroot") print('=' * term_size.columns) self.sbase = sbase self.sarch = sarch src_chroot = ('/osrelease/' + self.sbase + self.sarch, '/osrelease/' + self.sbase + self.sarch, '/grub/'+ self.sbase + self.sarch, '/calamares_settings/' + self.sbase + self.sarch + '/calamares/modules', '/grub/' + self.sbase + '_themes' ) des_chroot =('/usr/lib', '/opt/pepconf', '/etc/default/grub', '/etc/calamares/modules', '/boot/grub/themes' ) # Chroot Folders. chroot_src_q = collections.deque(src_chroot) chroot_des_q = collections.deque(des_chroot) chroot_size_q = len(chroot_src_q) for size_length in range(chroot_size_q): source = chroot_src_q.popleft() des = chroot_des_q.popleft() print("INFO: Copying - " + HOME_FOLDER + source) shutil.copytree(HOME_FOLDER + source, HOME_FOLDER + WPCHROOT + des, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des) class BinaryFolders: """ Copy all the needed folders to BINARY Depending on the architecture it will, copy folders as needed """ def __init__(self, sbase, sarch): print('=' * term_size.columns) print("Copy Binary") print('=' * term_size.columns) self.sbase = sbase self.sarch = sarch src_binary = ('/splash/' + self.sbase + self.sarch + '/boot', '/splash/' + self.sbase + self.sarch +'/isolinux', '/splash/' + self.sbase + '_live-theme', '/splash/' + self.sbase + '_splash', '/splash/' + self.sbase + '_splash' ) des_binary =('/boot', '/isolinux', '/boot/grub', '/isolinux', '/boot/grub' ) # Binary Folders binary_src_q = collections.deque(src_binary) binary_des_q = collections.deque(des_binary) binary_size_q = len(binary_src_q) for size_length in range(binary_size_q): source = binary_src_q.popleft() des = binary_des_q.popleft() print("INFO: Copying - " + HOME_FOLDER + source) shutil.copytree(HOME_FOLDER + source, HOME_FOLDER + BINARYPTH + des, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + BINARYPTH + des) class ArchitectureFiles: """ Copy all the needed files to CHROOT Depending on the architecture it will, copy files as needed """ def __init__(self, sbase, sarch): print('=' * term_size.columns) print("Copy Architecture") print('=' * term_size.columns) self.sbase = sbase self.sarch = sarch calamares_path = '/calamares_settings/' sources_path = '/sources/' src_paths = (calamares_path + self.sbase + self.sarch + '/calamares/settings.conf', calamares_path + self.sbase + self.sarch + '/install-peppermint', calamares_path + self.sbase + self.sarch + '/sources-final', calamares_path + self.sbase + self.sarch + '/bootloader-config', calamares_path + 'adddesktopicon/add-calamares-desktop-icon', sources_path + self.sbase + self.sarch + '/sources.list', '/id_files/pep_id' ) des_paths = ('/etc/calamares/settings.conf', '/usr/bin/install-peppermint', '/usr/sbin/sources-final', '/usr/sbin/bootloader-config', '/usr/bin/add-calamares-desktop-icon', '/opt/pepconf/sources.list', '/usr/share/peppermint/pep_id' ) # copy files to thier CHROOT Location src_q = collections.deque(src_paths) des_q = collections.deque(des_paths) size_q = len(src_q) for size_length in range(size_q): source = src_q.popleft() des = des_q.popleft() print("INFO: Copying - " + HOME_FOLDER + source) shutil.copy(HOME_FOLDER + source, HOME_FOLDER + WPCHROOT + des ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des) def set_symlinks(): """ Set the symliknks that are used for all builds. """ print('=' * term_size.columns) print("Copy symlinks") print('=' * term_size.columns) pep_info = '/usr/share/python-apt/templates/Peppermint.info' pep_mirror = '/usr/share/python-apt/templates/Peppermint.mirrors' pep_csv = '/usr/share/distro-info/peppermint.csv' print("INFO: Making - " + HOME_FOLDER + WPCHROOT + pep_info) os.symlink('Debian.info', HOME_FOLDER + WPCHROOT + pep_info) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + pep_info) print("INFO: Making - " + HOME_FOLDER + WPCHROOT + pep_mirror) os.symlink('Debian.mirrors', HOME_FOLDER + WPCHROOT + pep_mirror) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + pep_mirror) print("INFO: Making - " + HOME_FOLDER + WPCHROOT + pep_csv) os.symlink('debian.csv', HOME_FOLDER + WPCHROOT + pep_csv) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + pep_csv) def shared_folders(): """ This function will get the files that are shared commonly amongst all the builds, """ print('=' * term_size.columns) print("Copy Shared folders") print('=' * term_size.columns) src_paths = ('/plymouth/lines', '/application', '/font', '/hooks/live', '/issue', '/issue', '/polkit', '/database', '/user_config', '/PepProPixMaps', '/wallpaper', '/menu/menus', '/face', '/neofetch/neofetch', '/pmostools', '/autostart', '/pylibraries', '/desktop_base/lines-theme/grub', '/desktop_base/lines-theme/lockscreen', '/desktop_base/lines-theme/login', '/desktop_base/lines-theme/wallpaper', '/calamares_settings/branding' ) des_paths =('/usr/share/plymouth/themes/lines', '/usr/share/applications', '/usr/share/fonts/pepconf', '/usr/lib/live/config', '/etc', '/opt/pepconf', '/usr/share/polkit-1/actions', '/opt/pypep/dbpep', '/etc/live/config.conf.d', '/usr/share/pixmaps', '/usr/share/backgrounds', '/etc/skel/.config/menus', '/etc/skel/', '/etc/skel/.config/neofetch', '/etc/skel/.local/share/pmostools', '/etc/skel/.config/autostart', '/usr/lib/python3/dist-packages', '/usr/share/desktop-base/lines-theme/grub', '/usr/share/desktop-base/lines-theme/lockscreen', '/usr/share/desktop-base/lines-theme/login', '/usr/share/desktop-base/lines-theme/wallpaper', '/etc/calamares/branding' ) src_q = collections.deque(src_paths) des_q = collections.deque(des_paths) size_q = len(des_q) for size_length in range(size_q): source = src_q.popleft() des = des_q.popleft() print("INFO: Copying - " + HOME_FOLDER + source) shutil.copytree(HOME_FOLDER + source, HOME_FOLDER + WPCHROOT + des, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des) def icons_themes(): """ This function will get the icons and themse that are for all the builds """ print('=' * term_size.columns) print("Copy icons and themes") print('=' * term_size.columns) src_paths =('/theme/Marwaita Dark Debian/', '/theme/Marwaita Dark Manjaro/', '/theme/Marwaita Dark Peppermint/', '/theme/Marwaita Debian/', '/theme/Marwaita Manjaro/', '/theme/Marwaita Peppermint/', '/icons/Tela-circle-blue-dark/', '/icons/Tela-circle-green-dark/', '/icons/Tela-circle-red-dark/', '/icons/Tela-circle-blue/', '/icons/Tela-circle-green/', '/icons/Tela-circle-red/', '/icons/Tela-circle/' ) des_paths = ('/usr/share/themes/Marwaita Dark Debian/', '/usr/share/themes/Marwaita Dark Manjaro/', '/usr/share/themes/Marwaita Dark Peppermint/', '/usr/share/themes/Marwaita Debian/', '/usr/share/themes/Marwaita Manjaro/', '/usr/share/themes/Marwaita Peppermint/', '/usr/share/icons/Tela-circle-blue-dark/', '/usr/share/icons/Tela-circle-green-dark/', '/usr/share/icons/Tela-circle-red-dark/', '/usr/share/icons/Tela-circle-blue/', '/usr/share/icons/Tela-circle-green/', '/usr/share/icons/Tela-circle-red/', '/usr/share/icons/Tela-circle/' ) src_q = collections.deque(src_paths) des_q = collections.deque(des_paths) size_q = len(src_q) for size_length in range(size_q): source = src_q.popleft() des = des_q.popleft() print("INFO: Copying - " + HOME_FOLDER + source) shutil.copytree(HOME_FOLDER + source, HOME_FOLDER + WPCHROOT + des, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des) def shared_files(): """ This silll copy all specific files that a used for all builds. """ print('=' * term_size.columns) print("Copy Shared Files") print('=' * term_size.columns) src_paths = ('/aliases/bash_aliases', '/PepProTools/xDaily', '/PepProTools/hub', '/PepProTools/welcome', '/PepProTools/kumo', '/lightdm/lightdm.conf', '/lightdm/lightdm-gtk-greeter.conf', '/plymouth/plymouthd.conf', '/application/plank.desktop' ) des_paths = ('/etc/skel/.bash_aliases', '/usr/local/bin/xDaily', '/usr/local/bin/hub', '/usr/local/bin/welcome', '/usr/local/bin/kumo', '/etc/lightdm/lightdm.conf', '/etc/lightdm/lightdm-gtk-greeter.conf', '/usr/share/plymouthd.conf', '/etc/skel/.config/autostart/plank.desktop', ) # copy files to thier CHROOT Location src_q = collections.deque(src_paths) des_q = collections.deque(des_paths) size_q = len(src_q) for size_length in range(size_q): source = src_q.popleft() des = des_q.popleft() print("INFO: Copying - " + HOME_FOLDER + source) shutil.copy(HOME_FOLDER + source, HOME_FOLDER + WPCHROOT + des ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des) def fusato_configs(): """ Copy specific folders in the root of fusato configs """ print('=' * term_size.columns) print("Copy Fusato Configs") print('=' * term_size.columns) src_paths = ('/hooks/normal',) des_paths = ('/hooks/normal',) src_q = collections.deque(src_paths) des_q = collections.deque(des_paths) size_q = len(src_q) for size_length in range(size_q): source = src_q.popleft() des = des_q.popleft() print("INFO: Copying - " + HOME_FOLDER + source) shutil.copytree(HOME_FOLDER + source, HOME_FOLDER + FUSATOCONFIG + des, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des) def boostrap_shared(): """ Copy specific folders in the boostrap location """ term_size = os.get_terminal_size() print('=' * term_size.columns) print("Copy Shared BootStrap") print('=' * term_size.columns) src_paths = ('/issue',) des_paths = ('/etc',) src_q = collections.deque(src_paths) des_q = collections.deque(des_paths) size_q = len(src_q) for size_length in range(size_q): source = src_q.popleft() des = des_q.popleft() print("INFO: Copying - " + HOME_FOLDER + source) shutil.copytree(HOME_FOLDER + source, HOME_FOLDER + BOOTSTRAP + des, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des) def xfce_configs(): """ Copy the xfce files. """ print('=' * term_size.columns) print("Copy xfce4 configs") print('=' * term_size.columns) src_xfce = '/xfce/xfce4' des_xfce = '/etc/skel/.config/xfce4' print("INFO: Copying - " + HOME_FOLDER + src_xfce) shutil.copytree(HOME_FOLDER + src_xfce, HOME_FOLDER + WPCHROOT + des_xfce, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des_xfce) src_thunar = '/xfce/Thunar' des_thunar = '/etc/skel/.config/Thunar' print("INFO: Copying - " + HOME_FOLDER + src_thunar) shutil.copytree(HOME_FOLDER + src_thunar, HOME_FOLDER + WPCHROOT + des_thunar, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des_thunar) def gnome_flahsbak_configs(): """ Copy the gnome flashback files """ print('=' * term_size.columns) print("Copy Gnome Flashback configs") src_gnomef = '/gnome-flashback' des_gnomef = '/etc/skel/.config/gnome-flashback' print("INFO: Copying - " + HOME_FOLDER + source) shutil.copytree(HOME_FOLDER + src_gnomef, HOME_FOLDER + WPCHROOT + des_gnomef, dirs_exist_ok = True ) print("INFO: Finished - " + HOME_FOLDER + WPCHROOT + des)