diff --git a/global-freebsd.sh b/global-freebsd.sh new file mode 100644 index 0000000..62a3fbe --- /dev/null +++ b/global-freebsd.sh @@ -0,0 +1,2018 @@ +#!/bin/sh + + +Desktop-Environment_menu() { + +clear + +checkinternet() { + local url="https://www.freebsd.org/" + + if fetch -q -o /dev/null "$url"; then + echo "Looking for Internet Connection, please wait..." + else + echo "Your computer is not connected to the internet, I can't go on." + exit 1 + fi +} + +installpkg() { + printf "\n" + echo "Looking for 'pkg', please wait..." + sleep 1 + + if [ ! -x /usr/local/sbin/pkg ]; then + # Check if pkg can be installed + if pkg ins -y 2>&1 | grep -q "error"; then + echo "I can't install pkg, please check your internet connection" + printf "\n" + exit 0 + fi + fi +} + + +# Welcome ! +welcome() { + echo "Everything seems OK, let's go !" + bsddialog --msgbox "Welcome to this desktop installation script for FreeBSD!" 5 60 +} + + +# System Update +update() { + if bsddialog --yesno "Do you want to update your system before starting?" 5 54; then + bsddialog --msgbox "Please review the available changes, then press 'q' to continue" 5 67 + freebsd-update fetch + freebsd-update install + fi +} + + +# User +user_for_desktop() { + if bsddialog --yesno "Have you already created the user who will use the desktop?" 5 63; then + for j in $(seq 4); do + # Username of the desktop environment user + user=$(bsddialog --inputbox "Please enter his username" 8 29 2>&1 1>/dev/tty) + + #check if the user already exists or not + if ! getent passwd "$user" >/dev/null; then + bsddialog --msg " !WARNING!\n This user does not exist\n Please try again" 7 58 + else + break + fi + done + + # Exit script if not able to choose a user + if [ $j -eq 4 ]; then + exit 0 + fi + else + for i in $(seq 4); do + + user=$(bsddialog --inputbox "What username would you like to give to your user?\n (No spaces or special characters)" 9 54 2>&1 1>/dev/tty) + fullname=$(bsddialog --inputbox "Please enter his full name (don't leave empty)" 8 50 2>&1 1>/dev/tty) + + #check if the user already exists or not + if getent passwd "$user" >/dev/null; then + if bsddialog --yesno " !WARNING!\n This user already exists\nDo you want to use it [Yes] or create another one [No]" 7 58; then + break + fi + else + pw useradd "$user" -d "/home/$user" -m -c "$fullname" + clear + echo "--------------------------------------" + echo "Please assign a password to $user" + printf "\n" + passwd $user + break + fi + done + + # Exit script if not able to create a user + if [ $i -eq 4 ]; then + exit 0 + fi + fi +} + + +# DE choice: +kde-sddm() { + pkg_list="xorg sudo sddm kde5 freebsd-8k-wallpapers-kde kde-baseapps kde-dev-scripts + kde-dev-utils kde-thumbnailer-chm kde-thumbnailer-epub kde-thumbnailer-fb2 + kde_poster kdeaccessibility kdeadmin kdebugsettings kdeconnect-kde kdegames + kdegraphics kdegraphics-thumbnailers kdemultimedia kdevelop calligra kmymoney + kdemultimedia-ffmpegthumbs kdenetwork kdenetwork-filesharing kdenlive kdeutils + libkdegames libkdepim libproxy-kde plasma5-kde-cli-tools plasma5-kde-gtk-config + plasma5-kdecoration plasma5-kdeplasma-addons wallpapers-freebsd-kde dsbsu" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc sddm_enable=YES dbus_enable=YES + + sysctl net.local.stream.recvspace=65536 net.local.stream.sendspace=65536 > /dev/null 2>&1 + pw groupmod video -m "$user" + + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + echo "exec ck-launch-session startplasma-x11" > /home/"$user"/.xinitrc +} + +xfce-lightdm() { + pkg_list="xorg sudo lightdm lightdm-gtk-greeter xfce gtk-xfce-engine workrave-xfce + xfce4-appmenu-plugin xfce4-battery-plugin xfce4-bsdcpufreq-plugin + xfce4-calculator-plugin xfce4-clipman-plugin xfce4-cpugraph-plugin + xfce4-dashboard xfce4-datetime-plugin xfce4-dev-tools xfce4-dict-plugin + xfce4-diskperf-plugin xfce4-docklike-plugin xfce4-fsguard-plugin + xfce4-generic-slider xfce4-genmon-plugin xfce4-goodies xfce4-mixer + xfce4-mpc-plugin xfce4-panel-profiles xfce4-places-plugin + xfce4-pulseaudio-plugin xfce4-volumed-pulse xfce4-whiskermenu-plugin + xfce4-windowck-plugin" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc lightdm_enable=YES dbus_enable=YES + + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + cp /usr/local/etc/xdg/xfce4/xinitrc /home/"$user"/.xinitrc +} + +mate-lightdm() { + pkg_list="xorg sudo lightdm lightdm-gtk-greeter libmatekbd libmatemixer libmateweather + libshumate mate mate-applet-appmenu mate-applets mate-backgrounds mate-base mate-calc + mate-common mate-control-center mate-desktop mate-dock-applet mate-icon-theme + mate-icon-theme-faenza mate-indicator-applet mate-media mate-menus mate-notification-daemon + mate-pam-helper mate-panel mate-polkit mate-power-manager mate-screensaver + mate-session-manager mate-settings-daemon mate-system-monitor mate-terminal + mate-themes mate-user-guide mate-utils materia-gtk-theme" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc lightdm_enable=YES dbus_enable=YES + + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + echo "exec ck-launch-session mate-session" > /home/"$user"/.xinitrc +} + +cinnamon-lightdm() { + pkg_list="xorg sudo lightdm lightdm-gtk-greeter cinnamon cinnamon-control-center + cinnamon-desktop cinnamon-menus cinnamon-screensaver cinnamon-session + cinnamon-settings-daemon cinnamon-translations" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc lightdm_enable=YES dbus_enable=YES + + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + echo "exec ck-launch-session cinnamon-session" > /home/"$user"/.xinitrc +} + +gnome-gdm() { + pkg_list="xorg sudo gdm chrome-gnome-shell gnome gnome-2048 gnome-autoar gnome-backgrounds + gnome-builder gnome-calculator gnome-calendar gnome-characters gnome-chess + gnome-clipboard-daemon gnome-clocks gnome-color-manager gnome-common gnome-connections + gnome-console gnome-contacts gnome-control-center gnome-desktop gnome-devel-docs + gnome-dictionary gnome-font-viewer gnome-games gnome-getting-started-docs gnome-icon-theme + gnome-icon-theme-extras gnome-icon-theme-symbolic gnome-icons gnome-icons-elementary + gnome-icons-faenza gnome-icons-luv gnome-initial-setup gnome-keyring gnome-keyring-sharp + gnome-klotski gnome-latex gnome-lite gnome-mahjongg gnome-maps gnome-menus gnome-metronome + gnome-mime-data gnome-mines gnome-mplayer gnome-music gnome-nettool gnome-nibbles + gnome-online-accounts gnome-online-miners gnome-photos gnome-pie gnome-planner + gnome-podcasts gnome-pomodoro gnome-power-manager gnome-pty-helper gnome-robots + gnome-screenshot gnome-session gnome-settings-daemon gnome-shell + gnome-shell-extension-audio-output-switcher gnome-shell-extension-coverflow + gnome-shell-extension-dashtodock gnome-shell-extension-dashtopanel + gnome-shell-extension-filesmenu gnome-shell-extension-hidetopbar + gnome-shell-extension-lockkeys gnome-shell-extension-mediaplayer + gnome-shell-extension-openweather gnome-shell-extension-panel-osd + gnome-shell-extension-recent-items gnome-shell-extension-trash + gnome-shell-extension-weather gnome-shell-extension-windowoverlay-icons + gnome-shell-extensions gnome-shell-extra-extensions gnome-sound-recorder + gnome-ssh-askpass gnome-sudoku gnome-system-monitor gnome-terminal gnome-tetravex + gnome-text-editor gnome-themes gnome-themes-extra gnome-todo gnome-tweaks + gnome-user-docs gnome-user-share gnome-utils gnome-video-effects gnome-weather + gnome_subr guile-gnome-platform-full guile-gnome-platform-lite libgnome-games-support + libgnome-keyring libgnomecanvas libgnomecanvasmm libgnomekbd libproxy-gnome3 + pinentry-gnome polkit-gnome qgnomeplatform rubygem-gnome subversion-gnome-keyring + xdg-desktop-portal-gnome" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc gdm_enable=YES dbus_enable=YES + + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + echo "exec gnome-session" > /home/"$user"/.xinitrc +} + +lxqt-sddm() { + pkg_list="xorg sudo sddm liblxqt lxqt lxqt-about lxqt-admin lxqt-archiver + lxqt-build-tools lxqt-config lxqt-globalkeys lxqt-notificationd lxqt-openssh-askpass + lxqt-panel lxqt-policykit lxqt-powermanagement lxqt-qtplugin lxqt-runner + lxqt-session lxqt-sudo lxqt-themes" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc sddm_enable=YES dbus_enable=YES + + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + echo "exec ck-launch-session startlxqt" > /home/"$user"/.xinitrc +} + + +desktop_selection_menu() { + DE=$(bsddialog --clear \ + --backtitle "Desktop Environnment" \ + --title "Desktop Environnment" \ + --menu "Select your Desktop Environnment:" \ + 14 70 10 \ + 1 "KDE (with sddm)" \ + 2 "XFCE4 (with lightdm)" \ + 3 "MATE (with lightdm)" \ + 4 "CINNAMON (with lightdm)" \ + 5 "GNOME (with gdm)" \ + 6 "LXQT (with sddm)" \ + 7 "(none)" \ + 3>&1 1>&2 2>&3) + + case $DE in + 1) kde-sddm ;; + 2) xfce-lightdm ;; + 3) mate-lightdm ;; + 4) cinnamon-lightdm ;; + 5) gnome-gdm ;; + 6) lxqt-sddm ;; + esac +} + + +# Which GPU ? +intel-irisxe() { + +cat < /usr/local/etc/X11/xorg.conf.d/00-scfb.conf +Section "Device" + Identifier "Card0" + Driver "scfb" + BusID "$intelirisxe_pci_location" +EndSection +EOF + +} + +vbox() { + +cat < /usr/local/etc/X11/xorg.conf.d/00-vbox.conf +# This configuration file is useless. +# It only permits autodetection. +EOF + + +} + +intel-older() { + clear + pkg info -e xf86-video-intel || pkg ins -y xf86-video-intel + pkg info -e drm-kmod || pkg ins -y drm-kmod + sysrc kld_list="i915kms" > /dev/null 2>&1 + +cat < /usr/local/etc/X11/xorg.conf.d/00-intel.conf +Section "Device" + Identifier "Intel Graphics" + Driver "intel" + Option "AccelMethod" "sna" + Option "TearFree" "true" + Option "DRI" "3" + Option "Backlight" "intel_backlight" + BusID "$intel_pci_location" +EndSection +EOF + +} + +nvidia-gpu() { + clear + pkg ins -y nvidia-driver + sysrc kld_list="nvidia-modeset" > /dev/null 2>&1 + + # Automatically detect and BusID for NVIDIA graphics : + pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'NVIDIA') + pci_location=$(echo "$pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://') + + +cat < /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf +Section "Device" + Identifier "Device0" + Driver "nvidia" + VendorName "NVIDIA Corporation" + BusID "$nvidia_pci_location" +EndSection +EOF + +} + +amd-cpu_amd-gpu() { + clear + pkg info -e xf86-video-amdgpu || pkg ins -y xf86-video-amdgpu + sysrc kld_list="amdgpu" > /dev/null 2>&1 +} + + +graphics_selection_menu() { + GPU=$(bsddialog --clear \ + --backtitle "GPU" \ + --title "GPU Menu" \ + --menu "Select your graphics:" \ + 12 70 10 \ + 1 "Intel Iris Xe" \ + 2 "Intel (before Iris Xe)" \ + 3 "Nvidia" \ + 4 "AMD" \ + 5 "Virtual Machine" \ + 3>&1 1>&2 2>&3) + + case $GPU in + 1) intel-irisxe ;; + 2) intel-older ;; + 3) nvidia-gpu ;; + 4) amd-gpu;; + esac + +} + + +automatic_graphics_detection() { + + # Check if there is an already existing configuration file : + if [ -e /usr/local/etc/X11/xorg.conf.d/00-scfb.conf ] || \ + [ -e /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf ] || \ + [ -e /usr/local/etc/X11/xorg.conf.d/00-intel.conf ] || \ + [ -e /usr/local/etc/X11/xorg.conf.d/00-vbox.conf ]; then + + bsddialog --yesno "I have detected a previous graphics configuration file\n Do you want to use it [Yes] or erase it [No]?" 6 58 + existingconf_ornot=$? + + + if [ $existingconf_ornot -eq 0 ]; then + + useconf="1" + + else + + rm /usr/local/etc/X11/xorg.conf.d/00-scfb.conf 2>&1 + rm /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf 2>&1 + rm /usr/local/etc/X11/xorg.conf.d/00-intel.conf 2>&1 + rm /usr/local/etc/X11/xorg.conf.d/00-vbox.conf 2>&1 + + + fi + + + + fi + + + if [ "$useconf" != "1" ]; then + + # VIRTUALBOX + vbox_pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 "'SVGA II Adapter") + vbox_pci_location=$(echo "$vbox_pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://') + + # INTEL IRIS Xe + intelirisxe_pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'Iris Xe') + intelirisxe_pci_location=$(echo "$intelirisxe_pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://') + + # INTEL (before Iris Xe) + intel_pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 "HD Graphics") + intel_pci_location=$(echo "$intel_pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://') + + # NVIDIA + nvidia_pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'NVIDIA') + nvidia_pci_location=$(echo "$nvidia_pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://') + + + # If 2 graphics are detected (Intel Iris Xe and NVIDIA), please choose between + if [ ! -z "$intelirisxe_pciconf_output" ] && \ + [ ! -z "$nvidia_pciconf_output" ]; then + + bsddialog --yesno "We have detected both Intel Iris Xe and NVIDIA graphics\n Use Intel Iris Xe [Yes] or NVIDIA [No]?" 6 59 + intel_ornvidia=$? + + if [ $intel_ornvidia -eq 0 ]; then + + intel-irisxe + + else + nvidiagpu + + fi + + fi + + # If 2 graphics are detected (Intel and NVIDIA), please choose between + if [ ! -z "$intel_pciconf_output" ] && \ + [ ! -z "$nvidia_pciconf_output" ]; then + + bsddialog --yesno "We have detected both Intel and NVIDIA graphics\n Use Intel [Yes] or NVIDIA [No]?" 6 51 + intel_ornvidia=$? + + if [ $intel_ornvidia -eq 0 ]; then + + intel-older + + else + nvidiagpu + + fi + + fi + + # If VirtualBox is detected, ask to accept or not : + if [ ! -z "$vbox_pciconf_output" ]; then + vbox + fi + + + # If an Intel Iris Xe is detected, ask to accept or not : + if [ ! -z "$intelirisxe_pciconf_output" ]; then + intel-irisxe + fi + + + # If an Intel is detected, ask to accept or not : + if [ ! -z "$intel_pciconf_output" ]; then + intel-older + fi + + + # If an NVIDIA is detected, ask to accept or not : + if [ ! -z "$nvidia_pciconf_output" ]; then + nvidia-gpu + fi + + + # If no choice has been done, go to graphics_selection_menu : + if [ ! -e /usr/local/etc/X11/xorg.conf.d/00-scfb.conf ] && \ + [ ! -e /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf ] && \ + [ ! -e /usr/local/etc/X11/xorg.conf.d/00-intel.conf ] && \ + [ ! -e /usr/local/etc/X11/xorg.conf.d/00-vbox.conf ]; then + + graphics_selection_menu + + fi + + + fi + + + + # Check if there is an already existing configuration file : + if [ ! -e /usr/local/etc/X11/xorg.conf.d/00-scfb.conf ] && \ + [ ! -e /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf ] && \ + [ ! -e /usr/local/etc/X11/xorg.conf.d/00-intel.conf ] && \ + [ ! -e /usr/local/etc/X11/xorg.conf.d/00-vbox.conf ]; then + + graphics_selection_menu + fi + + +} + +programs_selection_menu() { + # Install usual programs + TMPFILE=$(mktemp) + + bsddialog --backtitle "Select programs" \ + --title "Installing applications" \ + --checklist "Select programs:" 30 70 20 \ + "firefox " "Firefox web browser" off \ + "ungoogled-chromium " "Chromium web browser without Google" off \ + "chrome-linux " "Linux compat chrome for Netflix" off \ + "brave-linux " "Linux compat brave" off \ + "edge-linux " "Linux compat edge" off \ + "opera-linux " "Linux compat opera" off \ + "vivaldi-linux " "Linux compat vivaldi" off \ + "qutebrowser " "Qutebrowser vim-like web browser" off \ + "tor-browser " "Tor Browser for FreeBSD" off \ + "midori " "Midori web browser" off \ + "thunderbird " "Thunderbird Mail Client" off \ + "claws-mail " "Claws-Mail Client" off \ + "putty " "Putty term" off \ + "remmina " "Remote Desktop Viewer" off \ + "gtk-mixer " "Sound controller" off \ + "keepassxc " "KeePassXC password manager" off \ + "codeblocks " "Code Editor" off \ + "vscode " "Code Editor" off \ + "vlc " "VLC multimedia player" off \ + "handbrake " "HandBrake video encoder" off \ + "ffmpeg " "Video library" off \ + "audacity " "Audacity audio editor" off \ + "gimp " "GIMP image editor" off \ + "nomacs " "easy image viewer/editor" off \ + "ristretto " "Ristretto image viewer" off \ + "liferea " "RSS agregator" off \ + "youtube-dl " "YouTube video downloader" off \ + "libreoffice " "LibreOffice office suite" off \ + "abiword " "Text editor" off \ + "qpdfview " "PDF document viewer" off \ + "filezilla " "FileZilla FTP client" off \ + "rclone " "Rclone file transfer tool" off \ + "rclone-browser " "GUI rclone" off \ + "musescore " "Sheet music editor" off \ + "httrack " "web-site sucker" off \ + "hexchat " "HexChat IRC client" off \ + "pidgin " "Pidgin messaging client" off \ + "psi " "PSI messaging client" off \ + "wireshark " "Wireshark network protocol analyzer" off \ + "nmap " "Nmap network discovery tool" off \ + "tor " "Tor decentralized anonymous network" off \ + "openvpn " "OpenVPN Virtual Private Network setup" off 2>$TMPFILE + + choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n') + + # Install the selected programs. + for choice in $choices; do + + case $choice in + "chrome-linux") + + pkg info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + + if [ ! -e /tmp/linux-browser-installer* ]; then + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /tmp/linux-browser-installer/linux-browser-installer install chrome + + ;; + "brave-linux") + + pkg info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + if [ ! -e /tmp/linux-browser-installer* ]; then + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /tmp/linux-browser-installer/linux-browser-installer install brave + + ;; + "edge-linux") + + pkg info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + if [ ! -e /tmp/linux-browser-installer* ]; then + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /tmp/linux-browser-installer/linux-browser-installer install edge + + ;; + "opera-linux") + + pkg info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + if [ ! -e /tmp/linux-browser-installer* ]; then + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /tmp/linux-browser-installer/linux-browser-installer install opera + ;; + "vivaldi-linux") + + pkg info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + if [ ! -e /tmp/linux-browser-installer* ]; then + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /tmp/linux-browser-installer/linux-browser-installer install vivaldi + + rm -r /tmp/linux-browser-installer + + ;; + "pidgin") + pkg_list="pidgin pidgin-bot-sentry pidgin-encryption pidgin-fetion pidgin-hotkeys + pidgin-icyque pidgin-latex pidgin-libnotify pidgin-manualsize pidgin-otr + pidgin-sipe pidgin-skypeweb pidgin-twitter pidgin-window_merge" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + ;; + *) + pkg info -e "$choice" || pkg ins -y "$choice" + ;; + esac + + done + + rm -f "$TMPFILE" +} + + + +# usual tools bundle +usual_tools_installation() { + pkg_list="wget w3m lynx rsync emacs nano sshpass fuse fusefs-ntfs fusefs-exfat + automount megatools dvd+rw-tools cdrtools webcamd cups cups-filters system-config-printer + pwcview wifimgr networkmgr zip unzip bzip2 bzip3 btop htop nmap bind-tools git + rdesktop xrdp tree gh hw-probe inxi python3 py39-qt5 bhyve-firmware" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc -f /boot/loader.conf fusefs_load=YES + sysrc webcamd_enable="YES" + service devd restart + pw groupmod webcamd -m "$user" + sysrc -f /boot/loader.conf cuse_load=YES + sysrc cupsd_enable="YES" + sysrc xrdp_enable="NO" + sysrc xrdp_sesman_enable="NO" + + if [ ! -x /usr/local/bin/ipfwGUI ]; then + cd /tmp + git clone https://github.com/bsdlme/ipfwGUI.git + cd ipfwGUI + make install clean + fi +} + + + +# Install a hypervisor +hypervisor_selection() { + TMPFILE=$(mktemp) + + bsddialog --backtitle "Select programs" \ + --title "Install a hypervisor" \ + --checklist "Select programs:" 9 70 20 \ + "virtualbox-ose " "VirtualBox" off \ + "BVCP " "GUI Bhyve manager" off 2>$TMPFILE + + # Read the user choices from the temporary file. + choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n') + + + # Install the selected programs. + for choice in $choices; do + + if [ "$choice" = "virtualbox-ose" ]; then + pkg info -e virtualbox-ose || pkg ins -y virtualbox-ose + pkg info -e virtualbox-ose-additions || pkg ins -y virtualbox-ose-additions + + sysrc vboxguest_enable=YES > /dev/null 2>&1 + sysrc vboxservice_enable=YES > /dev/null 2>&1 + sysrc vboxnet_enable=YES > /dev/null 2>&1 + sysrc -f /boot/loader.conf vboxdrv_load=YES > /dev/null 2>&1 + + if ! grep -q "^\[system=10\]$" /etc/devfs.rules; then + echo "[system=10]" >> /etc/devfs.rules + fi + + if ! grep -q "^add path 'usb/\*' mode 0660 group operator$" /etc/devfs.rules; then + echo "add path 'usb/*' mode 0660 group operator" >> /etc/devfs.rules + fi + + sysrc devfs_system_ruleset="system" > /dev/null 2>&1 + pw groupmod vboxusers -m "$user" + pw groupmod operator -m "$user" + sysrc hald_enable=YES > /dev/null 2>&1 + + if ! grep -q "^perm cd\* 0660$" /etc/devfs.conf; then + echo "perm cd* 0660" >> /etc/devfs.conf + fi + + if ! grep -q "^perm xpt0 0660$" /etc/devfs.conf; then + echo "perm xpt0 0660" >> /etc/devfs.conf + fi + + if ! grep -q "^perm pass\* 0660$" /etc/devfs.conf; then + echo "perm pass* 0660" >> /etc/devfs.conf + fi + + if ! grep -q "^own vboxnetctl root:vboxusers$" /etc/devfs.conf; then + echo "own vboxnetctl root:vboxusers" >> /etc/devfs.conf + fi + + if ! grep -q "^perm vboxnetctl 0660$" /etc/devfs.conf; then + echo "perm vboxnetctl 0660" >> /etc/devfs.conf + fi + + + chown root:vboxusers /dev/vboxnetctl + chmod 0660 /dev/vboxnetctl + + fi + if [ "$choice" = "BVCP" ]; then + fetch https://bhyve.npulse.net/release.tgz -o /tmp + cd /tmp ; tar xvzf release.tgz ; cd bhyve-webadmin* + ./install.sh + printf "\n" + echo "------------------------------------------------------" + echo "Please note the admin password and then press [ENTER] to continue" + echo "------------------------------------------------------" + read ENTER + fi + + done + + rm -f "$TMPFILE" +} + + +# Add $user to wheel and operator group, add wheel group to sudo permissions +make_administrator() { + pw groupmod wheel -m "$user" + pw groupmod operator -m "$user" + sed -i '' "s/# %wheel/ %wheel/" /usr/local/etc/sudoers +} + + + +# Change locale +locale_selection_menu() { + + # Utiliser bsddialog pour afficher une liste avec des boutons radio + selected_choice=$(bsddialog --title "Select Locale" --radiolist "Please choose:" 19 50 15 \ + "af_ZA.UTF-8" "South Africa" off \ + "am_ET.UTF-8" "Ethiopia" off \ + "ar_AE.UTF-8" "United Arab Emirates" off \ + "ar_EG.UTF-8" "Egypt" off \ + "ar_JO.UTF-8" "Jordan" off \ + "ar_MA.UTF-8" "Morocco" off \ + "ar_QA.UTF-8" "Qatar" off \ + "ar_SA.UTF-8" "Saudi Arabia" off \ + "be_BY.UTF-8" "Belarus" off \ + "bg_BG.UTF-8" "Bulgaria" off \ + "ca_AD.UTF-8" "Andorra" off \ + "ca_ES.UTF-8" "Spain" off \ + "ca_FR.UTF-8" "France" off \ + "ca_IT.UTF-8" "Italy" off \ + "cs_CZ.UTF-8" "Czech Republic" off \ + "da_DK.UTF-8" "Denmark" off \ + "de_AT.UTF-8" "Austria" off \ + "de_CH.UTF-8" "Switzerland" off \ + "de_DE.UTF-8" "Germany" off \ + "el_GR.UTF-8" "Greece" off \ + "en_AU.UTF-8" "Australia" off \ + "en_CA.UTF-8" "Canada" off \ + "en_GB.UTF-8" "United Kingdom" off \ + "en_HK.UTF-8" "Hong Kong" off \ + "en_IE.UTF-8" "Ireland" off \ + "en_NZ.UTF-8" "New Zealand" off \ + "en_PH.UTF-8" "Philippines" off \ + "en_SG.UTF-8" "Singapore" off \ + "en_US.UTF-8" "United States" off \ + "en_ZA.UTF-8" "South Africa" off \ + "es_AR.UTF-8" "Argentina" off \ + "es_CR.UTF-8" "Costa Rica" off \ + "es_ES.UTF-8" "Spain" off \ + "es_MX.UTF-8" "Mexico" off \ + "et_EE.UTF-8" "Estonia" off \ + "eu_ES.UTF-8" "Spain" off \ + "fa_AF.UTF-8" "Afghanistan" off \ + "fa_IR.UTF-8" "Iran" off \ + "fi_FI.UTF-8" "Finland" off \ + "fr_BE.UTF-8" "Belgium" off \ + "fr_CA.UTF-8" "Canada" off \ + "fr_CH.UTF-8" "Switzerland" off \ + "fr_FR.UTF-8" "France" off \ + "ga_IE.UTF-8" "Ireland" off \ + "he_IL.UTF-8" "Israel" off \ + "hi_IN.UTF-8" "India" off \ + "hr_HR.UTF-8" "Croatia" off \ + "hu_HU.UTF-8" "Hungary" off \ + "hy_AM.UTF-8" "Armenia" off \ + "is_IS.UTF-8" "Iceland" off \ + "it_CH.UTF-8" "Switzerland" off \ + "it_IT.UTF-8" "Italy" off \ + "ja_JP.UTF-8" "Japan" off \ + "kk_KZ.UTF-8" "Kazakhstan" off \ + "ko_KR.UTF-8" "South Korea" off \ + "lt_LT.UTF-8" "Lithuania" off \ + "lv_LV.UTF-8" "Latvia" off \ + "mn_MN.UTF-8" "Mongolia" off \ + "nb_NO.UTF-8" "Norway" off \ + "nl_BE.UTF-8" "Belgium" off \ + "nl_NL.UTF-8" "Netherlands" off \ + "nn_NO.UTF-8" "Norway" off \ + "pl_PL.UTF-8" "Poland" off \ + "pt_BR.UTF-8" "Brazil" off \ + "pt_PT.UTF-8" "Portugal" off \ + "ro_RO.UTF-8" "Romania" off \ + "ru_RU.UTF-8" "Russia" off \ + "se_FI.UTF-8" "Finland" off \ + "se_NO.UTF-8" "Norway" off \ + "sk_SK.UTF-8" "Slovakia" off \ + "sl_SI.UTF-8" "Slovenia" off \ + "sr_RS.UTF-8" "Serbia" off \ + "sr_RS.UTF-8@latin" "Serbia" off \ + "sv_FI.UTF-8" "Finland" off \ + "sv_SE.UTF-8" "Sweden" off \ + "tr_TR.UTF-8" "Turkey" off \ + "uk_UA.UTF-8" "Ukraine" off \ + "zh_CN.UTF-8" "China" off \ + "zh_HK.UTF-8" "Hong Kong" off \ + "zh_TW.UTF-8" "Taiwan" off 3>&1 1>&2 2>&3) + + + # Check and Add locale choice to /home/"$user"/.profile + if ! grep -q "export LANG=\"$selected_choice\"" /home/"$user"/.profile; then + { + echo -e "\n# CUSTOM LOCALE" + echo "export LANG=\"$selected_choice\"" + } >> /home/"$user"/.profile + fi + + if ! grep -q "export LC_CTYPE=\"$selected_choice\"" /home/"$user"/.profile; then + echo "export LC_CTYPE=\"$selected_choice\"" >> /home/"$user"/.profile + fi + + # Change the locale for gdm (if installed) + if [ -e /usr/local/etc/gdm/locale.conf ]; then + sed -i '' "s/en_US.UTF-8/$selected_choice/" /usr/local/etc/gdm/locale.conf + fi + + # Change Keyboard map + kbd=$(echo "$selected_choice" | sed 's/^\(..\).*$/\1/') + + if [ ! -e /usr/local/etc/X11/xorg.conf.d/keyboard.conf ]; then + +cat < /usr/local/etc/X11/xorg.conf.d/keyboard.conf +Section "InputClass" +Identifier "KeyboardDefaults" + MatchIsKeyboard "on" + Option "XkbLayout" "$kbd" +EndSection +EOF + + fi + + +} + +build_locatedb() { + + # updatedb : + if [ "$(sysrc -n weekly_locate_enable)" = "YES" ]; then + echo "The weekly locate update is already enabled in rc.conf. The script 310.locate will not run." + else + /etc/periodic/weekly/310.locate + fi + +} + +# reboot now +reboot_now() { + bsddialog --yesno "Thank you for using this script!\n The installation is finished\n Do you want to reboot now?" 7 36 + close_inac=$? + + if [ $close_inac -eq 0 ]; then + + reboot + + fi +} + +################################################################################################################ + +checkinternet +installpkg +welcome +update +user_for_desktop +desktop_selection_menu +automatic_graphics_detection # at the very moment, only Intel 'Iris Xe', Intel 'HD/UHD Graphics' and 'NVIDIA' (for 535 version) are automatically detected, choice must be asked manually for others +programs_selection_menu +usual_tools_installation +hypervisor_selection +make_administrator +locale_selection_menu +build_locatedb +reboot_now + +} + + +Update-full-system() { + bsddialog --msgbox "Please review the available changes, then press 'q' to continue" 5 67 + freebsd-update fetch + freebsd-update install + +} + + +select-USB-device() { + + bsddialog --msgbox "Please connect your USB device now" 5 38 + + # Select USB device from 'camcontrol devlist' output + i=1 + while [ $i -lt 4 ]; do + line_count=$(camcontrol devlist | wc -l | tr -d ' ') + dialogheight=$((line_count+6)) + + if [ $line_count -eq 0 ]; then + + bsddialog --msg "There is no USB device connected" 5 37 + exit 0 + + else + + TMPFILE=$(mktemp) + echo "bsddialog --title \"Select USB\" --radiolist \"Please choose:\" $dialogheight 60 15 \\" > $TMPFILE + + l=1 + less=$((line_count-1)) + while [ $l -lt $line_count ]; do + entry=$(camcontrol devlist | grep -E '\s\(da[0-9]+,|ada[0-9]+,\)|\(ada[0-9]+,' | sed -n "$l"p) + usbdev=$(echo "$entry" | grep -Eo '(da[0-9]+|ada[0-9]+)' | sed 's/[(]//g') + identity=$(echo "$entry" | grep -Eo '<[^>]+>' | sed 's/[<>]//g') + + addlinetomenu="\"$usbdev\" \"$identity\" off \\" + echo "$addlinetomenu" >> $TMPFILE + + l=$((l+1)) + done + + addlastlinetomenu="--cancel-label "Rescan" 3>&1 1>&2 2>&3" + echo "$addlastlinetomenu" >> $TMPFILE + + # Display the bsddialog menu with detected USB devices + pathdi=$(sh "$TMPFILE") + + # Check if the user has selected rescan + exit_status=$? + + # If the user has selected rescan, then loop 2 other times. + if [ $exit_status -eq 1 ]; then + i=$((i+1)) + else + i=$((i+5)) + fi + + fi + done + + if [ $i -eq 4 ]; then + + bsddialog --msg "Sorry, there is a detection problem" 5 40 + exit 0 + + fi + + rm -r $TMPFILE + +} + + + +Format-USB-UFS() { + + # Select the USB device + select-USB-device + + # Erase with dd or not, then umount and destroy + if bsddialog --yesno " Would you like to proceed with a secure erase (dd)?\nThe erasing process can take several hours, or even days!" 6 61; then + umount -f /dev/fuse + umount -f /dev/$pathdi* + gpart destroy -F /dev/$pathdi + + clear + echo "-----------------------------------" + echo "The secure erase is starting" + printf "\n" + sleep 1 + dd if=/dev/zero of=/dev/$pathdi bs=8m status=progress + else + umount -f /dev/fuse + umount -f /dev/$pathdi* + gpart destroy -F /dev/$pathdi + + fi + + + clear + echo "-----------------------------------" + echo "Creating GPT table" + gpart create -s GPT /dev/$pathdi + printf "\n" + + echo "-----------------------------------" + echo "Creating UFS partition" + partia=`gpart add -t freebsd-ufs -a 1m /dev/$pathdi | cut -d ' ' -f1` + partia2="$partia" + printf "\n" + + echo "-----------------------------------" + echo "UFS formatting of the partition $pathdip" + newfs -U /dev/$partia2 + + bsddialog --msgbox "The erase, partition creation, and formatting are completed\n\nAll you have to do now is mount the partition $partia2 wherever you like, if it doesn't mount automatically" 8 64 + + + MainMenu +} + + +Format-USB-FAT32 () { + + # Check and Install fuse, fuse-ntfs, fusefs-exfat and load fusefs + pkg_list="fuse fusefs-ntfs fusefs-exfat" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + if kldstat | grep -q "fusefs"; then + clear + echo "-----------------------------------" + echo "fusefs is already loaded" + + else + clear + echo "-----------------------------------" + echo "fusefs is going to be loaded" + + kldload fusefs + + fi + + + # Select the USB device + select-USB-device + + # Erase with dd or not, then umount and destroy + if bsddialog --yesno " Would you like to proceed with a secure erase (dd)?\nThe erasing process can take several hours, or even days!" 6 61; then + umount -f /dev/fuse + umount -f /dev/$pathdi* + gpart destroy -F /dev/$pathdi + + clear + echo "-----------------------------------" + echo "The secure erase is starting" + printf "\n" + sleep 1 + dd if=/dev/zero of=/dev/$pathdi bs=8m status=progress + else + umount -f /dev/fuse + umount -f /dev/$pathdi* + gpart destroy -F /dev/$pathdi + + fi + + clear + echo "-----------------------------------" + echo "Creating MBR table" + gpart create -s mbr /dev/$pathdi + printf "\n" + + echo "-----------------------------------" + echo "Please enter a Label for your partition" + read namepartfat + printf "\n" + + echo "-----------------------------------" + echo "Creating FAT32 partition" + partia=`gpart add -t fat32 /dev/$pathdi | cut -d ' ' -f1` + partia2="$partia" + printf "\n" + + echo "-----------------------------------" + echo "FAT32 formatting of the partition $pathdia2" + newfs_msdos -L $namepartfat /dev/$partia2 + + bsddialog --msgbox "The erase, partition creation, and formatting are completed\n\nAll you have to do now is mount the partition $partia2 wherever you like, if it doesn't mount automatically" 8 64 + + MainMenu +} + +Format-USB-NTFS () { + + # Check and Install fuse, fuse-ntfs, fusefs-exfat and load fusefs + pkg_list="fuse fusefs-ntfs fusefs-exfat" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + if kldstat | grep -q "fusefs"; then + clear + echo "-----------------------------------" + echo "fusefs is already loaded" + + else + clear + echo "-----------------------------------" + echo "fusefs is going to be loaded" + + kldload fusefs + + fi + + + # Select the USB device + select-USB-device + + # Erase with dd or not, then umount and destroy + if bsddialog --yesno " Would you like to proceed with a secure erase (dd)?\nThe erasing process can take several hours, or even days!" 6 61; then + umount -f /dev/fuse + umount -f /dev/$pathdi* + gpart destroy -F /dev/$pathdi + + clear + echo "-----------------------------------" + echo "The secure erase is starting" + printf "\n" + sleep 1 + dd if=/dev/zero of=/dev/$pathdi bs=8m status=progress + else + umount -f /dev/fuse + umount -f /dev/$pathdi* + gpart destroy -F /dev/$pathdi + + fi + + + clear + echo "-----------------------------------" + echo "Creating GPT table" + gpart create -s GPT $pathdi + printf "\n" + + echo "-----------------------------------" + echo "Creating ms-basic-data partition" + partia=`gpart add -t ms-basic-data $pathdi | cut -d ' ' -f1` + partia2="$partia" + printf "\n" + + echo "-----------------------------------" + echo "NTFS formatting of the partition $pathdia2" + chmod 760 /dev/$partia2 + export NTFS_USE_UBLIO=0 + mkntfs -vFQ /dev/$partia2 + + bsddialog --msgbox "The erase, partition creation, and formatting are completed\n\nAll you have to do now is mount the partition $partia2 wherever you like, if it doesn't mount automatically" 8 64 + + MainMenu +} + +Secure-erase-USB () { + + # Select the USB device + select-USB-device + + # Erase with dd or not, then umount and destroy + if bsddialog --yesno " Would you like to proceed with a secure erase (dd)?\nThe erasing process can take several hours, or even days!" 6 61; then + umount -f /dev/fuse + umount -f /dev/$pathdi* + gpart destroy -F /dev/$pathdi + + clear + echo "-----------------------------------" + echo "The secure erase is starting" + printf "\n" + sleep 1 + dd if=/dev/zero of=/dev/$pathdi bs=8m status=progress + else + + MainMenu + + fi + + bsddialog --msg "The erase is completed" 5 26 + + MainMenu +} + +Burn-iso-USB () { + + # Select the USB device + select-USB-device + + clear + echo "-----------------------------------" + TMPFILE=$(mktemp) + + clear + echo "-----------------------------------" + echo "Please navigate in your system until you find the IMAGE.iso" + sleep 3 + + ls > $TMPFILE + options=$(cat -n $TMPFILE) + + i=0 + while [ $i -lt 30 ]; do + whereamI=$(pwd) + ls > $TMPFILE + options=$(cat -n $TMPFILE) + clear + echo "-----------------------------------" + echo "You're in $whereamI" + printf "\n" + + echo " 0 (go back to parent folder)" + cat -n $TMPFILE + + printf "\n" + echo "-----------------------------------" + echo "Enter the index of your choice (or 'q' to quit):" + read opt + + if [ "$opt" = "q" ]; then + exit + elif [ "$opt" -eq 0 ]; then + cd .. + elif [ "$opt" -eq "$opt" ] 2>/dev/null && [ "$opt" -ge 1 ] && [ "$opt" -le "$(wc -l < $TMPFILE)" ]; then + selected_file=$(sed -n "${opt}p" $TMPFILE) + if [ -d "$selected_file" ]; then + cd "$selected_file" + i=$((i+1)) + else + IMAGE=$(realpath "$selected_file") + i=$((i+31)) + fi + else + echo "Invalid input. Please enter a valid index." + sleep 1 + fi + + done + + rm -f "$TMPFILE" + + clear + echo "-----------------------------------" + echo "The image is currently being burned." + printf "\n" + + umount -f /dev/$pathdi* + dd if="$IMAGE" of=/dev/$pathdi bs=8m status=progress + + bsddialog --msg "The burning is complete" 5 27 + + MainMenu +} + +Burn-iso-DVD-BD () { + + # Check and Install dvd+rw-tools cdrtools + pkg_list="dvd+rw-tools cdrtools" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + + # Check if hw.ata.atapi_dma="1" is already added to /boot/loader.conf or not + if grep -qxF 'hw.ata.atapi_dma="1"' /boot/loader.conf; then + echo "hw.ata.atapi_dma="1" is already added to /boot/loader.conf" + else + # Si la ligne n'existe pas, l'ajouter + echo 'hw.ata.atapi_dma="1"' | sudo tee -a /boot/loader.conf + echo "hw.ata.atapi_dma="1" has been added to /boot/loader.conf" + fi + + # Check if [system 10] is already added to /etc/devfs.rules or not + if grep -qxF '[system 10]' /etc/devfs.rules; then + echo "[system 10] is already added to /etc/devfs.rules" + else + # Si la ligne n'existe pas, l'ajouter + echo '[system 10]' | sudo tee -a /etc/devfs.rules + echo "[system 10] has been added to /etc/devfs.rules" + fi + + # Check if 'add path 'cd*' mode 666' is already added to /etc/devfs.rules or not + if grep -qxF "add path 'cd*' mode 666" /etc/devfs.rules; then + echo "add path 'cd*' mode 666 is already added to /etc/devfs.rules" + else + # Si la ligne n'existe pas, l'ajouter + echo "add path 'cd*' mode 666" | sudo tee -a /etc/devfs.rules + echo "add path 'cd*' mode 666 has been added to /etc/devfs.rules" + fi + + # Check if 'add path 'pass0' mode 666' is already added to /etc/devfs.rules or not + if grep -qxF "add path 'pass0' mode 666" /etc/devfs.rules; then + echo "add path 'pass0' mode 666 is already added to /etc/devfs.rules" + else + # Si la ligne n'existe pas, l'ajouter + echo "add path 'pass0' mode 666" | sudo tee -a /etc/devfs.rules + echo "add path 'pass0' mode 666 has been added to /etc/devfs.rules" + fi + + # Check if 'add path 'xpt0' mode 666' is already added to /etc/devfs.rules or not + if grep -qxF "add path 'xpt0' mode 666" /etc/devfs.rules; then + echo "add path 'xpt0' mode 666 is already added to /etc/devfs.rules" + else + # Si la ligne n'existe pas, l'ajouter + echo "add path 'xpt0' mode 666" | sudo tee -a /etc/devfs.rules + echo "add path 'xpt0' mode 666 has been added to /etc/devfs.rules" + fi + + sysrc devfs_system_ruleset=system + service devfs restart + + + bsddialog --msgbox "Please insert the blank media now" 5 38 + + clear + echo "-----------------------------------" + TMPFILE=$(mktemp) + + clear + echo "-----------------------------------" + echo "Please navigate in your system until you find the IMAGE.iso" + sleep 3 + + ls > $TMPFILE + options=$(cat -n $TMPFILE) + + i=0 + while [ $i -lt 30 ]; do + whereamI=$(pwd) + ls > $TMPFILE + options=$(cat -n $TMPFILE) + clear + echo "-----------------------------------" + echo "You're in $whereamI" + printf "\n" + + echo " 0 (go back to parent folder)" + cat -n $TMPFILE + + printf "\n" + echo "-----------------------------------" + echo "Enter the index of your choice (or 'q' to quit):" + read opt + + if [ "$opt" = "q" ]; then + exit + elif [ "$opt" -eq 0 ]; then + cd .. + elif [ "$opt" -eq "$opt" ] 2>/dev/null && [ "$opt" -ge 1 ] && [ "$opt" -le "$(wc -l < $TMPFILE)" ]; then + selected_file=$(sed -n "${opt}p" $TMPFILE) + if [ -d "$selected_file" ]; then + cd "$selected_file" + i=$((i+1)) + else + IMAGE=$(realpath "$selected_file") + i=$((i+31)) + fi + else + echo "Invalid input. Please enter a valid index." + sleep 1 + fi + + done + + rm -f "$TMPFILE" + + clear + echo "-----------------------------------" + echo "The image is currently being burned." + printf "\n" + + growisofs -speed=4 -Z /dev/cd0="$IMAGE" + + bsddialog --msg "The burning is complete" 5 27 + + MainMenu +} + +Split-Rejoin-file () { + + if [ ! -x /usr/local/bin/renamex ]; then + + pkg ins -y rename + + fi + + clear + echo "----------------------------------------------------------------------" + echo "This module allows you to search, recursively, in the folder of your choice, for files whose size exceeds the value of your choice, and to split them into blocks of the size you choose." + echo "It also allows you to restore (rejoin) the files previously split" + echo "----------------------------------------------------------------------" + echo "During the splitting process, the module will create, at the location of each file to be split, a folder bearing the name of the file to be split (with -split at the end of the name) that will contain the split files" + echo "Unless you want to perform the rejoining yourself (without using this module), DO NOT MODIFY what has been generated by the splitting.. Neither the names of the split-folders nor the names of the files contained within these split-folders" + echo "During the rejoining, the module will restore the original hierarchical structure (as before splitting), identically" + echo "----------------------------------------------------------------------" + echo "Would you like to continue? [y/n]" + read abrc + + case $abrc in + y|N) + clear + echo "----------------------------------------------------------------------" + echo "Would you like to split or rejoin? [s/r]" + read deccol + + case $deccol in + s|S) + clear + echo "----------------------------------------------------------------------" + echo "Please specify the absolute path of the folder to process" + echo "(Do not end the path with a /)" + read abhtp + echo "----------------------------------------------------------------------" + echo "What is the maximum file size to target?" + echo " Examples:" + echo " - (for 300 kilobytes, specify 300K)" + echo " - (for 500 megabytes, specify 500M)" + echo " - (for 2 gigabytes, specify 2G)" + read ciblesize + echo "----------------------------------------------------------------------" + echo "What should be the size of the split files?" + echo " Examples:" + echo " - (for 300 kilobytes, specify 300K)" + echo " - (for 500 megabytes, specify 500M)" + echo " - (for 2 gigabytes, specify 2G)" + read splitsize + + clear + echo "----------------------------------------------------------------------" + echo "The operation is in progress, please wait" + sleep 2 + + # Remove all spaces from file names + cd "$abhtp" + renamex -A -R -s/' '/PqxX8XxqP/g "$abhtp"/ + + for chacun in `find $abhtp -type f -size +$ciblesize` + do + filepath="$chacun" + filename="$(basename "$filepath")" + path="${filepath%/*}" + cd "$path" + mkdir "$filename-split" + mv "$filename" "$filename"-split/ + cd "$filename"-split + split -b $splitsize "$filename" + rm -f "$filename" + touch "these-files-have-been-split-abZd.txt" + echo "UNLESS YOU REJOIN MANUALLY, DO NOT TOUCH THIS FILE!" > "these-files-have-been-split-abZd.txt" + echo "use the global-freebsd.sh script to remerge these files" >> "these-files-have-been-split-abZd.txt" + echo "otherwise, use cat x* > folder-name-without-the-split-dash and place the obtained file in the upper folder" >> "these-files-have-been-split-abZd.txt" + done + + # Restore all spaces in file names + renamex -A -R -s/PqxX8XxqP/' '/g "$abhtp"/ + + clear + echo "----------------------------------------------------------------------" + echo "The operation is over" + sleep 2 + clear + ;; + r|R) + clear + echo "----------------------------------------------------------------------" + echo "This module allows you to rejoin files that have already been split by this module" + echo "Do not use this part unless you have previously used the split function!!" + echo "Would you like to continue? [y/n]" + read arbt + case $arbt in + y|Y) + clear + echo "----------------------------------------------------------------------" + echo "Please specify the absolute path of the folder to process" + echo "(Do not end the path with a /)" + read abhtp + + # Remove all spaces from file names + cd "$abhtp" + renamex -A -R -s/' '/PqxX8XxqP/g "$abhtp"/ + + clear + echo "----------------------------------------------------------------------" + echo "The operation is in progress, please wait" + sleep 2 + for chacun in `find $abhtp -type f -name "these-files-have-been-split-abZd.txt"` + do + filepath="$chacun" + filename=$(basename "$filepath") + path=${filepath%/*} + foldernamesplit=$(basename "$path") + cd "$path" + cat x* > "$foldernamesplit" + rm -f x* these-files-have-been-split-abZd.txt + renamex -s/'-split'//g "$foldernamesplit" + mv ./* ../ + cd .. + rm -rf "$foldernamesplit" + done + + # Restore all spaces in file names + renamex -A -R -s/PqxX8XxqP/' '/g "$abhtp"/ + + clear + echo "----------------------------------------------------------------------" + echo "The operation is over" + sleep 2 + clear + ;; + n|N) + break + ;; + esac + break + ;; + esac + ;; + n|N) + break + ;; + esac + break + + MainMenu +} + + + +###################################################################### + +# 3) Update_menu +Update_menu() { + choix=$(bsddialog --clear \ + --backtitle "Global-FreeBSD" \ + --title "Update Menu" \ + --menu "Select:" \ + 10 70 10 \ + 1 "Update the full system : freebsd-update" \ + 2 "Update your services : pkg upgrade" \ + 3 "Change the time zone : tzsetup" \ + 3>&1 1>&2 2>&3) + + case $choix in + 1) Update-full-system ;; + 2) pkg upgrade -y ;; + 3) tzsetup ;; + esac + + MainMenu +} + +###################################################################### + +# 6.1) Web-Browsers_menu + +Web-Browsers_menu() { + + # check if applications are already installed or not + if [ -x /usr/local/bin/firefox ]; then + s_firefox="on" + else + s_firefox="off" + fi + + if [ -x /usr/local/bin/ungoogled-chromium ]; then + s_ungoogledchromium="on" + else + s_ungoogledchromium="off" + fi + + if [ -x /compat/ubuntu/bin/chrome ]; then + s_ubuntuchrome="on" + else + s_ubuntuchrome="off" + fi + + if [ -x /usr/local/bin/qutebrowser ]; then + s_qutebrowser="on" + else + s_qutebrowser="off" + fi + + if [ -x /usr/local/bin/iridium ]; then + s_iridium="on" + else + s_iridium="off" + fi + + if [ -x /usr/local/bin/tor-browser ]; then + s_torbrowser="on" + else + s_torbrowser="off" + fi + + if [ -x /usr/local/bin/otter-browser ]; then + s_otterbrowser="on" + else + s_otterbrowser="off" + fi + + if [ -x /usr/local/bin/surf ]; then + s_surfbrowser="on" + else + s_surfbrowser="off" + fi + + if [ -x /usr/local/bin/midori ]; then + s_midori="on" + else + s_midori="off" + fi + + if [ -x /usr/local/bin/links ]; then + s_links="on" + else + s_links="off" + fi + + if [ -x /usr/local/bin/elinks ]; then + s_elinks="on" + else + s_elinks="off" + fi + + if [ -x /usr/local/bin/lynx ]; then + s_lynx="on" + else + s_lynx="off" + fi + + # Install usual programs + TMPFILE=$(mktemp) + + allchoices="firefox ungoogled-chromium chrome-linux qutebrowser iridium-browser tor-browser otter-browser surf-browser midori links elinks lynx" + + bsddialog --backtitle "Select programs" \ + --title "Installing applications" \ + --checklist "Select programs:" 30 70 20 \ + "firefox " "Firefox web browser" $s_firefox \ + "ungoogled-chromium " "Chromium web browser without Google" $s_ungoogledchromium \ + "chrome-linux " "Linux compat chrome for Netflix" $s_ubuntuchrome \ + "qutebrowser " "Qutebrowser vim-like web browser" $s_qutebrowser \ + "iridium-browser " "Iridium browser" $s_iridium \ + "tor-browser " "Tor Browser for FreeBSD" $s_torbrowser \ + "otter-bowser " "Browser based on Qt 5" $s_otterbrowser \ + "surf-browser " "Simple Web brower based on WebKit2/GTK" $s_surfbrowser \ + "midori " "Midori web browser" $s_midori \ + "links " "Lynx-like text WWW browser" $s_links \ + "elinks " "Links text WWW browser" $s_elinks \ + "lynx " "Non-graphical, text-based World-Wide Web Client" $s_lynx 2>$TMPFILE + + choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n') + + # Install the selected programs. + for choice in $choices; do + + case $choice in + "chrome-linux") + pkg ins -y wget git + cd /tmp + git clone https://github.com/mrclksr/linux-browser-installer.git + cd linux-browser-installer* + ./linux-browser-installer install chrome + cd .. + rm -r linux-browser-installer + ;; + *) + pkg ins -y "$choice" + ;; + esac + + done + + # Remove non selected programs + for choice in $allchoices; do + # Vérifie si le choix est dans la liste des choix sélectionnés + if ! echo "$choices" | grep -qw "$choice"; then + case $choice in + "chrome-linux") + pkg ins -y wget git + cd /tmp + git clone https://github.com/mrclksr/linux-browser-installer.git + cd linux-browser-installer* + ./linux-browser-installer deinstall chrome + cd .. + rm -r linux-browser-installer + ;; + *) + pkg remove -y "$choice" + ;; + esac + fi + done + + + rm -f "$TMPFILE" + + MainMenu + +} + +###################################################################### + +# 6.2) Mail-Clients_menu + +Mail-Clients_menu() { + + # check if applications are already installed or not + if [ -x /usr/local/bin/thunderbird ]; then + s_thunderbird="on" + else + s_thunderbird="off" + fi + + if [ -x /usr/local/bin/claws-mail ]; then + s_clawsmail="on" + else + s_clawsmail="off" + fi + + if [ -x /usr/local/bin/kmail ]; then + s_kmail="on" + else + s_kmail="off" + fi + + if [ -x /usr/local/bin/mutt ]; then + s_mutt="on" + else + s_mutt="off" + fi + + if [ -x /usr/local/bin/neomutt ]; then + s_neomutt="on" + else + s_neomutt="off" + fi + + # Install usual programs + TMPFILE=$(mktemp) + + allchoices="thunderbird claws-mail kmail mutt neomutt" + + bsddialog --backtitle "Select programs" \ + --title "Installing applications" \ + --checklist "Select programs:" 12 70 20 \ + "thunderbird " "Mozilla Thunderbird is standalone mail and news that stands above" $s_thunderbird \ + "claws-mail " "Lightweight and featureful GTK based e-mail and news client" $s_clawsmail \ + "kmail " "KDE mail client" $s_kmail \ + "mutt " "Small but powerful text based program for read/writing e-mail" $s_mutt \ + "neomutt " "Bringing together all the Mutt Code" $s_neomutt 2>$TMPFILE + + choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n') + + # Install the selected programs. + for choice in $choices; do + + pkg ins -y "$choice" + + done + + # Remove non selected programs + for choice in $allchoices; do + # Vérifie si le choix est dans la liste des choix sélectionnés + if ! echo "$choices" | grep -qw "$choice"; then + + pkg remove -y "$choice" + + fi + done + + + rm -f "$TMPFILE" + + MainMenu + +} + +###################################################################### + +# 6.3) Easy Package Manager + +Office-suite_menu() { + + # check if applications are already installed or not + if [ -x /usr/local/bin/libreoffice ]; then + s_libreoffice="on" + else + s_libreoffice="off" + fi + + if [ -x /usr/local/bin/abiword ]; then + s_abiword="on" + else + s_abiword="off" + fi + + if [ -x /usr/local/bin/openoffice-4.1 ]; then + s_openoffice="on" + else + s_openoffice="off" + fi + + if [ -x /usr/local/bin/r7-office ]; then + s_r7office="on" + else + s_r7office="off" + fi + + # Install usual programs + TMPFILE=$(mktemp) + + allchoices="libreoffice abiword apache-openoffice r7-office" + + bsddialog --backtitle "Select programs" \ + --title "Installing applications" \ + --checklist "Select programs:" 11 70 20 \ + "libreoffice " "Full integrated office productivity suite" $s_libreoffice \ + "abiword " "Open-source, cross-platform WYSIWYG word processor" $s_abiword \ + "apache-openoffice " "Integrated wordprocessor/dbase/spreadsheet/drawing/chart/browser" $s_openoffice \ + "r7-office " "Russian office suite" $s_r7office 2>$TMPFILE + + choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n') + + # Install the selected programs. + for choice in $choices; do + + pkg ins -y "$choice" + + done + + # Remove non selected programs + for choice in $allchoices; do + # Vérifie si le choix est dans la liste des choix sélectionnés + if ! echo "$choices" | grep -qw "$choice"; then + + pkg remove -y "$choice" + + fi + done + + + rm -f "$TMPFILE" + + MainMenu + +} + +###################################################################### + +# 6) Easy Package Manager +Package-Manager_menu() { + + choix=$(bsddialog --clear \ + --backtitle "Global-FreeBSD" \ + --title "Easy Package-Manager Menu" \ + --menu "Select:" \ + 17 70 10 \ + 1 "Web Browsers" \ + 2 "Mail Clients" \ + 3 "Office" \ + 4 "Multimedia" \ + 5 "Network Tools" \ + 6 "Web Servers" \ + 7 "Mail Servers" \ + 8 "XMPP" \ + 9 "DNS" \ + 10 "SQL" \ + 11 "Hypervisor" \ + 12 "Webmin" \ + 13 "FTP" \ + 3>&1 1>&2 2>&3) + + case $choix in + 1) Web-Browsers_menu ;; + 2) Mail-Clients_menu ;; + 3) Office-suite_menu ;; + 3) Multimedia_menu ;; + 4) Network-Tools_menu ;; + 5) XMPP_menu ;; + 6) Web-Servers_menu ;; + 7) Mail-Servers_menu ;; + 8) XMPP_menu ;; + 9) DNS_menu ;; + 10) SQL_menu ;; + 11) Hypervisor_menu ;; + 12) Webmin_menu ;; + 13) FTP_menu ;; + esac + + MainMenu + +} + + +###################################################################### + +# 8) Disk management + +Disk-Management_menu() { + + choix=$(bsddialog --clear \ + --backtitle "Global-FreeBSD" \ + --title "Disk Management Menu" \ + --menu "Select:" \ + 14 70 10 \ + 1 "Format a USB device to UFS (one partition)" \ + 2 "Format a USB device to FAT32 (one partition)" \ + 3 "Format a USB device to NTFS (one partition)" \ + 4 "Securely erase a USB device (dd)" \ + 5 "Burn an IMAGE.iso on a USB device" \ + 6 "Burn an IMAGE.iso on a DVD/BD" \ + 7 "Splitting/Rejoining files based on custom size" \ + 3>&1 1>&2 2>&3) + + case $choix in + 1) Format-USB-UFS ;; + 2) Format-USB-FAT32 ;; + 3) Format-USB-NTFS ;; + 4) Secure-erase-USB ;; + 5) Burn-iso-USB ;; + 6) Burn-iso-DVD-BD ;; + 7) Split-Rejoin-file ;; + esac + + MainMenu + +} + + +###################################################################### + +# MainMenu + +MainMenu () { + choix=$(bsddialog --clear \ + --backtitle "Global-FreeBSD" \ + --title "Main Menu" \ + --menu "Select your Menu:" \ + 16 70 10 \ + 1 "Network" \ + 2 "Hostname and FQDN" \ + 3 "Update your system" \ + 4 "Security" \ + 5 "Users, Groups and permissions" \ + 6 "Easy Package-Manager" \ + 7 "Web Server" \ + 8 "Disk Management" \ + 9 "Desktop Environment" \ + --cancel-label "Quit" 3>&1 1>&2 2>&3) + + # Check if the user has selected Quit + exit_status=$? + + # If the user has selected Quit, then quit. + if [ $exit_status -eq 1 ]; then + exit 0 + else + + case $choix in + 1) Network_menu ;; + 2) Hostname-FQDN_menu ;; + 3) Update_menu ;; + 4) Security_menu ;; + 5) Users-Groups-perms_menu ;; + 6) Package-Manager_menu ;; + 7) Web-Server_menu ;; + 8) Disk-Management_menu ;; + 9) Desktop-Environment_menu ;; + esac + + fi + + +} + +MainMenu