#!/bin/sh # Check if bsddialog is present on the system (for graphical display). # If not, install the package manager and bsddialog. while [ ! -x "/usr/local/bin/bsddialog" ]; do clear echo "-------------------------------------------" echo "The bsddialog program is not installed." echo "Installation in progress..." printf "\n" pkg ins -y pkg ins -y bsddialog done ###################################################################### Desktop-Environment_menu() { clear checkinternet() { printf "\n" echo "Looking for Internet Connection, please wait..." sleep 1 # Check ping with cloudflare destination="1.1.1.1" # Number of ping attempts num_attempts=3 # Check internet connection with ping if ! ping -c "$num_attempts" -q "$destination" > /dev/null; then printf "\n" echo "-------------------------------------------" echo "Your computer is not connected to internet, I can't go on" printf "\n" exit 0 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 printf "\n" echo "-------------------------------------------" echo "I can't install pkg, please check your internet connection" printf "\n" exit 0 fi fi } installbsddialog() { printf "\n" echo "Looking for 'bsddialog', please wait..." sleep 1 if [ ! -x "/usr/local/bin/bsddialog" ]; then if pkg ins -y bsddialog | grep -q "error"; then printf "\n" echo "-------------------------------------------" echo "I can't install bsddialog, please check your internet connection" printf "\n" exit 0 fi fi } # Welcome ! welcome() { printf "\n" echo "Everything seems OK, let's go !" sleep 1 bsddialog --msgbox "Welcome to this desktop installation script for FreeBSD!" 5 60 } # System Update update() { bsddialog --yesno "Do you want to update your system before starting?" 5 54 close_inac=$? if [ $close_inac -eq 0 ]; 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() { bsddialog --yesno "Have you already created the user who will use the desktop?" 5 63 close_inac=$? if [ $close_inac -eq 1 ]; then i=0 while [ $i -lt 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 checkuser=$(getent passwd | grep "$user" | wc -l | tr -d ' ' | uniq) if [ $checkuser -eq 1 ]; then bsddialog --yesno " !WARNING!\n This user already exists\nDo you want to use it [Yes] or create another one [No]" 7 58 use_oranother=$? if [ $use_oranother -eq 1 ]; then i=$((i+1)) else i=$((i+5)) fi else pw useradd "$user" -d "/home/$user" -m -c "$fullname" clear echo "--------------------------------------" echo "Please assign a password to $user" printf "\n" passwd $user i=$((i+5)) fi done # Exit script if not able to create a user if [ $i -eq 4 ]; then exit 0 fi else j=0 while [ $j -lt 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 checkuser=$(getent passwd | grep "$user" | wc -l | tr -d ' ' | uniq) if [ $checkuser -eq 0 ]; then bsddialog --msg " !WARNING!\n This user does not exist\n Please try again" 7 58 j=$((j+1)) else j=$((j+5)) fi done # Exit script if not able to choose a user if [ $j -eq 4 ]; then exit 0 fi fi } # DE choice: kde-sddm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y sddm ; sysrc sddm_enable="YES" pkg ins -y kde5 ; pkg ins -y freebsd-8k-wallpapers-kde ; pkg ins -y kde-baseapps ; pkg ins -y kde-dev-scripts ; pkg ins -y kde-dev-utils ; pkg ins -y kde-thumbnailer-chm ; pkg ins -y kde-thumbnailer-epub ; pkg ins -y kde-thumbnailer-fb2 ; pkg ins -y kde_poster ; pkg ins -y kdeaccessibility ; pkg ins -y kdeadmin ; pkg ins -y kdebugsettings ; pkg ins -y kdeconnect-kde ; pkg ins -y kdegames ; pkg ins -y kdegraphics ; pkg ins -y kdegraphics-thumbnailers ; pkg ins -y kdemultimedia ; pkg ins -y kdevelop ; pkg ins -y calligra ; pkg ins -y kmymoney ; pkg ins -y kdemultimedia-ffmpegthumbs ; pkg ins -y kdenetwork ; pkg ins -y kdenetwork-filesharing ; pkg ins -y kdenlive ; pkg ins -y kdeutils ; pkg ins -y libkdegames ; pkg ins -y libkdepim ; pkg ins -y libproxy-kde ; pkg ins -y plasma5-kde-cli-tools ; pkg ins -y plasma5-kde-gtk-config ; pkg ins -y plasma5-kdecoration ; pkg ins -y plasma5-kdeplasma-addons ; pkg ins -y wallpapers-freebsd-kde ; pkg ins -y dsbsu sysctl net.local.stream.recvspace=65536 ; sysctl net.local.stream.sendspace=65536 sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec ck-launch-session startplasma-x11" > /home/"$user"/.xinitrc pw groupmod video -m $user } xfce-lightdm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y gtk-xfce-engine ; pkg ins -y libxfce4menu ; pkg ins -y libxfce4util ; pkg ins -y workrave-xfce ; pkg ins -y xfce ; pkg ins -y xfce-icons-elementary ; pkg ins -y xfce4-appfinder ; pkg ins -y xfce4-appmenu-plugin ; pkg ins -y xfce4-battery-plugin ; pkg ins -y xfce4-bsdcpufreq-plugin ; pkg ins -y xfce4-calculator-plugin ; pkg ins -y xfce4-clipman-plugin ; pkg ins -y xfce4-conf ; pkg ins -y xfce4-cpugraph-plugin ; pkg ins -y xfce4-dashboard ; pkg ins -y xfce4-datetime-plugin ; pkg ins -y xfce4-desktop ; pkg ins -y xfce4-dev-tools ; pkg ins -y xfce4-dict-plugin ; pkg ins -y xfce4-diskperf-plugin ; pkg ins -y xfce4-docklike-plugin ; pkg ins -y xfce4-fsguard-plugin ; pkg ins -y xfce4-generic-slider ; pkg ins -y xfce4-genmon-plugin ; pkg ins -y xfce4-goodies ; pkg ins -y xfce4-mailwatch-plugin ; pkg ins -y xfce4-mixer ; pkg ins -y xfce4-mixer-full ; pkg ins -y xfce4-mount-plugin ; pkg ins -y xfce4-mpc-plugin ; pkg ins -y xfce4-netload-plugin ; pkg ins -y xfce4-notes-plugin ; pkg ins -y xfce4-notifyd ; pkg ins -y xfce4-panel ; pkg ins -y xfce4-panel-profiles ; pkg ins -y xfce4-places-plugin ; pkg ins -y xfce4-power-manager ; pkg ins -y xfce4-pulseaudio-plugin ; pkg ins -y xfce4-screensaver ; pkg ins -y xfce4-screenshooter-plugin ; pkg ins -y xfce4-session ; pkg ins -y xfce4-settings ; pkg ins -y xfce4-smartbookmark-plugin ; pkg ins -y xfce4-stopwatch-plugin ; pkg ins -y xfce4-systemload-plugin ; pkg ins -y xfce4-taskmanager ; pkg ins -y xfce4-terminal ; pkg ins -y xfce4-time-out-plugin ; pkg ins -y xfce4-timer-plugin ; pkg ins -y xfce4-tumbler ; pkg ins -y xfce4-verve-plugin ; pkg ins -y xfce4-volumed-pulse ; pkg ins -y xfce4-wavelan-plugin ; pkg ins -y xfce4-weather-plugin ; pkg ins -y xfce4-whiskermenu-plugin ; pkg ins -y xfce4-windowck-plugin ; pkg ins -y xfce4-wm ; pkg ins -y xfce4-wm-themes ; pkg ins -y xfce4-xkb-plugin pkg ins -y lightdm ; pkg ins -y lightdm-gtk-greeter ; sysrc lightdm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi cp /usr/local/etc/xdg/xfce4/xinitrc /home/"$user"/.xinitrc } mate-lightdm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y libmatekbd ; pkg ins -y libmatemixer ; pkg ins -y libmateweather ; pkg ins -y libshumate ; pkg ins -y mate ; pkg ins -y mate-applet-appmenu ; pkg ins -y mate-applets ; pkg ins -y mate-backgrounds ; pkg ins -y mate-base ; pkg ins -y mate-calc ; pkg ins -y mate-common ; pkg ins -y mate-control-center ; pkg ins -y mate-desktop ; pkg ins -y mate-dock-applet ; pkg ins -y mate-icon-theme ; pkg ins -y mate-icon-theme-faenza ; pkg ins -y mate-indicator-applet ; pkg ins -y mate-media ; pkg ins -y mate-menus ; pkg ins -y mate-notification-daemon ; pkg ins -y mate-pam-helper ; pkg ins -y mate-panel ; pkg ins -y mate-polkit ; pkg ins -y mate-power-manager ; pkg ins -y mate-screensaver ; pkg ins -y mate-session-manager ; pkg ins -y mate-settings-daemon ; pkg ins -y mate-system-monitor ; pkg ins -y mate-terminal ; pkg ins -y mate-themes ; pkg ins -y mate-user-guide ; pkg ins -y mate-utils ; pkg ins -y materia-gtk-theme pkg ins -y lightdm ; pkg ins -y lightdm-gtk-greeter ; sysrc lightdm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec ck-launch-session mate-session" > /home/"$user"/.xinitrc } cinnamon-lightdm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y cinnamon ; pkg ins -y cinnamon-control-center ; pkg ins -y cinnamon-desktop ; pkg ins -y cinnamon-menus ; pkg ins -y cinnamon-screensaver ; pkg ins -y cinnamon-session ; pkg ins -y cinnamon-settings-daemon ; pkg ins -y cinnamon-translations pkg ins -y lightdm ; pkg ins -y lightdm-gtk-greeter ; sysrc lightdm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec ck-launch-session cinnamon-session" > /home/"$user"/.xinitrc } gnome-gdm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y chrome-gnome-shell ; pkg ins -y gnome ; pkg ins -y gnome-2048 ; pkg ins -y gnome-autoar ; pkg ins -y gnome-backgrounds ; pkg ins -y gnome-builder ; pkg ins -y gnome-calculator ; pkg ins -y gnome-calendar ; pkg ins -y gnome-characters ; pkg ins -y gnome-chess ; pkg ins -y gnome-clipboard-daemon ; pkg ins -y gnome-clocks ; pkg ins -y gnome-color-manager ; pkg ins -y gnome-common ; pkg ins -y gnome-connections ; pkg ins -y gnome-console ; pkg ins -y gnome-contacts ; pkg ins -y gnome-control-center ; pkg ins -y gnome-desktop ; pkg ins -y gnome-devel-docs ; pkg ins -y gnome-dictionary ; pkg ins -y gnome-font-viewer ; pkg ins -y gnome-games ; pkg ins -y gnome-getting-started-docs ; pkg ins -y gnome-icon-theme ; pkg ins -y gnome-icon-theme-extras ; pkg ins -y gnome-icon-theme-symbolic ; pkg ins -y gnome-icons ; pkg ins -y gnome-icons-elementary ; pkg ins -y gnome-icons-faenza ; pkg ins -y gnome-icons-luv ; pkg ins -y gnome-initial-setup ; pkg ins -y gnome-keyring ; pkg ins -y gnome-keyring-sharp ; pkg ins -y gnome-klotski ; pkg ins -y gnome-latex ; pkg ins -y gnome-lite ; pkg ins -y gnome-mahjongg ; pkg ins -y gnome-maps ; pkg ins -y gnome-menus ; pkg ins -y gnome-metronome ; pkg ins -y gnome-mime-data ; pkg ins -y gnome-mines ; pkg ins -y gnome-mplayer ; pkg ins -y gnome-music ; pkg ins -y gnome-nettool ; pkg ins -y gnome-nibbles ; pkg ins -y gnome-online-accounts ; pkg ins -y gnome-online-miners ; pkg ins -y gnome-photos ; pkg ins -y gnome-pie ; pkg ins -y gnome-planner ; pkg ins -y gnome-podcasts ; pkg ins -y gnome-pomodoro ; pkg ins -y gnome-power-manager ; pkg ins -y gnome-pty-helper ; pkg ins -y gnome-robots ; pkg ins -y gnome-screenshot ; pkg ins -y gnome-session ; pkg ins -y gnome-settings-daemon ; pkg ins -y gnome-shell ; pkg ins -y gnome-shell-extension-audio-output-switcher ; pkg ins -y gnome-shell-extension-coverflow ; pkg ins -y gnome-shell-extension-dashtodock ; pkg ins -y gnome-shell-extension-dashtopanel ; pkg ins -y gnome-shell-extension-filesmenu ; pkg ins -y gnome-shell-extension-hidetopbar ; pkg ins -y gnome-shell-extension-lockkeys ; pkg ins -y gnome-shell-extension-mediaplayer ; pkg ins -y gnome-shell-extension-openweather ; pkg ins -y gnome-shell-extension-panel-osd ; pkg ins -y gnome-shell-extension-recent-items ; pkg ins -y gnome-shell-extension-trash ; pkg ins -y gnome-shell-extension-weather ; pkg ins -y gnome-shell-extension-windowoverlay-icons ; pkg ins -y gnome-shell-extensions ; pkg ins -y gnome-shell-extra-extensions ; pkg ins -y gnome-sound-recorder ; pkg ins -y gnome-ssh-askpass ; pkg ins -y gnome-sudoku ; pkg ins -y gnome-system-monitor ; pkg ins -y gnome-terminal ; pkg ins -y gnome-tetravex ; pkg ins -y gnome-text-editor ; pkg ins -y gnome-themes ; pkg ins -y gnome-themes-extra ; pkg ins -y gnome-todo ; pkg ins -y gnome-tweaks ; pkg ins -y gnome-user-docs ; pkg ins -y gnome-user-share ; pkg ins -y gnome-utils ; pkg ins -y gnome-video-effects ; pkg ins -y gnome-weather ; pkg ins -y gnome_subr ; pkg ins -y guile-gnome-platform-full ; pkg ins -y guile-gnome-platform-lite ; pkg ins -y libgnome-games-support ; pkg ins -y libgnome-keyring ; pkg ins -y libgnomecanvas ; pkg ins -y libgnomecanvasmm ; pkg ins -y libgnomekbd ; pkg ins -y libproxy-gnome3 ; pkg ins -y pinentry-gnome ; pkg ins -y polkit-gnome ; pkg ins -y qgnomeplatform ; pkg ins -y rubygem-gnome ; pkg ins -y subversion-gnome-keyring ; pkg ins -y xdg-desktop-portal-gnome sysrc gdm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec gnome-session" > /home/"$user"/.xinitrc } lxqt-sddm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y liblxqt ; pkg ins -y lxqt ; pkg ins -y lxqt-about ; pkg ins -y lxqt-admin ; pkg ins -y lxqt-archiver ; pkg ins -y lxqt-build-tools ; pkg ins -y lxqt-config ; pkg ins -y lxqt-globalkeys ; pkg ins -y lxqt-notificationd ; pkg ins -y lxqt-openssh-askpass ; pkg ins -y lxqt-panel ; pkg ins -y lxqt-policykit ; pkg ins -y lxqt-powermanagement ; pkg ins -y lxqt-qtplugin ; pkg ins -y lxqt-runner ; pkg ins -y lxqt-session ; pkg ins -y lxqt-sudo ; pkg ins -y lxqt-themes pkg ins -y sddm ; sysrc sddm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; 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() { echo 'Section "Device"' > /usr/local/etc/X11/xorg.conf.d/00-scfb.conf echo ' Identifier "Card0"' >> /usr/local/etc/X11/xorg.conf.d/00-scfb.conf echo ' Driver "scfb"' >> /usr/local/etc/X11/xorg.conf.d/00-scfb.conf echo " BusID \"$intelirisxe_pci_location\"" >> /usr/local/etc/X11/xorg.conf.d/00-scfb.conf echo 'EndSection' >> /usr/local/etc/X11/xorg.conf.d/00-scfb.conf } vbox() { echo '# This configuration file is useless.' > /usr/local/etc/X11/xorg.conf.d/00-vbox.conf echo '# If only permits autodetection.' >> /usr/local/etc/X11/xorg.conf.d/00-vbox.conf } intel-older() { clear pkg ins -y xf86-video-intel ; pkg ins -y drm-kmod sysrc kld_list="i915kms" echo 'Section "Device"' > /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Identifier "Intel Graphics"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Driver "intel"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Option "AccelMethod" "sna"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Option "TearFree" "true"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Option "DRI" "3"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Option "Backlight" "intel_backlight"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo " BusID \"$intel_pci_location\"" >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo "EndSection" >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf } nvidia-gpu() { clear pkg ins -y nvidia-driver sysrc kld_list="nvidia-modeset" # 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://') echo 'Section "Device"' > /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo ' Identifier "Device0"' >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo ' Driver "nvidia"' >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo ' VendorName "NVIDIA Corporation' >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo " BusID \"$nvidia_pci_location\"" >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo 'EndSection' >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf } amd-cpu_amd-gpu() { clear pkg ins -y xf86-video-amdgpu sysrc kld_list="amdgpu" } 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 #bsddialog --yesno "We have detected VirtualBox graphics on your computer\n (BusID \"$vbox_pci_location\")\nDo you want to use it [Yes] or use another one [No] ?" 7 57 #vbox_ornot=$? #if [ $vbox_ornot -eq 0 ]; then vbox #fi fi # If an Intel Iris Xe is detected, ask to accept or not : if [ ! -z "$intelirisxe_pciconf_output" ]; then #bsddialog --yesno "We have detected an Iris Xe graphics on your computer\n (BusID \"$intelirisxe_pci_location\")\nDo you want to use it [Yes] or use another one [No] ?" 7 57 #Irisx_ornot=$? #if [ $Irisx_ornot -eq 0 ]; then intel-irisxe #fi fi # If an Intel is detected, ask to accept or not : if [ ! -z "$intel_pciconf_output" ]; then #bsddialog --yesno "We have detected an Intel graphics on your computer\n (BusID \"$intel_pci_location\")\nDo you want to use it [Yes] or use another one [No] ?" 7 57 #intel_ornot=$? #if [ $intel_ornot -eq 0 ]; then intel-older #fi fi # If an NVIDIA is detected, ask to accept or not : if [ ! -z "$nvidia_pciconf_output" ]; then #bsddialog --yesno "We have detected a NVIDIA graphics on your computer\n (BusID \"$nvidia_pci_location\")\nDo you want to use it [Yes] or use another one [No] ?" 7 57 #nvidia_ornot=$? #if [ $nvidia_ornot -eq 0 ]; then nvidia-gpu #fi fi # If no choice has been done, go to graphics_selection_menu : if [ ! -e /usr/local/etc/X11/xorg.conf.d/00-scfb.conf ] ; then if [ ! -e /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf ]; then if [ ! -e ]/usr/local/etc/X11/xorg.conf.d/00-intel.conf]; then if [ ! -e ]/usr/local/etc/X11/xorg.conf.d/00-vbox.conf]; then graphics_selection_menu fi fi fi 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 \ "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 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 ;; "pidgin") pkg ins -y pidgin ; pkg ins -y pidgin-bot-sentry ; pkg ins -y pidgin-encryption ; pkg ins -y pidgin-fetion ; pkg ins -y pidgin-hotkeys ; pkg ins -y pidgin-icyque ; pkg ins -y pidgin-latex ; pkg ins -y pidgin-libnotify ; pkg ins -y pidgin-manualsize ; pkg ins -y pidgin-otr ; pkg ins -y pidgin-sipe ; pkg ins -y pidgin-skypeweb ; pkg ins -y pidgin-twitter ; pkg ins -y pidgin-window_merge ;; *) pkg ins -y "$choice" ;; esac done rm -f "$TMPFILE" } # usual tools bundle usual_tools_installation() { if [ ! -x /usr/local/bin/wget ]; then pkg ins -y wget fi if [ ! -x /usr/local/bin/w3m ]; then pkg ins -y w3m fi if [ ! -x /usr/local/bin/lynx ]; then pkg ins -y lynx fi if [ ! -x /usr/local/bin/rsync ]; then pkg ins -y rsync fi if [ ! -x /usr/local/bin/emacs ]; then pkg ins -y emacs fi if [ ! -x /usr/local/bin/nano ]; then pkg ins -y nano fi if [ ! -x /usr/local/bin/sshpass ]; then pkg ins -y sshpass fi if [ ! -x /usr/local/bin/fuse ]; then pkg ins -y fuse fi if [ ! -x /usr/local/bin/ntfs-3g ]; then pkg ins -y fusefs-ntfs fi if [ ! -x /usr/local/sbin/mount.exfat ]; then pkg ins -y fusefs-exfat fi if [ ! -x /usr/local/bin/ntfs-3g ]; then pkg ins -y fusefs-ntfs fi if [ ! -x /usr/local/sbin/automount ]; then pkg ins -y automount fi if [ ! -x /usr/local/bin/megatools ]; then pkg ins -y megatools fi if [ ! -x /usr/local/bin/ntfs-3g ]; then pkg ins -y fusefs-ntfs fi checkfusefsload=$(grep "fusefs_load=\"YES\"" < /boot/loader.conf | wc -l | tr -d ' ' | uniq) if [ ! $checkfusefsload -eq "1" ]; then echo 'fusefs_load="YES"' >> /boot/loader.conf fi if [ ! -x /usr/local/bin/growisofs ]; then pkg ins -y dvd+rw-tools fi if [ ! -x /usr/local/bin/cdrecord ]; then pkg ins -y cdrtools fi if [ ! -x /usr/local/sbin/webcamd ]; then pkg ins -y webcamd sysrc webcamd_enable="YES" service devd restart pw groupmod webcamd -m $user sysrc -f /boot/loader.conf cuse_load=YES fi if [ ! -x /usr/local/bin/pwcview ]; then pkg ins -y pwcview fi if [ ! -x /usr/local/bin/lpr ]; then pkg ins -y cups pkg ins -y cups-filters pkg ins -y system-config-printer sysrc cupsd_enable="YES" fi if [ ! -x /usr/local/bin/wifimgr ]; then pkg ins -y wifimgr fi if [ ! -x /usr/local/bin/networkmgr ]; then pkg ins -y networkmgr fi if [ ! -x /usr/local/bin/zip ]; then pkg ins -y zip fi if [ ! -x /usr/local/bin/unzip ]; then pkg ins -y unzip fi if [ ! -x /usr/local/bin/bzip2 ]; then pkg ins -y bzip2 fi if [ ! -x /usr/local/bin/bzip3 ]; then pkg ins -y bzip3 fi if [ ! -x /usr/local/bin/btop ]; then pkg ins -y btop fi if [ ! -x /usr/local/bin/htop ]; then pkg ins -y htop fi if [ ! -x /usr/local/bin/nmap ]; then pkg ins -y nmap fi if [ ! -x /usr/local/bin/nslookup ]; then pkg ins -y bind-tools fi if [ ! -x /usr/local/bin/git ]; then pkg ins -y git fi if [ ! -x /usr/local/bin/rdesktop ]; then pkg ins -y rdesktop fi if [ ! -x /usr/local/sbin/xrdp ]; then pkg ins -y xrdp sysrc xrdp_enable="NO" xrdp_sesman_enable="NO" fi if [ ! -x /usr/local/bin/tree ]; then pkg ins -y tree fi if [ ! -x /usr/local/bin/gh ]; then pkg ins -y gh fi if [ ! -x /usr/local/bin/hw-probe ]; then pkg ins -y hw-probe fi if [ ! -x /usr/local/bin/inxi ]; then pkg ins -y inxi fi if [ ! -x /usr/local/bin/python3 ]; then pkg ins -y python3 pkg ins -y py39-qt5 fi if [ ! -x /usr/local/bin/inxi ]; then pkg ins -y inxi fi if [ ! -e /usr/local/share/licenses/bhyve-firmware-1.*/catalog.mk ]; then pkg ins -y bhyve-firmware fi # Installation of ipfwGUI : 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 ins -y virtualbox-ose ; pkg ins -y virtualbox-ose-additions sysrc vboxguest_enable=YES vboxservice_enable=YES vboxnet_enable=YES echo 'vboxdrv_load="YES"' >> /boot/loader.conf echo "[system=10]" >> /etc/devfs.rules echo "add path 'usb/*' mode 0660 group operator" >> /etc/devfs.rules sysrc devfs_system_ruleset="system" pw groupmod vboxusers -m "$user" pw groupmod operator -m "$user" sysrc hald_enable=YES echo "perm cd* 0660" >> /etc/devfs.conf echo "perm xpt0 0660" >> /etc/devfs.conf echo "perm pass* 0660" >> /etc/devfs.conf chown root:vboxusers /dev/vboxnetctl chmod 0660 /dev/vboxnetctl echo 'own vboxnetctl root:vboxusers' >> /etc/devfs.conf echo 'perm vboxnetctl 0660' >> /etc/devfs.conf 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 checkprofilelocale=$(grep "export LANG=\"$selected_choice\"" < /home/"$user"/.profile | wc -l | tr -d ' ' | uniq) if [ $checkprofilelocale -eq 0 ]; then printf "\n" >> /home/"$user"/.profile echo "# CUSTOM LOCALE" >> /home/"$user"/.profile echo "export LANG=\"$selected_choice\"" >> /home/"$user"/.profile fi checkprofilelctype=$(grep "export LC_CTYPE=\"$selected_choice\"" < /home/"$user"/.profile | wc -l | tr -d ' ' | uniq) if [ $checkprofilelctype -eq 0 ]; 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 echo 'Section "InputClass"' > /usr/local/etc/X11/xorg.conf.d/keyboard.conf echo 'Identifier "KeyboardDefaults"' >> /usr/local/etc/X11/xorg.conf.d/keyboard.conf echo ' MatchIsKeyboard "on"' >> /usr/local/etc/X11/xorg.conf.d/keyboard.conf echo " Option \"XkbLayout\" \"$kbd\"" >> /usr/local/etc/X11/xorg.conf.d/keyboard.conf echo 'EndSection' >> /usr/local/etc/X11/xorg.conf.d/keyboard.conf fi } build_locatedb() { # updatedb : /etc/periodic/weekly/310.locate sysrc weekly_locate_enable="YES" } # Thanks thanks() { bsddialog --msgbox "Welcome to this desktop installation script for FreeBSD!" 5 60 } # 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 installbsddialog welcome update user_for_desktop desktop_selection_menu automatic_graphics_detection # at the very moment, only Intel 'Iris Xe', Intel 'HD Graphics' and 'NVIDIA' 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 } Format-USB-UFS() { bsddialog --msgbox "Please connect your USB device now" 5 38 sleep 7 clear echo "-----------------------------------" echo "I am running the command 'camcontrol devlist' for you," echo "Please find in the list below," echo "the disk you want to erase, partition, and format in UFS" sleep 2 echo "-----------------------------------" camcontrol devlist echo "-----------------------------------" echo "Enter the name of the disk (examples: da0, da1 ...)" read pathdi clear echo "-----------------------------------" echo "Would you like to proceed with a secure erase (dd)? [y/n]" echo "(The erasing process can take several hours, or even days !)" read effsec case $effsec in y|Y) 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 ;; n|N) umount -f /dev/fuse umount -f /dev/$pathdi* gpart destroy -F /dev/$pathdi ;; esac clear echo "-----------------------------------" echo "Creating GPT table" gpart create -s GPT /dev/$pathdi echo "-----------------------------------" echo "Creating UFS partition" partia=`gpart add -t freebsd-ufs -a 1m /dev/$pathdi | cut -d ' ' -f1` partia2="$partia" echo "-----------------------------------" echo "UFS formatting of the partition $pathdip" newfs -U /dev/$partia2 clear echo "-----------------------------------" echo "The erase, partition creation, and formatting are completed" echo "All you have to do now is mount the partition $partia2 wherever you like, if it doesn't mount automatically" echo "-----------------------------------" echo "Press any key to return to the previous menu" read ENTER MainMenu } Format-USB-FAT32 () { bsddialog --msgbox "Please connect your USB device now" 5 38 sleep 7 if [ ! -x /usr/local/sbin/mount.exfat ]; then pkg ins -y fuse fuse-ntfs fusefs-exfat fi if kldstat | grep -q "fusefs"; then clear echo "-----------------------------------" echo "fusefs is loaded" else clear echo "-----------------------------------" echo "fusefs is not loaded" printf "\n" kldload fusefs fi clear echo "-----------------------------------" echo "I am running the command 'camcontrol devlist' for you," echo "Please find in the list below," echo "the disk you want to erase, partition, and format in FAT32" sleep 2 echo "-----------------------------------" camcontrol devlist echo "-----------------------------------" echo "Enter the name of the disk (examples: da0, da1 ...)" read pathdi clear echo "-----------------------------------" echo "Would you like to proceed with a secure erase (dd)? [y/n]" echo "(The erasing process can take several hours, or even days !)" read effsec case $effsec in y|Y) 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 ;; n|N) umount -f /dev/fuse umount -f /dev/$pathdi* gpart destroy -F /dev/$pathdi ;; esac clear echo "-----------------------------------" echo "Creating MBR table" gpart create -s mbr /dev/$pathdi echo "-----------------------------------" echo "Please enter a Label for your partition" read namepartfat echo "-----------------------------------" echo "Creating FAT32 partition" partia=`gpart add -t fat32 /dev/$pathdi | cut -d ' ' -f1` partia2="$partia" echo "-----------------------------------" echo "FAT32 formatting of the partition $pathdia2" newfs_msdos -L $namepartfat /dev/$partia2 clear echo "-----------------------------------" echo "The erase, partition creation, and formatting are completed" echo "All you have to do now is mount the partition $partia2 wherever you like, if it doesn't mount automatically" echo "-----------------------------------" echo "Press any key to return to the previous menu" read ENTER MainMenu } Format-USB-NTFS () { bsddialog --msgbox "Please connect your USB device now" 5 38 sleep 7 if [ ! -x /usr/local/sbin/mkntfs ]; then pkg ins -y fuse fusefs-ntfs fusefs-exfat fi if kldstat | grep -q "fusefs"; then clear echo "-----------------------------------" echo "fusefs is loaded" else clear echo "-----------------------------------" echo "fusefs is not loaded" printf "\n" kldload fusefs fi clear echo "-----------------------------------" echo "I am running the command 'camcontrol devlist' for you," echo "Please find in the list below," echo "the disk you want to erase, partition, and format in NTFS" sleep 2 echo "-----------------------------------" camcontrol devlist echo "-----------------------------------" echo "Enter the name of the disk (examples: da0, da1 ...)" read pathdi clear echo "-----------------------------------" echo "Would you like to proceed with a secure erase (dd)? [y/n]" echo "(The erasing process can take several hours, or even days !)" read effsec case $effsec in y|Y) umount -f /dev/fuse umount -f /dev/$pathdi* gpart destroy -F $pathdi clear echo "-----------------------------------" echo "The secure erase is starting" printf "\n" sleep 1 dd if=/dev/zero of=/dev/$pathdi bs=8m status=progress ;; n|N) umount -f /dev/fuse umount -f /dev/$pathdi* gpart destroy -F $pathdi ;; esac clear echo "-----------------------------------" echo "Creating GPT table" gpart create -s GPT $pathdi echo "-----------------------------------" echo "Creating ms-basic-data partition" partia=`gpart add -t ms-basic-data $pathdi | cut -d ' ' -f1` partia2="$partia" echo "-----------------------------------" echo "NTFS formatting of the partition $pathdia2" chmod 760 /dev/$partia2 export NTFS_USE_UBLIO=0 mkntfs -vFQ /dev/$partia2 clear echo "-----------------------------------" echo "The erase, partition creation, and formatting are completed" echo "All you have to do now is mount the partition $partia2 wherever you like, if it doesn't mount automatically" echo "-----------------------------------" echo "Press any key to return to the previous menu" read ENTER MainMenu } Secure-erase-USB () { bsddialog --msgbox "Please connect your USB device now" 5 38 sleep 7 clear echo "-----------------------------------" echo "I am running the command 'camcontrol devlist' for you," echo "Please find in the list below," echo "the disk you want to securely erase" sleep 2 echo "-----------------------------------" camcontrol devlist echo "-----------------------------------" echo "Enter the name of the disk (examples: da0, da1 ...)" read pathdi clear echo "-----------------------------------" echo "Do you confirm that you want to erase this device? [y/n]" echo "(The erasing process can take several hours, or even days !)" read effsec case $effsec in y|Y) umount -f /dev/fuse umount -f /dev/$pathdi* gpart destroy -F $pathdi clear echo "-----------------------------------" echo "The secure erase is starting" printf "\n" sleep 1 dd if=/dev/zero of=/dev/$pathdi bs=8m status=progress ;; n|N) MainMenu ;; esac clear echo "-----------------------------------" echo "The erase is completed" echo "All you have to do now is mount the partition $partia2 wherever you like, if it doesn't mount automatically" echo "-----------------------------------" echo "Press any key to return to the previous menu" read ENTER MainMenu } Burn-iso-USB () { bsddialog --msgbox "Please connect your USB device now" 5 38 sleep 7 clear echo "-----------------------------------" echo "I am running the command 'camcontrol devlist' for you," echo "Please find in the list below," echo "the disk you want to securely erase" sleep 2 echo "-----------------------------------" camcontrol devlist echo "-----------------------------------" echo "Enter the name of the disk (examples: da0, da1 ...)" read pathdi 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 clear echo "-----------------------------------" echo "The burning is complete" echo "-----------------------------------" echo "Press any key to return to the previous menu" read ENTER MainMenu } Burn-iso-DVD-BD () { if [ ! -x /usr/local/bin/growisofs ]; then pkg ins -y dvd+rw-tools cdrtools fi # 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 sleep 7 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" clear echo "-----------------------------------" echo "The burning is complete" echo "-----------------------------------" echo "Press any key to return to the previous menu" read ENTER 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" \ 3>&1 1>&2 2>&3) 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 } MainMenu