Skip to content

Instantly share code, notes, and snippets.

@josephholsten
Created October 29, 2023 04:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save josephholsten/447358eb6c482a828277770fb45b164b to your computer and use it in GitHub Desktop.
Save josephholsten/447358eb6c482a828277770fb45b164b to your computer and use it in GitHub Desktop.
#!/bin/sh
die()
{
[ $# -eq 0 ] && exit 1
[ $# -gt 1 ] && \
echo "error initiated at line $1 :
$2" 1>&2 || \
echo "$1" 1>&2
exit 1
}
if [ $# -eq 1 ]; then
if [ "$1" = "--help" ]; then
man `basename \`realpath $0\``
exit 0
fi
fi
[ $# -eq 0 ] || { die "I do not accept any argument; except --help"; }
b_nvidia=false
f_stagezero()
{
out=`dialog --stdout --radiolist "Select your graphics chipset :" 16 38 5 \
1 nvidia on \
2 radeon off \
3 amdgpu off \
4 intel off \
5 Other/Ignore off`
r=$?
if [ $r -eq 0 ]; then
kldlist=""
case "$out" in
1)
r=1
while [ $r -ne 0 ]; do
pkg install --yes nvidia-driver nvidia-texture-tools nvidia-settings nvidia-xconfig
r=$?
done
b_nvidia=true
kldlist="/boot/modules/nvidia.ko /boot/modules/nvidia-modeset.ko"
;;
2)
r=1
while [ $r -ne 0 ]; do
pkg install --yes drm-kmod
r=$?
done
if [ -e /boot/modules/radeonkms.ko ]; then
kldlist="/boot/modules/radeonkms.ko"
else
kldlist="/boot/kernel/radeonkms.ko"
fi
;;
3)
r=1
while [ $r -ne 0 ]; do
pkg install --yes drm-kmod xf86-video-amdgpu
r=$?
done
if [ -e /boot/modules/amdgpu.ko ]; then
kldlist="/boot/modules/amdgpu.ko"
else
kldlist="/boot/kernel/amdgpu.ko"
fi
;;
4)
r=1
while [ $r -ne 0 ]; do
pkg install --yes drm-kmod xf86-video-intel
r=$?
done
if [ -e /boot/modules/i915kms.ko ]; then
kldlist="/boot/modules/i915kms.ko"
else
kldlist="/boot/kernel/i915kms.ko"
fi
;;
5)
return 0
;;
esac
[ -n "$kldlist" ] && echo "kld_list=\"$kldlist\"" >> /etc/rc.conf
fi
return 0
}
postproc()
{
dialog --title "Successfully installed desktop !" --msgbox \
"\n
Your desktop has been successfully installed : - )\n\n
I am now going to start post-install processing to set up the following :\n\n
Wine (32-bit/64-bit Windows emulation layer; user-space)\n
Linuxulator (64-bit Linux emulation layer; kernel-space)\n\n
System files :\n
/etc/fstab\n
/etc/devfs.conf\n
/etc/devfs.rules\n
/etc/rc.conf\n
/etc/sysctl.conf\n
/boot/loader.conf\n\n
Note : existing originals will be saved with .bak extension" 60 80
linux_emu=0
win32_emu=0
win64_emu=0
dialog --title "Query" --yesno \
"\nWould you like me to set up Wine (Windows emulation layer) ?" 7 50
r=$?
if [ $r -eq 0 ]; then
out=`dialog --stdout --radiolist "Choose a mode :" 10 30 2 \
1 32-bit on \
2 64-bit off`
r=$?
if [ $r -eq 0 ]; then
case $out in
1)
win32_emu=1
;;
2)
win64_emu=1
;;
esac
fi
fi
dialog --title "Query" --yesno \
"\nWould you like me to set up Linuxulator (Linux emulation layer) ?" 7 50
r=$?
if [ $r -eq 0 ]; then
linux_emu=1
fi
if [ $win32_emu -ne 0 ]; then
pkg install --yes i386-wine wine-mono wine-gecko
fi
if [ $win64_emu -ne 0 ]; then
pkg install --yes wine wine-mono wine-gecko
fi
if [ $linux_emu -ne 0 ]; then
for kld in linux linux64; do
if ! kldstat -q -n $kld; then
kldload $kld
[ $? -eq 0 ] || \
die "$LINENO" "Unable to kldload $kld"
fi
done
pkg install --yes linux_base-c7
fi
flavour_linux=false
if [ $linux_emu -ne 0 ]; then
flavour_linux=true
fi
#block for /etc/fstab
{
f=/etc/fstab
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'`
eval mandatory${mangled}="\"\
fdescfs /dev/fd fdescfs rw 0 0
procfs /proc procfs rw 0 0\""
if [ "$linux_emu" -ne 0 ]; then
eval mandatory${mangled}="\"\
tmpfs /compat/linux/dev/shm tmpfs rw,mode=1777,size=1g 0 0
linprocfs /compat/linux/proc linprocfs rw 0 0
linsysfs /compat/linux/sys linsysfs rw 0 0\""
fi
}
#block for /etc/rc.conf
{
sysrc devfs_system_ruleset=system
sysrc dbus_enable=YES
sysrc cupsd_enable=YES
if [ "$linux_emu" -ne 0 ]; then
sysrc linux_enable=YES
fi
}
#block for /etc/sysctl.conf
{
f=/etc/sysctl.conf
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'`
eval mandatory${mangled}="\"\
vfs.usermount=1\""
if [ "$linux_emu" -ne 0 ]; then
eval mandatory${mangled}="\"\
compat.linux.osrelease=3.10.0
kern.ipc.shm_allow_removed=1\""
fi
}
#block for /boot/loader.conf
{
f=/boot/loader.conf
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'`
eval mandatory${mangled}="\"\
kern.vty=vt\""
}
#block for /etc/devfs.rules
{
f=/etc/devfs.rules
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'`
eval mandatory${mangled}="\"\
[system=10]
add path 'usb/*' mode 0664 group operator
add path 'cd*' mode 0664 group operator
add path 'da*' mode 0664 group operator
add path 'video*' mode 0664 group operator\""
}
#block for /etc/devfs.conf
{
f=/etc/devfs.conf
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'`
# if [ "$flavour_linux" = "false" ]; then
if [ "$linux_emu" -eq 0 ]; then
eval mandatory${mangled}="\"\
own /dev/pci root:operator
perm /dev/pci 0664
own /dev/dri/card0 root:operator
perm /dev/dri/card0 0664\""
else
eval mandatory${mangled}="\"\
own /dev/pci root:operator
perm /dev/pci 0664
own /dev/dri/card0 root:operator
perm /dev/dri/card0 0664
link /compat/linux/dev/shm shm\""
fi
}
for f in /etc/fstab /etc/sysctl.conf /boot/loader.conf /etc/rc.conf \
/etc/devfs.rules /etc/devfs.conf; do
[ -f $f ] && cp $f ${f}.bak
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'`
eval mandatory='$'mandatory${mangled}
echo -e "\n#Section created by mkdesktop for $f :\n" >> $f
echo "$mandatory" >> $f
done
for nodetype in pass cd xpt; do
for node in /dev/${nodetype}*; do
if echo $node | grep --silent "${nodetype}[[:digit:]][[:digit:]]*$"; then
echo "own $node root:operator" >> /etc/devfs.conf
echo "perm $node 0664" >> /etc/devfs.conf
fi
done
done
echo
cat <<-EOF
Post-processing done.
If you saw no errors anywhere, your box is raring to go : - )
A reboot is now needed - you will need to do that yourself.
EOF
return 0
}
f_stagezero
[ $? -eq 0 ] || die "$LINENO" "stage failure setting up graphics subsystem"
pkglist=""
out=`dialog --stdout --radiolist "Select a desktop environment to install:" 24 30 6 \
1 KDE on \
2 GNOME off \
3 XFCE off \
4 MATE off \
5 LXDE off \
6 Awesome off`
# 6 Awesome (Tiling Window Manager) off`
r=$?
if [ $r -eq 0 ]; then
case $out in
1) desktop="kde5";;
2) desktop="gnome3 gnome-menus";;
3) desktop="xfce";;
4) desktop="mate";;
5) desktop="lxde-meta";;
6) desktop="awesome";;
esac
pkglist="xorg sddm dbus $desktop"
r=1
while [ $r -ne 0 ]; do
pkg install --yes $pkglist
r=$?
done
dialog --title "The normal user account" --yesno "\n
Only a normal user can login with the X display manager.
Would you therefore like to add a normal user account ? If you
do not already have a normal account in the system, choose Yes.
Else you may choose No." 16 36
if [ $? -eq 0 ]; then
echo
echo "Please add the normal user account below."
echo "Make sure the account is additionally part of the video group".
echo "Other groups you may like to add the normal user account into
are wheel and operator."
echo
adduser
fi
echo "sddm_enable=YES" >> /etc/rc.conf
[ $b_nvidia = true ] && /usr/local/bin/nvidia-xconfig
postproc
r=$?
fi
exit $r
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment