-
Notifications
You must be signed in to change notification settings - Fork 15
/
instant-workstation
143 lines (130 loc) · 3.19 KB
/
instant-workstation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#! /bin/sh
#
# Copyright (c) 2019 Adriaan de Groot <adridg@FreeBSD.org>. All rights reserved.
#
# SPDX-License-Identifier: BSD-2-Clause
#
# This shell script can be run on a freshly-installed FreeBSD system
# to create an "instant-workstation". It uses dialog(1) for user-input,
# and does a best-effort to install what's needed.
# - a desktop environment
# - a display manager (and X and the rest)
# - graphics drivers
#
# TODO: offer a selection of common applications (e.g. Firefox, an IDE, ..)
#
# Run with --selfupdate to update the script from its canonical source
# (useful for testing updates to the script itself).
# Get a temporary location for dialog output
base=`basename $0`
CONFIG=`mktemp /tmp/${base}.XXXXXX` || { echo "! Cannot create temporary file." ; exit 1 ; }
### SELF-UPDATE
#
#
if test "x$1" = "x--selfupdate"
then
/usr/bin/fetch -o "${CONFIG}" https://raw.githubusercontent.com/adriaandegroot/FreeBSDTools/master/bin/instant-workstation
/bin/mv "${CONFIG}" "$0" ; exit 0
fi
### USER INPUT
#
# Pick one or more DE's, and exactly one DM
# NOTE: each ID should be distinct
#
/usr/bin/dialog --no-tags --separate-output \
--checklist "Desktop Environment" 0 0 0 \
kde5 "KDE Plasma Desktop" 0 \
gnome3 "GNOME Desktop" 0 \
xfce4 "XFCE Desktop" 0 \
mate "MATE Desktop" 0 \
--radiolist "Display Manager" 0 0 0 \
sddm "SDDM" 1 2> ${CONFIG}
### PACKAGE SELECTION
#
# Turn the user input into specific packages and sysrc
# commands to execute.
#
packages=""
sysrc=""
sysctl=""
for line in `cat "${CONFIG}"`
do
case "x$line" in
"xkde5")
packages="$packages x11/kde5 devel/dbus"
sysrc="$sysrc dbus_enable=YES"
sysctl="$sysctl net.local.stream.recvspace=65536 net.local.stream.sendspace=65536"
;;
"xgnome3")
packages="$packages x11/gnome3"
;;
"xxfce4")
packages="$packages x11-wm/xfce4"
;;
"xmate")
packages="$packages x11/mate-desktop"
;;
"xsddm")
packages="$packages x11/sddm"
sysrc="$sysrc sddm_enable=YES"
;;
"*")
echo "! Unrecognized tag '${line}' in ${CONFIG}"
exit 1
;;
esac
done
rm "${CONFIG}"
### HARDWARE SUPPORT
#
# Best-guess for necessary hardware drivers
#
fbsd_version=$( /usr/bin/uname -r | /usr/bin/sed 's/-.*//' )
vga_product=$( /usr/sbin/pciconf -l | /usr/bin/awk '/^vgapci/{ print substr($4,length($4)-3); }' )
vga_vendor=$( /usr/sbin/pciconf -l | /usr/bin/awk '/^vgapci/{ print substr($4,8,4); }' )
# Look for Intel graphics
if test 8086 = "${vga_product}"
then
case "x${fbsd_version}" in
"x12."[012])
packages="$packages graphics/drm-fbsd12.0-kmod"
;;
"x11."[234])
packages="$packages graphics/drm-fbsd11.2-kmod"
;;
"*")
:
;;
esac
fi
### VIRTUALBOX
#
#
if test beef = "${vga_vendor}"
then
# Virtualbox Support
packages="$packages emulators/virtualbox-ose-additions"
sysrc="$sysrc vboxguest_enable=YES vboxservice_enable=YES"
fi
### X11
#
#
packages="$packages x11/xorg"
### INSTALLATION
#
#
if test -z "$packages"
then
echo "! No packages selected for installation."
exit 1
fi
command="/usr/sbin/pkg install $packages"
if test -n "$sysrc"
then
command="$command ; /usr/sbin/sysrc $sysrc";
fi
if test -n "$sysctl"
then
command="$command ; /usr/sbin/sysrc -f /etc/sysctl.conf $sysctl";
fi
su root -c "$command"