5 if [ ! "$1" = "thinkpad" ] && [ ! "$1" = "server" ]; then
9 if [ "$1" = "thinkpad" ] && [ ! "$2" = "X200s" ] && [ ! "$2" = "T450s" ]; then
10 echo "Need Thinkpad type."
13 if [ "$1" = "server" ] && [ ! "$2" = "personal" ] && [ ! "$2" = "public" ]; then
14 echo "Need server purpose."
17 if [ "$2" = "personal" ] && [ ! "$3" = "test.plomlompom.com" ] && \
18 [ ! "$3" = "plomlompom.com" ]; then
19 echo "Need server domain"
23 # Some important variables
24 if [ "$3" = "plomlompom.com" ]; then
26 elif [ "$3" = "test.plomlompom.com" ]; then
27 hostname="test.plomlompom"
28 elif [ "$2" = "public" ]; then
29 hostname="htwtxt.plomlompom"
30 elif [ "$2" = "X200s" ]; then
32 elif [ "$2" = "T450s" ]; then
36 if [ "$1" = "server" ]; then
41 # Post-installation reduction.
42 dpkg-query -Wf '${Package} ${Priority}\n' | grep ' required' | sed \
43 's/ required//' > list_white_unsorted
44 echo 'ifupdown' >> list_white_unsorted
45 echo 'isc-dhcp-client' >> list_white_unsorted
46 sort list_white_unsorted > list_white
47 dpkg-query -Wf '${Package}\n' > list_all_packages
48 sort list_all_packages > foo
49 mv foo list_all_packages
50 comm -3 list_all_packages list_white > list_black
51 apt-mark auto `cat list_black`
52 echo 'APT::AutoRemove::RecommendsImportant "false";' > /etc/apt/apt.conf.d/99mindeps
53 echo 'APT::AutoRemove::SuggestsImportant "false";' >> /etc/apt/apt.conf.d/99mindeps
54 DEBIAN_FRONTEND=noninteractive apt-get -y --purge autoremove
55 rm list_all_packages list_white_unsorted list_white list_black
56 echo 'APT::Install-Recommends "false";' >> /etc/apt/apt.conf.d/99mindeps
57 echo 'APT::Install-Suggests "false";' >> /etc/apt/apt.conf.d/99mindeps
59 # Set hostname and FQDN.
60 echo $hostname > /etc/hostname
62 if [ "$1" = "server" ]; then
63 echo '127.0.0.1 localhost' > /etc/hosts
64 ip=`hostname -I | cut -d " " -f 1`
65 echo "$ip $hostname.com $hostname" >> /etc/hosts
67 # Call dhclient on startup.
68 cat > /etc/systemd/system/dhclient.service << EOF
70 Description=Ethernet connection
73 ExecStart=/sbin/dhclient eth0
76 WantedBy=multi-user.target
78 systemctl enable /etc/systemd/system/dhclient.service
81 # Package management config, system upgrade.
82 echo 'deb http://ftp.debian.org/debian/ jessie main contrib non-free' \
83 > /etc/apt/sources.list
84 echo 'deb http://security.debian.org/ jessie/updates main contrib non-free' \
85 >> /etc/apt/sources.list
86 echo 'deb http://ftp.debian.org/debian/ jessie-updates main contrib non-free' \
87 >> /etc/apt/sources.list
88 if [ "$1" = "thinkpad" ] || [ "$2" = "public" ]; then
89 echo 'deb http://ftp.debian.org/debian/ jessie-backports main contrib' \
90 ' non-free' >> /etc/apt/sources.list
91 echo 'deb http://ftp.debian.org/debian/ testing main contrib non-free' \
92 >> /etc/apt/sources.list
93 echo 'deb http://security.debian.org/ testing/updates main contrib' \
94 ' non-free' >> /etc/apt/sources.list
95 echo 'deb http://ftp.debian.org/debian/ testing-updates main contrib' \
96 ' non-free' >> /etc/apt/sources.list
97 echo 'APT::Default-Release "stable";' \
98 >> /etc/apt/apt.conf.d/99defaultrelease
100 if [ "$1" = "thinkpad" ]; then
104 apt-get -y dist-upgrade
107 apt-get -y install man-db manpages less
109 if [ "$1" = "thinkpad" ]; then
110 # Power management as per <http://thinkwiki.de/TLP_-_Linux_Stromsparen>.
111 echo '' >> /etc/apt/sources.list
112 echo 'deb http://repo.linrunner.de/debian jessie main' \
113 >> /etc/apt/sources.list
114 apt-key adv --keyserver pool.sks-keyservers.net --recv-keys CD4E8809
116 apt-get -y install linux-headers-amd64 tlp tp-smapi-dkms
117 sed -i 's/^#START_CHARGE_THRESH_BAT0/START_CHARGE_THRESH_BAT0=10 '\
118 '#START_CHARGE_THRESH_BAT0/' /etc/default/tlp
119 sed -i 's/^#STOP_CHARGE_THRESH_BAT0/STOP_CHARGE_THRESH_BAT0=95 '\
120 '#STOP_CHARGE_THRESH_BAT0/' /etc/default/tlp
121 sed -i 's/^#DEVICES_TO_DISABLE_ON_STARTUP/DEVICES_TO_DISABLE_ON_STARTUP='\
122 '"bluetooth wifi wwan" #DEVICES_TO_DISABLE_ON_STARTUP/' /etc/default/tlp
126 # Don't clear boot messages on start up.
127 sed -i 's/^TTYVTDisallocate=yes$/TTYVTDisallocate=no/g' \
128 /etc/systemd/system/getty.target.wants/getty\@tty1.service
131 echo 'Europe/Berlin' > /etc/timezone
132 cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
135 apt-get -y install locales
136 echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
139 if [ "$1" = "thinkpad" ]; then
141 DEBIAN_FRONTEND=nointeractive apt-get -y install console-setup
142 echo 'ACTIVE_CONSOLES="/dev/tty[1-6]"' > /etc/default/console-setup
143 echo 'CHARMAP="UTF-8"' >> /etc/default/console-setup
144 echo 'CODESET="Lat15"' >> /etc/default/console-setup
145 echo 'FONTFACE="TerminusBold"' >> /etc/default/console-setup
146 echo 'FONTSIZE="8x16"' >> /etc/default/console-setup
147 echo 'export LC_ALL="en_US.UTF-8"' >> /etc/profile
148 sed -i 's/^XKBLAYOUT/XKBLAYOUT="de" # XKBLAYOUT/g' /etc/default/keyboard
149 service keyboard-setup restart
152 # Clone git repository.
153 apt-get -y install ca-certificates
154 apt-get -y install git
155 git clone http://github.com/plomlompom/config
156 config/bin/symlink.sh
158 # Add user. Remove old user's config/ if it exists.
159 useradd -m -s /bin/bash plom
160 rm -rf /home/plom/config
161 su - plom -c 'git clone http://github.com/plomlompom/config /home/plom/config'
162 su plom -c '/home/plom/config/bin/symlink.sh '$1' '$2' '$3
164 # Allow user to sudo.
165 if [ "$1" = "thinkpad" ]; then
166 apt-get -y install sudo
172 su plom -c 'mkdir -p /home/plom/.vimbackups/'
173 apt-get -y install vim
175 if [ "$1" = "server" ]; then
177 apt-get -y install sshguard rsyslog
179 # Set up openssh-server.
180 apt-get -y install openssh-server
182 # Set up mail system.
183 su plom -c 'mkdir -p /home/plom/mail/'
184 su plom -c 'mkdir -p /home/plom/mail/inbox/{cur,new,tmp}'
185 su plom -c 'mkdir -p /home/plom/mail/new_inbox/{cur,new,tmp}'
186 sed -i 's/^delete = true$/delete = false/g' \
187 /home/plom/config/dotfiles/user/server/personal/minimal/getmail/getmailrc
188 DEBIAN_FRONTEND=noninteractive apt-get -y install mutt postfix maildrop
189 cp config/systemfiles/main.cf /etc/postfix/main.cf
190 sed -i 's/HOSTNAME/'$hostname.com'/g' /etc/postfix/main.cf
191 cp config/systemfiles/aliases /etc/aliases
193 service postfix restart
194 if [ "$2" = "personal" ]; then
195 apt-get -y install getmail4 procmail
198 # Set up regular system update reminder.
199 apt-get -y install cron
200 su plom -c "echo '0 18 * * 0 ~/config/bin/simplemail.sh '\
201 '~/config/mails/update_reminder' | crontab -"
203 if [ "$2" = "personal" ]; then
204 # Set up screen/weechat/OTR/bitlbee. Make bitlbee listen only locally.
205 apt-get -y install screen weechat-plugins python-potr bitlbee
206 sed -i 's/^# DaemonInterface/DaemonInterface = 127.0.0.1 '\
207 '# DaemonInterface/' /etc/bitlbee/bitlbee.conf
208 sedtest=`grep -E '^DaemonInterface = 127.0.0.1 #' \
209 /etc/bitlbee/bitlbee.conf | wc -l | cut -d ' ' -f 1`
210 if [ 0 -eq $sedtest ]; then
213 cp config/systemfiles/weechat.service \
214 /etc/systemd/system/weechat.service
215 systemctl enable /etc/systemd/system/weechat.service
217 # Send instructions mail.
218 config/bin/simplemail.sh config/mails/server_postinstall_finished
220 elif [ "$2" = "public" ]; then
222 # Set up htwtxt and environment.
223 apt-get -y install screen
224 apt-get -y -t jessie-backports install golang
225 su - plom -c 'git clone https://github.com/plomlompom/htwtxt $GOPATH/src/htwtxt'
226 su - plom -c 'go get htwtxt'
227 path=`su - plom -c 'echo $GOPATH/bin/htwtxt'`
228 #setcap 'cap_net_bind_service=+ep' $path
229 su - plom -c 'mkdir -p ~/htwtxt'
230 cp config/systemfiles/htwtxt_restart_reminder.service \
231 /etc/systemd/system/htwtxt_restart_reminder.service
232 systemctl enable /etc/systemd/system/htwtxt_restart_reminder.service
234 # Set up nginx and letsencrypt.
235 apt-get -y install nginx
236 cp config/systemfiles/nginx.conf /etc/nginx/nginx.conf
238 git clone https://github.com/letsencrypt/letsencrypt
239 echo '0 18 * * 0 ~/config/bin/renew_certs.sh' | crontab -
242 apt-get -y install python3 python3-venv python3-pip
243 su - plom -c 'cd && git clone http://github.com/plomlompom/plomlombot-irc'
244 su - plom -c 'mkdir -p ~/plomlombot_db'
245 cp config/systemfiles/plomlombot.service \
246 /etc/systemd/system/plomlombot.service
247 systemctl enable /etc/systemd/system/plomlombot.service
249 # Set up plomlombot logging infrastructure.
250 mkdir -p /var/www/html/irclogs/
251 ln -s /home/plom/plomlombot_db/6f322d574618816aa2d6d1ceb4fd2551/3c0248e76a1de3a6ee5bf3421f7379b0/logs/ /var/www/html/irclogs/zrolaps
252 touch /var/www/password_irclogs_zrolaps
253 ln -s /home/plom/plomlombot_db/6f322d574618816aa2d6d1ceb4fd2551/657eea42f86866f2954d39f92a6c71ff/logs/ /var/www/html/irclogs/nodrama.de
254 touch /var/www/password_irclogs_nodrama_de
257 elif [ "$1" = "thinkpad" ]; then
258 # Set up networking (wifi!).
259 apt-get -y install firmware-iwlwifi
260 DEBIAN_FRONTEND=noninteractive apt-get -y install wicd-curses
261 sed -i 's/^wired_interface = .*$/wired_interface = eth0/g' \
262 /etc/wicd/manager-settings.conf
263 sed -i 's/^wireless_interface = .*$/wireless_interface = wlan0/g' \
264 /etc/wicd/manager-settings.conf
265 systemctl restart wicd
267 # Set up hibernation on lid close.
268 echo 'HandleLidSwitch=hibernate' >> /etc/systemd/logind.conf
271 usermod -aG audio plom
272 apt-get -y install alsa-utils
273 if [ "$2" = "X200s" ]; then
274 amixer -c 0 sset Master playback 100% unmute
275 elif [ "$2" = "T450s" ]; then
276 amixer -c 1 sset Master playback 100% unmute
277 # Re-order souncards so the commonly used one is the first one.
278 echo 'options snd_hda_intel index=1,0' >> /etc/modprobe.d/sound.conf
281 # Set up window system, i3, redshift.
282 apt-get -y install xserver-xorg xinit xterm i3 i3status dmenu redshift
284 # Set up OpenGL and hardware acceleration.
285 if [ "$2" = "X200s" ]; then
286 apt-get -y install i965-va-driver
287 elif [ "$2" = "T450s" ]; then
288 apt-get -y -t jessie-backports install xserver-xorg-video-intel
290 apt-get -y install libgl1-mesa-dri
291 usermod -aG video plom
294 apt-get -y install x11-xserver-utils
296 # Set up pentadactyl.
297 apt-get -y install iceweasel
298 apt-get -y -t jessie-backports install xul-ext-pentadactyl
299 apt-get -y install vim-gtk
300 su plom -c 'mkdir -p /home/plom/downloads/'
302 # Set up openssh-client.
303 apt-get -y install openssh-client
306 # Set password for user.
310 rm jessie_postinstall.sh
312 # Finalize everything with a reboot.
313 echo "You may reboot now with the 'reboot' command unless there's more to do."