setup 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #!/bin/bash
  2. #
  3. # Original version by Marcel Sackermann 2017-03-06
  4. # Patched by Markus Blatt on 2018-10-17 to support
  5. # the patch for kernel version >= 4.18 by phonics
  6. # from 2018-10-09
  7. kv=$(uname -r | grep -Po '^[0-9]\.[0-9]+(\.[1-9]+)?')
  8. IFS='.' read -ra kv_numbers <<< "$kv"
  9. linux_dir="linux-$kv"
  10. alx_driver_path="drivers/net/ethernet/atheros/alx"
  11. dkms_dir="/usr/src/alx-$kv"
  12. deb_dependencies="git patch dkms"
  13. get_linux_source() {
  14. if [ ! -d $linux_dir ]; then
  15. echo "Downloading kernel source for $kv by git..."
  16. git clone --depth 1 -b "v$kv" git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git "linux-$kv"
  17. if [ $? != 0 ]; then
  18. echo "git failed to download the source. Check the output for information."
  19. exit 1
  20. else
  21. echo "Done"
  22. return 0
  23. fi
  24. else
  25. if [ ! -d $linux_dir/$alx_driver_path ]; then
  26. echo "Git refuses clone into an non empty directory but '$linux_dir' exists and does not contain the driver source that should be located at '$linux_dir/$alx_driver_path'. Please delete or move the directory yourself so git may download the source."
  27. exit 1
  28. fi
  29. fi
  30. }
  31. get_deps() {
  32. echo "Checking dependencies..."
  33. for i in $deb_dependencies; do
  34. which $i > /dev/null
  35. if [ $? != 0 ];then
  36. if [ -f /etc/debian_version ]; then
  37. echo "installing dependencies... ($deb_dependencies)"
  38. sudo apt-get install $deb_dependencies
  39. if [ $? != 0 ]; then
  40. echo "Could not install dependencies. Check the output for information."
  41. exit 1
  42. fi
  43. else
  44. echo "Please make sure you have the following dependencies installed: $deb_dependencies"
  45. exit 1
  46. fi
  47. fi
  48. done
  49. echo "Done"
  50. return 0
  51. }
  52. prepare_src() {
  53. echo "Preparing dkms module source..."
  54. patch="000-enable-alx-wol.patch"
  55. offset=8
  56. # newer patch for kernel 5.15 and up
  57. if [ "${kv_numbers[0]}" -ge 5 ] && [ "${kv_numbers[1]}" -ge 15 ]; then
  58. echo "Using 5.16 patch..."
  59. patch="000-enable-alx-wol-5.16.patch"
  60. offset=6
  61. # newer patch for kernel 5.10 and up
  62. elif [ "${kv_numbers[0]}" -ge 5 ] && [ "${kv_numbers[1]}" -ge 10 ]; then
  63. echo "Using 5.10 patch..."
  64. patch="000-enable-alx-wol-5.10.patch"
  65. offset=6
  66. # newer patch for kernel 5.4 and up
  67. elif [ "${kv_numbers[0]}" -ge 5 ] && [ "${kv_numbers[1]}" -ge 4 ]; then
  68. echo "Using 5.4+ patch..."
  69. patch="000-enable-alx-wol-5.4.x.patch"
  70. offset=6
  71. # newer patch for kernel 4.18 and up
  72. elif [ "${kv_numbers[0]}" -ge 4 ] && [ "${kv_numbers[1]}" -ge 18 ] || [ "${kv_numbers[0]}" -ge 5 ] && [ "${kv_numbers[1]}" -lt 4 ]; then
  73. echo "Using 4.18+ patch..."
  74. patch="000-enable-alx-wol-4.18.patch"
  75. offset=6
  76. # newer patch for kernel 4.9 and up
  77. elif [ "${kv_numbers[0]}" -ge 4 ] && [ "${kv_numbers[1]}" -ge 9 ] && [ "${kv_numbers[1]}" -lt 18 ]; then
  78. echo "Using 4.9+ patch..."
  79. patch="000-enable-alx-wol-4.9.patch"
  80. offset=5
  81. fi
  82. if [ -d "$dkms_dir/src" ]; then sudo rm -Rf $dkms_dir/src; fi
  83. sudo mkdir -p $dkms_dir/src &&
  84. sed "s|KERNEL_VERSION|$kv|g" dkms.conf | sudo tee $dkms_dir/dkms.conf > /dev/null &&
  85. sudo cp $linux_dir/$alx_driver_path/* $dkms_dir/src &&
  86. sudo patch -d $dkms_dir/src -V never -r - -t -s -N -p$offset < "$patch" &&
  87. echo "Done"
  88. }
  89. dkms_remove(){
  90. if /usr/sbin/dkms status | grep alx ; then
  91. echo "uninstalling dkms module"
  92. sudo /usr/sbin/dkms remove alx/$kv --all
  93. fi
  94. }
  95. dkms_add() {
  96. echo "Adding dkms module alx/$kv"
  97. sudo dkms add alx/$kv
  98. status=$?
  99. if [ $status != 0 ] && [ $status != 3 ]; then
  100. echo "something went wrong. Check the output for information."
  101. elif [ $status != 0 ]; then
  102. if [ $status = 3 ]; then
  103. echo "Seems the dkms module is already enabled. Don't worry about that error."
  104. fi
  105. echo "Done"
  106. return 0
  107. fi
  108. }
  109. get_deps && get_linux_source && prepare_src && dkms_remove && dkms_add && sudo dkms autoinstall alx/$kv && sudo update-initramfs -u
  110. if [ "$?" != "0" ]; then
  111. echo "!!! there is some error"
  112. else
  113. echo "all ok, now you may need reboot"
  114. fi