post-install.sh 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. #! /bin/bash
  2. echo 'Arch Linux Postinstall'
  3. _cwd="$(pwd)"
  4. alpi_user(){
  5. echo -n "Create your user? [Y|n]"
  6. read yn
  7. yn=${yn:-y}
  8. if [ "$yn" == "y" ]; then
  9. echo -n "Enter user name:"
  10. read username
  11. useradd -m -g users -G wheel -s /bin/bash ${username}
  12. chfn ${username}
  13. passwd ${username}
  14. echo "user $username created"
  15. echo "$username ALL=(ALL) ALL" >> /etc/sudoers
  16. echo "$username added to sudoers"
  17. su ${username}
  18. fi
  19. }
  20. # misc
  21. alpi_basics(){
  22. sudo pacman -S --needed --noconfirm vim rsync acpi parted imagemagick lynx alsa-utils tmux git
  23. }
  24. alpi_cosmetics(){
  25. # vim
  26. echo 'vim configuration'
  27. sudo pacman -S --needed --noconfirm vim-{spell-fr,spell-en,nerdtree,supertab,systemd}
  28. cp $_cwp/assets/vim /home/$USER/.vim
  29. cp $_cwd/assets/vimrc /home/$USER/.vimrc
  30. sudo cp $_cwd/assets/vim /root/.vim
  31. sudo cp $_cwd/assets/vimrc /root/.vimrc
  32. echo 'Git Completion'
  33. sudo pacman -S --needed --noconfirm bash-completion wget
  34. sudo mkdir /etc/bash_completion.d
  35. sudo wget -O /etc/bash_completion.d/git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
  36. # bash & prompt
  37. echo 'Bash and Prompt'
  38. git clone https://github.com/hojhan/liquidprompt.git -o github /home/$USER/.liquidprompt
  39. cp $_cwd/assets/bash_profile /home/$USER/.bash_profile
  40. cp $_cwd/assets/bashrc /home/$USER/.bashrc
  41. mkdir /home/$USER/.config
  42. cp $_cwd/assets/config/liquipromptrc /home/$USER/.config/
  43. # sudo pacman -S --needed --noconfirm bash-completion
  44. source /home/$USER/.bashrc
  45. touch /home/$USER/.inputrc
  46. echo 'set show-all-if-ambiguous on' >> /home/$USER/.inputrc
  47. echo 'set completion-ignore-case on' >> /home/$USER/.inputrc
  48. echo 'ILoveCandy'
  49. sudo sed -i.back 's/.*\[options\].*/&\nILoveCandy/' /etc/pacman.conf
  50. sudo sed -i.back 's/^#Color$/Color/' /etc/pacman.conf
  51. }
  52. # GPG
  53. alpi_gnupg(){
  54. echo 'Setup a gpg encripting'
  55. echo 'see https://wiki.archlinux.org/index.php/GnuPG'
  56. echo -n "create your gpg encrypting key? [Y|n] "
  57. read yn
  58. yn=${yn:-y}
  59. if [ "$yn" == "y" ]; then
  60. gpg --full-gen-key
  61. fi
  62. }
  63. alpi_secure(){
  64. # remove root autologin
  65. sudo sed -i.back 's/--autologin root //' /etc/systemd/system/getty@tty1.service.d/autologin.conf
  66. # remove root login
  67. sudo sed -i.back 's/#auth\srequired\spam_wheel.so\suse_uid/auth required spam_wheel.so use_uid/' /etc/pam.d/su
  68. sudo sed -i.back 's/#auth\srequired\spam_wheel.so\suse_uid/auth required spam_wheel.so use_uid/' /etc/pam.d/su-l
  69. # security
  70. sudo touch /etc/sysctl.d/50-dmesg-restrict.conf
  71. sudo sh -c "echo 'kernel.dmesg_restrict = 1' >> /etc/sysctl.d/50-dmesg-restrict.conf"
  72. sudo touch /etc/sysctl.d/50-kptr-restrict.con
  73. sudo sh -c "echo 'kernel.kptr_restrict = 1' >> /etc/sysctl.d/50-kptr-restrict.conf"
  74. }
  75. # Display Manager
  76. alpi_xserver(){
  77. echo -n "install Graphical Display Part 1 : Xorg server (you will have to reboot at the end of part 1)? [Y|n] "
  78. read yn
  79. yn=${yn:-y}
  80. if [ "$yn" == "y" ]; then
  81. # touch pad
  82. sudo pacman -S --needed --noconfirm xf86-input-libinput
  83. # integred gpu
  84. sudo pacman -S --needed --noconfirm xf86-input-libinput xf86-video-intel
  85. # discret gpu
  86. sudo pacman -S --needed --noconfirm bbswitch bumblebee primus
  87. sudo pacman -S --needed --noconfirm nvidia nvidia-utils
  88. # xorg server
  89. sudo pacman -S --needed --noconfirm xorg-xinit xorg-server-devel
  90. sudo pacman -S --needed --noconfirm mesa mesa-demos
  91. sudo gpasswd -a $USER bumblebee
  92. sudo systemctl enable bumblebeed
  93. sudo reboot
  94. fi
  95. }
  96. alpi_plasma5(){
  97. echo -n "install Graphical Display Part 2 : Kde Plasma 5? [Y|n] "
  98. read yn
  99. yn=${yn:-y}
  100. if [ "$yn" == "y" ]; then
  101. sudo pacman -S --needed --noconfirm --force plasma-meta
  102. sudo pacman -S --needed --noconfirm ttf-{dejavu,liberation,droid,ubuntu-font-family}
  103. # network & Bluetooth
  104. sudo pacman -S --needed --noconfirm networkmanager-openvpn pulseaudio-alsa rfkill
  105. sudo systemctl enable NetworkManager
  106. sudo systemctl start NetworkManager
  107. sudo systemctl enable bluetooth
  108. sudo systemctl start bluetooth
  109. touch /home/$USER/.xinitrc
  110. echo 'exec startkde' > /home/$USER/.xinitrc
  111. fi
  112. }
  113. # Yaourt
  114. alpi_yaourt(){
  115. echo -n "install Yaourt [Y|n] "
  116. read yaourt
  117. yaourt=${yaourt:-y}
  118. if [ "$yaourt" == "y" ]; then
  119. sudo pacman -S --needed base-devel
  120. mkdir -p /home/$USER/Developer/Linux/build-repos
  121. wget -O /home/$USER/Developer/Linux/build-repos/package-query.tar.gz https://aur.archlinux.org/cgit/aur.git/snapshot/package-query.tar.gz
  122. wget -O /home/$USER/Developer/Linux/build-repos/yaourt.tar.gz https://aur.archlinux.org/cgit/aur.git/snapshot/yaourt.tar.gz
  123. cd /home/$USER/Developer/Linux/build-repos
  124. tar -xvf package-query.tar.gz
  125. tar -xvf yaourt.tar.gz
  126. cd package-query
  127. makepkg -sri
  128. cd ../yaourt
  129. makepkg -sri
  130. echo 'ask for editing config file before build'
  131. echo "EDITFILES=1" >> ~/.yaourtrc
  132. fi
  133. }
  134. # kernel LTS
  135. alpi_kernellts(){
  136. echo -n "Switch linux kernel to long term support version (more stable)? [Y|n] "
  137. read yn
  138. yn=${yn:-y}
  139. if [ "$yn" == "y" ]; then
  140. sudo pacman -S linux-lts linux-lts-headers nvidia-lts
  141. sudo grub-mkconfig -o /boot/grub/grub.cfg
  142. fi
  143. }
  144. alpi_mysql(){
  145. sudo pacman -S --needed --noconfirm mariadb
  146. # configure mysql
  147. sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
  148. mysql_secure_installation
  149. sudo sed -i.back 's/^log-bin=mysql-bin$/#&/' /etc/mysql/my.cnf
  150. sudo sed -i.back 's/^max_allowed_packet.*$/max_allowed_packet = 16M/' /etc/mysql/my.cnf
  151. }
  152. # Packages
  153. alpi_defaultpkgs(){
  154. # TODO : install and configure mariadb before that
  155. echo "install basic packages? [Y|n]"
  156. read yn
  157. yn=${yn:-y}
  158. if [ "$yn" == "y" ]; then
  159. sudo pacman -S --needed --noconfirm systemd-kcm bluedevil
  160. sudo pacman -S --needed --noconfirm dolphin dolphin-plugins
  161. echo 'install pim softwares'
  162. sudo pacman -S --needed --noconfirm kmail korganizer kaddressbook kdeconnect pidgin
  163. sudo pacman -S --needed --noconfirm spamassassin razor
  164. sudo sa-update
  165. echo -n "Install regular mysql support for akonadi? [Y|n] "
  166. read ako
  167. ako=${ako:-y}
  168. if [ "$ako" == "y" ]; then
  169. echo -n "Should we install and configure mysql (if not already done)? [y|N] "
  170. read sql
  171. sql=${sql:-n}
  172. if [ "$sql" == "y" ]; then
  173. alpi_mysql
  174. fi
  175. # https://forum.kde.org/viewtopic.php?t=84478#p140762
  176. echo "please type your root mysql pass-word :"
  177. read -s -p Password: pswd
  178. mysql -u root -p$pswd -e "create database akonadi;"
  179. mysql -u root -p$pswd -e "create user 'akonadi'@'localhost' identified by 'akonadi';"
  180. mysql -u root -p$pswd -e "grant all privileges on akonadi.* to 'akonadi'@'localhost';"
  181. mysql -u root -p$pswd -e "flush privileges;"
  182. # TODO : BUG create first the .config/akonadi folder
  183. mv /home/$USER/.config/akonadi/akonadiserverrc /home/$USER/.config/akonadi/akonadiserverrc.back
  184. cp $_cwd/assets/akonadiserverrc /home/$USER/.config/akonadi/
  185. fi
  186. sudo pacman -S --needed --noconfirm chromium terminator gparted keepass
  187. echo 'install office softwares'
  188. sudo pacman -S --needed --noconfirm gwenview kimageformats kdegraphics-okular kipi-plugins libreoffice-fresh hunspell-{fr,en}
  189. echo 'install media softwares'
  190. sudo pacman -S --needed --noconfirm digikam darktable vlc lua-socket ktorrent banshee
  191. echo 'install graphic softwares'
  192. sudo pacman -S --needed --noconfirm inkscape gimp scribus fontforge blender
  193. #echo 'install some more fonts'
  194. #sudo pacman -S ttf-{,}
  195. echo 'install cloud softwares'
  196. sudo pacman -S --needed --noconfirm owncloud-client syncthing syncthing-gtk syncthing-inotify
  197. echo 'increase inotify watch limit'
  198. sleep 3
  199. sudo cp $_cwd/assets/90-inotify.conf /etc/sysctl.d/
  200. if [ "$yaourt" == "y" ]; then
  201. yaourt -S downgrade
  202. yaourt -S atom-editor
  203. fi
  204. fi
  205. }
  206. # LAMP
  207. alpi_lamp(){
  208. # https://wiki.archlinux.org/index.php/Apache_HTTP_Server
  209. echo -n "Install apache php mysql? [Y|n] "
  210. read yn
  211. yn=${yn:-y}
  212. if [ "$yn" == "y" ]; then
  213. # install packages
  214. sudo pacman -S --needed --noconfirm apache php php-apache phpmyadmin php-mcrypt
  215. echo -n "Should we install and configure mysql (if not already done)? [y|N] "
  216. read sql
  217. sql=${sql:-n}
  218. if [ "$sql" == "y" ]; then
  219. alpi_mysql
  220. fi
  221. # configure apache
  222. sudo sed -i.back 's/^LoadModule mpm_event_module modules\/mod_mpm_event\.so$/#&/' /etc/httpd/conf/httpd.conf
  223. sudo sed -i.back 's/^#LoadModule mpm_prefork_module modules\/mod_mpm_prefork\.so$/LoadModule mpm_prefork_module modules\/mod_mpm_prefork.so/' /etc/httpd/conf/httpd.conf
  224. sudo sed -i.back 's/^#LoadModule rewrite_module modules\/mod_rewrite\.so$/LoadModule rewrite_module modules\/mod_rewrite.so/' /etc/httpd/conf/httpd.conf
  225. # configure vhosts folder
  226. sudo mkdir /etc/httpd/conf/vhosts
  227. sudo sed -i.back 's/^#Include conf\/extra\/httpd-vhosts\.conf$/&\nInclude conf\/vhosts\/*.conf/' /etc/httpd/conf/httpd.conf
  228. # configure apache for php
  229. sudo sed -i.back 's/^LoadModule dir_module modules\/mod_dir\.so$/&\nLoadModule php5_module modules\/libphp5.so/' /etc/httpd/conf/httpd.conf
  230. sudo sh -c "echo 'Include conf/extra/php5_module.conf' >> /etc/httpd/conf/httpd.conf"
  231. # configure php
  232. sudo sed -i.back 's/^memory_limit.*$/memory_limit = 512M/' /etc/php/php.ini
  233. sudo sed -i.back 's/^error_reporting.*$/error_reporting = E_ALL \& ~E_NOTICE/' /etc/php/php.ini
  234. sudo sed -i.back 's/;extension=gd\.so/extension=gd.so/' /etc/php/php.ini
  235. # configure php for mysql
  236. sudo sed -i.back 's/;extension=pdo_mysql\.so/extension=pdo_mysql.so/' /etc/php/php.ini
  237. # configure phpmyadmin
  238. sudo sed -i.back 's/;extension=mcrypt\.so/extension=mcrypt.so/' /etc/php/php.ini
  239. sudo sed -i.back 's/;extension=bz2\.so/extension=bz2.so/' /etc/php/php.ini
  240. sudo sed -i.back 's/;extension=zip\.so/extension=zip.so/' /etc/php/php.ini
  241. sudo sed -i.back 's/^open_basedir = .*$/&:\/etc\/webapps\//' /etc/php/php.ini
  242. echo -n "Should we configure custom basedir folder? [Y|n] "
  243. read bd
  244. sql=${bd:-y}
  245. if [ "$bd" == "y" ]; then
  246. echo -n "Please enter the basedir path"
  247. read basedir
  248. sudo sed -i.back "s/^open_basedir = .*$/&:${basedir}/" /etc/php/php.ini
  249. fi
  250. # TODO : instal drush
  251. fi
  252. }
  253. # END
  254. alpi_end(){
  255. echo -n "Reboot? [Y|n] "
  256. read yn
  257. yn=${yn:-y}
  258. if [ "$yn" != "y" ]; then
  259. echo "depending on what you've done you may need to reboot"
  260. exit
  261. fi
  262. reboot
  263. }
  264. while true
  265. do
  266. echo -e "choosse action (preferably in order)\n"
  267. action_list=("create user" "install basics" "cosmetics" "create gnupgp key" "secure the system" "install Xorg Server" "install Plasma 5 (kde)" "yaourt" "switch to LTS kernel" "install default packages" "install lamp" "end");
  268. select action in "${action_list[@]}"; do
  269. case "$REPLY" in
  270. 1)
  271. alpi_user
  272. ;;
  273. 2)
  274. alpi_basics
  275. ;;
  276. 3)
  277. alpi_cosmetics
  278. ;;
  279. 4)
  280. alpi_gnupg
  281. ;;
  282. 5)
  283. alpi_secure
  284. ;;
  285. 6)
  286. alpi_xserver
  287. ;;
  288. 7)
  289. alpi_plasma5
  290. ;;
  291. 8)
  292. alpi_yaourt
  293. ;;
  294. 9)
  295. alpi_kernellts
  296. ;;
  297. 10)
  298. alpi_defaultpkgs
  299. ;;
  300. 11)
  301. alpi_lamp
  302. ;;
  303. 12)
  304. alpi_end
  305. ;;
  306. esac
  307. [[ -n $OPT ]] && break
  308. done
  309. done