diff --git a/bin b/bin
new file mode 120000
index 0000000000..44c5ae3fb8
--- /dev/null
+++ b/bin
@@ -0,0 +1 @@
+usr/bin/
\ No newline at end of file
diff --git a/opt/gitea/data/git/.ssh/authorized_keys b/etc/.pwd.lock
similarity index 100%
rename from opt/gitea/data/git/.ssh/authorized_keys
rename to etc/.pwd.lock
diff --git a/etc/.resolv.conf.systemd-resolved.bak b/etc/.resolv.conf.systemd-resolved.bak
new file mode 100644
index 0000000000..16e0ad272e
--- /dev/null
+++ b/etc/.resolv.conf.systemd-resolved.bak
@@ -0,0 +1,20 @@
+# This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).
+# Do not edit.
+#
+# This file might be symlinked as /etc/resolv.conf. If you're looking at
+# /etc/resolv.conf and seeing this text, you have followed the symlink.
+#
+# This is a dynamic resolv.conf file for connecting local clients directly to
+# all known uplink DNS servers. This file lists all configured search domains.
+#
+# Third party programs should typically not access this file directly, but only
+# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
+# different way, replace this symlink by a static file or a different symlink.
+#
+# See man:systemd-resolved.service(8) for details about the supported modes of
+# operation for /etc/resolv.conf.
+
+nameserver 10.131.53.11
+nameserver 10.131.53.12
+nameserver 10.131.53.13
+search ppa openstack.prodstack5.lan
diff --git a/etc/.updated b/etc/.updated
new file mode 100644
index 0000000000..e5228e8cd7
--- /dev/null
+++ b/etc/.updated
@@ -0,0 +1,4 @@
+# This file was created by systemd-update-done. Its only
+# purpose is to hold a timestamp of the time this directory
+# was updated. See man:systemd-update-done.service(8).
+TIMESTAMP_NSEC=1758947859281275355
diff --git a/etc/ImageMagick-6/coder.xml b/etc/ImageMagick-6/coder.xml
new file mode 100644
index 0000000000..bd80a22d8d
--- /dev/null
+++ b/etc/ImageMagick-6/coder.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+]>
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/colors.xml b/etc/ImageMagick-6/colors.xml
new file mode 100644
index 0000000000..201b73514e
--- /dev/null
+++ b/etc/ImageMagick-6/colors.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/delegates.xml b/etc/ImageMagick-6/delegates.xml
new file mode 100644
index 0000000000..68f05457c1
--- /dev/null
+++ b/etc/ImageMagick-6/delegates.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/log.xml b/etc/ImageMagick-6/log.xml
new file mode 100644
index 0000000000..8a290992a4
--- /dev/null
+++ b/etc/ImageMagick-6/log.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/magic.xml b/etc/ImageMagick-6/magic.xml
new file mode 100644
index 0000000000..7f17731b09
--- /dev/null
+++ b/etc/ImageMagick-6/magic.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/mime.xml b/etc/ImageMagick-6/mime.xml
new file mode 100644
index 0000000000..61f72281ff
--- /dev/null
+++ b/etc/ImageMagick-6/mime.xml
@@ -0,0 +1,1149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/policy-debian.xml b/etc/ImageMagick-6/policy-debian.xml
new file mode 100644
index 0000000000..4b878ce8e5
--- /dev/null
+++ b/etc/ImageMagick-6/policy-debian.xml
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/policy-limited.xml b/etc/ImageMagick-6/policy-limited.xml
new file mode 100644
index 0000000000..b5bc22a4a2
--- /dev/null
+++ b/etc/ImageMagick-6/policy-limited.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/policy-open.xml b/etc/ImageMagick-6/policy-open.xml
new file mode 100644
index 0000000000..88077d1355
--- /dev/null
+++ b/etc/ImageMagick-6/policy-open.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/policy-secure.xml b/etc/ImageMagick-6/policy-secure.xml
new file mode 100644
index 0000000000..0d312d209a
--- /dev/null
+++ b/etc/ImageMagick-6/policy-secure.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/policy-websafe.xml b/etc/ImageMagick-6/policy-websafe.xml
new file mode 100644
index 0000000000..cde410cd86
--- /dev/null
+++ b/etc/ImageMagick-6/policy-websafe.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/policy.xml b/etc/ImageMagick-6/policy.xml
new file mode 100644
index 0000000000..4b878ce8e5
--- /dev/null
+++ b/etc/ImageMagick-6/policy.xml
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/quantization-table.xml b/etc/ImageMagick-6/quantization-table.xml
new file mode 100644
index 0000000000..fb718749a2
--- /dev/null
+++ b/etc/ImageMagick-6/quantization-table.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+ Luma Quantization Table
+
+ 16, 16, 16, 18, 25, 37, 56, 85,
+ 16, 17, 20, 27, 34, 40, 53, 75,
+ 16, 20, 24, 31, 43, 62, 91, 135,
+ 18, 27, 31, 40, 53, 74, 106, 156,
+ 25, 34, 43, 53, 69, 94, 131, 189,
+ 37, 40, 62, 74, 94, 124, 169, 238,
+ 56, 53, 91, 106, 131, 169, 226, 311,
+ 85, 75, 135, 156, 189, 238, 311, 418
+
+
+
+
+
diff --git a/etc/ImageMagick-6/thresholds.xml b/etc/ImageMagick-6/thresholds.xml
new file mode 100644
index 0000000000..75831f60ec
--- /dev/null
+++ b/etc/ImageMagick-6/thresholds.xml
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+ Threshold 1x1 (non-dither)
+
+ 1
+
+
+
+
+ Checkerboard 2x1 (dither)
+
+ 1 2
+ 2 1
+
+
+
+
+
+ Ordered 2x2 (dispersed)
+
+ 1 3
+ 4 2
+
+
+
+
+ Ordered 3x3 (dispersed)
+
+ 3 7 4
+ 6 1 9
+ 2 8 5
+
+
+
+
+
+ Ordered 4x4 (dispersed)
+
+ 1 9 3 11
+ 13 5 15 7
+ 4 12 2 10
+ 16 8 14 6
+
+
+
+
+
+ Ordered 8x8 (dispersed)
+
+ 1 49 13 61 4 52 16 64
+ 33 17 45 29 36 20 48 32
+ 9 57 5 53 12 60 8 56
+ 41 25 37 21 44 28 40 24
+ 3 51 15 63 2 50 14 62
+ 35 19 47 31 34 18 46 30
+ 11 59 7 55 10 58 6 54
+ 43 27 39 23 42 26 38 22
+
+
+
+
+
+ Halftone 4x4 (angled)
+
+ 4 2 7 5
+ 3 1 8 6
+ 7 5 4 2
+ 8 6 3 1
+
+
+
+
+ Halftone 6x6 (angled)
+
+ 14 13 10 8 2 3
+ 16 18 12 7 1 4
+ 15 17 11 9 6 5
+ 8 2 3 14 13 10
+ 7 1 4 16 18 12
+ 9 6 5 15 17 11
+
+
+
+
+ Halftone 8x8 (angled)
+
+ 13 7 8 14 17 21 22 18
+ 6 1 3 9 28 31 29 23
+ 5 2 4 10 27 32 30 24
+ 16 12 11 15 20 26 25 19
+ 17 21 22 18 13 7 8 14
+ 28 31 29 23 6 1 3 9
+ 27 32 30 24 5 2 4 10
+ 20 26 25 19 16 12 11 15
+
+
+
+
+
+ Halftone 4x4 (orthogonal)
+
+ 7 13 11 4
+ 12 16 14 8
+ 10 15 6 2
+ 5 9 3 1
+
+
+
+
+ Halftone 6x6 (orthogonal)
+
+ 7 17 27 14 9 4
+ 21 29 33 31 18 11
+ 24 32 36 34 25 22
+ 19 30 35 28 20 10
+ 8 15 26 16 6 2
+ 5 13 23 12 3 1
+
+
+
+
+ Halftone 8x8 (orthogonal)
+
+ 7 21 33 43 36 19 9 4
+ 16 27 51 55 49 29 14 11
+ 31 47 57 61 59 45 35 23
+ 41 53 60 64 62 52 40 38
+ 37 44 58 63 56 46 30 22
+ 15 28 48 54 50 26 17 10
+ 8 18 34 42 32 20 6 2
+ 5 13 25 39 24 12 3 1
+
+
+
+
+
+ Halftone 16x16 (orthogonal)
+
+ 4 12 24 44 72 100 136 152 150 134 98 70 42 23 11 3
+ 7 16 32 52 76 104 144 160 158 142 102 74 50 31 15 6
+ 19 27 40 60 92 132 168 180 178 166 130 90 58 39 26 18
+ 36 48 56 80 124 176 188 204 203 187 175 122 79 55 47 35
+ 64 68 84 116 164 200 212 224 223 211 199 162 114 83 67 63
+ 88 96 112 156 192 216 232 240 239 231 214 190 154 111 95 87
+ 108 120 148 184 208 228 244 252 251 243 226 206 182 147 119 107
+ 128 140 172 196 219 235 247 256 255 246 234 218 194 171 139 127
+ 126 138 170 195 220 236 248 253 254 245 233 217 193 169 137 125
+ 106 118 146 183 207 227 242 249 250 241 225 205 181 145 117 105
+ 86 94 110 155 191 215 229 238 237 230 213 189 153 109 93 85
+ 62 66 82 115 163 198 210 221 222 209 197 161 113 81 65 61
+ 34 46 54 78 123 174 186 202 201 185 173 121 77 53 45 33
+ 20 28 37 59 91 131 167 179 177 165 129 89 57 38 25 17
+ 8 13 29 51 75 103 143 159 157 141 101 73 49 30 14 5
+ 1 9 21 43 71 99 135 151 149 133 97 69 41 22 10 2
+
+
+
+
+
+
+ Circles 5x5 (black)
+
+ 1 21 16 15 4
+ 5 17 20 19 14
+ 6 21 25 24 12
+ 7 18 22 23 11
+ 2 8 9 10 3
+
+
+
+
+
+ Circles 5x5 (white)
+
+ 25 21 10 11 22
+ 20 9 6 7 12
+ 19 5 1 2 13
+ 18 8 4 3 14
+ 24 17 16 15 23
+
+
+
+
+ Circles 6x6 (black)
+
+ 1 5 14 13 12 4
+ 6 22 28 27 21 11
+ 15 29 35 34 26 20
+ 16 30 36 33 25 19
+ 7 23 31 32 24 10
+ 2 8 17 18 9 3
+
+
+
+
+ Circles 6x6 (white)
+
+ 36 32 23 24 25 33
+ 31 15 9 10 16 26
+ 22 8 2 3 11 17
+ 21 7 1 4 12 18
+ 30 14 6 5 13 27
+ 35 29 20 19 28 34
+
+
+
+
+ Circles 7x7 (black)
+
+ 3 9 18 28 17 8 2
+ 10 24 33 39 32 23 7
+ 19 34 44 48 43 31 16
+ 25 40 45 49 47 38 27
+ 20 35 41 46 42 29 15
+ 11 21 36 37 28 22 6
+ 4 12 13 26 14 5 1
+
+
+
+
+
+ Circles 7x7 (white)
+
+ 47 41 32 22 33 42 48
+ 40 26 17 11 18 27 43
+ 31 16 6 2 7 19 34
+ 25 10 5 1 3 12 23
+ 30 15 9 4 8 20 35
+ 39 29 14 13 21 28 44
+ 46 38 37 24 36 45 49
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/type-apple.xml b/etc/ImageMagick-6/type-apple.xml
new file mode 100644
index 0000000000..57fe9d142e
--- /dev/null
+++ b/etc/ImageMagick-6/type-apple.xml
@@ -0,0 +1,1367 @@
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/type-dejavu.xml b/etc/ImageMagick-6/type-dejavu.xml
new file mode 100644
index 0000000000..29b3c2047e
--- /dev/null
+++ b/etc/ImageMagick-6/type-dejavu.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/type-ghostscript.xml b/etc/ImageMagick-6/type-ghostscript.xml
new file mode 100644
index 0000000000..8dd5acef3a
--- /dev/null
+++ b/etc/ImageMagick-6/type-ghostscript.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/type-urw-base35.xml b/etc/ImageMagick-6/type-urw-base35.xml
new file mode 100644
index 0000000000..e627c31ca3
--- /dev/null
+++ b/etc/ImageMagick-6/type-urw-base35.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/type-windows.xml b/etc/ImageMagick-6/type-windows.xml
new file mode 100644
index 0000000000..621eec42f9
--- /dev/null
+++ b/etc/ImageMagick-6/type-windows.xml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/etc/ImageMagick-6/type.xml b/etc/ImageMagick-6/type.xml
new file mode 100644
index 0000000000..8ac749049c
--- /dev/null
+++ b/etc/ImageMagick-6/type.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+]>
+
+
+
+
diff --git a/etc/PackageKit/PackageKit.conf b/etc/PackageKit/PackageKit.conf
new file mode 100644
index 0000000000..41b487beb7
--- /dev/null
+++ b/etc/PackageKit/PackageKit.conf
@@ -0,0 +1,21 @@
+# Only the system administrator should modify this file, ordinary users
+# should not have to change anything.
+
+[Daemon]
+
+# Default backends, as chosen in the configure script. This will be used
+# where no --backend="foo" option is given to the daemon.
+#
+# The order they are specified is the order they are tried, so for the
+# value "foo,bar" first "foo" will be attempted and then "bar" if the
+# libpk_backend_foo.so module load failed.
+#DefaultBackend=auto
+
+# Unlock the backend after this many seconds idle.
+#BackendShutdownTimeout=5
+
+# Shut down the daemon after this many seconds idle. 0 means don't shutdown.
+#ShutdownTimeout=300
+
+# Keep the packages after they have been downloaded
+#KeepCache=false
diff --git a/etc/PackageKit/Vendor.conf b/etc/PackageKit/Vendor.conf
new file mode 100644
index 0000000000..752b8fd51f
--- /dev/null
+++ b/etc/PackageKit/Vendor.conf
@@ -0,0 +1,48 @@
+# Only the system vendor should modify this file, ordinary users
+# should not have to change anything.
+
+[PackagesNotFound]
+
+# This is a link to a vendor URL which is shown when a suitable package
+# could not be found in any remote software repository.
+# The page set here should explain how to add new software repositories if required.
+#
+# If the value is set to 'none' then no link is shown.
+#
+# default=http://www.packagekit.org/pk-package-not-found.html
+DefaultUrl=https://help.ubuntu.com/community/Repositories/
+
+# The URL which is shown to the user when a codec could not be found.
+# It should explain why certain codecs cannot be used, and perhaps show
+# links to web stores where the codec can be legally purchased.
+#
+# If the value is set to 'none' then the value of DefaultUrl is used.
+#
+# default=none
+CodecUrl=http://shop.canonical.com/index.php?cPath=19&osCsid=f1e370ea7563ed5e654c10450364ff24
+
+# The URL which is shown to the user when hardware drivers could not be found.
+# It should explain why some hardware is not supported, and links to futher
+# information.
+#
+# If the value is set to 'none' then the value of DefaultUrl is used.
+#
+# default=none
+HardwareUrl=none
+
+# The URL which is shown to the user when fonts could not be found.
+# Alternatives should probably be suggested where possible.
+#
+# If the value is set to 'none' then the value of DefaultUrl is used.
+#
+# default=none
+FontUrl=none
+
+# The URL which is shown to the user when programs handing a mime tpye could not
+# be found. It should probably explain how to use wine if the program is a
+# Windows program, or suggest alternatives.
+#
+# If the value is set to 'none' then the value of DefaultUrl is used.
+#
+# default=none
+MimeUrl=none
diff --git a/etc/X11/Xreset b/etc/X11/Xreset
new file mode 100755
index 0000000000..7a0974cfac
--- /dev/null
+++ b/etc/X11/Xreset
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# /etc/X11/Xreset
+#
+# global Xreset file -- for use by display managers
+
+# $Id: Xsession 967 2005-12-27 07:20:55Z dnusinow $
+
+set -e
+
+PROGNAME=Xreset
+SYSSESSIONDIR=/etc/X11/Xreset.d
+
+if [ ! -d "$SYSSESSIONDIR" ]; then
+ # Nothing to do, exiting
+ exit 0
+fi
+
+# use run-parts to source every file in the session directory; we source
+# instead of executing so that the variables and functions defined above
+# are available to the scripts, and so that they can pass variables to each
+# other
+SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)
+if [ -n "$SESSIONFILES" ]; then
+ set +e
+ for SESSIONFILE in $SESSIONFILES; do
+ . $SESSIONFILE
+ done
+ set -e
+fi
+
+exit 0
+
+# vim:set ai et sts=2 sw=2 tw=80:
diff --git a/etc/X11/Xreset.d/README b/etc/X11/Xreset.d/README
new file mode 100644
index 0000000000..3c03f42426
--- /dev/null
+++ b/etc/X11/Xreset.d/README
@@ -0,0 +1,4 @@
+# Scripts in this directory are executed as root when a user log out from
+# a display manager using /etc/X11/Xreset.
+# The username of the user logging out is provided in the $USER environment
+# variable.
diff --git a/etc/X11/Xresources/x11-common b/etc/X11/Xresources/x11-common
new file mode 100644
index 0000000000..7641207218
--- /dev/null
+++ b/etc/X11/Xresources/x11-common
@@ -0,0 +1,10 @@
+! $Id$
+
+! load color-specific resources for clients that have them
+#ifdef COLOR
+*customization: -color
+#endif
+
+! make Xaw (Athena widget set) clients understand the delete key
+! this causes problems with some non-Xaw apps, use with care
+! *Text.translations: #override ~Shift ~Meta Delete: delete-next-character()
diff --git a/etc/X11/Xsession b/etc/X11/Xsession
new file mode 100755
index 0000000000..58cd30556d
--- /dev/null
+++ b/etc/X11/Xsession
@@ -0,0 +1,137 @@
+#!/bin/sh
+#
+# /etc/X11/Xsession
+#
+# global Xsession file -- used by display managers and xinit (startx)
+
+# $Id: Xsession 967 2005-12-27 07:20:55Z dnusinow $
+
+set -e
+
+PROGNAME=Xsession
+
+message () {
+ # pretty-print messages of arbitrary length; use xmessage if it
+ # is available and $DISPLAY is set
+ MESSAGE="$PROGNAME: $*"
+ echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2
+ if [ -n "$DISPLAY" ] && command -v xmessage > /dev/null 2>&1; then
+ echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
+ fi
+}
+
+message_nonl () {
+ # pretty-print messages of arbitrary length (no trailing newline); use
+ # xmessage if it is available and $DISPLAY is set
+ MESSAGE="$PROGNAME: $*"
+ echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2;
+ if [ -n "$DISPLAY" ] && command -v xmessage > /dev/null 2>&1; then
+ echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
+ fi
+}
+
+errormsg () {
+ # exit script with error
+ message "$*"
+ exit 1
+}
+
+internal_errormsg () {
+ # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message
+ # One big call to message() for the sake of xmessage; if we had two then
+ # the user would have dismissed the error we want reported before seeing the
+ # request to report it.
+ errormsg "$*" \
+ "Please report the installed version of the \"x11-common\"" \
+ "package and the complete text of this error message to" \
+ "."
+}
+
+# initialize variables for use by all session scripts
+
+OPTIONFILE=/etc/X11/Xsession.options
+
+SYSRESOURCES=/etc/X11/Xresources
+USRRESOURCES=$HOME/.Xresources
+
+SYSSESSIONDIR=/etc/X11/Xsession.d
+USERXSESSION=$HOME/.xsession
+USERXSESSIONRC=$HOME/.xsessionrc
+ALTUSERXSESSION=$HOME/.Xsession
+ERRFILE=$HOME/.xsession-errors
+
+OPTIONS="$(
+ if [ -r "$OPTIONFILE" ]; then
+ cat "$OPTIONFILE"
+ fi
+ if [ -d /etc/X11/Xsession.options.d ]; then
+ run-parts --list --regex '\.conf$' /etc/X11/Xsession.options.d | xargs -d '\n' cat
+ fi
+)"
+
+has_option() {
+ # Ensure that a later no-foo overrides an earlier foo
+ if [ "$(echo "$OPTIONS" | grep -Eo "^(no-)?$1\>" | tail -n 1)" = "$1" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# attempt to create an error file; abort if we cannot
+if (umask 077 && touch "$ERRFILE") 2> /dev/null && [ -w "$ERRFILE" ] &&
+ [ ! -L "$ERRFILE" ]; then
+ chmod 600 "$ERRFILE"
+elif ERRFILE=$(mktemp 2> /dev/null); then
+ if ! ln -sf "$ERRFILE" "${TMPDIR:=/tmp}/xsession-$USER"; then
+ message "warning: unable to symlink \"$TMPDIR/xsession-$USER\" to" \
+ "\"$ERRFILE\"; look for session log/errors in" \
+ "\"$TMPDIR/xsession-$USER\"."
+ fi
+else
+ errormsg "unable to create X session log/error file; aborting."
+fi
+
+# truncate ERRFILE if it is too big to avoid disk usage DoS
+if [ "`stat -c%s \"$ERRFILE\"`" -gt 500000 ]; then
+ T=`mktemp -p "$HOME"`
+ tail -c 500000 "$ERRFILE" > "$T" && mv -f "$T" "$ERRFILE" || rm -f "$T"
+fi
+
+exec >>"$ERRFILE" 2>&1
+
+echo "$PROGNAME: X session started for $LOGNAME at $(date)"
+
+# sanity check; is our session script directory present?
+if [ ! -d "$SYSSESSIONDIR" ]; then
+ errormsg "no \"$SYSSESSIONDIR\" directory found; aborting."
+fi
+
+# Attempt to create a file of non-zero length in /tmp; a full filesystem can
+# cause mysterious X session failures. We do not use touch, :, or test -w
+# because they won't actually create a file with contents. We also let standard
+# error from mktemp and echo go to the error file to aid the user in
+# determining what went wrong.
+WRITE_TEST=$(mktemp)
+if ! echo "*" >>"$WRITE_TEST"; then
+ message "warning: unable to write to ${WRITE_TEST%/*}; X session may exit" \
+ "with an error"
+fi
+rm -f "$WRITE_TEST"
+
+# use run-parts to source every file in the session directory; we source
+# instead of executing so that the variables and functions defined above
+# are available to the scripts, and so that they can pass variables to each
+# other
+SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)
+if [ -n "$SESSIONFILES" ]; then
+ set +e
+ for SESSIONFILE in $SESSIONFILES; do
+ . $SESSIONFILE
+ done
+ set -e
+fi
+
+exit 0
+
+# vim:set ai et sts=2 sw=2 tw=80:
diff --git a/etc/X11/Xsession.d/20dbus_xdg-runtime b/etc/X11/Xsession.d/20dbus_xdg-runtime
new file mode 100644
index 0000000000..2404378ffe
--- /dev/null
+++ b/etc/X11/Xsession.d/20dbus_xdg-runtime
@@ -0,0 +1,28 @@
+# vim:set ft=sh sw=2 sts=2 et:
+
+if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && [ -n "$XDG_RUNTIME_DIR" ] && \
+ [ "$XDG_RUNTIME_DIR" = "/run/user/`id -u`" ] && \
+ [ -S "$XDG_RUNTIME_DIR/bus" ]; then
+ # We are under systemd-logind or something remarkably similar, and
+ # a user-session socket has already been set up.
+ #
+ # Be nice to non-libdbus, non-sd-bus implementations by using
+ # that as the session bus address in the environment. The check for
+ # XDG_RUNTIME_DIR = "/run/user/`id -u`" is because we know that
+ # form of the address, from systemd-logind, doesn't need escaping,
+ # whereas arbitrary addresses might.
+ DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"
+ export DBUS_SESSION_BUS_ADDRESS
+fi
+
+if [ -x "/usr/bin/dbus-update-activation-environment" ]; then
+ # tell dbus-daemon --session (and systemd --user, if running)
+ # to put a minimal subset of the Xsession's environment in activated
+ # services' environments
+ dbus-update-activation-environment --verbose --systemd \
+ DBUS_SESSION_BUS_ADDRESS \
+ DISPLAY \
+ XAUTHORITY \
+ XDG_CURRENT_DESKTOP \
+ ${NULL+}
+fi
diff --git a/etc/X11/Xsession.d/20x11-common_process-args b/etc/X11/Xsession.d/20x11-common_process-args
new file mode 100644
index 0000000000..3ccea2e4b9
--- /dev/null
+++ b/etc/X11/Xsession.d/20x11-common_process-args
@@ -0,0 +1,58 @@
+# $Id: 20x11-common_process-args 305 2005-07-03 18:51:43Z dnusinow $
+
+# This file is sourced by Xsession(5), not executed.
+
+# Determine how many arguments were provided.
+case $# in
+ 0)
+ # No arguments given; use default behavior.
+ ;;
+ 1)
+ # One argument given; see what it was.
+ case "$1" in
+ failsafe)
+ # Failsafe session was requested.
+ if has_option allow-failsafe; then
+ if [ -e /usr/bin/x-terminal-emulator ]; then
+ if [ -x /usr/bin/x-terminal-emulator ]; then
+ exec x-terminal-emulator -geometry +1+1
+ else
+ # fatal error
+ errormsg "unable to launch failsafe X session ---" \
+ "x-terminal-emulator not executable; aborting."
+ fi
+ else
+ # fatal error
+ errormsg "unable to launch failsafe X session ---" \
+ "x-terminal-emulator not found; aborting."
+ fi
+ fi
+ ;;
+ default)
+ # Default behavior was requested.
+ ;;
+ *)
+ # Specific program was requested.
+ STARTUP_FULL_PATH=$(command -v "${1%% *}" || true)
+ if [ -n "$STARTUP_FULL_PATH" ] && [ -e "$STARTUP_FULL_PATH" ]; then
+ if [ -x "$STARTUP_FULL_PATH" ]; then
+ STARTUP="$1"
+ else
+ message "unable to launch \"$1\" X session ---" \
+ "\"$1\" not executable; falling back to default session."
+ fi
+ else
+ message "unable to launch \"$1\" X session ---" \
+ "\"$1\" not found; falling back to default session."
+ fi
+ ;;
+ esac
+ ;;
+ *)
+ # More than one argument given; we don't know what to do.
+ message "unsupported number of arguments ($#); falling back to default" \
+ "session."
+ ;;
+esac
+
+# vim:set ai et sts=2 sw=2 tw=80:
diff --git a/etc/X11/Xsession.d/30x11-common_xresources b/etc/X11/Xsession.d/30x11-common_xresources
new file mode 100644
index 0000000000..c3f53a83e9
--- /dev/null
+++ b/etc/X11/Xsession.d/30x11-common_xresources
@@ -0,0 +1,26 @@
+# $Id: 30x11-common_xresources 305 2005-07-03 18:51:43Z dnusinow $
+
+# This file is sourced by Xsession(5), not executed.
+
+# If xrdb (from xbase-clients) is installed, merge system-wide X resources.
+# Then merge the user's X resources, if the options file is so configured.
+if [ -d "$SYSRESOURCES" ] && type xrdb >/dev/null 2>&1; then
+ RESOURCEFILES=$(run-parts --list $SYSRESOURCES)
+ if [ -n "$RESOURCEFILES" ]; then
+ for RESOURCEFILE in $RESOURCEFILES; do
+ xrdb -merge $RESOURCEFILE
+ done
+ fi
+fi
+
+if has_option allow-user-resources && [ -f "$USRRESOURCES" ]; then
+ if type xrdb >/dev/null 2>&1; then
+ xrdb -merge $USRRESOURCES
+ else
+ # Comment out this command if you desire a legacy-free X environment, and find
+ # the warning spurious.
+ message "warning: xrdb command not found; X resources not merged."
+ fi
+fi
+
+# vim:set ai et sts=2 sw=2 tw=80:
diff --git a/etc/X11/Xsession.d/35x11-common_xhost-local b/etc/X11/Xsession.d/35x11-common_xhost-local
new file mode 100644
index 0000000000..d127a6c77b
--- /dev/null
+++ b/etc/X11/Xsession.d/35x11-common_xhost-local
@@ -0,0 +1,10 @@
+# This file is sourced by Xsession(5), not executed.
+
+# If xhost (from x11-xserver-utils) is installed, use it to give access
+# to the X server to any process from the same user on the local host.
+# Unlike other uses of xhost, this is safe since the kernel can check
+# the actual owner of the calling process.
+
+if type xhost >/dev/null 2>&1; then
+ xhost +si:localuser:$(id -un) || :
+fi
diff --git a/etc/X11/Xsession.d/40x11-common_xsessionrc b/etc/X11/Xsession.d/40x11-common_xsessionrc
new file mode 100644
index 0000000000..305f363d77
--- /dev/null
+++ b/etc/X11/Xsession.d/40x11-common_xsessionrc
@@ -0,0 +1,6 @@
+# This file is sourced by Xsession(5), not executed.
+
+#Source user defined xsessionrc (locales and other environment variables)
+if [ -r "$USERXSESSIONRC" ]; then
+ . "$USERXSESSIONRC"
+fi
diff --git a/etc/X11/Xsession.d/50x11-common_determine-startup b/etc/X11/Xsession.d/50x11-common_determine-startup
new file mode 100644
index 0000000000..4e1350587c
--- /dev/null
+++ b/etc/X11/Xsession.d/50x11-common_determine-startup
@@ -0,0 +1,47 @@
+# $Id: 50x11-common_determine-startup 305 2005-07-03 18:51:43Z dnusinow $
+
+# This file is sourced by Xsession(5), not executed.
+
+# If no X session startup program was passed to the Xsession script as an
+# argument (e.g., by the display manager), or if that program was not
+# executable, fall back to looking for a user's custom X session script, if
+# allowed by the options file.
+if [ -z "$STARTUP" ]; then
+ if has_option allow-user-xsession; then
+ for STARTUPFILE in "$USERXSESSION" "$ALTUSERXSESSION"; do
+ if [ -e "$STARTUPFILE" ]; then
+ if [ -x "$STARTUPFILE" ]; then
+ STARTUP="$STARTUPFILE"
+ else
+ shell=${SHELL:-sh}
+ STARTUP="$shell $STARTUPFILE"
+ fi
+ break
+ fi
+ done
+ fi
+fi
+
+# If there is still nothing to use for a startup program, try the system
+# default session manager, window manager, and terminal emulator.
+if [ -z "$STARTUP" ]; then
+ if [ -x /usr/bin/x-session-manager ]; then
+ STARTUP=x-session-manager
+ elif [ -x /usr/bin/x-window-manager ]; then
+ STARTUP=x-window-manager
+ elif [ -x /usr/bin/x-terminal-emulator ]; then
+ STARTUP=x-terminal-emulator
+ fi
+fi
+
+# If we still have not found a startup program, give up.
+if [ -z "$STARTUP" ]; then
+ ERRMSG="unable to start X session ---"
+ if has_option allow-user-xsession; then
+ ERRMSG="$ERRMSG no \"$USERXSESSION\" file, no \"$ALTUSERXSESSION\" file,"
+ fi
+ errormsg "$ERRMSG no session managers, no window managers, and no terminal" \
+ "emulators found; aborting."
+fi
+
+# vim:set ai et sts=2 sw=2 tw=80:
diff --git a/etc/X11/Xsession.d/60x11-common_xdg_path b/etc/X11/Xsession.d/60x11-common_xdg_path
new file mode 100644
index 0000000000..b3ac04bb52
--- /dev/null
+++ b/etc/X11/Xsession.d/60x11-common_xdg_path
@@ -0,0 +1,25 @@
+# This file is sourced by Xsession(5), not executed.
+# Add additional xdg paths depending on selected desktop session
+
+DEFAULT_XDG_CONFIG_DIRS='/etc/xdg'
+DEFAULT_XDG_DATA_DIRS='/usr/local/share/:/usr/share/'
+if [ -n "$DESKTOP_SESSION" ]; then
+ # readd default if was empty
+ if [ -z "$XDG_CONFIG_DIRS" ]; then
+ XDG_CONFIG_DIRS="$DEFAULT_XDG_CONFIG_DIRS"/xdg-"$DESKTOP_SESSION":"$DEFAULT_XDG_CONFIG_DIRS"
+ elif [ -n "${XDG_CONFIG_DIRS##*$DEFAULT_XDG_CONFIG_DIRS/xdg-$DESKTOP_SESSION*}" ]; then
+ XDG_CONFIG_DIRS="$DEFAULT_XDG_CONFIG_DIRS"/xdg-"$DESKTOP_SESSION":"$XDG_CONFIG_DIRS"
+ fi
+ export XDG_CONFIG_DIRS
+ # gnome is already added if gnome-session installed
+ if [ "$DESKTOP_SESSION" != "gnome" ]; then
+ if [ -z "$XDG_DATA_DIRS" ]; then
+ XDG_DATA_DIRS="$DEFAULT_XDG_DATA_DIRS"
+ fi
+ if [ -n "${XDG_DATA_DIRS##*/usr/share/$DESKTOP_SESSION*}" ]; then
+ XDG_DATA_DIRS=/usr/share/"$DESKTOP_SESSION":"$XDG_DATA_DIRS"
+ fi
+ export XDG_DATA_DIRS
+ fi
+fi
+
diff --git a/etc/X11/Xsession.d/90gpg-agent b/etc/X11/Xsession.d/90gpg-agent
new file mode 100644
index 0000000000..8b45b05dba
--- /dev/null
+++ b/etc/X11/Xsession.d/90gpg-agent
@@ -0,0 +1,22 @@
+# On systems with systemd running, we expect the agent to be launched
+# via systemd's user mode (see
+# /usr/lib/systemd/user/gpg-agent.{socket,service} and
+# systemd.unit(5)). This allows systemd to clean up the agent
+# automatically at logout.
+
+# If systemd is absent from your system, or you do not permit it to
+# run in user mode, then you may need to manually launch gpg-agent
+# from your session initialization with something like "gpgconf
+# --launch gpg-agent"
+
+# Nonetheless, ssh and older versions of gpg require environment
+# variables to be set in order to find the agent, so we will set those
+# here.
+
+agent_sock=$(gpgconf --list-dirs agent-socket)
+export GPG_AGENT_INFO=${agent_sock}:0:1
+if [ -n "$(gpgconf --list-options gpg-agent | \
+ awk -F: '/^enable-ssh-support:/{ print $10 }')" ]; then
+ export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
+fi
+
diff --git a/etc/X11/Xsession.d/90qt-a11y b/etc/X11/Xsession.d/90qt-a11y
new file mode 100644
index 0000000000..bd3d1fb6b7
--- /dev/null
+++ b/etc/X11/Xsession.d/90qt-a11y
@@ -0,0 +1,12 @@
+# -*- sh -*-
+# Xsession.d script to set the env variables to enable accessibility for Qt
+#
+# This file is sourced by Xsession(5), not executed.
+
+QT_ACCESSIBILITY=1
+
+export QT_ACCESSIBILITY
+
+if [ -x "/usr/bin/dbus-update-activation-environment" ]; then
+ dbus-update-activation-environment --verbose --systemd QT_ACCESSIBILITY
+fi
diff --git a/etc/X11/Xsession.d/90x11-common_ssh-agent b/etc/X11/Xsession.d/90x11-common_ssh-agent
new file mode 100644
index 0000000000..70bd01b671
--- /dev/null
+++ b/etc/X11/Xsession.d/90x11-common_ssh-agent
@@ -0,0 +1,15 @@
+# $Id: 90x11-common_ssh-agent 305 2005-07-03 18:51:43Z dnusinow $
+
+# This file is sourced by Xsession(5), not executed.
+
+STARTSSH=
+SSHAGENT=/usr/bin/ssh-agent
+SSHAGENTARGS=
+
+if has_option use-ssh-agent; then
+ if [ -x "$SSHAGENT" ] && [ -z "$SSH_AUTH_SOCK" ]; then
+ STARTUP="$SSHAGENT $SSHAGENTARGS ${TMPDIR:+env TMPDIR=$TMPDIR} $STARTUP"
+ fi
+fi
+
+# vim:set ai et sts=2 sw=2 tw=80:
diff --git a/etc/X11/Xsession.d/99x11-common_start b/etc/X11/Xsession.d/99x11-common_start
new file mode 100644
index 0000000000..36a9652946
--- /dev/null
+++ b/etc/X11/Xsession.d/99x11-common_start
@@ -0,0 +1,7 @@
+# $Id: 99x11-common_start 305 2005-07-03 18:51:43Z dnusinow $
+
+# This file is sourced by Xsession(5), not executed.
+
+exec $STARTUP
+
+# vim:set ai et sts=2 sw=2 tw=80:
diff --git a/etc/X11/Xsession.options b/etc/X11/Xsession.options
new file mode 100644
index 0000000000..fc45bf94c8
--- /dev/null
+++ b/etc/X11/Xsession.options
@@ -0,0 +1,9 @@
+# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
+#
+# configuration options for /etc/X11/Xsession
+# See Xsession.options(5) for an explanation of the available options.
+allow-failsafe
+allow-user-resources
+allow-user-xsession
+use-ssh-agent
+use-session-dbus
diff --git a/etc/X11/rgb.txt b/etc/X11/rgb.txt
new file mode 100644
index 0000000000..b9e56c6023
--- /dev/null
+++ b/etc/X11/rgb.txt
@@ -0,0 +1,754 @@
+! $Xorg: rgb.txt,v 1.3 2000/08/17 19:54:00 cpqbld Exp $
+255 250 250 snow
+248 248 255 ghost white
+248 248 255 GhostWhite
+245 245 245 white smoke
+245 245 245 WhiteSmoke
+220 220 220 gainsboro
+255 250 240 floral white
+255 250 240 FloralWhite
+253 245 230 old lace
+253 245 230 OldLace
+250 240 230 linen
+250 235 215 antique white
+250 235 215 AntiqueWhite
+255 239 213 papaya whip
+255 239 213 PapayaWhip
+255 235 205 blanched almond
+255 235 205 BlanchedAlmond
+255 228 196 bisque
+255 218 185 peach puff
+255 218 185 PeachPuff
+255 222 173 navajo white
+255 222 173 NavajoWhite
+255 228 181 moccasin
+255 248 220 cornsilk
+255 255 240 ivory
+255 250 205 lemon chiffon
+255 250 205 LemonChiffon
+255 245 238 seashell
+240 255 240 honeydew
+245 255 250 mint cream
+245 255 250 MintCream
+240 255 255 azure
+240 248 255 alice blue
+240 248 255 AliceBlue
+230 230 250 lavender
+255 240 245 lavender blush
+255 240 245 LavenderBlush
+255 228 225 misty rose
+255 228 225 MistyRose
+255 255 255 white
+ 0 0 0 black
+ 47 79 79 dark slate gray
+ 47 79 79 DarkSlateGray
+ 47 79 79 dark slate grey
+ 47 79 79 DarkSlateGrey
+105 105 105 dim gray
+105 105 105 DimGray
+105 105 105 dim grey
+105 105 105 DimGrey
+112 128 144 slate gray
+112 128 144 SlateGray
+112 128 144 slate grey
+112 128 144 SlateGrey
+119 136 153 light slate gray
+119 136 153 LightSlateGray
+119 136 153 light slate grey
+119 136 153 LightSlateGrey
+190 190 190 gray
+190 190 190 grey
+211 211 211 light grey
+211 211 211 LightGrey
+211 211 211 light gray
+211 211 211 LightGray
+ 25 25 112 midnight blue
+ 25 25 112 MidnightBlue
+ 0 0 128 navy
+ 0 0 128 navy blue
+ 0 0 128 NavyBlue
+100 149 237 cornflower blue
+100 149 237 CornflowerBlue
+ 72 61 139 dark slate blue
+ 72 61 139 DarkSlateBlue
+106 90 205 slate blue
+106 90 205 SlateBlue
+123 104 238 medium slate blue
+123 104 238 MediumSlateBlue
+132 112 255 light slate blue
+132 112 255 LightSlateBlue
+ 0 0 205 medium blue
+ 0 0 205 MediumBlue
+ 65 105 225 royal blue
+ 65 105 225 RoyalBlue
+ 0 0 255 blue
+ 30 144 255 dodger blue
+ 30 144 255 DodgerBlue
+ 0 191 255 deep sky blue
+ 0 191 255 DeepSkyBlue
+135 206 235 sky blue
+135 206 235 SkyBlue
+135 206 250 light sky blue
+135 206 250 LightSkyBlue
+ 70 130 180 steel blue
+ 70 130 180 SteelBlue
+176 196 222 light steel blue
+176 196 222 LightSteelBlue
+173 216 230 light blue
+173 216 230 LightBlue
+176 224 230 powder blue
+176 224 230 PowderBlue
+175 238 238 pale turquoise
+175 238 238 PaleTurquoise
+ 0 206 209 dark turquoise
+ 0 206 209 DarkTurquoise
+ 72 209 204 medium turquoise
+ 72 209 204 MediumTurquoise
+ 64 224 208 turquoise
+ 0 255 255 cyan
+224 255 255 light cyan
+224 255 255 LightCyan
+ 95 158 160 cadet blue
+ 95 158 160 CadetBlue
+102 205 170 medium aquamarine
+102 205 170 MediumAquamarine
+127 255 212 aquamarine
+ 0 100 0 dark green
+ 0 100 0 DarkGreen
+ 85 107 47 dark olive green
+ 85 107 47 DarkOliveGreen
+143 188 143 dark sea green
+143 188 143 DarkSeaGreen
+ 46 139 87 sea green
+ 46 139 87 SeaGreen
+ 60 179 113 medium sea green
+ 60 179 113 MediumSeaGreen
+ 32 178 170 light sea green
+ 32 178 170 LightSeaGreen
+152 251 152 pale green
+152 251 152 PaleGreen
+ 0 255 127 spring green
+ 0 255 127 SpringGreen
+124 252 0 lawn green
+124 252 0 LawnGreen
+ 0 255 0 green
+127 255 0 chartreuse
+ 0 250 154 medium spring green
+ 0 250 154 MediumSpringGreen
+173 255 47 green yellow
+173 255 47 GreenYellow
+ 50 205 50 lime green
+ 50 205 50 LimeGreen
+154 205 50 yellow green
+154 205 50 YellowGreen
+ 34 139 34 forest green
+ 34 139 34 ForestGreen
+107 142 35 olive drab
+107 142 35 OliveDrab
+189 183 107 dark khaki
+189 183 107 DarkKhaki
+240 230 140 khaki
+238 232 170 pale goldenrod
+238 232 170 PaleGoldenrod
+250 250 210 light goldenrod yellow
+250 250 210 LightGoldenrodYellow
+255 255 224 light yellow
+255 255 224 LightYellow
+255 255 0 yellow
+255 215 0 gold
+238 221 130 light goldenrod
+238 221 130 LightGoldenrod
+218 165 32 goldenrod
+184 134 11 dark goldenrod
+184 134 11 DarkGoldenrod
+188 143 143 rosy brown
+188 143 143 RosyBrown
+205 92 92 indian red
+205 92 92 IndianRed
+139 69 19 saddle brown
+139 69 19 SaddleBrown
+160 82 45 sienna
+205 133 63 peru
+222 184 135 burlywood
+245 245 220 beige
+245 222 179 wheat
+244 164 96 sandy brown
+244 164 96 SandyBrown
+210 180 140 tan
+210 105 30 chocolate
+178 34 34 firebrick
+165 42 42 brown
+233 150 122 dark salmon
+233 150 122 DarkSalmon
+250 128 114 salmon
+255 160 122 light salmon
+255 160 122 LightSalmon
+255 165 0 orange
+255 140 0 dark orange
+255 140 0 DarkOrange
+255 127 80 coral
+240 128 128 light coral
+240 128 128 LightCoral
+255 99 71 tomato
+255 69 0 orange red
+255 69 0 OrangeRed
+255 0 0 red
+255 105 180 hot pink
+255 105 180 HotPink
+255 20 147 deep pink
+255 20 147 DeepPink
+255 192 203 pink
+255 182 193 light pink
+255 182 193 LightPink
+219 112 147 pale violet red
+219 112 147 PaleVioletRed
+176 48 96 maroon
+199 21 133 medium violet red
+199 21 133 MediumVioletRed
+208 32 144 violet red
+208 32 144 VioletRed
+255 0 255 magenta
+238 130 238 violet
+221 160 221 plum
+218 112 214 orchid
+186 85 211 medium orchid
+186 85 211 MediumOrchid
+153 50 204 dark orchid
+153 50 204 DarkOrchid
+148 0 211 dark violet
+148 0 211 DarkViolet
+138 43 226 blue violet
+138 43 226 BlueViolet
+160 32 240 purple
+147 112 219 medium purple
+147 112 219 MediumPurple
+216 191 216 thistle
+255 250 250 snow1
+238 233 233 snow2
+205 201 201 snow3
+139 137 137 snow4
+255 245 238 seashell1
+238 229 222 seashell2
+205 197 191 seashell3
+139 134 130 seashell4
+255 239 219 AntiqueWhite1
+238 223 204 AntiqueWhite2
+205 192 176 AntiqueWhite3
+139 131 120 AntiqueWhite4
+255 228 196 bisque1
+238 213 183 bisque2
+205 183 158 bisque3
+139 125 107 bisque4
+255 218 185 PeachPuff1
+238 203 173 PeachPuff2
+205 175 149 PeachPuff3
+139 119 101 PeachPuff4
+255 222 173 NavajoWhite1
+238 207 161 NavajoWhite2
+205 179 139 NavajoWhite3
+139 121 94 NavajoWhite4
+255 250 205 LemonChiffon1
+238 233 191 LemonChiffon2
+205 201 165 LemonChiffon3
+139 137 112 LemonChiffon4
+255 248 220 cornsilk1
+238 232 205 cornsilk2
+205 200 177 cornsilk3
+139 136 120 cornsilk4
+255 255 240 ivory1
+238 238 224 ivory2
+205 205 193 ivory3
+139 139 131 ivory4
+240 255 240 honeydew1
+224 238 224 honeydew2
+193 205 193 honeydew3
+131 139 131 honeydew4
+255 240 245 LavenderBlush1
+238 224 229 LavenderBlush2
+205 193 197 LavenderBlush3
+139 131 134 LavenderBlush4
+255 228 225 MistyRose1
+238 213 210 MistyRose2
+205 183 181 MistyRose3
+139 125 123 MistyRose4
+240 255 255 azure1
+224 238 238 azure2
+193 205 205 azure3
+131 139 139 azure4
+131 111 255 SlateBlue1
+122 103 238 SlateBlue2
+105 89 205 SlateBlue3
+ 71 60 139 SlateBlue4
+ 72 118 255 RoyalBlue1
+ 67 110 238 RoyalBlue2
+ 58 95 205 RoyalBlue3
+ 39 64 139 RoyalBlue4
+ 0 0 255 blue1
+ 0 0 238 blue2
+ 0 0 205 blue3
+ 0 0 139 blue4
+ 30 144 255 DodgerBlue1
+ 28 134 238 DodgerBlue2
+ 24 116 205 DodgerBlue3
+ 16 78 139 DodgerBlue4
+ 99 184 255 SteelBlue1
+ 92 172 238 SteelBlue2
+ 79 148 205 SteelBlue3
+ 54 100 139 SteelBlue4
+ 0 191 255 DeepSkyBlue1
+ 0 178 238 DeepSkyBlue2
+ 0 154 205 DeepSkyBlue3
+ 0 104 139 DeepSkyBlue4
+135 206 255 SkyBlue1
+126 192 238 SkyBlue2
+108 166 205 SkyBlue3
+ 74 112 139 SkyBlue4
+176 226 255 LightSkyBlue1
+164 211 238 LightSkyBlue2
+141 182 205 LightSkyBlue3
+ 96 123 139 LightSkyBlue4
+198 226 255 SlateGray1
+185 211 238 SlateGray2
+159 182 205 SlateGray3
+108 123 139 SlateGray4
+202 225 255 LightSteelBlue1
+188 210 238 LightSteelBlue2
+162 181 205 LightSteelBlue3
+110 123 139 LightSteelBlue4
+191 239 255 LightBlue1
+178 223 238 LightBlue2
+154 192 205 LightBlue3
+104 131 139 LightBlue4
+224 255 255 LightCyan1
+209 238 238 LightCyan2
+180 205 205 LightCyan3
+122 139 139 LightCyan4
+187 255 255 PaleTurquoise1
+174 238 238 PaleTurquoise2
+150 205 205 PaleTurquoise3
+102 139 139 PaleTurquoise4
+152 245 255 CadetBlue1
+142 229 238 CadetBlue2
+122 197 205 CadetBlue3
+ 83 134 139 CadetBlue4
+ 0 245 255 turquoise1
+ 0 229 238 turquoise2
+ 0 197 205 turquoise3
+ 0 134 139 turquoise4
+ 0 255 255 cyan1
+ 0 238 238 cyan2
+ 0 205 205 cyan3
+ 0 139 139 cyan4
+151 255 255 DarkSlateGray1
+141 238 238 DarkSlateGray2
+121 205 205 DarkSlateGray3
+ 82 139 139 DarkSlateGray4
+127 255 212 aquamarine1
+118 238 198 aquamarine2
+102 205 170 aquamarine3
+ 69 139 116 aquamarine4
+193 255 193 DarkSeaGreen1
+180 238 180 DarkSeaGreen2
+155 205 155 DarkSeaGreen3
+105 139 105 DarkSeaGreen4
+ 84 255 159 SeaGreen1
+ 78 238 148 SeaGreen2
+ 67 205 128 SeaGreen3
+ 46 139 87 SeaGreen4
+154 255 154 PaleGreen1
+144 238 144 PaleGreen2
+124 205 124 PaleGreen3
+ 84 139 84 PaleGreen4
+ 0 255 127 SpringGreen1
+ 0 238 118 SpringGreen2
+ 0 205 102 SpringGreen3
+ 0 139 69 SpringGreen4
+ 0 255 0 green1
+ 0 238 0 green2
+ 0 205 0 green3
+ 0 139 0 green4
+127 255 0 chartreuse1
+118 238 0 chartreuse2
+102 205 0 chartreuse3
+ 69 139 0 chartreuse4
+192 255 62 OliveDrab1
+179 238 58 OliveDrab2
+154 205 50 OliveDrab3
+105 139 34 OliveDrab4
+202 255 112 DarkOliveGreen1
+188 238 104 DarkOliveGreen2
+162 205 90 DarkOliveGreen3
+110 139 61 DarkOliveGreen4
+255 246 143 khaki1
+238 230 133 khaki2
+205 198 115 khaki3
+139 134 78 khaki4
+255 236 139 LightGoldenrod1
+238 220 130 LightGoldenrod2
+205 190 112 LightGoldenrod3
+139 129 76 LightGoldenrod4
+255 255 224 LightYellow1
+238 238 209 LightYellow2
+205 205 180 LightYellow3
+139 139 122 LightYellow4
+255 255 0 yellow1
+238 238 0 yellow2
+205 205 0 yellow3
+139 139 0 yellow4
+255 215 0 gold1
+238 201 0 gold2
+205 173 0 gold3
+139 117 0 gold4
+255 193 37 goldenrod1
+238 180 34 goldenrod2
+205 155 29 goldenrod3
+139 105 20 goldenrod4
+255 185 15 DarkGoldenrod1
+238 173 14 DarkGoldenrod2
+205 149 12 DarkGoldenrod3
+139 101 8 DarkGoldenrod4
+255 193 193 RosyBrown1
+238 180 180 RosyBrown2
+205 155 155 RosyBrown3
+139 105 105 RosyBrown4
+255 106 106 IndianRed1
+238 99 99 IndianRed2
+205 85 85 IndianRed3
+139 58 58 IndianRed4
+255 130 71 sienna1
+238 121 66 sienna2
+205 104 57 sienna3
+139 71 38 sienna4
+255 211 155 burlywood1
+238 197 145 burlywood2
+205 170 125 burlywood3
+139 115 85 burlywood4
+255 231 186 wheat1
+238 216 174 wheat2
+205 186 150 wheat3
+139 126 102 wheat4
+255 165 79 tan1
+238 154 73 tan2
+205 133 63 tan3
+139 90 43 tan4
+255 127 36 chocolate1
+238 118 33 chocolate2
+205 102 29 chocolate3
+139 69 19 chocolate4
+255 48 48 firebrick1
+238 44 44 firebrick2
+205 38 38 firebrick3
+139 26 26 firebrick4
+255 64 64 brown1
+238 59 59 brown2
+205 51 51 brown3
+139 35 35 brown4
+255 140 105 salmon1
+238 130 98 salmon2
+205 112 84 salmon3
+139 76 57 salmon4
+255 160 122 LightSalmon1
+238 149 114 LightSalmon2
+205 129 98 LightSalmon3
+139 87 66 LightSalmon4
+255 165 0 orange1
+238 154 0 orange2
+205 133 0 orange3
+139 90 0 orange4
+255 127 0 DarkOrange1
+238 118 0 DarkOrange2
+205 102 0 DarkOrange3
+139 69 0 DarkOrange4
+255 114 86 coral1
+238 106 80 coral2
+205 91 69 coral3
+139 62 47 coral4
+255 99 71 tomato1
+238 92 66 tomato2
+205 79 57 tomato3
+139 54 38 tomato4
+255 69 0 OrangeRed1
+238 64 0 OrangeRed2
+205 55 0 OrangeRed3
+139 37 0 OrangeRed4
+255 0 0 red1
+238 0 0 red2
+205 0 0 red3
+139 0 0 red4
+215 7 81 DebianRed
+255 20 147 DeepPink1
+238 18 137 DeepPink2
+205 16 118 DeepPink3
+139 10 80 DeepPink4
+255 110 180 HotPink1
+238 106 167 HotPink2
+205 96 144 HotPink3
+139 58 98 HotPink4
+255 181 197 pink1
+238 169 184 pink2
+205 145 158 pink3
+139 99 108 pink4
+255 174 185 LightPink1
+238 162 173 LightPink2
+205 140 149 LightPink3
+139 95 101 LightPink4
+255 130 171 PaleVioletRed1
+238 121 159 PaleVioletRed2
+205 104 137 PaleVioletRed3
+139 71 93 PaleVioletRed4
+255 52 179 maroon1
+238 48 167 maroon2
+205 41 144 maroon3
+139 28 98 maroon4
+255 62 150 VioletRed1
+238 58 140 VioletRed2
+205 50 120 VioletRed3
+139 34 82 VioletRed4
+255 0 255 magenta1
+238 0 238 magenta2
+205 0 205 magenta3
+139 0 139 magenta4
+255 131 250 orchid1
+238 122 233 orchid2
+205 105 201 orchid3
+139 71 137 orchid4
+255 187 255 plum1
+238 174 238 plum2
+205 150 205 plum3
+139 102 139 plum4
+224 102 255 MediumOrchid1
+209 95 238 MediumOrchid2
+180 82 205 MediumOrchid3
+122 55 139 MediumOrchid4
+191 62 255 DarkOrchid1
+178 58 238 DarkOrchid2
+154 50 205 DarkOrchid3
+104 34 139 DarkOrchid4
+155 48 255 purple1
+145 44 238 purple2
+125 38 205 purple3
+ 85 26 139 purple4
+171 130 255 MediumPurple1
+159 121 238 MediumPurple2
+137 104 205 MediumPurple3
+ 93 71 139 MediumPurple4
+255 225 255 thistle1
+238 210 238 thistle2
+205 181 205 thistle3
+139 123 139 thistle4
+ 0 0 0 gray0
+ 0 0 0 grey0
+ 3 3 3 gray1
+ 3 3 3 grey1
+ 5 5 5 gray2
+ 5 5 5 grey2
+ 8 8 8 gray3
+ 8 8 8 grey3
+ 10 10 10 gray4
+ 10 10 10 grey4
+ 13 13 13 gray5
+ 13 13 13 grey5
+ 15 15 15 gray6
+ 15 15 15 grey6
+ 18 18 18 gray7
+ 18 18 18 grey7
+ 20 20 20 gray8
+ 20 20 20 grey8
+ 23 23 23 gray9
+ 23 23 23 grey9
+ 26 26 26 gray10
+ 26 26 26 grey10
+ 28 28 28 gray11
+ 28 28 28 grey11
+ 31 31 31 gray12
+ 31 31 31 grey12
+ 33 33 33 gray13
+ 33 33 33 grey13
+ 36 36 36 gray14
+ 36 36 36 grey14
+ 38 38 38 gray15
+ 38 38 38 grey15
+ 41 41 41 gray16
+ 41 41 41 grey16
+ 43 43 43 gray17
+ 43 43 43 grey17
+ 46 46 46 gray18
+ 46 46 46 grey18
+ 48 48 48 gray19
+ 48 48 48 grey19
+ 51 51 51 gray20
+ 51 51 51 grey20
+ 54 54 54 gray21
+ 54 54 54 grey21
+ 56 56 56 gray22
+ 56 56 56 grey22
+ 59 59 59 gray23
+ 59 59 59 grey23
+ 61 61 61 gray24
+ 61 61 61 grey24
+ 64 64 64 gray25
+ 64 64 64 grey25
+ 66 66 66 gray26
+ 66 66 66 grey26
+ 69 69 69 gray27
+ 69 69 69 grey27
+ 71 71 71 gray28
+ 71 71 71 grey28
+ 74 74 74 gray29
+ 74 74 74 grey29
+ 77 77 77 gray30
+ 77 77 77 grey30
+ 79 79 79 gray31
+ 79 79 79 grey31
+ 82 82 82 gray32
+ 82 82 82 grey32
+ 84 84 84 gray33
+ 84 84 84 grey33
+ 87 87 87 gray34
+ 87 87 87 grey34
+ 89 89 89 gray35
+ 89 89 89 grey35
+ 92 92 92 gray36
+ 92 92 92 grey36
+ 94 94 94 gray37
+ 94 94 94 grey37
+ 97 97 97 gray38
+ 97 97 97 grey38
+ 99 99 99 gray39
+ 99 99 99 grey39
+102 102 102 gray40
+102 102 102 grey40
+105 105 105 gray41
+105 105 105 grey41
+107 107 107 gray42
+107 107 107 grey42
+110 110 110 gray43
+110 110 110 grey43
+112 112 112 gray44
+112 112 112 grey44
+115 115 115 gray45
+115 115 115 grey45
+117 117 117 gray46
+117 117 117 grey46
+120 120 120 gray47
+120 120 120 grey47
+122 122 122 gray48
+122 122 122 grey48
+125 125 125 gray49
+125 125 125 grey49
+127 127 127 gray50
+127 127 127 grey50
+130 130 130 gray51
+130 130 130 grey51
+133 133 133 gray52
+133 133 133 grey52
+135 135 135 gray53
+135 135 135 grey53
+138 138 138 gray54
+138 138 138 grey54
+140 140 140 gray55
+140 140 140 grey55
+143 143 143 gray56
+143 143 143 grey56
+145 145 145 gray57
+145 145 145 grey57
+148 148 148 gray58
+148 148 148 grey58
+150 150 150 gray59
+150 150 150 grey59
+153 153 153 gray60
+153 153 153 grey60
+156 156 156 gray61
+156 156 156 grey61
+158 158 158 gray62
+158 158 158 grey62
+161 161 161 gray63
+161 161 161 grey63
+163 163 163 gray64
+163 163 163 grey64
+166 166 166 gray65
+166 166 166 grey65
+168 168 168 gray66
+168 168 168 grey66
+171 171 171 gray67
+171 171 171 grey67
+173 173 173 gray68
+173 173 173 grey68
+176 176 176 gray69
+176 176 176 grey69
+179 179 179 gray70
+179 179 179 grey70
+181 181 181 gray71
+181 181 181 grey71
+184 184 184 gray72
+184 184 184 grey72
+186 186 186 gray73
+186 186 186 grey73
+189 189 189 gray74
+189 189 189 grey74
+191 191 191 gray75
+191 191 191 grey75
+194 194 194 gray76
+194 194 194 grey76
+196 196 196 gray77
+196 196 196 grey77
+199 199 199 gray78
+199 199 199 grey78
+201 201 201 gray79
+201 201 201 grey79
+204 204 204 gray80
+204 204 204 grey80
+207 207 207 gray81
+207 207 207 grey81
+209 209 209 gray82
+209 209 209 grey82
+212 212 212 gray83
+212 212 212 grey83
+214 214 214 gray84
+214 214 214 grey84
+217 217 217 gray85
+217 217 217 grey85
+219 219 219 gray86
+219 219 219 grey86
+222 222 222 gray87
+222 222 222 grey87
+224 224 224 gray88
+224 224 224 grey88
+227 227 227 gray89
+227 227 227 grey89
+229 229 229 gray90
+229 229 229 grey90
+232 232 232 gray91
+232 232 232 grey91
+235 235 235 gray92
+235 235 235 grey92
+237 237 237 gray93
+237 237 237 grey93
+240 240 240 gray94
+240 240 240 grey94
+242 242 242 gray95
+242 242 242 grey95
+245 245 245 gray96
+245 245 245 grey96
+247 247 247 gray97
+247 247 247 grey97
+250 250 250 gray98
+250 250 250 grey98
+252 252 252 gray99
+252 252 252 grey99
+255 255 255 gray100
+255 255 255 grey100
+169 169 169 dark grey
+169 169 169 DarkGrey
+169 169 169 dark gray
+169 169 169 DarkGray
+0 0 139 dark blue
+0 0 139 DarkBlue
+0 139 139 dark cyan
+0 139 139 DarkCyan
+139 0 139 dark magenta
+139 0 139 DarkMagenta
+139 0 0 dark red
+139 0 0 DarkRed
+144 238 144 light green
+144 238 144 LightGreen
diff --git a/etc/adduser.conf b/etc/adduser.conf
new file mode 100644
index 0000000000..44f540479e
--- /dev/null
+++ b/etc/adduser.conf
@@ -0,0 +1,109 @@
+# /etc/adduser.conf: `adduser' configuration.
+# See adduser(8) and adduser.conf(5) for full documentation.
+
+# A commented out setting indicates that this is the default in the
+# code. If you need to change those settings, remove the comment and
+# make your intended change.
+
+# STDERRMSGLEVEL, STDOUTMSGLEVEL, and LOGMSGLEVEL set the minimum
+# priority for messages logged to syslog/journal and the console,
+# respectively.
+# Values are trace, debug, info, warn, err, and fatal.
+# Messages with the set priority or higher get logged to the
+# respective medium.
+#STDERRMSGLEVEL=warn
+#STDOUTMSGLEVEL=info
+#SYSLOGLEVEL=info
+
+# The login shell to be used for all new users.
+# Default: DSHELL=/bin/bash
+#DSHELL=/bin/bash
+
+# The directory in which new home directories should be created.
+# Default: DHOME=/home
+# DHOME=/home
+
+# The directory from which skeletal user configuration files
+# will be copied.
+# Default: SKEL=/etc/skel
+#SKEL=/etc/skel
+
+# Specify inclusive ranges of UIDs and GIDs from which UIDs and GIDs
+# for system users, system groups, non-system users and non-system groups
+# can be dynamically allocated.
+# Default: FIRST_SYSTEM_UID=100, LAST_SYSTEM_UID=999
+#FIRST_SYSTEM_UID=100
+#LAST_SYSTEM_UID=999
+
+# Default: FIRST_SYSTEM_GID=100, LAST_SYSTEM_GID=999
+#FIRST_SYSTEM_GID=100
+#LAST_SYSTEM_GID=999
+
+# Default: FIRST_UID=1000, LAST_UID=59999
+#FIRST_UID=1000
+#LAST_UID=59999
+
+# Default: FIRST_GID=1000, LAST_GID=59999
+#FIRST_GID=1000
+#LAST_GID=59999
+
+# Specify a file or a directory containing UID and GID pool.
+#UID_POOL=/etc/adduser-pool.conf
+#UID_POOL=/etc/adduser-pool.d/
+#GID_POOL=/etc/adduser-pool.conf
+#GID_POOL=/etc/adduser-pool.d/
+
+# Specify whether each created non-system user will be
+# given their own group to use.
+# Default: USERGROUPS=yes
+#USERGROUPS=yes
+
+# Defines the groupname or GID of the group all newly-created
+# non-system users are placed into.
+# It is a configuration error to define both variables
+# even if the values are consistent.
+# Default: USERS_GID=undefined, USERS_GROUP=users
+#USERS_GID=100
+#USERS_GROUP=users
+
+# The permissions mode for home directories of non-system users.
+# Default: DIR_MODE=0750
+#DIR_MODE=0750
+
+# The permissions mode for home directories of system users.
+# Default: SYS_DIR_MODE=0750
+#SYS_DIR_MODE=0750
+
+# If set to a nonempty value, new users will have quotas copied
+# from that user with `edquota -p QUOTAUSER newuser'
+# Default: QUOTAUSER=""
+#QUOTAUSER=""
+
+# Non-system user- and groupnames are checked against this regular
+# expression.
+# Default: NAME_REGEX="^[a-z][-a-z0-9_]*\$?$"
+#NAME_REGEX="^[a-z][-a-z0-9_]*\$?$"
+
+# System user- and groupnames are checked against this regular
+# expression.
+# Default: SYS_NAME_REGEX="^[A-Za-z_][-A-Za-z0-9_]*\$?$"
+#SYS_NAME_REGEX="^[A-Za-z_][-A-Za-z0-9_]*\$?$"
+
+# When populating the newly created home directory of a non-system user,
+# files in SKEL matching this regex are not copied.
+# Default: SKEL_IGNORE_REGEX="\.(dpkg|ucf)-(old|new|dist|save)$"
+#SKEL_IGNORE_REGEX="\.(dpkg|ucf)-(old|new|dist|save)$"
+
+# list of groups that new non-system users will be added to
+# if ADD_EXTRA_GROUPS is non-zero or set on the command line.
+# Default: EXTRA_GROUPS="users"
+#EXTRA_GROUPS="users"
+
+# Setting this to something other than 0 will cause adduser to add
+# newly created non-system users to the list of groups defined by
+# EXTRA_GROUPS.
+# Default: ADD_EXTRA_GROUPS=0
+#ADD_EXTRA_GROUPS=0
+
+# use extrausers by default
+#USE_EXTRAUSERS=1
diff --git a/etc/aliases b/etc/aliases
new file mode 100644
index 0000000000..cf95932d32
--- /dev/null
+++ b/etc/aliases
@@ -0,0 +1,3 @@
+# See man 5 aliases for format
+postmaster: root
+monit: root
diff --git a/etc/aliases.db b/etc/aliases.db
new file mode 100644
index 0000000000..98dfe7c8af
Binary files /dev/null and b/etc/aliases.db differ
diff --git a/etc/alternatives/README b/etc/alternatives/README
new file mode 100644
index 0000000000..4c4d21567b
--- /dev/null
+++ b/etc/alternatives/README
@@ -0,0 +1,2 @@
+Please read the update-alternatives(1) man page for information on this
+directory and its contents.
diff --git a/etc/alternatives/arptables b/etc/alternatives/arptables
new file mode 120000
index 0000000000..f8fcc7ba48
--- /dev/null
+++ b/etc/alternatives/arptables
@@ -0,0 +1 @@
+/usr/sbin/arptables-nft
\ No newline at end of file
diff --git a/etc/alternatives/arptables-restore b/etc/alternatives/arptables-restore
new file mode 120000
index 0000000000..95e87dc88b
--- /dev/null
+++ b/etc/alternatives/arptables-restore
@@ -0,0 +1 @@
+/usr/sbin/arptables-nft-restore
\ No newline at end of file
diff --git a/etc/alternatives/arptables-save b/etc/alternatives/arptables-save
new file mode 120000
index 0000000000..9bb159605b
--- /dev/null
+++ b/etc/alternatives/arptables-save
@@ -0,0 +1 @@
+/usr/sbin/arptables-nft-save
\ No newline at end of file
diff --git a/etc/alternatives/awk b/etc/alternatives/awk
new file mode 120000
index 0000000000..19ba657e84
--- /dev/null
+++ b/etc/alternatives/awk
@@ -0,0 +1 @@
+/usr/bin/gawk
\ No newline at end of file
diff --git a/etc/alternatives/awk.1.gz b/etc/alternatives/awk.1.gz
new file mode 120000
index 0000000000..134262bcb5
--- /dev/null
+++ b/etc/alternatives/awk.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/gawk.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/builtins.7.gz b/etc/alternatives/builtins.7.gz
new file mode 120000
index 0000000000..96d1b740b5
--- /dev/null
+++ b/etc/alternatives/builtins.7.gz
@@ -0,0 +1 @@
+/usr/share/man/man7/bash-builtins.7.gz
\ No newline at end of file
diff --git a/etc/alternatives/ebtables b/etc/alternatives/ebtables
new file mode 120000
index 0000000000..8d5f660c70
--- /dev/null
+++ b/etc/alternatives/ebtables
@@ -0,0 +1 @@
+/usr/sbin/ebtables-nft
\ No newline at end of file
diff --git a/etc/alternatives/ebtables-restore b/etc/alternatives/ebtables-restore
new file mode 120000
index 0000000000..c2e5813be4
--- /dev/null
+++ b/etc/alternatives/ebtables-restore
@@ -0,0 +1 @@
+/usr/sbin/ebtables-nft-restore
\ No newline at end of file
diff --git a/etc/alternatives/ebtables-save b/etc/alternatives/ebtables-save
new file mode 120000
index 0000000000..600f8c2dce
--- /dev/null
+++ b/etc/alternatives/ebtables-save
@@ -0,0 +1 @@
+/usr/sbin/ebtables-nft-save
\ No newline at end of file
diff --git a/etc/alternatives/editor b/etc/alternatives/editor
new file mode 120000
index 0000000000..7a06612bbb
--- /dev/null
+++ b/etc/alternatives/editor
@@ -0,0 +1 @@
+/bin/nano
\ No newline at end of file
diff --git a/etc/alternatives/editor.1.gz b/etc/alternatives/editor.1.gz
new file mode 120000
index 0000000000..bb2d082cdd
--- /dev/null
+++ b/etc/alternatives/editor.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/nano.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex b/etc/alternatives/ex
new file mode 120000
index 0000000000..1d112dac81
--- /dev/null
+++ b/etc/alternatives/ex
@@ -0,0 +1 @@
+/usr/bin/vim.basic
\ No newline at end of file
diff --git a/etc/alternatives/ex.1.gz b/etc/alternatives/ex.1.gz
new file mode 120000
index 0000000000..e02a6af169
--- /dev/null
+++ b/etc/alternatives/ex.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex.da.1.gz b/etc/alternatives/ex.da.1.gz
new file mode 120000
index 0000000000..c90068faaa
--- /dev/null
+++ b/etc/alternatives/ex.da.1.gz
@@ -0,0 +1 @@
+/usr/share/man/da/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex.de.1.gz b/etc/alternatives/ex.de.1.gz
new file mode 120000
index 0000000000..d89833a71f
--- /dev/null
+++ b/etc/alternatives/ex.de.1.gz
@@ -0,0 +1 @@
+/usr/share/man/de/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex.fr.1.gz b/etc/alternatives/ex.fr.1.gz
new file mode 120000
index 0000000000..af52858f2a
--- /dev/null
+++ b/etc/alternatives/ex.fr.1.gz
@@ -0,0 +1 @@
+/usr/share/man/fr/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex.it.1.gz b/etc/alternatives/ex.it.1.gz
new file mode 120000
index 0000000000..4498a3d4a5
--- /dev/null
+++ b/etc/alternatives/ex.it.1.gz
@@ -0,0 +1 @@
+/usr/share/man/it/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex.ja.1.gz b/etc/alternatives/ex.ja.1.gz
new file mode 120000
index 0000000000..071acfbb2a
--- /dev/null
+++ b/etc/alternatives/ex.ja.1.gz
@@ -0,0 +1 @@
+/usr/share/man/ja/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex.pl.1.gz b/etc/alternatives/ex.pl.1.gz
new file mode 120000
index 0000000000..345590a8db
--- /dev/null
+++ b/etc/alternatives/ex.pl.1.gz
@@ -0,0 +1 @@
+/usr/share/man/pl/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex.ru.1.gz b/etc/alternatives/ex.ru.1.gz
new file mode 120000
index 0000000000..ea9aa16706
--- /dev/null
+++ b/etc/alternatives/ex.ru.1.gz
@@ -0,0 +1 @@
+/usr/share/man/ru/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ex.tr.1.gz b/etc/alternatives/ex.tr.1.gz
new file mode 120000
index 0000000000..56ef6655d8
--- /dev/null
+++ b/etc/alternatives/ex.tr.1.gz
@@ -0,0 +1 @@
+/usr/share/man/tr/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ftp b/etc/alternatives/ftp
new file mode 120000
index 0000000000..a54464ab13
--- /dev/null
+++ b/etc/alternatives/ftp
@@ -0,0 +1 @@
+/usr/bin/tnftp
\ No newline at end of file
diff --git a/etc/alternatives/ftp.1.gz b/etc/alternatives/ftp.1.gz
new file mode 120000
index 0000000000..46ba023544
--- /dev/null
+++ b/etc/alternatives/ftp.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/tnftp.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/infobrowser b/etc/alternatives/infobrowser
new file mode 120000
index 0000000000..2404fe4baa
--- /dev/null
+++ b/etc/alternatives/infobrowser
@@ -0,0 +1 @@
+/usr/bin/info
\ No newline at end of file
diff --git a/etc/alternatives/infobrowser.1.gz b/etc/alternatives/infobrowser.1.gz
new file mode 120000
index 0000000000..7152786e84
--- /dev/null
+++ b/etc/alternatives/infobrowser.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/info.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/ip6tables b/etc/alternatives/ip6tables
new file mode 120000
index 0000000000..4c913e2db4
--- /dev/null
+++ b/etc/alternatives/ip6tables
@@ -0,0 +1 @@
+/usr/sbin/ip6tables-nft
\ No newline at end of file
diff --git a/etc/alternatives/ip6tables-restore b/etc/alternatives/ip6tables-restore
new file mode 120000
index 0000000000..46918a9c5b
--- /dev/null
+++ b/etc/alternatives/ip6tables-restore
@@ -0,0 +1 @@
+/usr/sbin/ip6tables-nft-restore
\ No newline at end of file
diff --git a/etc/alternatives/ip6tables-save b/etc/alternatives/ip6tables-save
new file mode 120000
index 0000000000..04525f055f
--- /dev/null
+++ b/etc/alternatives/ip6tables-save
@@ -0,0 +1 @@
+/usr/sbin/ip6tables-nft-save
\ No newline at end of file
diff --git a/etc/alternatives/iptables b/etc/alternatives/iptables
new file mode 120000
index 0000000000..c55fd508e7
--- /dev/null
+++ b/etc/alternatives/iptables
@@ -0,0 +1 @@
+/usr/sbin/iptables-nft
\ No newline at end of file
diff --git a/etc/alternatives/iptables-restore b/etc/alternatives/iptables-restore
new file mode 120000
index 0000000000..9553657e1e
--- /dev/null
+++ b/etc/alternatives/iptables-restore
@@ -0,0 +1 @@
+/usr/sbin/iptables-nft-restore
\ No newline at end of file
diff --git a/etc/alternatives/iptables-save b/etc/alternatives/iptables-save
new file mode 120000
index 0000000000..051d68bd2e
--- /dev/null
+++ b/etc/alternatives/iptables-save
@@ -0,0 +1 @@
+/usr/sbin/iptables-nft-save
\ No newline at end of file
diff --git a/etc/alternatives/jsondiff b/etc/alternatives/jsondiff
new file mode 120000
index 0000000000..0ecae1af12
--- /dev/null
+++ b/etc/alternatives/jsondiff
@@ -0,0 +1 @@
+/usr/bin/json-patch-jsondiff
\ No newline at end of file
diff --git a/etc/alternatives/lzcat b/etc/alternatives/lzcat
new file mode 120000
index 0000000000..1482e0d391
--- /dev/null
+++ b/etc/alternatives/lzcat
@@ -0,0 +1 @@
+/usr/bin/xzcat
\ No newline at end of file
diff --git a/etc/alternatives/lzcat.1.gz b/etc/alternatives/lzcat.1.gz
new file mode 120000
index 0000000000..c078545163
--- /dev/null
+++ b/etc/alternatives/lzcat.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xzcat.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/lzcmp b/etc/alternatives/lzcmp
new file mode 120000
index 0000000000..5cdef99519
--- /dev/null
+++ b/etc/alternatives/lzcmp
@@ -0,0 +1 @@
+/usr/bin/xzcmp
\ No newline at end of file
diff --git a/etc/alternatives/lzcmp.1.gz b/etc/alternatives/lzcmp.1.gz
new file mode 120000
index 0000000000..f0bafbe631
--- /dev/null
+++ b/etc/alternatives/lzcmp.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xzcmp.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/lzdiff b/etc/alternatives/lzdiff
new file mode 120000
index 0000000000..0e429214b8
--- /dev/null
+++ b/etc/alternatives/lzdiff
@@ -0,0 +1 @@
+/usr/bin/xzdiff
\ No newline at end of file
diff --git a/etc/alternatives/lzdiff.1.gz b/etc/alternatives/lzdiff.1.gz
new file mode 120000
index 0000000000..5687b0a087
--- /dev/null
+++ b/etc/alternatives/lzdiff.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xzdiff.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/lzegrep b/etc/alternatives/lzegrep
new file mode 120000
index 0000000000..5fee02498b
--- /dev/null
+++ b/etc/alternatives/lzegrep
@@ -0,0 +1 @@
+/usr/bin/xzegrep
\ No newline at end of file
diff --git a/etc/alternatives/lzegrep.1.gz b/etc/alternatives/lzegrep.1.gz
new file mode 120000
index 0000000000..c9ad6de9ba
--- /dev/null
+++ b/etc/alternatives/lzegrep.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xzegrep.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/lzfgrep b/etc/alternatives/lzfgrep
new file mode 120000
index 0000000000..1b64c1bc74
--- /dev/null
+++ b/etc/alternatives/lzfgrep
@@ -0,0 +1 @@
+/usr/bin/xzfgrep
\ No newline at end of file
diff --git a/etc/alternatives/lzfgrep.1.gz b/etc/alternatives/lzfgrep.1.gz
new file mode 120000
index 0000000000..b292ba91fb
--- /dev/null
+++ b/etc/alternatives/lzfgrep.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xzfgrep.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/lzgrep b/etc/alternatives/lzgrep
new file mode 120000
index 0000000000..05ef59bb4d
--- /dev/null
+++ b/etc/alternatives/lzgrep
@@ -0,0 +1 @@
+/usr/bin/xzgrep
\ No newline at end of file
diff --git a/etc/alternatives/lzgrep.1.gz b/etc/alternatives/lzgrep.1.gz
new file mode 120000
index 0000000000..8ccd2c57be
--- /dev/null
+++ b/etc/alternatives/lzgrep.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xzgrep.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/lzless b/etc/alternatives/lzless
new file mode 120000
index 0000000000..54157364c1
--- /dev/null
+++ b/etc/alternatives/lzless
@@ -0,0 +1 @@
+/usr/bin/xzless
\ No newline at end of file
diff --git a/etc/alternatives/lzless.1.gz b/etc/alternatives/lzless.1.gz
new file mode 120000
index 0000000000..bc81750de6
--- /dev/null
+++ b/etc/alternatives/lzless.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xzless.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/lzma b/etc/alternatives/lzma
new file mode 120000
index 0000000000..cdc9bb5f4c
--- /dev/null
+++ b/etc/alternatives/lzma
@@ -0,0 +1 @@
+/usr/bin/xz
\ No newline at end of file
diff --git a/etc/alternatives/lzma.1.gz b/etc/alternatives/lzma.1.gz
new file mode 120000
index 0000000000..16e4bccfcd
--- /dev/null
+++ b/etc/alternatives/lzma.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xz.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/lzmore b/etc/alternatives/lzmore
new file mode 120000
index 0000000000..1fad3616ad
--- /dev/null
+++ b/etc/alternatives/lzmore
@@ -0,0 +1 @@
+/usr/bin/xzmore
\ No newline at end of file
diff --git a/etc/alternatives/lzmore.1.gz b/etc/alternatives/lzmore.1.gz
new file mode 120000
index 0000000000..e79dfa46f5
--- /dev/null
+++ b/etc/alternatives/lzmore.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/xzmore.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/mt b/etc/alternatives/mt
new file mode 120000
index 0000000000..7fe341a793
--- /dev/null
+++ b/etc/alternatives/mt
@@ -0,0 +1 @@
+/usr/bin/mt-gnu
\ No newline at end of file
diff --git a/etc/alternatives/mt.1.gz b/etc/alternatives/mt.1.gz
new file mode 120000
index 0000000000..cac0e1825c
--- /dev/null
+++ b/etc/alternatives/mt.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/mt-gnu.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/my.cnf b/etc/alternatives/my.cnf
new file mode 120000
index 0000000000..c0fe3dd777
--- /dev/null
+++ b/etc/alternatives/my.cnf
@@ -0,0 +1 @@
+/etc/mysql/mariadb.cnf
\ No newline at end of file
diff --git a/etc/alternatives/nawk b/etc/alternatives/nawk
new file mode 120000
index 0000000000..19ba657e84
--- /dev/null
+++ b/etc/alternatives/nawk
@@ -0,0 +1 @@
+/usr/bin/gawk
\ No newline at end of file
diff --git a/etc/alternatives/nawk.1.gz b/etc/alternatives/nawk.1.gz
new file mode 120000
index 0000000000..134262bcb5
--- /dev/null
+++ b/etc/alternatives/nawk.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/gawk.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/nc b/etc/alternatives/nc
new file mode 120000
index 0000000000..42844ed56d
--- /dev/null
+++ b/etc/alternatives/nc
@@ -0,0 +1 @@
+/bin/nc.openbsd
\ No newline at end of file
diff --git a/etc/alternatives/nc.1.gz b/etc/alternatives/nc.1.gz
new file mode 120000
index 0000000000..e288d80ecc
--- /dev/null
+++ b/etc/alternatives/nc.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/nc_openbsd.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/netcat b/etc/alternatives/netcat
new file mode 120000
index 0000000000..42844ed56d
--- /dev/null
+++ b/etc/alternatives/netcat
@@ -0,0 +1 @@
+/bin/nc.openbsd
\ No newline at end of file
diff --git a/etc/alternatives/netcat.1.gz b/etc/alternatives/netcat.1.gz
new file mode 120000
index 0000000000..e288d80ecc
--- /dev/null
+++ b/etc/alternatives/netcat.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/nc_openbsd.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/newt-palette b/etc/alternatives/newt-palette
new file mode 120000
index 0000000000..952208f781
--- /dev/null
+++ b/etc/alternatives/newt-palette
@@ -0,0 +1 @@
+/etc/newt/palette.ubuntu
\ No newline at end of file
diff --git a/etc/alternatives/pager b/etc/alternatives/pager
new file mode 120000
index 0000000000..a967155b77
--- /dev/null
+++ b/etc/alternatives/pager
@@ -0,0 +1 @@
+/usr/bin/less
\ No newline at end of file
diff --git a/etc/alternatives/pager.1.gz b/etc/alternatives/pager.1.gz
new file mode 120000
index 0000000000..c1430af187
--- /dev/null
+++ b/etc/alternatives/pager.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/less.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/phar b/etc/alternatives/phar
new file mode 120000
index 0000000000..4a3b3d2341
--- /dev/null
+++ b/etc/alternatives/phar
@@ -0,0 +1 @@
+/usr/bin/phar8.3
\ No newline at end of file
diff --git a/etc/alternatives/phar.1.gz b/etc/alternatives/phar.1.gz
new file mode 120000
index 0000000000..4b12008c90
--- /dev/null
+++ b/etc/alternatives/phar.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/phar8.3.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/phar.phar b/etc/alternatives/phar.phar
new file mode 120000
index 0000000000..bc5c997f45
--- /dev/null
+++ b/etc/alternatives/phar.phar
@@ -0,0 +1 @@
+/usr/bin/phar.phar8.3
\ No newline at end of file
diff --git a/etc/alternatives/phar.phar.1.gz b/etc/alternatives/phar.phar.1.gz
new file mode 120000
index 0000000000..222e1a578b
--- /dev/null
+++ b/etc/alternatives/phar.phar.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/phar.phar8.3.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/php b/etc/alternatives/php
new file mode 120000
index 0000000000..8e9118a285
--- /dev/null
+++ b/etc/alternatives/php
@@ -0,0 +1 @@
+/usr/bin/php8.3
\ No newline at end of file
diff --git a/etc/alternatives/php-cgi b/etc/alternatives/php-cgi
new file mode 120000
index 0000000000..818aae001b
--- /dev/null
+++ b/etc/alternatives/php-cgi
@@ -0,0 +1 @@
+/usr/bin/php-cgi.default
\ No newline at end of file
diff --git a/etc/alternatives/php-cgi-bin b/etc/alternatives/php-cgi-bin
new file mode 120000
index 0000000000..d8bf9d66ef
--- /dev/null
+++ b/etc/alternatives/php-cgi-bin
@@ -0,0 +1 @@
+/usr/lib/cgi-bin/php.default
\ No newline at end of file
diff --git a/etc/alternatives/php-cgi.1.gz b/etc/alternatives/php-cgi.1.gz
new file mode 120000
index 0000000000..9156e9522d
--- /dev/null
+++ b/etc/alternatives/php-cgi.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/php-cgi.default.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/php-fpm.sock b/etc/alternatives/php-fpm.sock
new file mode 120000
index 0000000000..129cf9c18e
--- /dev/null
+++ b/etc/alternatives/php-fpm.sock
@@ -0,0 +1 @@
+/run/php/php8.3-fpm.sock
\ No newline at end of file
diff --git a/etc/alternatives/php.1.gz b/etc/alternatives/php.1.gz
new file mode 120000
index 0000000000..270606907d
--- /dev/null
+++ b/etc/alternatives/php.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/php8.3.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/pico b/etc/alternatives/pico
new file mode 120000
index 0000000000..7a06612bbb
--- /dev/null
+++ b/etc/alternatives/pico
@@ -0,0 +1 @@
+/bin/nano
\ No newline at end of file
diff --git a/etc/alternatives/pico.1.gz b/etc/alternatives/pico.1.gz
new file mode 120000
index 0000000000..bb2d082cdd
--- /dev/null
+++ b/etc/alternatives/pico.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/nano.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/pinentry b/etc/alternatives/pinentry
new file mode 120000
index 0000000000..01990a3fcb
--- /dev/null
+++ b/etc/alternatives/pinentry
@@ -0,0 +1 @@
+/usr/bin/pinentry-curses
\ No newline at end of file
diff --git a/etc/alternatives/pinentry.1.gz b/etc/alternatives/pinentry.1.gz
new file mode 120000
index 0000000000..8e9ab4f238
--- /dev/null
+++ b/etc/alternatives/pinentry.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/pinentry-curses.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/pybabel b/etc/alternatives/pybabel
new file mode 120000
index 0000000000..269ae50237
--- /dev/null
+++ b/etc/alternatives/pybabel
@@ -0,0 +1 @@
+/usr/bin/pybabel-python3
\ No newline at end of file
diff --git a/etc/alternatives/rmt b/etc/alternatives/rmt
new file mode 120000
index 0000000000..82958a9acf
--- /dev/null
+++ b/etc/alternatives/rmt
@@ -0,0 +1 @@
+/usr/sbin/rmt-tar
\ No newline at end of file
diff --git a/etc/alternatives/rmt.8.gz b/etc/alternatives/rmt.8.gz
new file mode 120000
index 0000000000..8c87e219e2
--- /dev/null
+++ b/etc/alternatives/rmt.8.gz
@@ -0,0 +1 @@
+/usr/share/man/man8/rmt-tar.8.gz
\ No newline at end of file
diff --git a/etc/alternatives/rview b/etc/alternatives/rview
new file mode 120000
index 0000000000..1d112dac81
--- /dev/null
+++ b/etc/alternatives/rview
@@ -0,0 +1 @@
+/usr/bin/vim.basic
\ No newline at end of file
diff --git a/etc/alternatives/rvim b/etc/alternatives/rvim
new file mode 120000
index 0000000000..1d112dac81
--- /dev/null
+++ b/etc/alternatives/rvim
@@ -0,0 +1 @@
+/usr/bin/vim.basic
\ No newline at end of file
diff --git a/etc/alternatives/sar b/etc/alternatives/sar
new file mode 120000
index 0000000000..54986415a4
--- /dev/null
+++ b/etc/alternatives/sar
@@ -0,0 +1 @@
+/usr/bin/sar.sysstat
\ No newline at end of file
diff --git a/etc/alternatives/sar.1.gz b/etc/alternatives/sar.1.gz
new file mode 120000
index 0000000000..06a4f21b95
--- /dev/null
+++ b/etc/alternatives/sar.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/sar.sysstat.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/shimx64.efi.signed b/etc/alternatives/shimx64.efi.signed
new file mode 120000
index 0000000000..553d3bb4e6
--- /dev/null
+++ b/etc/alternatives/shimx64.efi.signed
@@ -0,0 +1 @@
+/usr/lib/shim/shimx64.efi.signed.latest
\ No newline at end of file
diff --git a/etc/alternatives/suexec b/etc/alternatives/suexec
new file mode 120000
index 0000000000..69ac450f8f
--- /dev/null
+++ b/etc/alternatives/suexec
@@ -0,0 +1 @@
+/usr/lib/plesk-9.0/suexec/psa-suexec
\ No newline at end of file
diff --git a/etc/alternatives/suexec.8.gz b/etc/alternatives/suexec.8.gz
new file mode 120000
index 0000000000..bb272f1822
--- /dev/null
+++ b/etc/alternatives/suexec.8.gz
@@ -0,0 +1 @@
+/usr/share/man/man8/psa-suexec.8.gz
\ No newline at end of file
diff --git a/etc/alternatives/telnet b/etc/alternatives/telnet
new file mode 120000
index 0000000000..a8a28382ca
--- /dev/null
+++ b/etc/alternatives/telnet
@@ -0,0 +1 @@
+/usr/bin/inetutils-telnet
\ No newline at end of file
diff --git a/etc/alternatives/telnet.1.gz b/etc/alternatives/telnet.1.gz
new file mode 120000
index 0000000000..e4e259dbaf
--- /dev/null
+++ b/etc/alternatives/telnet.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/inetutils-telnet.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/text.plymouth b/etc/alternatives/text.plymouth
new file mode 120000
index 0000000000..74f8b905b4
--- /dev/null
+++ b/etc/alternatives/text.plymouth
@@ -0,0 +1 @@
+/usr/share/plymouth/themes/ubuntu-text/ubuntu-text.plymouth
\ No newline at end of file
diff --git a/etc/alternatives/unlzma b/etc/alternatives/unlzma
new file mode 120000
index 0000000000..c730a4a229
--- /dev/null
+++ b/etc/alternatives/unlzma
@@ -0,0 +1 @@
+/usr/bin/unxz
\ No newline at end of file
diff --git a/etc/alternatives/unlzma.1.gz b/etc/alternatives/unlzma.1.gz
new file mode 120000
index 0000000000..c772f41c78
--- /dev/null
+++ b/etc/alternatives/unlzma.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/unxz.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi b/etc/alternatives/vi
new file mode 120000
index 0000000000..1d112dac81
--- /dev/null
+++ b/etc/alternatives/vi
@@ -0,0 +1 @@
+/usr/bin/vim.basic
\ No newline at end of file
diff --git a/etc/alternatives/vi.1.gz b/etc/alternatives/vi.1.gz
new file mode 120000
index 0000000000..e02a6af169
--- /dev/null
+++ b/etc/alternatives/vi.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi.da.1.gz b/etc/alternatives/vi.da.1.gz
new file mode 120000
index 0000000000..c90068faaa
--- /dev/null
+++ b/etc/alternatives/vi.da.1.gz
@@ -0,0 +1 @@
+/usr/share/man/da/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi.de.1.gz b/etc/alternatives/vi.de.1.gz
new file mode 120000
index 0000000000..d89833a71f
--- /dev/null
+++ b/etc/alternatives/vi.de.1.gz
@@ -0,0 +1 @@
+/usr/share/man/de/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi.fr.1.gz b/etc/alternatives/vi.fr.1.gz
new file mode 120000
index 0000000000..af52858f2a
--- /dev/null
+++ b/etc/alternatives/vi.fr.1.gz
@@ -0,0 +1 @@
+/usr/share/man/fr/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi.it.1.gz b/etc/alternatives/vi.it.1.gz
new file mode 120000
index 0000000000..4498a3d4a5
--- /dev/null
+++ b/etc/alternatives/vi.it.1.gz
@@ -0,0 +1 @@
+/usr/share/man/it/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi.ja.1.gz b/etc/alternatives/vi.ja.1.gz
new file mode 120000
index 0000000000..071acfbb2a
--- /dev/null
+++ b/etc/alternatives/vi.ja.1.gz
@@ -0,0 +1 @@
+/usr/share/man/ja/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi.pl.1.gz b/etc/alternatives/vi.pl.1.gz
new file mode 120000
index 0000000000..345590a8db
--- /dev/null
+++ b/etc/alternatives/vi.pl.1.gz
@@ -0,0 +1 @@
+/usr/share/man/pl/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi.ru.1.gz b/etc/alternatives/vi.ru.1.gz
new file mode 120000
index 0000000000..ea9aa16706
--- /dev/null
+++ b/etc/alternatives/vi.ru.1.gz
@@ -0,0 +1 @@
+/usr/share/man/ru/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vi.tr.1.gz b/etc/alternatives/vi.tr.1.gz
new file mode 120000
index 0000000000..56ef6655d8
--- /dev/null
+++ b/etc/alternatives/vi.tr.1.gz
@@ -0,0 +1 @@
+/usr/share/man/tr/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view b/etc/alternatives/view
new file mode 120000
index 0000000000..1d112dac81
--- /dev/null
+++ b/etc/alternatives/view
@@ -0,0 +1 @@
+/usr/bin/vim.basic
\ No newline at end of file
diff --git a/etc/alternatives/view.1.gz b/etc/alternatives/view.1.gz
new file mode 120000
index 0000000000..e02a6af169
--- /dev/null
+++ b/etc/alternatives/view.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view.da.1.gz b/etc/alternatives/view.da.1.gz
new file mode 120000
index 0000000000..c90068faaa
--- /dev/null
+++ b/etc/alternatives/view.da.1.gz
@@ -0,0 +1 @@
+/usr/share/man/da/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view.de.1.gz b/etc/alternatives/view.de.1.gz
new file mode 120000
index 0000000000..d89833a71f
--- /dev/null
+++ b/etc/alternatives/view.de.1.gz
@@ -0,0 +1 @@
+/usr/share/man/de/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view.fr.1.gz b/etc/alternatives/view.fr.1.gz
new file mode 120000
index 0000000000..af52858f2a
--- /dev/null
+++ b/etc/alternatives/view.fr.1.gz
@@ -0,0 +1 @@
+/usr/share/man/fr/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view.it.1.gz b/etc/alternatives/view.it.1.gz
new file mode 120000
index 0000000000..4498a3d4a5
--- /dev/null
+++ b/etc/alternatives/view.it.1.gz
@@ -0,0 +1 @@
+/usr/share/man/it/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view.ja.1.gz b/etc/alternatives/view.ja.1.gz
new file mode 120000
index 0000000000..071acfbb2a
--- /dev/null
+++ b/etc/alternatives/view.ja.1.gz
@@ -0,0 +1 @@
+/usr/share/man/ja/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view.pl.1.gz b/etc/alternatives/view.pl.1.gz
new file mode 120000
index 0000000000..345590a8db
--- /dev/null
+++ b/etc/alternatives/view.pl.1.gz
@@ -0,0 +1 @@
+/usr/share/man/pl/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view.ru.1.gz b/etc/alternatives/view.ru.1.gz
new file mode 120000
index 0000000000..ea9aa16706
--- /dev/null
+++ b/etc/alternatives/view.ru.1.gz
@@ -0,0 +1 @@
+/usr/share/man/ru/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/view.tr.1.gz b/etc/alternatives/view.tr.1.gz
new file mode 120000
index 0000000000..56ef6655d8
--- /dev/null
+++ b/etc/alternatives/view.tr.1.gz
@@ -0,0 +1 @@
+/usr/share/man/tr/man1/vim.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/vim b/etc/alternatives/vim
new file mode 120000
index 0000000000..1d112dac81
--- /dev/null
+++ b/etc/alternatives/vim
@@ -0,0 +1 @@
+/usr/bin/vim.basic
\ No newline at end of file
diff --git a/etc/alternatives/vimdiff b/etc/alternatives/vimdiff
new file mode 120000
index 0000000000..1d112dac81
--- /dev/null
+++ b/etc/alternatives/vimdiff
@@ -0,0 +1 @@
+/usr/bin/vim.basic
\ No newline at end of file
diff --git a/etc/alternatives/vtrgb b/etc/alternatives/vtrgb
new file mode 120000
index 0000000000..c1ccb64a0c
--- /dev/null
+++ b/etc/alternatives/vtrgb
@@ -0,0 +1 @@
+/etc/console-setup/vtrgb
\ No newline at end of file
diff --git a/etc/alternatives/which b/etc/alternatives/which
new file mode 120000
index 0000000000..c9eb80928c
--- /dev/null
+++ b/etc/alternatives/which
@@ -0,0 +1 @@
+/usr/bin/which.debianutils
\ No newline at end of file
diff --git a/etc/alternatives/which.1.gz b/etc/alternatives/which.1.gz
new file mode 120000
index 0000000000..e5966c9ae9
--- /dev/null
+++ b/etc/alternatives/which.1.gz
@@ -0,0 +1 @@
+/usr/share/man/man1/which.debianutils.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/which.de1.gz b/etc/alternatives/which.de1.gz
new file mode 120000
index 0000000000..62b7dbba3c
--- /dev/null
+++ b/etc/alternatives/which.de1.gz
@@ -0,0 +1 @@
+/usr/share/man/de/man1/which.debianutils.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/which.es1.gz b/etc/alternatives/which.es1.gz
new file mode 120000
index 0000000000..1dc20a3e48
--- /dev/null
+++ b/etc/alternatives/which.es1.gz
@@ -0,0 +1 @@
+/usr/share/man/es/man1/which.debianutils.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/which.fr1.gz b/etc/alternatives/which.fr1.gz
new file mode 120000
index 0000000000..f337bdc4cc
--- /dev/null
+++ b/etc/alternatives/which.fr1.gz
@@ -0,0 +1 @@
+/usr/share/man/fr/man1/which.debianutils.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/which.it1.gz b/etc/alternatives/which.it1.gz
new file mode 120000
index 0000000000..60fff8674e
--- /dev/null
+++ b/etc/alternatives/which.it1.gz
@@ -0,0 +1 @@
+/usr/share/man/it/man1/which.debianutils.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/which.ja1.gz b/etc/alternatives/which.ja1.gz
new file mode 120000
index 0000000000..b68b19684c
--- /dev/null
+++ b/etc/alternatives/which.ja1.gz
@@ -0,0 +1 @@
+/usr/share/man/ja/man1/which.debianutils.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/which.pl1.gz b/etc/alternatives/which.pl1.gz
new file mode 120000
index 0000000000..015af28c7e
--- /dev/null
+++ b/etc/alternatives/which.pl1.gz
@@ -0,0 +1 @@
+/usr/share/man/pl/man1/which.debianutils.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/which.sl1.gz b/etc/alternatives/which.sl1.gz
new file mode 120000
index 0000000000..0586272ee5
--- /dev/null
+++ b/etc/alternatives/which.sl1.gz
@@ -0,0 +1 @@
+/usr/share/man/sl/man1/which.debianutils.1.gz
\ No newline at end of file
diff --git a/etc/alternatives/x-cursor-theme b/etc/alternatives/x-cursor-theme
new file mode 120000
index 0000000000..131c25588e
--- /dev/null
+++ b/etc/alternatives/x-cursor-theme
@@ -0,0 +1 @@
+/usr/share/icons/Adwaita/cursor.theme
\ No newline at end of file
diff --git a/etc/apache2/apache2.conf b/etc/apache2/apache2.conf
new file mode 100644
index 0000000000..9f3d405e16
--- /dev/null
+++ b/etc/apache2/apache2.conf
@@ -0,0 +1,230 @@
+# This is the main Apache server configuration file. It contains the
+# configuration directives that give the server its instructions.
+# See http://httpd.apache.org/docs/2.4/ for detailed information about
+# the directives and /usr/share/doc/apache2/README.Debian about Debian specific
+# hints.
+#
+#
+# Summary of how the Apache 2 configuration works in Debian:
+# The Apache 2 web server configuration in Debian is quite different to
+# upstream's suggested way to configure the web server. This is because Debian's
+# default Apache2 installation attempts to make adding and removing modules,
+# virtual hosts, and extra configuration directives as flexible as possible, in
+# order to make automating the changes and administering the server as easy as
+# possible.
+
+# It is split into several files forming the configuration hierarchy outlined
+# below, all located in the /etc/apache2/ directory:
+#
+# /etc/apache2/
+# |-- apache2.conf
+# | `-- ports.conf
+# |-- mods-enabled
+# | |-- *.load
+# | `-- *.conf
+# |-- conf-enabled
+# | `-- *.conf
+# `-- sites-enabled
+# `-- *.conf
+#
+#
+# * apache2.conf is the main configuration file (this file). It puts the pieces
+# together by including all remaining configuration files when starting up the
+# web server.
+#
+# * ports.conf is always included from the main configuration file. It is
+# supposed to determine listening ports for incoming connections which can be
+# customized anytime.
+#
+# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/
+# directories contain particular configuration snippets which manage modules,
+# global configuration fragments, or virtual host configurations,
+# respectively.
+#
+# They are activated by symlinking available configuration files from their
+# respective *-available/ counterparts. These should be managed by using our
+# helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See
+# their respective man pages for detailed information.
+#
+# * The binary is called apache2. Due to the use of environment variables, in
+# the default configuration, apache2 needs to be started/stopped with
+# /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not
+# work with the default configuration.
+
+
+# Global configuration
+#
+
+#
+# ServerRoot: The top of the directory tree under which the server's
+# configuration, error, and log files are kept.
+#
+# NOTE! If you intend to place this on an NFS (or otherwise network)
+# mounted filesystem then please read the Mutex documentation (available
+# at );
+# you will save yourself a lot of trouble.
+#
+# Do NOT add a slash at the end of the directory path.
+#
+#ServerRoot "/etc/apache2"
+
+#
+# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
+#
+#Mutex file:${APACHE_LOCK_DIR} default
+
+#
+# The directory where shm and other runtime files will be stored.
+#
+
+DefaultRuntimeDir ${APACHE_RUN_DIR}
+
+#
+# PidFile: The file in which the server should record its process
+# identification number when it starts.
+# This needs to be set in /etc/apache2/envvars
+#
+PidFile ${APACHE_PID_FILE}
+
+#
+# Timeout: The number of seconds before receives and sends time out.
+#
+Timeout 300
+
+#
+# KeepAlive: Whether or not to allow persistent connections (more than
+# one request per connection). Set to "Off" to deactivate.
+#
+KeepAlive On
+
+#
+# MaxKeepAliveRequests: The maximum number of requests to allow
+# during a persistent connection. Set to 0 to allow an unlimited amount.
+# We recommend you leave this number high, for maximum performance.
+#
+MaxKeepAliveRequests 100
+
+#
+# KeepAliveTimeout: Number of seconds to wait for the next request from the
+# same client on the same connection.
+#
+KeepAliveTimeout 5
+
+
+# These need to be set in /etc/apache2/envvars
+User ${APACHE_RUN_USER}
+Group ${APACHE_RUN_GROUP}
+
+#
+# HostnameLookups: Log the names of clients or just their IP addresses
+# e.g., www.apache.org (on) or 204.62.129.132 (off).
+# The default is off because it'd be overall better for the net if people
+# had to knowingly turn this feature on, since enabling it means that
+# each client request will result in AT LEAST one lookup request to the
+# nameserver.
+#
+HostnameLookups Off
+
+# ErrorLog: The location of the error log file.
+# If you do not specify an ErrorLog directive within a
+# container, error messages relating to that virtual host will be
+# logged here. If you *do* define an error logfile for a
+# container, that host's errors will be logged there and not here.
+#
+ErrorLog ${APACHE_LOG_DIR}/error.log
+
+#
+# LogLevel: Control the severity of messages logged to the error_log.
+# Available values: trace8, ..., trace1, debug, info, notice, warn,
+# error, crit, alert, emerg.
+# It is also possible to configure the log level for particular modules, e.g.
+# "LogLevel info ssl:warn"
+#
+LogLevel warn
+
+# Include module configuration:
+IncludeOptional mods-enabled/*.load
+IncludeOptional mods-enabled/*.conf
+
+# Include list of ports to listen on
+Include ports.conf
+
+
+# Sets the default security model of the Apache2 HTTPD server. It does
+# not allow access to the root filesystem outside of /usr/share and /var/www.
+# The former is used by web applications packaged in Debian,
+# the latter may be used for local directories served by the web server. If
+# your system is serving content from a sub-directory in /srv you must allow
+# access here, or in any related virtual host.
+
+ Options FollowSymLinks
+ AllowOverride None
+ Require all denied
+
+
+
+ AllowOverride None
+ Require all granted
+
+
+
+ Options Indexes FollowSymLinks
+ AllowOverride None
+ Require all granted
+
+
+#
+# Options Indexes FollowSymLinks
+# AllowOverride None
+# Require all granted
+#
+
+
+
+
+# AccessFileName: The name of the file to look for in each directory
+# for additional configuration directives. See also the AllowOverride
+# directive.
+#
+AccessFileName .htaccess
+
+#
+# The following lines prevent .htaccess and .htpasswd files from being
+# viewed by Web clients.
+#
+
+ Require all denied
+
+
+
+#
+# The following directives define some format nicknames for use with
+# a CustomLog directive.
+#
+# These deviate from the Common Log Format definitions in that they use %O
+# (the actual bytes sent including headers) instead of %b (the size of the
+# requested file), because the latter makes it impossible to detect partial
+# requests.
+#
+# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
+# Use mod_remoteip instead.
+#
+LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
+LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
+LogFormat "%h %l %u %t \"%r\" %>s %O" common
+LogFormat "%{Referer}i -> %U" referer
+LogFormat "%{User-agent}i" agent
+
+# Include of directories ignores editors' and dpkg's backup files,
+# see README.Debian for details.
+
+# Include generic snippets of statements
+IncludeOptional conf-enabled/*.conf
+
+# Include the virtual host configurations:
+IncludeOptional sites-enabled/*.conf
+GracefulShutDownTimeout 3
+AddOutputFilter INCLUDES .shtml
+AddType text/html .shtml
+AddType application/x-httpd-php .php
+AddType application/x-httpd-php-source .phps
diff --git a/etc/apache2/conf-available/charset.conf b/etc/apache2/conf-available/charset.conf
new file mode 100644
index 0000000000..40d7198b8f
--- /dev/null
+++ b/etc/apache2/conf-available/charset.conf
@@ -0,0 +1,6 @@
+# Read the documentation before enabling AddDefaultCharset.
+# In general, it is only a good idea if you know that all your files
+# have this encoding. It will override any encoding given in the files
+# in meta http-equiv or xml encoding tags.
+
+#AddDefaultCharset UTF-8
diff --git a/etc/apache2/conf-available/localized-error-pages.conf b/etc/apache2/conf-available/localized-error-pages.conf
new file mode 100644
index 0000000000..a3a198a0b3
--- /dev/null
+++ b/etc/apache2/conf-available/localized-error-pages.conf
@@ -0,0 +1,79 @@
+# Customizable error responses come in three flavors:
+# 1) plain text
+# 2) local redirects
+# 3) external redirects
+#
+# Some examples:
+#ErrorDocument 500 "The server made a boo boo."
+#ErrorDocument 404 /missing.html
+#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
+#ErrorDocument 402 http://www.example.com/subscription_info.html
+#
+
+#
+# Putting this all together, we can internationalize error responses.
+#
+# We use Alias to redirect any /error/HTTP_.html.var response to
+# our collection of by-error message multi-language collections. We use
+# includes to substitute the appropriate text.
+#
+# You can modify the messages' appearance without changing any of the
+# default HTTP_.html.var files by adding the line:
+#
+#Alias /error/include/ "/your/include/path/"
+#
+# which allows you to create your own set of files by starting with the
+# /usr/share/apache2/error/include/ files and copying them to /your/include/path/,
+# even on a per-VirtualHost basis. If you include the Alias in the global server
+# context, is has to come _before_ the 'Alias /error/ ...' line.
+#
+# The default include files will display your Apache version number and your
+# ServerAdmin email address regardless of the setting of ServerSignature.
+#
+# WARNING: The configuration below will NOT work out of the box if you have a
+# SetHandler directive in a context somewhere. Adding
+# the following three lines AFTER the context should
+# make it work in most cases:
+#
+# SetHandler none
+#
+#
+# The internationalized error documents require mod_alias, mod_include
+# and mod_negotiation. To activate them, uncomment the following 37 lines.
+
+#
+#
+#
+#
+# Alias /error/ "/usr/share/apache2/error/"
+#
+#
+# Options IncludesNoExec
+# AddOutputFilter Includes html
+# AddHandler type-map var
+# Order allow,deny
+# Allow from all
+# LanguagePriority en cs de es fr it nl sv pt-br ro
+# ForceLanguagePriority Prefer Fallback
+#
+#
+# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
+# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
+# ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
+# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
+# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
+# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
+# ErrorDocument 410 /error/HTTP_GONE.html.var
+# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
+# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
+# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
+# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
+# ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
+# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
+# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
+# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
+# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
+# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
+#
+#
+#
diff --git a/etc/apache2/conf-available/other-vhosts-access-log.conf b/etc/apache2/conf-available/other-vhosts-access-log.conf
new file mode 100644
index 0000000000..9f7aecd000
--- /dev/null
+++ b/etc/apache2/conf-available/other-vhosts-access-log.conf
@@ -0,0 +1,2 @@
+# Define an access log for VirtualHosts that don't define their own logfile
+CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined
diff --git a/etc/apache2/conf-available/php8.3-cgi.conf b/etc/apache2/conf-available/php8.3-cgi.conf
new file mode 100644
index 0000000000..ab4539b331
--- /dev/null
+++ b/etc/apache2/conf-available/php8.3-cgi.conf
@@ -0,0 +1,34 @@
+# This file replaces old system MIME types and sets them only in the
+# Apache webserver
+
+# Using (?:pattern) instead of (pattern) is a small optimization that
+# avoid capturing the matching pattern (as $1) which isn't used here
+# application/x-httpd-php phtml php
+
+ SetHandler application/x-httpd-php
+
+# application/x-httpd-php-source phps
+
+ SetHandler application/x-httpd-php-source
+ # Deny access to raw php sources by default
+ # To re-enable it's recommended to enable access to the files
+ # only in specific virtual host or directory
+ Require all denied
+
+# Deny access to files without filename (e.g. '.php')
+
+ Require all denied
+
+
+# To enable PHP CGI site-wide, just uncomment following lines, however
+# as a security measure, it's recommended to enable PHP just in the
+# specific virtual servers or just specific directories
+
+#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
+#
+# AllowOverride None
+# Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
+# Order allow,deny
+# Allow from all
+#
+#Action application/x-httpd-php /cgi-bin/php8.3
diff --git a/etc/apache2/conf-available/php8.3-fpm.conf b/etc/apache2/conf-available/php8.3-fpm.conf
new file mode 100644
index 0000000000..711a0ff88b
--- /dev/null
+++ b/etc/apache2/conf-available/php8.3-fpm.conf
@@ -0,0 +1,34 @@
+# Redirect to local php-fpm if mod_php is not available
+
+
+ # Enable http authorization headers
+
+ SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
+
+
+ # Using (?:pattern) instead of (pattern) is a small optimization that
+ # avoid capturing the matching pattern (as $1) which isn't used here
+
+ SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
+
+# The default configuration works for most of the installation, however it could
+# be improved in various ways. One simple improvement is to not pass files that
+# doesn't exist to the handler as shown below, for more configuration examples
+# see https://wiki.apache.org/httpd/PHP-FPM
+#
+#
+# SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
+#
+#
+
+ # Deny access to raw php sources by default
+ # To re-enable it's recommended to enable access to the files
+ # only in specific virtual host or directory
+ Require all denied
+
+ # Deny access to files without filename (e.g. '.php')
+
+ Require all denied
+
+
+
diff --git a/etc/apache2/conf-available/security.conf b/etc/apache2/conf-available/security.conf
new file mode 100644
index 0000000000..cad7dc1cb7
--- /dev/null
+++ b/etc/apache2/conf-available/security.conf
@@ -0,0 +1,58 @@
+# Changing the following options will not really affect the security of the
+# server, but might make attacks slightly more difficult in some cases.
+
+#
+# ServerTokens
+# This directive configures what you return as the Server HTTP response
+# Header. The default is 'Full' which sends information about the OS-Type
+# and compiled in modules.
+# Set to one of: Full | OS | Minimal | Minor | Major | Prod
+# where Full conveys the most information, and Prod the least.
+#ServerTokens Minimal
+ServerTokens OS
+#ServerTokens Full
+
+#
+# Optionally add a line containing the server version and virtual host
+# name to server-generated pages (internal error documents, FTP directory
+# listings, mod_status and mod_info output etc., but not CGI generated
+# documents or custom error documents).
+# Set to "EMail" to also include a mailto: link to the ServerAdmin.
+# Set to one of: On | Off | EMail
+#ServerSignature Off
+ServerSignature On
+
+#
+# Allow TRACE method
+#
+# Set to "extended" to also reflect the request body (only for testing and
+# diagnostic purposes).
+#
+# Set to one of: On | Off | extended
+TraceEnable Off
+#TraceEnable On
+
+#
+# Forbid access to version control directories
+#
+# If you use version control systems in your document root, you should
+# probably deny access to their directories.
+#
+# Examples:
+#
+#RedirectMatch 404 /\.git
+#RedirectMatch 404 /\.svn
+
+#
+# Setting this header will prevent MSIE from interpreting files as something
+# else than declared by the content type in the HTTP headers.
+# Requires mod_headers to be enabled.
+#
+#Header set X-Content-Type-Options: "nosniff"
+
+#
+# Setting this header will prevent other sites from embedding pages from this
+# site as frames. This defends against clickjacking attacks.
+# Requires mod_headers to be enabled.
+#
+#Header set Content-Security-Policy "frame-ancestors 'self';"
diff --git a/etc/apache2/conf-available/serve-cgi-bin.conf b/etc/apache2/conf-available/serve-cgi-bin.conf
new file mode 100644
index 0000000000..ae660b168a
--- /dev/null
+++ b/etc/apache2/conf-available/serve-cgi-bin.conf
@@ -0,0 +1,18 @@
+
+
+ Define ENABLE_USR_LIB_CGI_BIN
+
+
+
+ Define ENABLE_USR_LIB_CGI_BIN
+
+
+
+ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
+
+ AllowOverride None
+ Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
+ Require all granted
+
+
+
diff --git a/etc/apache2/conf-enabled/charset.conf b/etc/apache2/conf-enabled/charset.conf
new file mode 120000
index 0000000000..4a6ca08465
--- /dev/null
+++ b/etc/apache2/conf-enabled/charset.conf
@@ -0,0 +1 @@
+../conf-available/charset.conf
\ No newline at end of file
diff --git a/etc/apache2/conf-enabled/localized-error-pages.conf b/etc/apache2/conf-enabled/localized-error-pages.conf
new file mode 120000
index 0000000000..6e5ddaf15a
--- /dev/null
+++ b/etc/apache2/conf-enabled/localized-error-pages.conf
@@ -0,0 +1 @@
+../conf-available/localized-error-pages.conf
\ No newline at end of file
diff --git a/etc/apache2/conf-enabled/other-vhosts-access-log.conf b/etc/apache2/conf-enabled/other-vhosts-access-log.conf
new file mode 120000
index 0000000000..8af91e5305
--- /dev/null
+++ b/etc/apache2/conf-enabled/other-vhosts-access-log.conf
@@ -0,0 +1 @@
+../conf-available/other-vhosts-access-log.conf
\ No newline at end of file
diff --git a/etc/apache2/conf-enabled/php_cgi_wrapper.conf b/etc/apache2/conf-enabled/php_cgi_wrapper.conf
new file mode 100644
index 0000000000..4632255df9
--- /dev/null
+++ b/etc/apache2/conf-enabled/php_cgi_wrapper.conf
@@ -0,0 +1,2 @@
+scriptAlias /phppath/ "/var/www/cgi-bin/cgi_wrapper/"
+Action php-script /phppath/cgi_wrapper
diff --git a/etc/apache2/conf-enabled/security.conf b/etc/apache2/conf-enabled/security.conf
new file mode 120000
index 0000000000..036c97fa7d
--- /dev/null
+++ b/etc/apache2/conf-enabled/security.conf
@@ -0,0 +1 @@
+../conf-available/security.conf
\ No newline at end of file
diff --git a/etc/apache2/conf-enabled/serve-cgi-bin.conf b/etc/apache2/conf-enabled/serve-cgi-bin.conf
new file mode 120000
index 0000000000..d917f688ee
--- /dev/null
+++ b/etc/apache2/conf-enabled/serve-cgi-bin.conf
@@ -0,0 +1 @@
+../conf-available/serve-cgi-bin.conf
\ No newline at end of file
diff --git a/etc/apache2/conf-enabled/zz010_psa_httpd.conf b/etc/apache2/conf-enabled/zz010_psa_httpd.conf
new file mode 100644
index 0000000000..2493a95d4e
--- /dev/null
+++ b/etc/apache2/conf-enabled/zz010_psa_httpd.conf
@@ -0,0 +1,9 @@
+#ATTENTION!
+#
+#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
+#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
+Include '/etc/apache2/plesk.conf.d/server.conf'
+IncludeOptional '/etc/apache2/plesk.conf.d/webmails/*.conf'
+IncludeOptional '/etc/apache2/plesk.conf.d/vhosts/*.conf'
+IncludeOptional '/etc/apache2/plesk.conf.d/forwarding/*.conf'
+IncludeOptional '/etc/apache2/plesk.conf.d/wildcards/*.conf'
diff --git a/etc/apache2/envvars b/etc/apache2/envvars
new file mode 100644
index 0000000000..708d170696
--- /dev/null
+++ b/etc/apache2/envvars
@@ -0,0 +1,47 @@
+# envvars - default environment variables for apache2ctl
+
+# this won't be correct after changing uid
+unset HOME
+
+# for supporting multiple apache2 instances
+if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
+ SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
+else
+ SUFFIX=
+fi
+
+# Since there is no sane way to get the parsed apache2 config in scripts, some
+# settings are defined via environment variables and then used in apache2ctl,
+# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
+export APACHE_RUN_USER=www-data
+export APACHE_RUN_GROUP=www-data
+# temporary state file location. This might be changed to /run in Wheezy+1
+export APACHE_PID_FILE=/var/run/apache2$SUFFIX/apache2.pid
+export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
+export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
+# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
+export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
+
+## The locale used by some modules like mod_dav
+export LANG=C
+## Uncomment the following line to use the system default locale instead:
+#. /etc/default/locale
+
+export LANG
+
+## The command to get the status for 'apache2ctl status'.
+## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
+#export APACHE_LYNX='www-browser -dump'
+
+## If you need a higher file descriptor limit, uncomment and adjust the
+## following line (default is 8192):
+#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'
+
+## If you would like to pass arguments to the web server, add them below
+## to the APACHE_ARGUMENTS environment.
+#export APACHE_ARGUMENTS=''
+
+## Enable the debug mode for maintainer scripts.
+## This will produce a verbose output on package installations of web server modules and web application
+## installations which interact with Apache
+#export APACHE2_MAINTSCRIPT_DEBUG=1
diff --git a/etc/apache2/magic b/etc/apache2/magic
new file mode 100644
index 0000000000..cdf9ac516e
--- /dev/null
+++ b/etc/apache2/magic
@@ -0,0 +1,935 @@
+# Magic data for mod_mime_magic (originally for file(1) command)
+#
+# The format is 4-5 columns:
+# Column #1: byte number to begin checking from, ">" indicates continuation
+# Column #2: type of data to match
+# Column #3: contents of data to match
+# Column #4: MIME type of result
+# Column #5: MIME encoding of result (optional)
+
+#------------------------------------------------------------------------------
+# Localstuff: file(1) magic for locally observed files
+# Add any locally observed files here.
+
+# Real Audio (Magic .ra\0375)
+0 belong 0x2e7261fd audio/x-pn-realaudio
+0 string .RMF application/vnd.rn-realmedia
+
+#video/x-pn-realvideo
+#video/vnd.rn-realvideo
+#application/vnd.rn-realmedia
+# sigh, there are many mimes for that but the above are the most common.
+
+# Taken from magic, converted to magic.mime
+# mime types according to http://www.geocities.com/nevilo/mod.htm:
+# audio/it .it
+# audio/x-zipped-it .itz
+# audio/xm fasttracker modules
+# audio/x-s3m screamtracker modules
+# audio/s3m screamtracker modules
+# audio/x-zipped-mod mdz
+# audio/mod mod
+# audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z)
+
+# Taken from loader code from mikmod version 2.14
+# by Steve McIntyre (stevem@chiark.greenend.org.uk)
+# added title printing on 2003-06-24
+0 string MAS_UTrack_V00
+>14 string >/0 audio/x-mod
+#audio/x-tracker-module
+
+#0 string UN05 MikMod UNI format module sound data
+
+0 string Extended\ Module: audio/x-mod
+#audio/x-tracker-module
+##>17 string >\0 Title: "%s"
+
+21 string/c \!SCREAM! audio/x-mod
+#audio/x-screamtracker-module
+21 string BMOD2STM audio/x-mod
+#audio/x-screamtracker-module
+1080 string M.K. audio/x-mod
+#audio/x-protracker-module
+#>0 string >\0 Title: "%s"
+1080 string M!K! audio/x-mod
+#audio/x-protracker-module
+#>0 string >\0 Title: "%s"
+1080 string FLT4 audio/x-mod
+#audio/x-startracker-module
+#>0 string >\0 Title: "%s"
+1080 string FLT8 audio/x-mod
+#audio/x-startracker-module
+#>0 string >\0 Title: "%s"
+1080 string 4CHN audio/x-mod
+#audio/x-fasttracker-module
+#>0 string >\0 Title: "%s"
+1080 string 6CHN audio/x-mod
+#audio/x-fasttracker-module
+#>0 string >\0 Title: "%s"
+1080 string 8CHN audio/x-mod
+#audio/x-fasttracker-module
+#>0 string >\0 Title: "%s"
+1080 string CD81 audio/x-mod
+#audio/x-oktalyzer-tracker-module
+#>0 string >\0 Title: "%s"
+1080 string OKTA audio/x-mod
+#audio/x-oktalyzer-tracker-module
+#>0 string >\0 Title: "%s"
+# Not good enough.
+#1082 string CH
+#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data
+1080 string 16CN audio/x-mod
+#audio/x-taketracker-module
+#>0 string >\0 Title: "%s"
+1080 string 32CN audio/x-mod
+#audio/x-taketracker-module
+#>0 string >\0 Title: "%s"
+
+# Impuse tracker module (it)
+0 string IMPM audio/x-mod
+#>4 string >\0 "%s"
+#>40 leshort !0 compatible w/ITv%x
+#>42 leshort !0 created w/ITv%x
+
+#------------------------------------------------------------------------------
+# end local stuff
+#------------------------------------------------------------------------------
+
+# xml based formats!
+
+# svg
+
+0 string \38 string \<\!DOCTYPE\040svg image/svg+xml
+
+
+# xml
+0 string \2 short 0xbabe application/java
+
+#------------------------------------------------------------------------------
+# audio: file(1) magic for sound formats
+#
+# from Jan Nicolai Langfeldt ,
+#
+
+# Sun/NeXT audio data
+0 string .snd
+>12 belong 1 audio/basic
+>12 belong 2 audio/basic
+>12 belong 3 audio/basic
+>12 belong 4 audio/basic
+>12 belong 5 audio/basic
+>12 belong 6 audio/basic
+>12 belong 7 audio/basic
+
+>12 belong 23 audio/x-adpcm
+
+# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
+# that uses little-endian encoding and has a different magic number
+# (0x0064732E in little-endian encoding).
+0 lelong 0x0064732E
+>12 lelong 1 audio/x-dec-basic
+>12 lelong 2 audio/x-dec-basic
+>12 lelong 3 audio/x-dec-basic
+>12 lelong 4 audio/x-dec-basic
+>12 lelong 5 audio/x-dec-basic
+>12 lelong 6 audio/x-dec-basic
+>12 lelong 7 audio/x-dec-basic
+# compressed (G.721 ADPCM)
+>12 lelong 23 audio/x-dec-adpcm
+
+# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM"
+# AIFF audio data
+8 string AIFF audio/x-aiff
+# AIFF-C audio data
+8 string AIFC audio/x-aiff
+# IFF/8SVX audio data
+8 string 8SVX audio/x-aiff
+
+
+
+# Creative Labs AUDIO stuff
+# Standard MIDI data
+0 string MThd audio/unknown
+#>9 byte >0 (format %d)
+#>11 byte >1 using %d channels
+# Creative Music (CMF) data
+0 string CTMF audio/unknown
+# SoundBlaster instrument data
+0 string SBI audio/unknown
+# Creative Labs voice data
+0 string Creative\ Voice\ File audio/unknown
+## is this next line right? it came this way...
+#>19 byte 0x1A
+#>23 byte >0 - version %d
+#>22 byte >0 \b.%d
+
+# [GRR 950115: is this also Creative Labs? Guessing that first line
+# should be string instead of unknown-endian long...]
+#0 long 0x4e54524b MultiTrack sound data
+#0 string NTRK MultiTrack sound data
+#>4 long x - version %ld
+
+# Microsoft WAVE format (*.wav)
+# [GRR 950115: probably all of the shorts and longs should be leshort/lelong]
+# Microsoft RIFF
+0 string RIFF
+# - WAVE format
+>8 string WAVE audio/x-wav
+>8 string/B AVI video/x-msvideo
+#
+>8 string CDRA image/x-coreldraw
+
+# AAC (aka MPEG-2 NBC)
+0 beshort&0xfff6 0xfff0 audio/X-HX-AAC-ADTS
+0 string ADIF audio/X-HX-AAC-ADIF
+0 beshort&0xffe0 0x56e0 audio/MP4A-LATM
+0 beshort 0x4De1 audio/MP4A-LATM
+
+# MPEG Layer 3 sound files
+0 beshort&0xfffe =0xfffa audio/mpeg
+#MP3 with ID3 tag
+0 string ID3 audio/mpeg
+# Ogg/Vorbis
+0 string OggS application/ogg
+
+#------------------------------------------------------------------------------
+# c-lang: file(1) magic for C programs or various scripts
+#
+
+# XPM icons (Greg Roelofs, newt@uchicago.edu)
+# ideally should go into "images", but entries below would tag XPM as C source
+0 string /*\ XPM image/x-xpmi 7bit
+
+# 3DS (3d Studio files)
+#16 beshort 0x3d3d image/x-3ds
+
+# this first will upset you if you're a PL/1 shop... (are there any left?)
+# in which case rm it; ascmagic will catch real C programs
+# C or REXX program text
+#0 string /* text/x-c
+# C++ program text
+#0 string // text/x-c++
+
+#------------------------------------------------------------------------------
+# commands: file(1) magic for various shells and interpreters
+#
+#0 string :\ shell archive or commands for antique kernel text
+0 string #!/bin/sh application/x-shellscript
+0 string #!\ /bin/sh application/x-shellscript
+0 string #!/bin/csh application/x-shellscript
+0 string #!\ /bin/csh application/x-shellscript
+# korn shell magic, sent by George Wu, gwu@clyde.att.com
+0 string #!/bin/ksh application/x-shellscript
+0 string #!\ /bin/ksh application/x-shellscript
+0 string #!/bin/tcsh application/x-shellscript
+0 string #!\ /bin/tcsh application/x-shellscript
+0 string #!/usr/local/tcsh application/x-shellscript
+0 string #!\ /usr/local/tcsh application/x-shellscript
+0 string #!/usr/local/bin/tcsh application/x-shellscript
+0 string #!\ /usr/local/bin/tcsh application/x-shellscript
+# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)
+0 string #!/bin/bash application/x-shellscript
+0 string #!\ /bin/bash application/x-shellscript
+0 string #!/usr/local/bin/bash application/x-shellscript
+0 string #!\ /usr/local/bin/bash application/x-shellscript
+
+#
+# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)
+0 string #!/bin/zsh application/x-shellscript
+0 string #!/usr/bin/zsh application/x-shellscript
+0 string #!/usr/local/bin/zsh application/x-shellscript
+0 string #!\ /usr/local/bin/zsh application/x-shellscript
+0 string #!/usr/local/bin/ash application/x-shellscript
+0 string #!\ /usr/local/bin/ash application/x-shellscript
+#0 string #!/usr/local/bin/ae Neil Brown's ae
+#0 string #!\ /usr/local/bin/ae Neil Brown's ae
+0 string #!/bin/nawk application/x-nawk
+0 string #!\ /bin/nawk application/x-nawk
+0 string #!/usr/bin/nawk application/x-nawk
+0 string #!\ /usr/bin/nawk application/x-nawk
+0 string #!/usr/local/bin/nawk application/x-nawk
+0 string #!\ /usr/local/bin/nawk application/x-nawk
+0 string #!/bin/gawk application/x-gawk
+0 string #!\ /bin/gawk application/x-gawk
+0 string #!/usr/bin/gawk application/x-gawk
+0 string #!\ /usr/bin/gawk application/x-gawk
+0 string #!/usr/local/bin/gawk application/x-gawk
+0 string #!\ /usr/local/bin/gawk application/x-gawk
+#
+0 string #!/bin/awk application/x-awk
+0 string #!\ /bin/awk application/x-awk
+0 string #!/usr/bin/awk application/x-awk
+0 string #!\ /usr/bin/awk application/x-awk
+# update to distinguish from *.vcf files by Joerg Jenderek: joerg dot jenderek at web dot de
+#0 regex BEGIN[[:space:]]*[{] application/x-awk
+
+# For Larry Wall's perl language. The ``eval'' line recognizes an
+# outrageously clever hack for USG systems.
+# Keith Waclena
+0 string #!/bin/perl application/x-perl
+0 string #!\ /bin/perl application/x-perl
+0 string eval\ "exec\ /bin/perl application/x-perl
+0 string #!/usr/bin/perl application/x-perl
+0 string #!\ /usr/bin/perl application/x-perl
+0 string eval\ "exec\ /usr/bin/perl application/x-perl
+0 string #!/usr/local/bin/perl application/x-perl
+0 string #!\ /usr/local/bin/perl application/x-perl
+0 string eval\ "exec\ /usr/local/bin/perl application/x-perl
+
+#------------------------------------------------------------------------------
+# compress: file(1) magic for pure-compression formats (no archives)
+#
+# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, whap, etc.
+#
+# Formats for various forms of compressed data
+# Formats for "compress" proper have been moved into "compress.c",
+# because it tries to uncompress it to figure out what's inside.
+
+# standard unix compress
+#0 string \037\235 application/x-compress
+
+# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
+#0 string \037\213 application/x-gzip
+
+0 string PK\003\004 application/x-zip
+
+# RAR archiver (Greg Roelofs, newt@uchicago.edu)
+0 string Rar! application/x-rar
+
+# According to gzip.h, this is the correct byte order for packed data.
+0 string \037\036 application/octet-stream
+#
+# This magic number is byte-order-independent.
+#
+0 short 017437 application/octet-stream
+
+# XXX - why *two* entries for "compacted data", one of which is
+# byte-order independent, and one of which is byte-order dependent?
+#
+# compacted data
+0 short 0x1fff application/octet-stream
+0 string \377\037 application/octet-stream
+# huf output
+0 short 0145405 application/octet-stream
+
+# Squeeze and Crunch...
+# These numbers were gleaned from the Unix versions of the programs to
+# handle these formats. Note that I can only uncrunch, not crunch, and
+# I didn't have a crunched file handy, so the crunch number is untested.
+# Keith Waclena
+#0 leshort 0x76FF squeezed data (CP/M, DOS)
+#0 leshort 0x76FE crunched data (CP/M, DOS)
+
+# Freeze
+#0 string \037\237 Frozen file 2.1
+#0 string \037\236 Frozen file 1.0 (or gzip 0.5)
+
+# lzh?
+#0 string \037\240 LZH compressed data
+
+257 string ustar\0 application/x-tar posix
+257 string ustar\040\040\0 application/x-tar gnu
+
+0 short 070707 application/x-cpio
+0 short 0143561 application/x-cpio swapped
+
+0 string = application/x-archive
+0 string \! application/x-archive
+>8 string debian application/x-debian-package
+
+#------------------------------------------------------------------------------
+#
+# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com)
+#
+0 beshort 0xedab
+>2 beshort 0xeedb application/x-rpm
+
+0 lelong&0x8080ffff 0x0000081a application/x-arc lzw
+0 lelong&0x8080ffff 0x0000091a application/x-arc squashed
+0 lelong&0x8080ffff 0x0000021a application/x-arc uncompressed
+0 lelong&0x8080ffff 0x0000031a application/x-arc packed
+0 lelong&0x8080ffff 0x0000041a application/x-arc squeezed
+0 lelong&0x8080ffff 0x0000061a application/x-arc crunched
+
+0 leshort 0xea60 application/x-arj
+
+# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
+2 string -lh0- application/x-lharc lh0
+2 string -lh1- application/x-lharc lh1
+2 string -lz4- application/x-lharc lz4
+2 string -lz5- application/x-lharc lz5
+# [never seen any but the last; -lh4- reported in comp.compression:]
+2 string -lzs- application/x-lha lzs
+2 string -lh\ - application/x-lha lh
+2 string -lhd- application/x-lha lhd
+2 string -lh2- application/x-lha lh2
+2 string -lh3- application/x-lha lh3
+2 string -lh4- application/x-lha lh4
+2 string -lh5- application/x-lha lh5
+2 string -lh6- application/x-lha lh6
+2 string -lh7- application/x-lha lh7
+# Shell archives
+10 string #\ This\ is\ a\ shell\ archive application/octet-stream x-shell
+
+#------------------------------------------------------------------------------
+# frame: file(1) magic for FrameMaker files
+#
+# This stuff came on a FrameMaker demo tape, most of which is
+# copyright, but this file is "published" as witness the following:
+#
+0 string \
+#
+0 string/cB \14 byte 12 (OS/2 1.x format)
+#>14 byte 64 (OS/2 2.x format)
+#>14 byte 40 (Windows 3.x format)
+#0 string IC icon
+#0 string PI pointer
+#0 string CI color icon
+#0 string CP color pointer
+#0 string BA bitmap array
+
+# CDROM Filesystems
+32769 string CD001 application/x-iso9660
+
+# Newer StuffIt archives (grant@netbsd.org)
+0 string StuffIt application/x-stuffit
+#>162 string >0 : %s
+
+# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
+# Daniel Quinlan, quinlan@yggdrasil.com
+11 string must\ be\ converted\ with\ BinHex\ 4 application/mac-binhex40
+##>41 string x \b, version %.3s
+
+
+#------------------------------------------------------------------------------
+# lisp: file(1) magic for lisp programs
+#
+# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string ;; text/plain 8bit
+# Emacs 18 - this is always correct, but not very magical.
+0 string \012( application/x-elc
+# Emacs 19
+0 string ;ELC\023\000\000\000 application/x-elc
+
+#------------------------------------------------------------------------------
+# mail.news: file(1) magic for mail and news
+#
+# There are tests to ascmagic.c to cope with mail and news.
+0 string Relay-Version: message/rfc822 7bit
+0 string #!\ rnews message/rfc822 7bit
+0 string N#!\ rnews message/rfc822 7bit
+0 string Forward\ to message/rfc822 7bit
+0 string Pipe\ to message/rfc822 7bit
+0 string Return-Path: message/rfc822 7bit
+0 string Received: message/rfc822
+0 string Path: message/news 8bit
+0 string Xref: message/news 8bit
+0 string From: message/rfc822 7bit
+0 string Article message/news 8bit
+#------------------------------------------------------------------------------
+# msword: file(1) magic for MS Word files
+#
+# Contributor claims:
+# Reversed-engineered MS Word magic numbers
+#
+
+0 string \376\067\0\043 application/msword
+0 string \320\317\021\340\241\261 application/msword
+0 string \333\245-\0\0\0 application/msword
+
+
+
+#------------------------------------------------------------------------------
+# printer: file(1) magic for printer-formatted files
+#
+
+# PostScript
+0 string %! application/postscript
+0 string \004%! application/postscript
+
+# Acrobat
+# (due to clamen@cs.cmu.edu)
+0 string %PDF- application/pdf
+
+#------------------------------------------------------------------------------
+# sc: file(1) magic for "sc" spreadsheet
+#
+38 string Spreadsheet application/x-sc
+
+#------------------------------------------------------------------------------
+# tex: file(1) magic for TeX files
+#
+# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
+#
+# From
+
+# Although we may know the offset of certain text fields in TeX DVI
+# and font files, we can't use them reliably because they are not
+# zero terminated. [but we do anyway, christos]
+0 string \367\002 application/x-dvi
+#0 string \367\203 TeX generic font data
+#0 string \367\131 TeX packed font data
+#0 string \367\312 TeX virtual font data
+#0 string This\ is\ TeX, TeX transcript text
+#0 string This\ is\ METAFONT, METAFONT transcript text
+
+# There is no way to detect TeX Font Metric (*.tfm) files without
+# breaking them apart and reading the data. The following patterns
+# match most *.tfm files generated by METAFONT or afm2tfm.
+2 string \000\021 application/x-tex-tfm
+2 string \000\022 application/x-tex-tfm
+#>34 string >\0 (%s)
+
+# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \\input\ texinfo text/x-texinfo
+0 string This\ is\ Info\ file text/x-info
+
+# correct TeX magic for Linux (and maybe more)
+# from Peter Tobias (tobias@server.et-inf.fho-emden.de)
+#
+0 leshort 0x02f7 application/x-dvi
+
+# RTF - Rich Text Format
+0 string {\\rtf text/rtf
+
+#------------------------------------------------------------------------------
+# animation: file(1) magic for animation/movie formats
+#
+# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8)
+# MPEG file
+# MPEG sequences
+0 belong 0x000001BA
+>4 byte &0x40 video/mp2p
+>4 byte ^0x40 video/mpeg
+0 belong 0x000001BB video/mpeg
+0 belong 0x000001B0 video/mp4v-es
+0 belong 0x000001B5 video/mp4v-es
+0 belong 0x000001B3 video/mpv
+0 belong&0xFF5FFF1F 0x47400010 video/mp2t
+0 belong 0x00000001
+>4 byte&0x1F 0x07 video/h264
+
+# FLI animation format
+0 leshort 0xAF11 video/fli
+# FLC animation format
+0 leshort 0xAF12 video/flc
+#
+# SGI and Apple formats
+# Added ISO mimes
+0 string MOVI video/sgi
+4 string moov video/quicktime
+4 string mdat video/quicktime
+4 string wide video/quicktime
+4 string skip video/quicktime
+4 string free video/quicktime
+4 string idsc image/x-quicktime
+4 string idat image/x-quicktime
+4 string pckg application/x-quicktime
+4 string/B jP image/jp2
+4 string ftyp
+>8 string isom video/mp4
+>8 string mp41 video/mp4
+>8 string mp42 video/mp4
+>8 string/B jp2 image/jp2
+>8 string 3gp video/3gpp
+>8 string avc1 video/3gpp
+>8 string mmp4 video/mp4
+>8 string/B M4A audio/mp4
+>8 string/B qt video/quicktime
+# The contributor claims:
+# I couldn't find a real magic number for these, however, this
+# -appears- to work. Note that it might catch other files, too,
+# so BE CAREFUL!
+#
+# Note that title and author appear in the two 20-byte chunks
+# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
+# 255 (hex FF)! DL format SUCKS BIG ROCKS.
+#
+# DL file version 1 , medium format (160x100, 4 images/screen)
+0 byte 1 video/unknown
+0 byte 2 video/unknown
+#
+# Databases
+#
+# GDBM magic numbers
+# Will be maintained as part of the GDBM distribution in the future.
+#
+0 belong 0x13579ace application/x-gdbm
+0 lelong 0x13579ace application/x-gdbm
+0 string GDBM application/x-gdbm
+#
+0 belong 0x061561 application/x-dbm
+#
+# Executables
+#
+0 string \177ELF
+>16 leshort 0 application/octet-stream
+>16 leshort 1 application/x-object
+>16 leshort 2 application/x-executable
+>16 leshort 3 application/x-sharedlib
+>16 leshort 4 application/x-coredump
+>16 beshort 0 application/octet-stream
+>16 beshort 1 application/x-object
+>16 beshort 2 application/x-executable
+>16 beshort 3 application/x-sharedlib
+>16 beshort 4 application/x-coredump
+#
+# DOS
+0 string MZ application/x-dosexec
+#
+# KDE
+0 string [KDE\ Desktop\ Entry] application/x-kdelnk
+0 string \#\ KDE\ Config\ File application/x-kdelnk
+# xmcd database file for kscd
+0 string \#\ xmcd text/xmcd
+
+#------------------------------------------------------------------------------
+# pkgadd: file(1) magic for SysV R4 PKG Datastreams
+#
+0 string #\ PaCkAgE\ DaTaStReAm application/x-svr4-package
+
+#PNG Image Format
+0 string \x89PNG image/png
+
+# MNG Video Format,
+0 string \x8aMNG video/x-mng
+0 string \x8aJNG video/x-jng
+
+#------------------------------------------------------------------------------
+# Hierarchical Data Format, used to facilitate scientific data exchange
+# specifications at http://hdf.ncsa.uiuc.edu/
+#Hierarchical Data Format (version 4) data
+0 belong 0x0e031301 application/x-hdf
+#Hierarchical Data Format (version 5) data
+0 string \211HDF\r\n\032 application/x-hdf
+
+# Adobe Photoshop
+0 string 8BPS image/x-photoshop
+
+# Felix von Leitner
+0 string d8:announce application/x-bittorrent
+
+
+# lotus 1-2-3 document
+0 belong 0x00001a00 application/x-123
+0 belong 0x00000200 application/x-123
+
+# MS Access database
+4 string Standard\ Jet\ DB application/msaccess
+
+## magic for XBase files
+#0 byte 0x02
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x03
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x04
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x05
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x30
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x43
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x7b
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x83
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x8b
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0x8e
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0xb3
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 byte 0xf5
+#>8 leshort >0
+#>>12 leshort 0 application/x-dbf
+#
+#0 leshort 0x0006 application/x-dbt
+
+# Debian has entries for the old PGP formats:
+# pgp: file(1) magic for Pretty Good Privacy
+# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html
+#text/PGP key public ring
+0 beshort 0x9900 application/pgp
+#text/PGP key security ring
+0 beshort 0x9501 application/pgp
+#text/PGP key security ring
+0 beshort 0x9500 application/pgp
+#text/PGP encrypted data
+0 beshort 0xa600 application/pgp-encrypted
+#text/PGP armored data
+##public key block
+2 string ---BEGIN\ PGP\ PUBLIC\ KEY\ BLOCK- application/pgp-keys
+0 string -----BEGIN\040PGP\40MESSAGE- application/pgp
+0 string -----BEGIN\040PGP\40SIGNATURE- application/pgp-signature
+#
+# GnuPG Magic:
+#
+#
+#text/GnuPG key public ring
+0 beshort 0x9901 application/pgp
+#text/OpenPGP data
+0 beshort 0x8501 application/pgp-encrypted
+
+# flash: file(1) magic for Macromedia Flash file format
+#
+# See
+#
+# http://www.macromedia.com/software/flash/open/
+#
+0 string FWS
+>3 byte x application/x-shockwave-flash
+
+# The following paramaters are created for Namazu.
+#
+#
+# 1999/08/13
+#0 string \
+
+
+ DejaVu LGC Sans Mono
+
+
+ 7.5
+
+
+ false
+
+
+
diff --git a/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-sans.conf b/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-sans.conf
new file mode 100644
index 0000000000..35abebd50e
--- /dev/null
+++ b/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-sans.conf
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ DejaVu LGC Sans
+
+
+ 7.5
+
+
+ false
+
+
+
diff --git a/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-serif.conf b/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-serif.conf
new file mode 100644
index 0000000000..54486e878c
--- /dev/null
+++ b/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-serif.conf
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ DejaVu LGC Serif
+
+
+ 7.5
+
+
+ false
+
+
+
diff --git a/etc/fonts/conf.avail/20-unhint-small-dejavu-sans-mono.conf b/etc/fonts/conf.avail/20-unhint-small-dejavu-sans-mono.conf
new file mode 100644
index 0000000000..102dbcc4a8
--- /dev/null
+++ b/etc/fonts/conf.avail/20-unhint-small-dejavu-sans-mono.conf
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ DejaVu Sans Mono
+
+
+ 7.5
+
+
+ false
+
+
+
diff --git a/etc/fonts/conf.avail/20-unhint-small-dejavu-sans.conf b/etc/fonts/conf.avail/20-unhint-small-dejavu-sans.conf
new file mode 100644
index 0000000000..ee69996dc0
--- /dev/null
+++ b/etc/fonts/conf.avail/20-unhint-small-dejavu-sans.conf
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ DejaVu Sans
+
+
+ 7.5
+
+
+ false
+
+
+
diff --git a/etc/fonts/conf.avail/20-unhint-small-dejavu-serif.conf b/etc/fonts/conf.avail/20-unhint-small-dejavu-serif.conf
new file mode 100644
index 0000000000..cf6caa2cd3
--- /dev/null
+++ b/etc/fonts/conf.avail/20-unhint-small-dejavu-serif.conf
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ DejaVu Serif
+
+
+ 7.5
+
+
+ false
+
+
+
diff --git a/etc/fonts/conf.avail/57-dejavu-sans-mono.conf b/etc/fonts/conf.avail/57-dejavu-sans-mono.conf
new file mode 100644
index 0000000000..2c75b5cff6
--- /dev/null
+++ b/etc/fonts/conf.avail/57-dejavu-sans-mono.conf
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+ Bepa Mono
+
+ DejaVu Sans Mono
+
+
+
+ Bitstream Prima Sans Mono
+
+ DejaVu Sans Mono
+
+
+
+ Bitstream Vera Sans Mono
+
+ DejaVu Sans Mono
+
+
+
+ DejaVu LGC Sans Mono
+
+ DejaVu Sans Mono
+
+
+
+ Olwen Sans Mono
+
+ DejaVu Sans Mono
+
+
+
+ SUSE Sans Mono
+
+ DejaVu Sans Mono
+
+
+
diff --git a/etc/fonts/conf.avail/57-dejavu-sans.conf b/etc/fonts/conf.avail/57-dejavu-sans.conf
new file mode 100644
index 0000000000..cff7a842d0
--- /dev/null
+++ b/etc/fonts/conf.avail/57-dejavu-sans.conf
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ Arev Sans
+
+ DejaVu Sans
+
+
+
+ Bepa
+
+ DejaVu Sans
+
+
+
+ Bitstream Prima Sans
+
+ DejaVu Sans
+
+
+
+ Bitstream Vera Sans
+
+ DejaVu Sans
+
+
+
+ DejaVu LGC Sans
+
+ DejaVu Sans
+
+
+
+ Hunky Sans
+
+ DejaVu Sans
+
+
+
+ Olwen Sans
+
+ DejaVu Sans
+
+
+
+ SUSE Sans
+
+ DejaVu Sans
+
+
+
+ Verajja
+
+ DejaVu Sans
+
+
+
+
+ VerajjaPDA
+
+ DejaVu Sans
+
+
+
diff --git a/etc/fonts/conf.avail/57-dejavu-serif.conf b/etc/fonts/conf.avail/57-dejavu-serif.conf
new file mode 100644
index 0000000000..10ae70fd21
--- /dev/null
+++ b/etc/fonts/conf.avail/57-dejavu-serif.conf
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+ Bitstream Prima Serif
+
+ DejaVu Serif
+
+
+
+ Bitstream Vera Serif
+
+ DejaVu Serif
+
+
+
+ DejaVu LGC Serif
+
+ DejaVu Serif
+
+
+
+ Hunky Serif
+
+ DejaVu Serif
+
+
+
+ Olwen Serif
+
+ DejaVu Serif
+
+
+
+ SUSE Serif
+
+ DejaVu Serif
+
+
+
+
+ Verajja Serif
+
+ DejaVu Serif
+
+
+
diff --git a/etc/fonts/conf.avail/58-dejavu-lgc-sans-mono.conf b/etc/fonts/conf.avail/58-dejavu-lgc-sans-mono.conf
new file mode 100644
index 0000000000..9d0a8b2662
--- /dev/null
+++ b/etc/fonts/conf.avail/58-dejavu-lgc-sans-mono.conf
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ Bepa Mono
+
+ DejaVu LGC Sans Mono
+
+
+
+ Bitstream Prima Sans Mono
+
+ DejaVu LGC Sans Mono
+
+
+
+ Bitstream Vera Sans Mono
+
+ DejaVu LGC Sans Mono
+
+
+
+ DejaVu Sans Mono
+
+ DejaVu LGC Sans Mono
+
+
+
+ Olwen Sans Mono
+
+ DejaVu LGC Sans Mono
+
+
+
+ SUSE Sans Mono
+
+ DejaVu LGC Sans Mono
+
+
+
+
+ DejaVu LGC Sans Mono
+
+ monospace
+
+
+
+
+ monospace
+
+ DejaVu LGC Sans Mono
+
+
+
diff --git a/etc/fonts/conf.avail/58-dejavu-lgc-sans.conf b/etc/fonts/conf.avail/58-dejavu-lgc-sans.conf
new file mode 100644
index 0000000000..decd2a3183
--- /dev/null
+++ b/etc/fonts/conf.avail/58-dejavu-lgc-sans.conf
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+ Arev Sans
+
+ DejaVu LGC Sans
+
+
+
+ Bepa
+
+ DejaVu LGC Sans
+
+
+
+ Bitstream Prima Sans
+
+ DejaVu LGC Sans
+
+
+
+ Bitstream Vera Sans
+
+ DejaVu LGC Sans
+
+
+
+ DejaVu Sans
+
+ DejaVu LGC Sans
+
+
+
+ Hunky Sans
+
+ DejaVu LGC Sans
+
+
+
+ Olwen Sans
+
+ DejaVu LGC Sans
+
+
+
+ SUSE Sans
+
+ DejaVu LGC Sans
+
+
+
+ Verajja
+
+ DejaVu LGC Sans
+
+
+
+
+ VerajjaPDA
+
+ DejaVu LGC Sans
+
+
+
+
+ DejaVu LGC Sans
+
+ sans-serif
+
+
+
+
+ sans-serif
+
+ DejaVu LGC Sans
+
+
+
diff --git a/etc/fonts/conf.avail/58-dejavu-lgc-serif.conf b/etc/fonts/conf.avail/58-dejavu-lgc-serif.conf
new file mode 100644
index 0000000000..01045e84fe
--- /dev/null
+++ b/etc/fonts/conf.avail/58-dejavu-lgc-serif.conf
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+ Bitstream Prima Serif
+
+ DejaVu LGC Serif
+
+
+
+ Bitstream Vera Serif
+
+ DejaVu LGC Serif
+
+
+
+ DejaVu Serif
+
+ DejaVu LGC Serif
+
+
+
+ Hunky Serif
+
+ DejaVu LGC Serif
+
+
+
+ Olwen Serif
+
+ DejaVu LGC Serif
+
+
+
+ SUSE Serif
+
+ DejaVu LGC Serif
+
+
+
+
+ Verajja Serif
+
+ DejaVu LGC Serif
+
+
+
+
+ DejaVu LGC Serif
+
+ serif
+
+
+
+
+ serif
+
+ DejaVu LGC Serif
+
+
+
diff --git a/etc/fonts/conf.d/10-hinting-slight.conf b/etc/fonts/conf.d/10-hinting-slight.conf
new file mode 120000
index 0000000000..99241c8aa9
--- /dev/null
+++ b/etc/fonts/conf.d/10-hinting-slight.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/10-hinting-slight.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/10-scale-bitmap-fonts.conf b/etc/fonts/conf.d/10-scale-bitmap-fonts.conf
new file mode 120000
index 0000000000..7e50611773
--- /dev/null
+++ b/etc/fonts/conf.d/10-scale-bitmap-fonts.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/10-scale-bitmap-fonts.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/10-sub-pixel-rgb.conf b/etc/fonts/conf.d/10-sub-pixel-rgb.conf
new file mode 120000
index 0000000000..21a782f5f2
--- /dev/null
+++ b/etc/fonts/conf.d/10-sub-pixel-rgb.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/10-yes-antialias.conf b/etc/fonts/conf.d/10-yes-antialias.conf
new file mode 120000
index 0000000000..139972e592
--- /dev/null
+++ b/etc/fonts/conf.d/10-yes-antialias.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/10-yes-antialias.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/11-lcdfilter-default.conf b/etc/fonts/conf.d/11-lcdfilter-default.conf
new file mode 120000
index 0000000000..fbc10b037b
--- /dev/null
+++ b/etc/fonts/conf.d/11-lcdfilter-default.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/11-lcdfilter-default.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-sans-mono.conf b/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-sans-mono.conf
new file mode 120000
index 0000000000..068e8ea1d7
--- /dev/null
+++ b/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-sans-mono.conf
@@ -0,0 +1 @@
+../conf.avail/20-unhint-small-dejavu-lgc-sans-mono.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-sans.conf b/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-sans.conf
new file mode 120000
index 0000000000..4c767100d9
--- /dev/null
+++ b/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-sans.conf
@@ -0,0 +1 @@
+../conf.avail/20-unhint-small-dejavu-lgc-sans.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-serif.conf b/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-serif.conf
new file mode 120000
index 0000000000..1c8a10767f
--- /dev/null
+++ b/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-serif.conf
@@ -0,0 +1 @@
+../conf.avail/20-unhint-small-dejavu-lgc-serif.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf b/etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf
new file mode 120000
index 0000000000..e075245d3e
--- /dev/null
+++ b/etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf
@@ -0,0 +1 @@
+../conf.avail/20-unhint-small-dejavu-sans-mono.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf b/etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
new file mode 120000
index 0000000000..61320a1ec3
--- /dev/null
+++ b/etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
@@ -0,0 +1 @@
+../conf.avail/20-unhint-small-dejavu-sans.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/20-unhint-small-dejavu-serif.conf b/etc/fonts/conf.d/20-unhint-small-dejavu-serif.conf
new file mode 120000
index 0000000000..7abd5e1e9a
--- /dev/null
+++ b/etc/fonts/conf.d/20-unhint-small-dejavu-serif.conf
@@ -0,0 +1 @@
+../conf.avail/20-unhint-small-dejavu-serif.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/20-unhint-small-vera.conf b/etc/fonts/conf.d/20-unhint-small-vera.conf
new file mode 120000
index 0000000000..cde2ccedfc
--- /dev/null
+++ b/etc/fonts/conf.d/20-unhint-small-vera.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/20-unhint-small-vera.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/30-metric-aliases.conf b/etc/fonts/conf.d/30-metric-aliases.conf
new file mode 120000
index 0000000000..1880d96171
--- /dev/null
+++ b/etc/fonts/conf.d/30-metric-aliases.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/30-metric-aliases.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/40-nonlatin.conf b/etc/fonts/conf.d/40-nonlatin.conf
new file mode 120000
index 0000000000..c46eb4e9c8
--- /dev/null
+++ b/etc/fonts/conf.d/40-nonlatin.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/40-nonlatin.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/45-generic.conf b/etc/fonts/conf.d/45-generic.conf
new file mode 120000
index 0000000000..da483b3ab1
--- /dev/null
+++ b/etc/fonts/conf.d/45-generic.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/45-generic.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/45-latin.conf b/etc/fonts/conf.d/45-latin.conf
new file mode 120000
index 0000000000..cb1c08fae5
--- /dev/null
+++ b/etc/fonts/conf.d/45-latin.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/45-latin.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/48-spacing.conf b/etc/fonts/conf.d/48-spacing.conf
new file mode 120000
index 0000000000..b54e6053db
--- /dev/null
+++ b/etc/fonts/conf.d/48-spacing.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/48-spacing.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/49-sansserif.conf b/etc/fonts/conf.d/49-sansserif.conf
new file mode 120000
index 0000000000..26255166eb
--- /dev/null
+++ b/etc/fonts/conf.d/49-sansserif.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/49-sansserif.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/50-user.conf b/etc/fonts/conf.d/50-user.conf
new file mode 120000
index 0000000000..62f8b144f4
--- /dev/null
+++ b/etc/fonts/conf.d/50-user.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/50-user.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/51-local.conf b/etc/fonts/conf.d/51-local.conf
new file mode 120000
index 0000000000..39557bddcc
--- /dev/null
+++ b/etc/fonts/conf.d/51-local.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/51-local.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/57-dejavu-sans-mono.conf b/etc/fonts/conf.d/57-dejavu-sans-mono.conf
new file mode 120000
index 0000000000..c0c1959c94
--- /dev/null
+++ b/etc/fonts/conf.d/57-dejavu-sans-mono.conf
@@ -0,0 +1 @@
+../conf.avail/57-dejavu-sans-mono.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/57-dejavu-sans.conf b/etc/fonts/conf.d/57-dejavu-sans.conf
new file mode 120000
index 0000000000..92a40d61ed
--- /dev/null
+++ b/etc/fonts/conf.d/57-dejavu-sans.conf
@@ -0,0 +1 @@
+../conf.avail/57-dejavu-sans.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/57-dejavu-serif.conf b/etc/fonts/conf.d/57-dejavu-serif.conf
new file mode 120000
index 0000000000..b7e74810ee
--- /dev/null
+++ b/etc/fonts/conf.d/57-dejavu-serif.conf
@@ -0,0 +1 @@
+../conf.avail/57-dejavu-serif.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/58-dejavu-lgc-sans-mono.conf b/etc/fonts/conf.d/58-dejavu-lgc-sans-mono.conf
new file mode 120000
index 0000000000..89ea6b270d
--- /dev/null
+++ b/etc/fonts/conf.d/58-dejavu-lgc-sans-mono.conf
@@ -0,0 +1 @@
+../conf.avail/58-dejavu-lgc-sans-mono.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/58-dejavu-lgc-sans.conf b/etc/fonts/conf.d/58-dejavu-lgc-sans.conf
new file mode 120000
index 0000000000..ca377e0576
--- /dev/null
+++ b/etc/fonts/conf.d/58-dejavu-lgc-sans.conf
@@ -0,0 +1 @@
+../conf.avail/58-dejavu-lgc-sans.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/58-dejavu-lgc-serif.conf b/etc/fonts/conf.d/58-dejavu-lgc-serif.conf
new file mode 120000
index 0000000000..603352a77a
--- /dev/null
+++ b/etc/fonts/conf.d/58-dejavu-lgc-serif.conf
@@ -0,0 +1 @@
+../conf.avail/58-dejavu-lgc-serif.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/60-generic.conf b/etc/fonts/conf.d/60-generic.conf
new file mode 120000
index 0000000000..ff9243f39e
--- /dev/null
+++ b/etc/fonts/conf.d/60-generic.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/60-generic.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/60-latin.conf b/etc/fonts/conf.d/60-latin.conf
new file mode 120000
index 0000000000..020a7637e5
--- /dev/null
+++ b/etc/fonts/conf.d/60-latin.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/60-latin.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/65-fonts-persian.conf b/etc/fonts/conf.d/65-fonts-persian.conf
new file mode 120000
index 0000000000..c5ceafcf17
--- /dev/null
+++ b/etc/fonts/conf.d/65-fonts-persian.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/65-fonts-persian.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/65-nonlatin.conf b/etc/fonts/conf.d/65-nonlatin.conf
new file mode 120000
index 0000000000..eee5d46622
--- /dev/null
+++ b/etc/fonts/conf.d/65-nonlatin.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/65-nonlatin.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/69-unifont.conf b/etc/fonts/conf.d/69-unifont.conf
new file mode 120000
index 0000000000..313ab54f25
--- /dev/null
+++ b/etc/fonts/conf.d/69-unifont.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/69-unifont.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/70-no-bitmaps-except-emoji.conf b/etc/fonts/conf.d/70-no-bitmaps-except-emoji.conf
new file mode 120000
index 0000000000..8765cd598c
--- /dev/null
+++ b/etc/fonts/conf.d/70-no-bitmaps-except-emoji.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/70-no-bitmaps-except-emoji.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/80-delicious.conf b/etc/fonts/conf.d/80-delicious.conf
new file mode 120000
index 0000000000..e2d1d2204e
--- /dev/null
+++ b/etc/fonts/conf.d/80-delicious.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/80-delicious.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/90-synthetic.conf b/etc/fonts/conf.d/90-synthetic.conf
new file mode 120000
index 0000000000..20e176b3df
--- /dev/null
+++ b/etc/fonts/conf.d/90-synthetic.conf
@@ -0,0 +1 @@
+/usr/share/fontconfig/conf.avail/90-synthetic.conf
\ No newline at end of file
diff --git a/etc/fonts/conf.d/README b/etc/fonts/conf.d/README
new file mode 100644
index 0000000000..0d20ef4d03
--- /dev/null
+++ b/etc/fonts/conf.d/README
@@ -0,0 +1,23 @@
+conf.d/README
+
+Each file in this directory is a fontconfig configuration file. Fontconfig
+scans this directory, loading all files of the form [0-9][0-9]*.conf.
+These files are normally installed in /usr/share/fontconfig/conf.avail
+and then symlinked here, allowing them to be easily installed and then
+enabled/disabled by adjusting the symlinks.
+
+The files are loaded in numeric order, the structure of the configuration
+has led to the following conventions in usage:
+
+ Files beginning with: Contain:
+
+ 00 through 09 Font directories
+ 10 through 19 system rendering defaults (AA, etc)
+ 20 through 29 font rendering options
+ 30 through 39 family substitution
+ 40 through 49 generic identification, map family->generic
+ 50 through 59 alternate config file loading
+ 60 through 69 generic aliases, map generic->family
+ 70 through 79 select font (adjust which fonts are available)
+ 80 through 89 match target="scan" (modify scanned patterns)
+ 90 through 99 font synthesis
diff --git a/etc/fonts/fonts.conf b/etc/fonts/fonts.conf
new file mode 100644
index 0000000000..128a0ee34a
--- /dev/null
+++ b/etc/fonts/fonts.conf
@@ -0,0 +1,115 @@
+
+
+
+
+ Default configuration file
+
+
+
+
+
+ /usr/share/fonts
+ /usr/local/share/fonts
+ fonts
+
+ ~/.fonts
+
+
+
+
+ mono
+
+
+ monospace
+
+
+
+
+
+
+ sans serif
+
+
+ sans-serif
+
+
+
+
+
+
+ sans
+
+
+ sans-serif
+
+
+
+
+
+ system ui
+
+
+ system-ui
+
+
+
+
+
+
+ *.dpkg-tmp
+
+
+
+
+ *.dpkg-new
+
+
+
+
+ conf.d
+
+
+
+ /var/cache/fontconfig
+ fontconfig
+
+ ~/.fontconfig
+
+
+
+
+ 30
+
+
+
+
diff --git a/etc/fstab b/etc/fstab
new file mode 100644
index 0000000000..c2631503a6
--- /dev/null
+++ b/etc/fstab
@@ -0,0 +1,3 @@
+LABEL=cloudimg-rootfs / ext4 discard,commit=30,errors=remount-ro 0 1
+LABEL=BOOT /boot ext4 defaults 0 2
+LABEL=UEFI /boot/efi vfat umask=0077 0 1
diff --git a/etc/ftpchroot b/etc/ftpchroot
new file mode 100644
index 0000000000..756854df94
--- /dev/null
+++ b/etc/ftpchroot
@@ -0,0 +1 @@
+@psacln
diff --git a/etc/ftpusers b/etc/ftpusers
new file mode 100644
index 0000000000..c82cbc7f85
--- /dev/null
+++ b/etc/ftpusers
@@ -0,0 +1,19 @@
+# /etc/ftpusers: list of users disallowed FTP access.
+root
+adm
+bin
+daemon
+games
+halt
+lp
+mail
+man
+news
+nobody
+nscd
+operator
+shutdown
+sshd
+sync
+sys
+uucp
diff --git a/etc/fuse.conf b/etc/fuse.conf
new file mode 100644
index 0000000000..3c9b6ac987
--- /dev/null
+++ b/etc/fuse.conf
@@ -0,0 +1,17 @@
+# The file /etc/fuse.conf allows for the following parameters:
+#
+# user_allow_other - Using the allow_other mount option works fine as root, in
+# order to have it work as user you need user_allow_other in /etc/fuse.conf as
+# well. (This option allows users to use the allow_other option.) You need
+# allow_other if you want users other than the owner to access a mounted fuse.
+# This option must appear on a line by itself. There is no value, just the
+# presence of the option.
+
+#user_allow_other
+
+
+# mount_max = n - this option sets the maximum number of mounts.
+# Currently (2014) it must be typed exactly as shown
+# (with a single space before and after the equals sign).
+
+#mount_max = 1000
diff --git a/etc/fwupd/bios-settings.d/README.md b/etc/fwupd/bios-settings.d/README.md
new file mode 100644
index 0000000000..0d9fba88a7
--- /dev/null
+++ b/etc/fwupd/bios-settings.d/README.md
@@ -0,0 +1,25 @@
+# BIOS Settings
+
+On supported machines fwupd can enforce BIOS settings policy so that a user's desired settings are configured at bootup
+and prevent fwupd clients from changing them.
+
+## JSON policies
+
+A policy file can be created using `fwupdmgr`. First determine what settings you want to enforce by running:
+
+```shell
+# fwupdmgr get-bios-settings
+```
+
+After you have identified settings, create a JSON payload by listing them on the command line. Any number of attributes can
+be listed.
+For example for the BIOS setting `WindowsUEFIFirmwareUpdate` you would create a policy file like this:
+
+```shell
+# fwupdmgr get-bios-settings --json WindowsUEFIFirmwareUpdate > ~/foo.json
+```
+
+Now examine `~/foo.json` and modify the `BiosSettingCurrentValue` key to your desired value.
+
+Lastly place this policy file into `/etc/fwupd/bios-settings.d`. Any number of policies is supported, and they will be examined
+in alphabetical order. The next time that fwupd is started it will load this policy and ensure that no fwupd clients change it.
diff --git a/etc/fwupd/fwupd.conf b/etc/fwupd/fwupd.conf
new file mode 100644
index 0000000000..7b51467123
--- /dev/null
+++ b/etc/fwupd/fwupd.conf
@@ -0,0 +1,2 @@
+[fwupd]
+# use `man 5 fwupd.conf` for documentation
diff --git a/etc/fwupd/remotes.d/lvfs-testing.conf b/etc/fwupd/remotes.d/lvfs-testing.conf
new file mode 100644
index 0000000000..f900985dbb
--- /dev/null
+++ b/etc/fwupd/remotes.d/lvfs-testing.conf
@@ -0,0 +1,10 @@
+[fwupd Remote]
+
+# this remote provides metadata and firmware marked as 'testing' from the LVFS
+Enabled=false
+Title=Linux Vendor Firmware Service (testing)
+MetadataURI=https://cdn.fwupd.org/downloads/firmware-testing.xml.zst
+ReportURI=https://fwupd.org/lvfs/firmware/report
+OrderBefore=lvfs
+AutomaticReports=false
+ApprovalRequired=false
diff --git a/etc/fwupd/remotes.d/lvfs.conf b/etc/fwupd/remotes.d/lvfs.conf
new file mode 100644
index 0000000000..8894ac8aeb
--- /dev/null
+++ b/etc/fwupd/remotes.d/lvfs.conf
@@ -0,0 +1,11 @@
+[fwupd Remote]
+
+# this remote provides metadata and firmware marked as 'stable' from the LVFS
+Enabled=true
+Title=Linux Vendor Firmware Service
+MetadataURI=https://cdn.fwupd.org/downloads/firmware.xml.zst
+ReportURI=https://fwupd.org/lvfs/firmware/report
+SecurityReportURI=https://fwupd.org/lvfs/hsireports/upload
+AutomaticReports=false
+AutomaticSecurityReports=false
+ApprovalRequired=false
diff --git a/etc/fwupd/remotes.d/vendor-directory.conf b/etc/fwupd/remotes.d/vendor-directory.conf
new file mode 100644
index 0000000000..ab8e98f594
--- /dev/null
+++ b/etc/fwupd/remotes.d/vendor-directory.conf
@@ -0,0 +1,8 @@
+[fwupd Remote]
+# this remote provides dynamically generated metadata shipped by the OS vendor and can
+# be found in /usr/share/fwupd/remotes.d/vendor/firmware
+Enabled=true
+Title=Vendor (Automatic)
+Keyring=none
+MetadataURI=file:///usr/share/fwupd/remotes.d/vendor/firmware
+ApprovalRequired=false
diff --git a/etc/gai.conf b/etc/gai.conf
new file mode 100644
index 0000000000..4616ed005b
--- /dev/null
+++ b/etc/gai.conf
@@ -0,0 +1,65 @@
+# Configuration for getaddrinfo(3).
+#
+# So far only configuration for the destination address sorting is needed.
+# RFC 3484 governs the sorting. But the RFC also says that system
+# administrators should be able to overwrite the defaults. This can be
+# achieved here.
+#
+# All lines have an initial identifier specifying the option followed by
+# up to two values. Information specified in this file replaces the
+# default information. Complete absence of data of one kind causes the
+# appropriate default information to be used. The supported commands include:
+#
+# reload
+# If set to yes, each getaddrinfo(3) call will check whether this file
+# changed and if necessary reload. This option should not really be
+# used. There are possible runtime problems. The default is no.
+#
+# label
+# Add another rule to the RFC 3484 label table. See section 2.1 in
+# RFC 3484. The default is:
+#
+#label ::1/128 0
+#label ::/0 1
+#label 2002::/16 2
+#label ::/96 3
+#label ::ffff:0:0/96 4
+#label fec0::/10 5
+#label fc00::/7 6
+#label 2001:0::/32 7
+#
+# This default differs from the tables given in RFC 3484 by handling
+# (now obsolete) site-local IPv6 addresses and Unique Local Addresses.
+# The reason for this difference is that these addresses are never
+# NATed while IPv4 site-local addresses most probably are. Given
+# the precedence of IPv6 over IPv4 (see below) on machines having only
+# site-local IPv4 and IPv6 addresses a lookup for a global address would
+# see the IPv6 be preferred. The result is a long delay because the
+# site-local IPv6 addresses cannot be used while the IPv4 address is
+# (at least for the foreseeable future) NATed. We also treat Teredo
+# tunnels special.
+#
+# precedence
+# Add another rule to the RFC 3484 precedence table. See section 2.1
+# and 10.3 in RFC 3484. The default is:
+#
+#precedence ::1/128 50
+#precedence ::/0 40
+#precedence 2002::/16 30
+#precedence ::/96 20
+#precedence ::ffff:0:0/96 10
+#
+# For sites which prefer IPv4 connections change the last line to
+#
+#precedence ::ffff:0:0/96 100
+
+#
+# scopev4
+# Add another rule to the RFC 6724 scope table for IPv4 addresses.
+# By default the scope IDs described in section 3.2 in RFC 6724 are
+# used. Changing these defaults should hardly ever be necessary.
+# The defaults are equivalent to:
+#
+#scopev4 ::ffff:169.254.0.0/112 2
+#scopev4 ::ffff:127.0.0.0/104 2
+#scopev4 ::ffff:0.0.0.0/96 14
diff --git a/etc/gnutls/config b/etc/gnutls/config
new file mode 100644
index 0000000000..a545960678
--- /dev/null
+++ b/etc/gnutls/config
@@ -0,0 +1,6 @@
+[overrides]
+disabled-version = tls1.0
+disabled-version = tls1.1
+disabled-version = dtls0.9
+disabled-version = dtls1.0
+
diff --git a/etc/gprofng.rc b/etc/gprofng.rc
new file mode 100644
index 0000000000..188ce7a341
--- /dev/null
+++ b/etc/gprofng.rc
@@ -0,0 +1,134 @@
+# Copyright (C) 2021-2024 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING3. If not see
+# .
+#
+# Specify which classes of compiler commentary will be shown
+# with annotated source.
+scc all
+
+# Specify which classes of compiler commentary will be shown
+# with annotated disassembly
+dcc all:src
+
+# Set the default function-list metrics
+# for heap data, show inclusive leaks and bytes leaked; not allocations
+dmetrics i.heapleakbytes:e!heapleakbytes
+dmetrics i.heapleakcnt:e!heapleakcnt
+dmetrics i.heapallocbytes:e!heapallocbytes
+dmetrics i.heapalloccnt:e!heapalloccnt:
+
+# Clock profiling data
+# Note: use same display order of LMS_* in: er.rc, TimelineVariable.java,
+# Ovw_data.h, BaseMetricTreeNode.cc and Experiment.cc metric registration
+dmetrics i!total:e!.total
+# Show total cpu time
+dmetrics ei%.totalcpu
+dmetrics i!.user:e!.user
+dmetrics i!system:e!.system
+dmetrics i!trap:e!.trap
+dmetrics i!lock:e!.lock
+dmetrics i!datapfault:e!.datapfault
+dmetrics i!textpfault:e!.textpfault
+dmetrics i!kernelpfault:e!.kernelpfault
+dmetrics i!stop:e!.stop
+dmetrics i!wait:e!.wait
+dmetrics i!sleep:e!.sleep
+
+# for kernel clock profiling data, show inclusive and exclusive KCPU
+dmetrics ei.kcpu
+###dmetrics ie.kcpu
+
+# for count data, show exclusive metrics only
+dmetrics i!bit:e.bit
+
+# for er_generic data, show exclusive metrics only
+dmetrics i!icount:e.icount
+
+# Hide implementation hack. Functionmark column only serves
+# to force zero-count functions to be displayed.
+dmetrics e!bit_FM
+
+# for kernel profiles, show inclusive and exclusive kucycles and kcycles
+# (kucycles and kcycles are for 12.3 and older experiments, Obsolete TBR)
+dmetrics ei.kucycles:ei.kcycles
+###dmetrics ie.kucycles:ie.kcycles
+
+# for derived HWC metrics, show exclusive only
+dmetrics i!IPC:e!.IPC
+dmetrics i!CPI:e!.CPI
+dmetrics i!K_IPC:e!.K_IPC
+dmetrics i!K_CPI:e!.K_CPI
+
+# for HWC, show exclusive only
+dmetrics i!hwc:e%.hwc
+
+# for synctrace, show inclusive only
+dmetrics i.sync:e!sync
+dmetrics i.syncn:e!syncn
+
+# Set the default function-list metrics for OMP profiling
+dmetrics i.ompwork:e!ompwork
+dmetrics i.ompwait:e!ompwait
+dmetrics i!.masterthread:e!.masterthread
+
+#set the default function-list metrics for deadlock detection
+dmetrics i!deadlocks:e.deadlocks
+
+# io data
+dmetrics i.ioreadtime:e!ioreadtime
+dmetrics i.iowritetime:e!iowritetime
+dmetrics i.ioothertime:e!ioothertime
+dmetrics i.ioerrortime:e!ioerrortime
+dmetrics i!.ioreadcnt:e!ioreadcnt
+dmetrics i!.ioreadbytes:e!ioreadbytes
+dmetrics i!.iowritecnt:e!iowritecnt
+dmetrics i!.iowritebytes:e!iowritebytes
+dmetrics i!.ioothercnt:e!ioothercnt
+dmetrics i!.ioerrorcnt:e!ioerrorcnt
+
+# for any other unnamed metrics, don't show them
+dmetrics ie!.any
+
+# don't show size or address; show name
+dmetrics !size:!address:name
+
+# Select the default function-list sorting metric
+dsort ei.any:name
+###dsort ie.any:name
+
+# Set function name style
+name long
+
+# Set View mode to user
+viewmode user
+
+# Set compare mode
+compare off
+
+# Set enabling descendants to on
+en_desc on
+
+# Set path where the gprofng libraries are installed
+preload_libdirs ../lib:../lib32:../lib64
+
+# Add search path for annotated source and disasm
+addpath $expts:.
+
+# Add controls for specific load objects
+# object_hide
+
+# gprofng GUI tabs
+tabs dsrc:function:timeline:processes:threads:ctree:callflame:src:dis:leaks:ioactivity:ifreq:callers-callees:header
+
diff --git a/etc/groff/man.local b/etc/groff/man.local
new file mode 100644
index 0000000000..5254d19471
--- /dev/null
+++ b/etc/groff/man.local
@@ -0,0 +1,59 @@
+.\" This file is loaded by an.tmac.
+.\"
+.\" Put local modifications to groff_man(7)'s behavior here.
+.\"
+.\" Change "0" to "1" to enable OSC 8 links on SGR-capable grotty(1)
+.\" output devices.
+.if !'\*[.T]'html' \
+. if !r U \
+. nr U 1
+.\"
+.\" "CW" is not a portable font name, but some man pages use it anyway.
+.\" Uncomment this to suppress warnings produced by such pages. This
+.\" test remaps the font to roman ("R") on nroff (terminal) devices. You
+.\" might prefer to remap it to bold ("B") instead.
+.if n .ftr CW R
+.\"
+.\" A de facto standard URL format for man pages is recognized
+.\" everywhere except Apple, where different macOS applications expect
+.\" different formats.
+.\" 1: man:groff(1) -- package default
+.\" 2: x-man-page://1/groff -- macOS/Mac OS X since 10.3 (Panther)
+.\" 3: man:groff.1 -- Bwana (Mac OS X)
+.\" 4: x-man-doc://1/groff -- ManOpen (Mac OS X pre-2005)
+.\" Set this register to configure which the `MR` macro uses.
+.\" .nr an*MR-URL-format 1
+.\"
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
+.
+.if n \{\
+. \" Debian: As of groff 1.23.0, the "-", "'", "`", "^", and "~" input
+. \" characters are mapped to non-Basic Latin code points in output from
+. \" the "utf8" device, for consistency with other output devices such as
+. \" PDF. Unfortunately in practice this still causes far too much
+. \" disruption for innocent users of manual pages who just want to be able
+. \" to search for characters normally, so preserve the old behaviour.
+. \" Comment this out if you want to make sure that manual pages you're
+. \" writing are clear of these problems.
+. if '\*[.T]'utf8' \{\
+. char - \-
+. char ' \[aq]
+. char ` \[ga]
+. char ^ \[ha]
+. char ~ \[ti]
+. \}
+.
+. \" Debian: "\-" is more commonly used for option dashes than for minus
+. \" signs in manual pages, so map it to plain "-" for HTML/XHTML output
+. \" rather than letting it be rendered as "−".
+. ie '\*[.T]'html' \
+. char \- \N'45'
+. el \{\
+. if '\*[.T]'xhtml' \
+. char \- \N'45'
+. \}
+.\}
diff --git a/etc/groff/mdoc.local b/etc/groff/mdoc.local
new file mode 100644
index 0000000000..4012612b12
--- /dev/null
+++ b/etc/groff/mdoc.local
@@ -0,0 +1,43 @@
+.\" This file is loaded by mdoc.tmac.
+.\"
+.\" Put local modifications to groff_mdoc(7)'s behavior here.
+.\"
+.\" "CW" is not a portable font name, but some man pages use it anyway.
+.\" Uncomment this to suppress warnings produced by such pages. This
+.\" test remaps the font to roman ("R") on nroff (terminal) devices. You
+.\" might prefer to remap it to bold ("B") instead.
+.if n .ftr CW R
+.\"
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
+.
+.if n \{\
+. \" Debian: As of groff 1.23.0, the "-", "'", "`", "^", and "~" input
+. \" characters are mapped to non-Basic Latin code points in output from
+. \" the "utf8" device, for consistency with other output devices such as
+. \" PDF. Unfortunately in practice this still causes far too much
+. \" disruption for innocent users of manual pages who just want to be able
+. \" to search for characters normally, so preserve the old behaviour.
+. \" Comment this out if you want to make sure that manual pages you're
+. \" writing are clear of these problems.
+. if '\*[.T]'utf8' \{\
+. char - \-
+. char ' \[aq]
+. char ` \[ga]
+. char ^ \[ha]
+. char ~ \[ti]
+. \}
+.
+. \" Debian: "\-" is more commonly used for option dashes than for minus
+. \" signs in manual pages, so map it to plain "-" for HTML/XHTML output
+. \" rather than letting it be rendered as "−".
+. ie '\*[.T]'html' \
+. char \- \N'45'
+. el \{\
+. if '\*[.T]'xhtml' \
+. char \- \N'45'
+. \}
+.\}
diff --git a/etc/group b/etc/group
new file mode 100644
index 0000000000..8e26a83817
--- /dev/null
+++ b/etc/group
@@ -0,0 +1,79 @@
+root:x:0:
+daemon:x:1:
+bin:x:2:
+sys:x:3:
+adm:x:4:syslog
+tty:x:5:
+disk:x:6:
+lp:x:7:
+mail:x:8:
+news:x:9:
+uucp:x:10:
+man:x:12:
+proxy:x:13:
+kmem:x:15:
+dialout:x:20:
+fax:x:21:
+voice:x:22:
+cdrom:x:24:
+floppy:x:25:
+tape:x:26:
+sudo:x:27:
+audio:x:29:
+dip:x:30:
+www-data:x:33:www-data
+backup:x:34:
+operator:x:37:
+list:x:38:
+irc:x:39:
+src:x:40:
+shadow:x:42:
+utmp:x:43:
+video:x:44:
+sasl:x:45:
+plugdev:x:46:
+staff:x:50:
+games:x:60:
+users:x:100:
+nogroup:x:65534:
+systemd-journal:x:999:
+systemd-network:x:998:
+crontab:x:997:
+systemd-timesync:x:996:
+input:x:995:
+sgx:x:994:
+kvm:x:993:
+render:x:992:
+messagebus:x:101:
+syslog:x:102:
+systemd-resolve:x:991:
+uuidd:x:103:
+tss:x:104:
+lxd:x:105:
+_ssh:x:106:
+rdma:x:107:
+tcpdump:x:108:
+landscape:x:109:
+fwupd-refresh:x:990:
+polkitd:x:989:
+admin:x:110:
+netdev:x:111:
+mysql:x:112:
+psaadm:x:1000:psaadm,sw-cp-server
+swkey-data:x:1001:psaadm
+psaserv:x:1002:psaadm,psaftp,www-data
+psacln:x:1003:
+sw-cp-server:x:988:sw-cp-server
+lock-manager:x:987:psaadm
+popuser:x:31:
+ssl-cert:x:113:
+postfix:x:114:
+postdrop:x:115:
+plesksendmail:x:986:
+dovecot:x:1004:
+dovenull:x:1005:
+horde_sysgroup:x:1006:
+debian-spamd:x:116:
+psaftp:x:1007:psaftp
+drweb:x:1008:
+docker:x:985:
diff --git a/etc/group- b/etc/group-
new file mode 100644
index 0000000000..b730afb38a
--- /dev/null
+++ b/etc/group-
@@ -0,0 +1,78 @@
+root:x:0:
+daemon:x:1:
+bin:x:2:
+sys:x:3:
+adm:x:4:syslog
+tty:x:5:
+disk:x:6:
+lp:x:7:
+mail:x:8:
+news:x:9:
+uucp:x:10:
+man:x:12:
+proxy:x:13:
+kmem:x:15:
+dialout:x:20:
+fax:x:21:
+voice:x:22:
+cdrom:x:24:
+floppy:x:25:
+tape:x:26:
+sudo:x:27:
+audio:x:29:
+dip:x:30:
+www-data:x:33:www-data
+backup:x:34:
+operator:x:37:
+list:x:38:
+irc:x:39:
+src:x:40:
+shadow:x:42:
+utmp:x:43:
+video:x:44:
+sasl:x:45:
+plugdev:x:46:
+staff:x:50:
+games:x:60:
+users:x:100:
+nogroup:x:65534:
+systemd-journal:x:999:
+systemd-network:x:998:
+crontab:x:997:
+systemd-timesync:x:996:
+input:x:995:
+sgx:x:994:
+kvm:x:993:
+render:x:992:
+messagebus:x:101:
+syslog:x:102:
+systemd-resolve:x:991:
+uuidd:x:103:
+tss:x:104:
+lxd:x:105:
+_ssh:x:106:
+rdma:x:107:
+tcpdump:x:108:
+landscape:x:109:
+fwupd-refresh:x:990:
+polkitd:x:989:
+admin:x:110:
+netdev:x:111:
+mysql:x:112:
+psaadm:x:1000:psaadm,sw-cp-server
+swkey-data:x:1001:psaadm
+psaserv:x:1002:psaadm,psaftp,www-data
+psacln:x:1003:
+sw-cp-server:x:988:sw-cp-server
+lock-manager:x:987:psaadm
+popuser:x:31:
+ssl-cert:x:113:
+postfix:x:114:
+postdrop:x:115:
+plesksendmail:x:986:
+dovecot:x:1004:
+dovenull:x:1005:
+horde_sysgroup:x:1006:
+debian-spamd:x:116:
+psaftp:x:1007:psaftp
+drweb:x:1008:
diff --git a/etc/grub.d/00_header b/etc/grub.d/00_header
new file mode 100755
index 0000000000..69e41114f7
--- /dev/null
+++ b/etc/grub.d/00_header
@@ -0,0 +1,448 @@
+#! /bin/sh
+set -e
+
+# grub-mkconfig helper script.
+# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see .
+
+prefix="/usr"
+exec_prefix="/usr"
+datarootdir="/usr/share"
+grub_lang=`echo $LANG | cut -d . -f 1`
+grubdir="`echo "/boot/grub" | sed 's,//*,/,g'`"
+quick_boot="1"
+
+export TEXTDOMAIN=grub
+export TEXTDOMAINDIR="${datarootdir}/locale"
+
+. "$pkgdatadir/grub-mkconfig_lib"
+
+# Do this as early as possible, since other commands might depend on it.
+# (e.g. the `loadfont' command might need lvm or raid modules)
+for i in ${GRUB_PRELOAD_MODULES} ; do
+ echo "insmod $i"
+done
+
+if [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi
+if [ "x${GRUB_DEFAULT}" = "xsaved" ] ; then GRUB_DEFAULT='${saved_entry}' ; fi
+if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi
+if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=auto ; fi
+
+if [ "x${GRUB_DEFAULT_BUTTON}" = "x" ] ; then GRUB_DEFAULT_BUTTON="$GRUB_DEFAULT" ; fi
+if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_entry}' ; fi
+if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi
+
+cat << EOF
+if [ -s \$prefix/grubenv ]; then
+ set have_grubenv=true
+ load_env
+fi
+EOF
+cat < /dev/null ; then
+ font_path="${path}"
+ else
+ continue
+ fi
+ break 2
+ done
+ done
+ if [ -n "${font_path}" ] ; then
+ cat << EOF
+if [ x\$feature_default_font_path = xy ] ; then
+ font=unicode
+else
+EOF
+ # Make the font accessible
+ prepare_grub_to_access_device `${grub_probe} --target=device "${font_path}"`
+ cat << EOF
+ font="`make_system_path_relative_to_its_root "${font_path}"`"
+fi
+
+if loadfont \$font ; then
+EOF
+ else
+ cat << EOF
+if loadfont unicode ; then
+EOF
+ fi
+ fi
+
+ cat << EOF
+ set gfxmode=${GRUB_GFXMODE}
+ load_video
+ insmod gfxterm
+EOF
+
+# Gettext variables and module
+if [ "x${grub_lang}" != "xC" ] && [ "x${LANG}" != "xPOSIX" ] && [ "x${LANG}" != "x" ]; then
+ cat << EOF
+ set locale_dir=\$prefix/locale
+ set lang=${grub_lang}
+ insmod gettext
+EOF
+fi
+
+cat <&2
+
+ prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_THEME"`
+ cat << EOF
+insmod gfxmenu
+EOF
+ themedir="`dirname "$GRUB_THEME"`"
+ for x in "$themedir"/*.pf2 "$themedir"/f/*.pf2; do
+ if [ -f "$x" ]; then
+ cat << EOF
+loadfont (\$root)`make_system_path_relative_to_its_root $x`
+EOF
+ fi
+ done
+ if [ x"`echo "$themedir"/*.jpg`" != x"$themedir/*.jpg" ] || [ x"`echo "$themedir"/*.jpeg`" != x"$themedir/*.jpeg" ]; then
+ cat << EOF
+insmod jpeg
+EOF
+ fi
+ if [ x"`echo "$themedir"/*.png`" != x"$themedir/*.png" ]; then
+ cat << EOF
+insmod png
+EOF
+ fi
+ if [ x"`echo "$themedir"/*.tga`" != x"$themedir/*.tga" ]; then
+ cat << EOF
+insmod tga
+EOF
+ fi
+
+ cat << EOF
+set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME`
+export theme
+EOF
+ elif [ "x$GRUB_BACKGROUND" != x ] && [ -f "$GRUB_BACKGROUND" ] \
+ && is_path_readable_by_grub "$GRUB_BACKGROUND"; then
+ gettext_printf "Found background: %s\n" "$GRUB_BACKGROUND" >&2
+ case "$GRUB_BACKGROUND" in
+ *.png) reader=png ;;
+ *.tga) reader=tga ;;
+ *.jpg|*.jpeg) reader=jpeg ;;
+ *) gettext "Unsupported image format" >&2; echo >&2; exit 1 ;;
+ esac
+ prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_BACKGROUND"`
+ cat << EOF
+insmod $reader
+background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
+EOF
+ fi
+fi
+
+make_timeout ()
+{
+ cat << EOF
+if [ "\${recordfail}" = 1 ] ; then
+ set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
+else
+EOF
+ if [ "x${3}" != "x" ] ; then
+ timeout="${2}"
+ style="${3}"
+ elif [ "x${1}" != "x" ] && \
+ ([ "$quick_boot" = 1 ] || [ "x${1}" != "x0" ]) ; then
+ # Handle the deprecated GRUB_HIDDEN_TIMEOUT scheme.
+ timeout="${1}"
+ if [ "x${2}" != "x0" ] ; then
+ grub_warn "$(gettext "Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.")"
+ fi
+ if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
+ style="hidden"
+ verbose=
+ else
+ style="countdown"
+ verbose=" --verbose"
+ fi
+ else
+ # No hidden timeout, so treat as GRUB_TIMEOUT_STYLE=menu
+ timeout="${2}"
+ style="menu"
+ fi
+ cat << EOF
+ if [ x\$feature_timeout_style = xy ] ; then
+ set timeout_style=${style}
+ set timeout=${timeout}
+EOF
+ if [ "x${style}" = "xmenu" ] ; then
+ cat << EOF
+ # Fallback normal timeout code in case the timeout_style feature is
+ # unavailable.
+ else
+ set timeout=${timeout}
+EOF
+ else
+ cat << EOF
+ # Fallback hidden-timeout code in case the timeout_style feature is
+ # unavailable.
+ elif sleep${verbose} --interruptible ${timeout} ; then
+ set timeout=0
+EOF
+ fi
+ cat << EOF
+ fi
+fi
+EOF
+if [ "$recordfail_broken" = 1 ]; then
+ cat << EOF
+if [ \$grub_platform = efi ]; then
+ set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
+ if [ x\$feature_timeout_style = xy ] ; then
+ set timeout_style=menu
+ fi
+fi
+EOF
+fi
+}
+
+if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
+ cat <
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see .
+
+# Include the GRUB helper library for grub-mkconfig.
+. /usr/share/grub/grub-mkconfig_lib
+
+# We want to work in /boot/grub/ only.
+test -d /boot/grub; cd /boot/grub
+
+# Set the location of a possibly necessary cache file for the background image.
+# NOTE: This MUST BE A DOTFILE to avoid confusing it with user-defined images.
+BACKGROUND_CACHE=".background_cache"
+
+set_default_theme(){
+ case $GRUB_DISTRIBUTOR in
+ Tanglu|Ubuntu|Kubuntu)
+ # Set a monochromatic theme for Tanglu/Ubuntu.
+ echo "${1}set menu_color_normal=white/black"
+ echo "${1}set menu_color_highlight=black/light-gray"
+
+ if [ -e /usr/share/plymouth/themes/default.grub ]; then
+ sed "s/^/${1}/" /usr/share/plymouth/themes/default.grub
+ fi
+ # For plymouth backward compatibility. Can be removed
+ # after xenial.
+ if [ -e /lib/plymouth/themes/default.grub ]; then
+ sed "s/^/${1}/" /lib/plymouth/themes/default.grub
+ fi
+ ;;
+ *)
+ # Set the traditional Debian blue theme.
+ echo "${1}set menu_color_normal=cyan/blue"
+ echo "${1}set menu_color_highlight=white/blue"
+ ;;
+ esac
+}
+
+module_available(){
+ local module
+ for module in "${1}.mod" */"${1}.mod"; do
+ if [ -f "${module}" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+set_background_image(){
+ # Step #1: Search all available output modes ...
+ local output
+ for output in ${GRUB_TERMINAL_OUTPUT}; do
+ if [ "x$output" = "xgfxterm" ]; then
+ break
+ fi
+ done
+
+ # ... and check if we are able to display a background image at all.
+ if ! [ "x${output}" = "xgfxterm" ]; then
+ return 1
+ fi
+
+ # Step #2: Check if the specified background image exists.
+ if ! [ -f "${1}" ]; then
+ return 2
+ fi
+
+ # Step #3: Search the correct GRUB module for our background image.
+ local reader
+ case "${1}" in
+ *.jpg|*.JPG|*.jpeg|*.JPEG) reader="jpeg";;
+ *.png|*.PNG) reader="png";;
+ *.tga|*.TGA) reader="tga";;
+ *) return 3;; # Unknown image type.
+ esac
+
+ # Step #4: Check if the necessary GRUB module is available.
+ if ! module_available "${reader}"; then
+ return 4
+ fi
+
+ # Step #5: Check if GRUB can read the background image directly.
+ # If so, we can remove the cache file (if any). Otherwise the background
+ # image needs to be cached under /boot/grub/.
+ if is_path_readable_by_grub "${1}"; then
+ rm --force "${BACKGROUND_CACHE}.jpeg" \
+ "${BACKGROUND_CACHE}.png" "${BACKGROUND_CACHE}.tga"
+ elif cp "${1}" "${BACKGROUND_CACHE}.${reader}"; then
+ set -- "${BACKGROUND_CACHE}.${reader}" "${2}" "${3}"
+ else
+ return 5
+ fi
+
+ # Step #6: Prepare GRUB to read the background image.
+ if ! prepare_grub_to_access_device "`${grub_probe} --target=device "${1}"`"; then
+ return 6
+ fi
+
+ # Step #7: Everything went fine, print out a message to stderr ...
+ echo "Found background image: ${1}" >&2
+
+ # ... and write our configuration snippet to stdout. Use the colors
+ # desktop-base specified. If we're using a user-defined background, use
+ # the default colors since we've got no idea how the image looks like.
+ # If loading the background image fails, use the default theme.
+ echo "insmod ${reader}"
+ echo "if background_image `make_system_path_relative_to_its_root "${1}"`; then"
+ if [ -n "${2}" ]; then
+ echo " set color_normal=${2}"
+ fi
+ if [ -n "${3}" ]; then
+ echo " set color_highlight=${3}"
+ fi
+ if [ -z "${2}" ] && [ -z "${3}" ]; then
+ echo " true"
+ fi
+ echo "else"
+ set_default_theme " "
+ echo "fi"
+}
+
+# Earlier versions of grub-pc copied the default background image to /boot/grub
+# during postinst. Remove those obsolete images if they haven't been touched by
+# the user. They are still available under /usr/share/images/desktop-base/ if
+# desktop-base is installed.
+while read checksum background; do
+ if [ -f "${background}" ] && [ "x`sha1sum "${background}"`" = "x${checksum} ${background}" ]; then
+ echo "Removing old background image: ${background}" >&2
+ rm "${background}"
+ fi
+done <.
+
+prefix="/usr"
+exec_prefix="/usr"
+datarootdir="/usr/share"
+ubuntu_recovery="1"
+quiet_boot="1"
+quick_boot="1"
+gfxpayload_dynamic="1"
+vt_handoff="1"
+
+. "$pkgdatadir/grub-mkconfig_lib"
+
+export TEXTDOMAIN=grub
+export TEXTDOMAINDIR="${datarootdir}/locale"
+
+CLASS="--class gnu-linux --class gnu --class os"
+
+if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
+ OS=GNU/Linux
+else
+ case ${GRUB_DISTRIBUTOR} in
+ Ubuntu|Kubuntu)
+ OS="${GRUB_DISTRIBUTOR}"
+ ;;
+ *)
+ OS="${GRUB_DISTRIBUTOR} GNU/Linux"
+ ;;
+ esac
+ CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
+fi
+
+# loop-AES arranges things so that /dev/loop/X can be our root device, but
+# the initrds that Linux uses don't like that.
+case ${GRUB_DEVICE} in
+ /dev/loop/*|/dev/loop[0-9])
+ GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
+ # We can't cope with devices loop-mounted from files here.
+ case ${GRUB_DEVICE} in
+ /dev/*) ;;
+ *) exit 0 ;;
+ esac
+ ;;
+esac
+
+if [ -x /lib/recovery-mode/recovery-menu ]; then
+ : ${GRUB_CMDLINE_LINUX_RECOVERY:=recovery}
+else
+ : ${GRUB_CMDLINE_LINUX_RECOVERY:=single}
+fi
+
+# Default to disabling partition uuid support to maintian compatibility with
+# older kernels.
+: ${GRUB_DISABLE_LINUX_PARTUUID=true}
+
+# get_dm_field_for_dev /dev/dm-0 uuid -> get the device mapper UUID for /dev/dm-0
+# get_dm_field_for_dev /dev/dm-1 name -> get the device mapper name for /dev/dm-1
+# etc
+get_dm_field_for_dev () {
+ dmsetup info -c --noheadings -o $2 $1 2>/dev/null
+}
+
+# Is $1 a multipath device?
+is_multipath () {
+ local dmuuid dmtype
+ dmuuid="$(get_dm_field_for_dev $1 uuid)"
+ if [ $? -ne 0 ]; then
+ # Not a device mapper device -- or dmsetup not installed, and as
+ # multipath depends on kpartx which depends on dmsetup, if there is no
+ # dmsetup then there are not going to be any multipath devices.
+ return 1
+ fi
+ # A device mapper "uuid" is always -. If is of the form
+ # part[0-9] then is the device the partition is on and we want to
+ # look at that instead. A multipath node always has of mpath.
+ dmtype="${dmuuid%%-*}"
+ if [ "${dmtype#part}" != "$dmtype" ]; then
+ dmuuid="${dmuuid#*-}"
+ dmtype="${dmuuid%%-*}"
+ fi
+ if [ "$dmtype" = "mpath" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+if test -e "${GRUB_DEVICE}" && is_multipath "${GRUB_DEVICE}"; then
+ # If / is multipathed, there will be multiple paths to the partition, so
+ # using root=UUID= exposes the boot process to udev races. In addition
+ # GRUB_DEVICE in this case will be /dev/dm-0 or similar -- better to use a
+ # symlink that depends on the multipath name.
+ GRUB_DEVICE=/dev/mapper/"$(get_dm_field_for_dev $GRUB_DEVICE name)"
+ GRUB_DISABLE_LINUX_UUID=true
+fi
+
+# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
+# and mounting btrfs requires user space scanning, so force UUID in this case.
+if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \
+ || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
+ && [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \
+ || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
+ && ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
+ || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
+ LINUX_ROOT_DEVICE=${GRUB_DEVICE}
+elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \
+ || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then
+ LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
+else
+ LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
+fi
+
+case x"$GRUB_FS" in
+ xbtrfs)
+ rootsubvol="`make_system_path_relative_to_its_root /`"
+ rootsubvol="${rootsubvol#/}"
+ if [ "x${rootsubvol}" != x ]; then
+ GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
+ fi;;
+ xzfs)
+ # We have a more specialized ZFS handler, with multiple system in 10_linux_zfs.
+ if [ -e "`dirname $(readlink -f $0)`/10_linux_zfs" ]; then
+ exit 0
+ fi
+ rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
+ bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
+ LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}"
+ ;;
+esac
+
+title_correction_code=
+
+if [ "$ubuntu_recovery" = 1 ]; then
+ GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY nomodeset"
+fi
+
+if [ "$vt_handoff" = 1 ]; then
+ for word in $GRUB_CMDLINE_LINUX_DEFAULT; do
+ if [ "$word" = splash ]; then
+ GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \$vt_handoff"
+ fi
+ done
+fi
+
+if [ x"$GRUB_FORCE_PARTUUID" != x ]; then
+ gettext_printf "GRUB_FORCE_PARTUUID is set, will attempt initrdless boot\n" >&2
+ cat << EOF
+#
+# GRUB_FORCE_PARTUUID is set, will attempt initrdless boot
+# Upon panic fallback to booting with initrd
+EOF
+ echo "set partuuid=${GRUB_FORCE_PARTUUID}"
+fi
+
+linux_entry ()
+{
+ os="$1"
+ version="$2"
+ type="$3"
+ args="$4"
+
+ if [ -z "$boot_device_id" ]; then
+ boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
+ fi
+ if [ x$type != xsimple ] ; then
+ case $type in
+ recovery)
+ title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")" ;;
+ *)
+ title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
+ esac
+ if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
+ replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
+ quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
+ title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
+ grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
+ fi
+ echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+ else
+ echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+ fi
+ if [ "$quick_boot" = 1 ]; then
+ echo " recordfail" | sed "s/^/$submenu_indentation/"
+ fi
+ if [ x$type != xrecovery ] ; then
+ save_default_entry | grub_add_tab
+ fi
+
+ # Use ELILO's generic "efifb" when it's known to be available.
+ # FIXME: We need an interface to select vesafb in case efifb can't be used.
+ if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
+ echo " load_video" | sed "s/^/$submenu_indentation/"
+ else
+ if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
+ echo " load_video" | sed "s/^/$submenu_indentation/"
+ fi
+ fi
+ if ([ "$ubuntu_recovery" = 0 ] || [ x$type != xrecovery ]) && \
+ ([ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 1 ]); then
+ echo " gfxmode \$linux_gfx_mode" | sed "s/^/$submenu_indentation/"
+ fi
+
+ echo " insmod gzio" | sed "s/^/$submenu_indentation/"
+ echo " if [ x\$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi" | sed "s/^/$submenu_indentation/"
+
+ if [ x$dirname = x/ ]; then
+ if [ -z "${prepare_root_cache}" ]; then
+ prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
+ fi
+ printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/"
+ else
+ if [ -z "${prepare_boot_cache}" ]; then
+ prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
+ fi
+ printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
+ fi
+ if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
+ message="$(gettext_printf "Loading Linux %s ..." ${version})"
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$(echo "$message" | grub_quote)'
+EOF
+ fi
+ # We have initrd and PARTUUID is set - we try to boot without initrd, and fallback to using it
+ # if it fails.
+ # "panic=-1" means "on panic reboot immediately". "panic=0" disables the reboot behavior.
+ if [ x"$GRUB_FORCE_PARTUUID" != x ]; then
+ linux_root_device_thisversion="PARTUUID=${GRUB_FORCE_PARTUUID}"
+ fi
+ message="$(gettext_printf "Loading initial ramdisk ...")"
+ initrdlessfail_msg="$(gettext_printf "GRUB_FORCE_PARTUUID set, initrdless boot failed. Attempting with initrd.")"
+ initrdlesstry_msg="$(gettext_printf "GRUB_FORCE_PARTUUID set, attempting initrdless boot.")"
+ initrd_path=
+ for i in ${initrd}; do
+ initrd_path="${initrd_path} ${rel_dirname}/${i}"
+ done
+ initrd_path_only_early=
+ for i in ${initrd_early}; do
+ initrd_path_only_early="${initrd_path_only_early} ${rel_dirname}/${i}"
+ done
+ if test -n "${initrd}" && [ x"$GRUB_FORCE_PARTUUID" != x ]; then
+ sed "s/^/$submenu_indentation/" << EOF
+ if [ "\${initrdfail}" = 1 ]; then
+ echo '$(echo "$initrdlessfail_msg" | grub_quote)'
+ linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
+EOF
+ if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$(echo "$message" | grub_quote)'
+EOF
+ fi
+ sed "s/^/$submenu_indentation/" << EOF
+ initrd $(echo $initrd_path)
+ else
+ echo '$(echo "$initrdlesstry_msg" | grub_quote)'
+ linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} panic=-1
+EOF
+ if [ -n "$initrd_path_only_early" ]; then
+ sed "s/^/$submenu_indentation/" << EOF
+ initrd $(echo $initrd_path_only_early)
+EOF
+ fi
+ sed "s/^/$submenu_indentation/" << EOF
+ fi
+ initrdfail
+EOF
+ else
+ # We don't have initrd or we don't want to set PARTUUID. Don't try initrd-less boot with fallback.
+ sed "s/^/$submenu_indentation/" << EOF
+ linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
+EOF
+ if test -n "${initrd}"; then
+ # We do have initrd - let's use it at boot.
+ # TRANSLATORS: ramdisk isn't identifier. Should be translated.
+ if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$(echo "$message" | grub_quote)'
+EOF
+ fi
+ sed "s/^/$submenu_indentation/" << EOF
+ initrd $(echo $initrd_path)
+EOF
+ fi
+ if test -n "${dtb}" ; then
+ if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
+ message="$(gettext_printf "Loading device tree blob...")"
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$(echo "$message" | grub_quote)'
+EOF
+ fi
+ sed "s/^/$submenu_indentation/" << EOF
+ devicetree ${rel_dirname}/${dtb}
+EOF
+ fi
+ fi
+ sed "s/^/$submenu_indentation/" << EOF
+}
+EOF
+}
+
+machine=`uname -m`
+case "x$machine" in
+ xi?86 | xx86_64)
+ list=
+ for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
+ if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
+ done ;;
+ *)
+ list=
+ for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
+ if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
+ done ;;
+esac
+
+case "$machine" in
+ i?86) GENKERNEL_ARCH="x86" ;;
+ mips|mips64) GENKERNEL_ARCH="mips" ;;
+ mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
+ arm*) GENKERNEL_ARCH="arm" ;;
+ *) GENKERNEL_ARCH="$machine" ;;
+esac
+
+case "$GENKERNEL_ARCH" in
+ x86*) GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY dis_ucode_ldr";;
+esac
+
+prepare_boot_cache=
+prepare_root_cache=
+boot_device_id=
+title_correction_code=
+
+cat << 'EOF'
+function gfxmode {
+ set gfxpayload="${1}"
+EOF
+if [ "$vt_handoff" = 1 ]; then
+ cat << 'EOF'
+ if [ "${1}" = "keep" ]; then
+ set vt_handoff=vt.handoff=7
+ else
+ set vt_handoff=
+ fi
+EOF
+fi
+cat << EOF
+}
+EOF
+
+# Use ELILO's generic "efifb" when it's known to be available.
+# FIXME: We need an interface to select vesafb in case efifb can't be used.
+if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 0 ]; then
+ echo "set linux_gfx_mode=$GRUB_GFXPAYLOAD_LINUX"
+else
+ cat << EOF
+if [ "\${recordfail}" != 1 ]; then
+ if [ -e \${prefix}/gfxblacklist.txt ]; then
+ if [ \${grub_platform} != pc ]; then
+ set linux_gfx_mode=keep
+ elif hwmatch \${prefix}/gfxblacklist.txt 3; then
+ if [ \${match} = 0 ]; then
+ set linux_gfx_mode=keep
+ else
+ set linux_gfx_mode=text
+ fi
+ else
+ set linux_gfx_mode=text
+ fi
+ else
+ set linux_gfx_mode=keep
+ fi
+else
+ set linux_gfx_mode=text
+fi
+EOF
+fi
+cat << EOF
+export linux_gfx_mode
+EOF
+
+# Extra indentation to add to menu entries in a submenu. We're not in a submenu
+# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
+submenu_indentation=""
+
+# Perform a reverse version sort on the entire list.
+# Temporarily replace the '.old' suffix by ' 1' and append ' 2' for all
+# other files to order the '.old' files after their non-old counterpart
+# in reverse-sorted order.
+
+reverse_sorted_list=$(echo $list | tr ' ' '\n' | sed -e 's/\.old$/ 1/; / 1$/! s/$/ 2/' | version_sort -r | sed -e 's/ 1$/.old/; s/ 2$//')
+
+if [ "x$GRUB_TOP_LEVEL" != x ]; then
+ reverse_sorted_list=$(grub_move_to_front "$GRUB_TOP_LEVEL" ${reverse_sorted_list})
+fi
+
+is_top_level=true
+for linux in ${reverse_sorted_list}; do
+ gettext_printf "Found linux image: %s\n" "$linux" >&2
+ basename=`basename $linux`
+ dirname=`dirname $linux`
+ rel_dirname=`make_system_path_relative_to_its_root $dirname`
+ version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
+ alt_version=`echo $version | sed -e "s,\.old$,,g"`
+ linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
+
+ initrd_early=
+ for i in ${GRUB_EARLY_INITRD_LINUX_STOCK} \
+ ${GRUB_EARLY_INITRD_LINUX_CUSTOM}; do
+ if test -e "${dirname}/${i}" ; then
+ initrd_early="${initrd_early} ${i}"
+ fi
+ done
+
+ initrd_real=
+ for i in "initrd.img-${version}" "initrd-${version}.img" \
+ "initrd-${alt_version}.img.old" "initrd-${version}.gz" \
+ "initrd-${alt_version}.gz.old" "initrd-${version}" \
+ "initramfs-${version}.img" "initramfs-${alt_version}.img.old" \
+ "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
+ "initrd-${alt_version}" "initramfs-${alt_version}.img" \
+ "initramfs-genkernel-${version}" \
+ "initramfs-genkernel-${alt_version}" \
+ "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
+ "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
+ if test -e "${dirname}/${i}" ; then
+ initrd_real="${i}"
+ break
+ fi
+ done
+
+ initrd=
+ if test -n "${initrd_early}" || test -n "${initrd_real}"; then
+ initrd="${initrd_early} ${initrd_real}"
+
+ initrd_display=
+ for i in ${initrd}; do
+ initrd_display="${initrd_display} ${dirname}/${i}"
+ done
+ gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2
+ fi
+
+ dtb=
+ for i in "dtb-${version}" "dtb-${alt_version}" "dtb"; do
+ if test -e "${dirname}/${i}" ; then
+ dtb="$i"
+ break
+ fi
+ done
+
+ config=
+ for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
+ if test -e "${i}" ; then
+ config="${i}"
+ break
+ fi
+ done
+
+ initramfs=
+ if test -n "${config}" ; then
+ initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"`
+ fi
+
+ if test -z "${initramfs}" && test -z "${initrd_real}" ; then
+ # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs. Since there's
+ # no initrd or builtin initramfs, it can't work here.
+ if [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
+ || [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ]; then
+
+ linux_root_device_thisversion=${GRUB_DEVICE}
+ else
+ linux_root_device_thisversion=PARTUUID=${GRUB_DEVICE_PARTUUID}
+ fi
+ fi
+
+ # The GRUB_DISABLE_SUBMENU option used to be different than others since it was
+ # mentioned in the documentation that has to be set to 'y' instead of 'true' to
+ # enable it. This caused a lot of confusion to users that set the option to 'y',
+ # 'yes' or 'true'. This was fixed but all of these values must be supported now.
+ if [ "x${GRUB_DISABLE_SUBMENU}" = xyes ] || [ "x${GRUB_DISABLE_SUBMENU}" = xy ]; then
+ GRUB_DISABLE_SUBMENU="true"
+ fi
+
+ if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then
+ linux_entry "${OS}" "${version}" simple \
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+
+ submenu_indentation="$grub_tab"
+
+ if [ -z "$boot_device_id" ]; then
+ boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
+ fi
+ # TRANSLATORS: %s is replaced with an OS name
+ echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
+ is_top_level=false
+ fi
+
+ linux_entry "${OS}" "${version}" advanced \
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+ if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
+ linux_entry "${OS}" "${version}" recovery \
+ "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
+ fi
+done
+
+# If at least one kernel was found, then we need to
+# add a closing '}' for the submenu command.
+if [ x"$is_top_level" != xtrue ]; then
+ echo '}'
+fi
+
+echo "$title_correction_code"
diff --git a/etc/grub.d/10_linux_zfs b/etc/grub.d/10_linux_zfs
new file mode 100755
index 0000000000..f4d5188b7c
--- /dev/null
+++ b/etc/grub.d/10_linux_zfs
@@ -0,0 +1,1134 @@
+#! /bin/sh
+set -e
+
+# grub-mkconfig helper script.
+# Copyright (C) 2019 Canonical Ltd.
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see .
+
+prefix="/usr"
+datarootdir="/usr/share"
+ubuntu_recovery="1"
+quiet_boot="1"
+quick_boot="1"
+gfxpayload_dynamic="1"
+vt_handoff="1"
+
+. "${pkgdatadir}/grub-mkconfig_lib"
+
+export TEXTDOMAIN=grub
+export TEXTDOMAINDIR="${datarootdir}/locale"
+
+## Skip early if zfs utils isn't installed (instead of failing on first zpool list)
+if ! `which zfs >/dev/null 2>&1`; then
+ exit 0
+fi
+
+imported_pools=""
+MNTDIR="$(mktemp -d ${TMPDIR:-/tmp}/zfsmnt.XXXXXX)"
+ZFSTMP="$(mktemp -d ${TMPDIR:-/tmp}/zfstmp.XXXXXX)"
+
+
+machine="$(uname -m)"
+case "${machine}" in
+ i?86) GENKERNEL_ARCH="x86" ;;
+ mips|mips64) GENKERNEL_ARCH="mips" ;;
+ mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
+ arm*) GENKERNEL_ARCH="arm" ;;
+ *) GENKERNEL_ARCH="${machine}" ;;
+esac
+
+RC=0
+on_exit() {
+ # Restore initial zpool import state
+ for pool in ${imported_pools}; do
+ zpool export "${pool}"
+ done
+
+ mountpoint -q "${MNTDIR}/boot" && umount "${MNTDIR}/boot" || true
+ mountpoint -q "${MNTDIR}" && umount "${MNTDIR}" || true
+ rmdir "${MNTDIR}"
+ rm -rf "${ZFSTMP}"
+ exit "${RC}"
+}
+trap on_exit EXIT INT QUIT ABRT PIPE TERM
+
+# List ONLINE and DEGRADED pools
+import_pools() {
+ # We have to ignore zpool import output, as potentially multiple / will be available,
+ # and we need to autodetect all zpools this way with their real mountpoints.
+ local initial_pools="$(zpool list | awk '{if (NR>1) print $1}')"
+ local all_pools=""
+ local imported_pools=""
+ local err=""
+
+ set +e
+ err="$(zpool import -f -a -o cachefile=none -o readonly=on -N 2>&1)"
+ # Only print stderr if the command returned an error
+ # (it can echo "No zpool to import" with success, which we don't want)
+ if [ $? -ne 0 ]; then
+ echo "Some pools couldn't be imported and will be ignored:\n${err}" >&2
+ fi
+ set -e
+
+ all_pools="$(zpool list | awk '{if (NR>1) print $1}')"
+ for pool in ${all_pools}; do
+ if echo "${initial_pools}" | grep -wq "${pool}"; then
+ continue
+ fi
+ imported_pools="${imported_pools} ${pool}"
+ done
+
+ echo "${imported_pools}"
+}
+
+# List all the dataset with a root mountpoint
+get_root_datasets() {
+ local pools="$(zpool list | awk '{if (NR>1) print $1}')"
+
+ for p in ${pools}; do
+ local rel_pool_root=$(zpool get -H altroot ${p} | awk '{print $3}')
+ if [ "${rel_pool_root}" = "-" ]; then
+ rel_pool_root="/"
+ fi
+
+ zfs list -H -o name,canmount,mountpoint -t filesystem | grep -E '^'"${p}"'(\s|/[[:print:]]*\s)(on|noauto)\s'"${rel_pool_root}"'$' | awk '{print $1}'
+ done
+}
+
+# find if given datasets can be mounted for directory and return its path (snapshot or real path)
+# $1 is our current dataset name
+# $2 directory path we look for (cannot contains /)
+# $3 is the temporary mount directory to use
+# $4 is the optional snapshot name
+# return path for directory (which can be a mountpoint)
+validate_system_dataset() {
+ local dataset="$1"
+ local directory="$2"
+ local mntdir="$3"
+ local snapshot_name="$4"
+
+ local mount_path="${mntdir}/${directory}"
+
+ if ! zfs list "${dataset}" >/dev/null 2>&1; then
+ return
+ fi
+
+ if ! mount -o noatime,zfsutil -t zfs "${dataset}" "${mount_path}"; then
+ grub_warn "Failed to find a valid directory '${directory}' for dataset '${dataset}@${snapshot_name}'. Ignoring"
+ return
+ fi
+
+ local candidate_path="${mount_path}"
+ if [ -n "${snapshot_name}" ]; then
+ # WORKAROUND a bug https://github.com/zfsonlinux/zfs/issues/9958
+ # Reading the content of a snapshot fails if it is not the first mount
+ # for a given dataset
+ first_mntdir=$(awk '{if ($1 == "'${dataset}'") {print $2; exit;}}' /proc/mounts)
+ if [ "${first_mntdir}" = "/" ]; then
+ # prevents // on candidate_path
+ first_mntdir=""
+ fi
+ candidate_path="${first_mntdir}/.zfs/snapshot/${snapshot_name}"
+ fi
+
+ if [ -n "$(ls "${candidate_path}" 2>/dev/null)" ]; then
+ echo "${candidate_path}"
+ return
+ else
+ mountpoint -q "${mount_path}" && umount "${mount_path}" || true
+ fi
+}
+
+# Detect system directory relevant to the other, trying to find the ones associated on the current dataset or snapshot/
+# System directory should be at most a direct child dataset of main datasets (no recursivity)
+# We can fallback trying other zfs pools if no match has been found.
+# $1 is our current dataset name (which can have @snapshot name)
+# $2 directory path we look for (cannot contains /)
+# $3 restrict_to_same_pool (true|false) force looking for dataset with the same basename in the current dataset pool only
+# $4 is the temporary mount directory to use
+# $5 is the optional etc directory (if not $2 is not etc itself)
+# return path for directory (which can be a mountpoint)
+get_system_directory() {
+ local dataset_path="$1"
+ local directory="$2"
+ local restrict_to_same_pool="$3"
+ local mntdir="$4"
+ local etc_dir="$5"
+
+ if [ -z "${etc_dir}" ]; then
+ etc_dir="${mntdir}/etc"
+ fi
+
+ local candidate_path="${mntdir}/${directory}"
+
+ # 1. Look for /etc/fstab first (which will mount even on top of non empty $directory)
+ local mounted_fstab_entry="false"
+ if [ -f "${etc_dir}/fstab" ]; then
+ mount_args=$(awk '/^[^#].*[ \t]\/'"${directory}"'[ \t]/ {print "-t", $3, $1}' "${etc_dir}/fstab")
+ if [ -n "${mount_args}" ]; then
+ mounted_fstab_entry="true"
+ mount -o noatime ${mount_args} "${candidate_path}" || mounted_fstab_entry="false"
+ fi
+ fi
+
+ # If directory isn't empty. Only count if coming from /etc/fstab. Will be
+ # handled below otherwise as we are interested in potential snapshots.
+ if [ "${mounted_fstab_entry}" = "true" -a -n "$(ls ${candidate_path} 2>/dev/null)" ]; then
+ echo "${candidate_path}"
+ return
+ fi
+
+ # 2. Handle zfs case, which can be a snapshots.
+
+ local base_dataset_path="${dataset_path}"
+ local snapshot_name=""
+ # For snapshots we extract the parent dataset
+ if echo "${dataset_path}" | grep -q '@'; then
+ base_dataset_path=$(echo "${dataset_path}" | cut -d '@' -f1)
+ snapshot_name=$(echo "${dataset_path}" | cut -d '@' -f2)
+ fi
+ base_dataset_name="${base_dataset_path##*/}"
+ base_pool="$(echo "${base_dataset_path}" | cut -d'/' -f1)"
+
+ # 2.a) Look for child dataset included in base dataset, which needs to hold same snapshot if any
+ candidate_path=$(validate_system_dataset "${base_dataset_path}/${directory}" "${directory}" "${mntdir}" "${snapshot_name}")
+ if [ -n "${candidate_path}" ]; then
+ echo "${candidate_path}"
+ return
+ fi
+
+ # 2.b) Look for current dataset (which is already mounted as /)
+ candidate_path="${mntdir}/${directory}"
+ if [ -n "${snapshot_name}" ]; then
+ # WORKAROUND a bug https://github.com/zfsonlinux/zfs/issues/9958
+ # Reading the content of a snapshot fails if it is not the first mount
+ # for a given dataset
+ first_mntdir=$(awk '{if ($1 == "'${base_dataset_path}'") {print $2; exit;}}' /proc/mounts)
+ if [ "${first_mntdir}" = "/" ]; then
+ # prevents // on candidate_path
+ first_mntdir=""
+ fi
+ candidate_path="${first_mntdir}/.zfs/snapshot/${snapshot_name}/${directory}"
+ fi
+ if [ -n "$(ls "${candidate_path}" 2>/dev/null)" ]; then
+ echo "${candidate_path}"
+ return
+ fi
+
+ # 2.c) Look for every datasets in every pool which isn't the current dataset which holds:
+ # - the same dataset name (last section) than our base_dataset_name
+ # - mountpoint=directory
+ # - canmount!=off
+ all_same_base_dataset_name="$(zfs list -H -t filesystem -o name,canmount | awk '/^[^ ]+\/'"${base_dataset_name}"'[ \t](on|noauto)/ {print $1}') "
+
+ # order by local pool datasets first
+ current_pool_same_base_datasets=""
+ other_pools_same_base_datasets=""
+ root_pool=$(echo "${dataset_path%%/*}")
+ for d in ${all_same_base_dataset_name}; do
+ cur_dataset_pool=$(echo "${d%%/*}")
+ if echo "${cur_dataset_pool}" | grep -wq "${root_pool}" 2>/dev/null ; then
+ current_pool_same_base_datasets="${current_pool_same_base_datasets} ${d}"
+ else
+ other_pools_same_base_datasets="${other_pools_same_base_datasets} ${d}"
+ fi
+ done
+ ordered_same_base_datasets="${current_pool_same_base_datasets} ${other_pools_same_base_datasets}"
+ if [ "${restrict_to_same_pool}" = "true" ]; then
+ ordered_same_base_datasets="${current_pool_same_base_datasets}"
+ fi
+
+ # now, loop over them
+ for d in ${ordered_same_base_datasets}; do
+ cur_dataset_pool=$(echo "${d%%/*}")
+
+ rel_pool_root=$(zpool get -H altroot ${cur_dataset_pool} | awk '{print $3}')
+ if [ "${rel_pool_root}" = "-" ]; then
+ rel_pool_root=""
+ fi
+
+ # check mountpoint match
+ candidate_dataset=$(zfs get -H mountpoint ${d} | grep -E "mountpoint\s${rel_pool_root}/${directory}\s" | awk '{print $1}')
+ if [ -z "${candidate_dataset}" ]; then
+ continue
+ fi
+
+ candidate_path=$(validate_system_dataset "${candidate_dataset}" "${directory}" "${mntdir}" "${snapshot_name}")
+ if [ -n "${candidate_path}" ]; then
+ echo "${candidate_path}"
+ return
+ fi
+ done
+
+ # 2.d) If we didn't find anything yet: check for persistent datasets corresponding to our mountpoint, with canmount=on without any snapshot associated:
+ # Note: we go over previous datasets as well, but this is ok, as we didn't include them before.
+ all_mountable_datasets="$(zfs list -t filesystem -o name,canmount | awk '/^[^ ]+[ \t]+on/ {print $1}')"
+
+ # order by local pool datasets first
+ current_pool_datasets=""
+ other_pools_datasets=""
+ root_pool=$(echo "${dataset_path%%/*}")
+ for d in ${all_mountable_datasets}; do
+ cur_dataset_pool=$(echo "${d%%/*}")
+ if echo "${cur_dataset_pool}" | grep -wq "${root_pool}" 2>/dev/null ; then
+ current_pool_datasets="${current_pool_datasets} ${d}"
+ else
+ other_pools_datasets="${other_pools_datasets} ${d}"
+ fi
+ done
+ ordered_datasets="${current_pool_datasets} ${other_pools_datasets}"
+ if [ "${restrict_to_same_pool}" = "true" ]; then
+ ordered_datasets="${current_pool_datasets}"
+ fi
+
+ for d in ${ordered_datasets}; do
+ cur_dataset_pool=$(echo "${d%%/*}")
+
+ rel_pool_root=$(zpool get -H altroot ${cur_dataset_pool} | awk '{print $3}')
+ if [ "${rel_pool_root}" = "-" ]; then
+ rel_pool_root=""
+ fi
+
+ # check mountpoint match
+ candidate_dataset=$(zfs get -H mountpoint ${d} | grep -E "mountpoint\s${rel_pool_root}/${directory}\s" | awk '{print $1}')
+ if [ -z "${candidate_dataset}" ]; then
+ continue
+ fi
+
+ candidate_path=$(validate_system_dataset "${d}" "${directory}" "${mntdir}" "")
+ if [ -n "${candidate_path}" ]; then
+ echo "${candidate_path}"
+ return
+ fi
+ done
+
+ grub_warn "Failed to find a valid directory '${directory}' for dataset '${dataset_path}'. Ignoring"
+ return
+}
+
+# Try our default layout bpool as a prefered layout (fast path)
+# This is get_system_directory for boot optimized for our default installation layout
+# $1 is our current dataset name (which can have @snapshot name)
+# $2 is the temporary mount directory to use
+# return path for directory (which can be a mountpoint) if found
+try_default_layout_bpool() {
+ local root_dataset_path="$1"
+ local mntdir="$2"
+
+ dataset_basename="${root_dataset_path##*/}"
+ candidate_dataset="bpool/BOOT/${dataset_basename}"
+ dataset_properties="$(zfs get -H mountpoint,canmount "${candidate_dataset}" 2>/dev/null | cut -f3 | paste -sd ' ')"
+ if [ -z "${dataset_properties}" ]; then
+ return
+ fi
+
+ rel_pool_root=$(zpool get -H altroot bpool | awk '{print $3}')
+ if [ "${rel_pool_root}" = "-" ]; then
+ rel_pool_root=""
+ fi
+
+ snapshot_name="${dataset_basename##*@}"
+ [ "${snapshot_name}" = "${dataset_basename}" ] && snapshot_name=""
+ if [ -z "${snapshot_name}" ]; then
+ if ! echo "${dataset_properties}" | grep -Eq "${rel_pool_root}/boot (on|noauto)"; then
+ return
+ fi
+ else
+ candidate_dataset=$(echo "${candidate_dataset}" | cut -d '@' -f1)
+ fi
+
+ validate_system_dataset "${candidate_dataset}" "boot" "${mntdir}" "${snapshot_name}"
+}
+
+# Return if secure boot is enabled on that system
+is_secure_boot_enabled() {
+ if LANG=C mokutil --sb-state 2>/dev/null | grep -qi enabled; then
+ echo "true"
+ return
+ fi
+ echo "false"
+ return
+}
+
+# Given a filesystem or snapshot dataset, returns dataset|machine id|pretty name|last used
+# $1 is dataset we want information from
+# $2 is the temporary mount directory to use
+get_dataset_info() {
+ local dataset="$1"
+ local mntdir="$2"
+
+ local base_dataset="${dataset}"
+ local etc_dir="${mntdir}/etc"
+ local is_snapshot="false"
+ # For snapshot we extract the parent dataset
+ if echo "${dataset}" | grep -q '@'; then
+ base_dataset=$(echo "${dataset}" | cut -d '@' -f1)
+ is_snapshot="true"
+ fi
+
+ mount -o noatime,zfsutil -t zfs "${base_dataset}" "${mntdir}"
+
+ # read machine-id/os-release from /etc
+ etc_dir=$(get_system_directory "${dataset}" "etc" "true" "${mntdir}" "")
+ if [ -z "${etc_dir}" ]; then
+ grub_warn "Ignoring ${dataset}"
+ mountpoint -q "${mntdir}/etc" && umount "${mntdir}/etc" || true
+ umount "${mntdir}"
+ return
+ fi
+
+ machine_id=""
+ if [ -f "${etc_dir}/machine-id" ]; then
+ machine_id=$(cat "${etc_dir}/machine-id")
+ fi
+ # We have to use a random temporary id if we don't have any machine-id file or if this one is empty
+ # (mostly the case of new installations before first boot).
+ # Let's use the dataset name directly for this.
+ # Consequence is that all datasets are then separated.
+ if [ -z "${machine_id}" ]; then
+ machine_id="${dataset}"
+ fi
+ pretty_name=$(. "${etc_dir}/os-release" && echo "${PRETTY_NAME}")
+ mountpoint -q "${mntdir}/etc" && umount "${mntdir}/etc" || true
+
+ # read available kernels from /boot
+ boot_dir="$(try_default_layout_bpool "${dataset}" "${mntdir}")"
+ if [ -z "${boot_dir}" ]; then
+ boot_dir=$(get_system_directory "${dataset}" "boot" "false" "${mntdir}" "${etc_dir}")
+ fi
+
+ if [ -z "${boot_dir}" ]; then
+ grub_warn "Ignoring ${dataset}"
+ mountpoint -q "${mntdir}/boot" && umount "${mntdir}/boot" || true
+ umount "${mntdir}"
+ return
+ fi
+
+ initrd_list=""
+ kernel_list=""
+ candidate_kernel_list="$(find "${boot_dir}" -maxdepth 1 -type f -regex '.*/\(vmlinuz\|vmlinux\|kernel\)-.*')"
+
+ # Perform a reverse version sort on the entire list.
+ # Temporarily replace the '.old' suffix by ' 1' and append ' 2' for all
+ # other files to order the '.old' files after their non-old counterpart
+ # in reverse-sorted order.
+
+ reverse_sorted_list=$(echo $candidate_kernel_list | tr ' ' '\n' | sed -e 's/\.old$/ 1/; / 1$/! s/$/ 2/' | version_sort -r | sed -e 's/ 1$/.old/; s/ 2$//')
+
+ for linux in ${reverse_sorted_list}; do
+ if ! grub_file_is_not_garbage "${linux}" ; then
+ continue
+ fi
+
+ # Filters entry if efi/non efi.
+ # Note that for now we allow kernel without .efi.signed as those are signed kernel
+ # on ubuntu, loaded by the shim.
+ case "${linux}" in
+ *.efi.signed)
+ if [ "$(is_secure_boot_enabled)" = "false" ]; then
+ continue
+ fi
+ ;;
+ esac
+
+ linux_basename=$(basename "${linux}")
+ linux_dirname=$(dirname "${linux}")
+ version=$(echo "${linux_basename}" | sed -e "s,^[^0-9]*-,,g")
+ alt_version=$(echo "${version}" | sed -e "s,\.old$,,g")
+
+ gettext_printf "Found linux image: %s in %s\n" "${linux_basename}" "${dataset}" >&2
+
+ initrd=""
+ for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
+ "initrd-${version}" "initramfs-${version}.img" \
+ "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
+ "initrd-${alt_version}" "initramfs-${alt_version}.img" \
+ "initramfs-genkernel-${version}" \
+ "initramfs-genkernel-${alt_version}" \
+ "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
+ "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
+ if test -e "${linux_dirname}/${i}" ; then
+ initrd="$i"
+ break
+ fi
+ done
+
+ if test -z "${initrd}" ; then
+ grub_warn "Couldn't find any valid initrd for dataset ${dataset}."
+ continue
+ fi
+
+ gettext_printf "Found initrd image: %s in %s\n" "${initrd}" "${dataset}" >&2
+
+ rel_linux_dirname=$(make_system_path_relative_to_its_root "${linux_dirname}")
+
+ initrd_list="${initrd_list}|${rel_linux_dirname}/${initrd}"
+ kernel_list="${kernel_list}|${rel_linux_dirname}/${linux_basename}"
+ done
+
+ initrd_list="${initrd_list#|}"
+ kernel_list="${kernel_list#|}"
+
+ initrd_device=$(${grub_probe} --target=device "${boot_dir}" | head -1)
+
+ mountpoint -q "${mntdir}/boot" && umount "${mntdir}/boot" || true
+ # We needed to look in / for snapshots on root dataset, umount there before zfs lazily unmount it
+ case "${boot_dir}" in /boot/.zfs/snapshot/*)
+ umount "${boot_dir}" || true
+ ;;
+ esac
+
+ # for zsys snapshots: we want to know which kernel we successful last booted with
+ last_booted_kernel=$(zfs get -H com.ubuntu.zsys:last-booted-kernel "${dataset}" | awk -v FS='\t' '{print $3}')
+
+ # snapshot: last_used is dataset creation time
+ if [ "${is_snapshot}" = "true" ]; then
+ last_used="$(zfs get -pH creation "${dataset}" | awk -F '\t' '{print $3}')"
+ # otherwise, last_used is manually marked at boot/shutdown on a root dataset for zsys
+ else
+ # if current system, take current time
+ if zfs mount | awk '/[ \t]+\/$/ {print $1}' | grep -q "${dataset}"; then
+ last_used=$(date +%s)
+ else
+ last_used=$(zfs get -H com.ubuntu.zsys:last-used "${dataset}" | awk '{print $3}')
+ # case of non zsys, or zsys without annotation, take /etc/machine-id stat (as we mounted with noatime).
+ # However, as systems can be relatime, if system is current mounted one, set current time (case of clone + reboot
+ # within the same d).
+ if [ "${last_used}" = "-" ]; then
+ last_used=$(stat --printf="%X" "${mntdir}/etc/os-release")
+ if [ -f "${mntdir}/etc/machine-id" ]; then
+ last_used=$(stat --printf="%X" "${mntdir}/etc/machine-id")
+ fi
+ fi
+ fi
+ fi
+
+ is_zsys=$(zfs get -H com.ubuntu.zsys:bootfs "${base_dataset}" | awk '{print $3}')
+
+ if [ -n "${initrd_list}" -a -n "${kernel_list}" ]; then
+ echo "${dataset}\t${is_zsys}\t${machine_id}\t${pretty_name}\t${last_used}\t${initrd_device}\t${initrd_list}\t${kernel_list}\t${last_booted_kernel}"
+ else
+ grub_warn "didn't find any valid initrd or kernel."
+ fi
+
+ umount "${mntdir}" || true
+ # We needed to look in / for snapshots on root dataset, umount the snapshot for etc before zfs lazily unmount it
+ # This process only needs to run if the snapshot contains an .../etc path,
+ # otherwise the build process may silently fail and produce no kernel lines in grub.cfg
+ if [ -e "${etc_dir}" ]; then
+ case "${etc_dir}" in /.zfs/snapshot/*/etc)
+ snapshot_path="$(findmnt -n -o TARGET -T "${etc_dir}")"
+ umount "${snapshot_path}" || true
+ ;;
+ esac
+ fi
+}
+
+# Scan available boot options and returns in a formatted list
+# $1 is the temporary mount directory to use
+bootlist() {
+ local mntdir="$1"
+ local boot_list=""
+
+ for dataset in $(get_root_datasets); do
+ # get information from current root dataset
+ boot_list="${boot_list}$(get_dataset_info "${dataset}" ${mntdir})\n"
+
+ # get information from snapshots of this root dataset
+ snapshots="$(zfs list -H -o name -t snapshot "${dataset}"|while read snapshot_dataset; do
+ get_dataset_info "${snapshot_dataset}" ${mntdir}
+ done)"
+ [ -n "${snapshots}" ] && boot_list="${boot_list}${snapshots}\n"
+ done
+ echo "${boot_list}"
+}
+
+
+# Order machine ids by last_used from their main entry
+get_machines_sorted() {
+ local bootlist="$1"
+
+ local machineids="$(echo "${bootlist}" | awk '{print $3}' | sort -u)"
+ for machineid in ${machineids}; do
+ echo "${bootlist}" | awk 'BEGIN{FS="\t"} $1 !~ /.*@.*/ {print $5, $3}' | sort -nr | grep -E "[^^]\b${machineid}\b" | head -1
+ done | sort -nr | awk '{print $2}'
+}
+
+# Sort entries by last_used for a given machineid
+sort_entries_for_machineid() {
+ local bootlist="$1"
+ local machineid="$2"
+
+ tab="$(printf '\t')"
+ echo "${bootlist}" | grep -E "[^^]\b${machineid}\b" | sort -k5,5r -k1,1 -t "${tab}"
+}
+
+# Return main entry index
+get_main_entry() {
+ local entries="$1"
+
+ echo "${entries}" | awk 'BEGIN{FS="\t"} $1 !~ /.*@.*/ {print}' | head -1
+}
+
+# Return specific field at index from entry
+get_field_from_entry() {
+ local entry="$1"
+ local index="$2"
+
+ echo "${entry}" | awk "BEGIN{FS=\"\t\"} {print \$$index}"
+}
+
+# Get the main entry metadata
+main_entry_meta() {
+ local main_entry="$1"
+
+ initrd=$(get_field_from_entry "${main_entry}" 7 | cut -d'|' -f1)
+ kernel=$(get_field_from_entry "${main_entry}" 8 | cut -d'|' -f1)
+
+ # Take first element (most recent entry) which is not a snapshot
+ echo "${main_entry}" | awk "BEGIN{ FS=\"\t\"; OFS=\"\t\"} {print \$3, \$2, \"main\", \$4, \$1, \$6, \"$initrd\", \"$kernel\"}"
+}
+
+# Get advanced entries metadata
+advanced_entries_meta() {
+ local main_entry="$1"
+
+ last_used_kernel="$(get_field_from_entry "${main_entry}" 9 )"
+
+ # We must align initrds with kernels.
+ # Adds initrds to the stack then pop them 1 by 1 as we process the kernels
+ oldIFS="$IFS"
+ export IFS='|'
+ set -- $(get_field_from_entry "${main_entry}" 7)
+ for kernel in $(get_field_from_entry "${main_entry}" 8); do
+ # get initrd and pop to the next one
+ initrd="$1"; shift
+
+ was_last_used_kernel="false"
+ kernel_basename=$(basename "${kernel}")
+ if [ "${kernel_basename}" = "${last_used_kernel}" ]; then
+ was_last_used_kernel="true"
+ fi
+
+ echo "${main_entry}" | awk "BEGIN{ FS=\"\t\"; OFS=\"\t\"} {print \$3, \$2, \"advanced\", \$4, \$1, \$6, \"$initrd\", \"$kernel\", \"$was_last_used_kernel\"}"
+ done
+ IFS="$oldIFS"
+}
+
+# Get history metadata
+history_entries_meta() {
+ local entries="$1"
+ local main_dataset_name="$2"
+ local main_dataset_releasename="$3"
+
+ if [ -z "${entries}" ]; then
+ return
+ fi
+
+ # Traverse snapshots and clones
+ echo "${entries}" | while read entry; do
+ name=""
+ # Compute snapshot/filesystem dataset name
+ snap_dataset_name="$(get_field_from_entry "${entry}" 1)"
+
+ snapname="${snap_dataset_name##*@}"
+ # If, this is a clone, take what is after main_dataset_name
+ if [ "${snapname}" = "${snap_dataset_name}" ]; then
+ snapname="${snap_dataset_name##${main_dataset_name}_}"
+
+ # Handle manual user clone (not prefixed by "main_dataset_name")
+ snapname="${snapname##*/}"
+ fi
+
+ # We keep the snapname only if it is not only a zsys auto snapshot
+ if echo "${snapname}" | grep -q "^autozsys_"; then
+ snapname=""
+ fi
+
+ # We store the release only if it different from main dataset release (snapshot before a release upgrade)
+ releasename=$(get_field_from_entry "${entry}" 4)
+ if [ "${releasename}" = "${main_dataset_releasename}" ]; then
+ releasename=""
+ fi
+
+ # Snapshot date
+ foo="$(get_field_from_entry "${entry}" 5)"
+ snapdate="$(date -d @$(get_field_from_entry "${entry}" 5) "+%x @ %H:%M")"
+
+ # For snapshots/clones the name can have the following formats:
+ # : autozsys, same release
+ # on : autozsys, different release
+ # on : Manual snapshot, same release
+ # , on : Manual snapshot, different release
+ if [ "${snapname}" = "" -a "${releasename}" = "" ]; then
+ name="${snapdate}"
+ elif [ "${snapname}" = "" -a "${releasename}" != "" ]; then
+ name=$(gettext_printf "%s on %s" "${releasename}" "${snapdate}")
+ elif [ "${snapname}" != "" -a "${releasename}" = "" ]; then
+ name=$(gettext_printf "%s on %s" "${snapname}" "${snapdate}")
+ else # snapname != "" && releasename != ""
+ name=$(gettext_printf "%s, %s on %s" "${snapname}" "${releasename}" "${snapdate}")
+ fi
+
+ # Choose kernel and initrd if the snapshot was booted successfully on a specific kernel before
+ # Take latest by default if no match
+ initrd=$(get_field_from_entry "${entry}" 7 | cut -d'|' -f1)
+ kernel=$(get_field_from_entry "${entry}" 8 | cut -d'|' -f1)
+ last_used_kernel="$(get_field_from_entry "${entry}" 9)"
+
+ # We must align initrds with kernels.
+ # Adds initrds to the stack then pop them 1 by 1 as we process the kernels
+ oldIFS="$IFS"
+ export IFS='|'
+ set -- $(get_field_from_entry "${entry}" 7)
+ for k in $(get_field_from_entry "${entry}" 8); do
+ # get initrd and pop to the next one
+ candidate_initrd="$1"; shift
+
+ kernel_basename=$(basename -- "${k}")
+ if [ "${kernel_basename}" = "${last_used_kernel}" ]; then
+ kernel="${k}"
+ initrd="${candidate_initrd}"
+ break
+ fi
+ done
+ IFS="$oldIFS"
+
+ echo "${entry}" | awk "BEGIN{ FS=\"\t\"; OFS=\"\t\"} {print \$3, \$2, \"history\", \"$name\", \$1, \$6, \"$initrd\", \"$kernel\"}"
+ done
+}
+
+# Generate metadata from a BOOTLIST that will subsequently used to generate
+# the final grub menu entries
+generate_grub_menu_metadata() {
+ local bootlist="$1"
+
+ # Sort machineids by last_used from their main entry
+ for machineid in $(get_machines_sorted "${bootlist}"); do
+ entries="$(sort_entries_for_machineid "${bootlist}" ${machineid})"
+ main_entry="$(get_main_entry "${entries}")"
+
+ if [ -z "$main_entry" ]; then
+ continue
+ fi
+
+ main_entry_meta "${main_entry}"
+ advanced_entries_meta "${main_entry}"
+
+ main_dataset_name="$(get_field_from_entry "${main_entry}" 1)"
+ main_dataset_releasename="$(get_field_from_entry "${main_entry}" 4)"
+ # grep -v errcode != 0 if there is no match. || true to not fail with -e
+ other_entries="$(echo "${entries}" | grep -v "${main_entry}" || true)"
+ history_entries_meta "${other_entries}" "${main_dataset_name}" "${main_dataset_releasename}"
+ done
+}
+
+# Print the configuration part common to all sections
+# Note:
+# If 10_linux runs these part will be defined twice in grub configuration
+print_menu_prologue() {
+ cat << 'EOF'
+function gfxmode {
+ set gfxpayload="${1}"
+EOF
+ if [ "${vt_handoff}" = 1 ]; then
+ cat << 'EOF'
+ if [ "${1}" = "keep" ]; then
+ set vt_handoff=vt.handoff=1
+ else
+ set vt_handoff=
+ fi
+EOF
+ fi
+ cat << EOF
+}
+EOF
+
+ # Use ELILO's generic "efifb" when it's known to be available.
+ # FIXME: We need an interface to select vesafb in case efifb can't be used.
+ GRUB_GFXPAYLOAD_LINUX="${GRUB_GFXPAYLOAD_LINUX:-}"
+ if [ "${GRUB_GFXPAYLOAD_LINUX}" != "" ] || [ "${gfxpayload_dynamic}" = 0 ]; then
+ echo "set linux_gfx_mode=${GRUB_GFXPAYLOAD_LINUX}"
+ else
+ cat << EOF
+if [ "\${recordfail}" != 1 ]; then
+ if [ -e \${prefix}/gfxblacklist.txt ]; then
+ if hwmatch \${prefix}/gfxblacklist.txt 3; then
+ if [ \${match} = 0 ]; then
+ set linux_gfx_mode=keep
+ else
+ set linux_gfx_mode=text
+ fi
+ else
+ set linux_gfx_mode=text
+ fi
+ else
+ set linux_gfx_mode=keep
+ fi
+else
+ set linux_gfx_mode=text
+fi
+EOF
+ fi
+ cat << EOF
+export linux_gfx_mode
+EOF
+}
+
+# Cache for prepare_grub_to_access_device call
+# $1: boot_device
+# $2: submenu_level
+prepare_grub_to_access_device_cached() {
+ local boot_device="$1"
+ local submenu_level="$2"
+
+ local boot_device_idx="$(echo ${boot_device} | tr '/' '_')"
+
+ cache_file="${ZFSTMP}/$(echo boot_device${boot_device_idx})"
+ if [ ! -f "${cache_file}" ]; then
+ set +u
+ echo "$(prepare_grub_to_access_device "${boot_device}")" > "${cache_file}"
+ set -u
+ for i in 0 1 2; do
+ submenu_indentation="$(printf %${i}s | tr " " "${grub_tab}")"
+ sed "s/^/${submenu_indentation} /" "${cache_file}" > "${cache_file}--${i}"
+ done
+ fi
+
+ cat "${cache_file}--${submenu_level}"
+}
+
+
+# Print a grub menu entry
+zfs_linux_entry () {
+ submenu_level="$1"
+ title="$2"
+ type="$3"
+ dataset="$4"
+ boot_device="$5"
+ initrd="$6"
+ kernel="$7"
+ kernel_version="$8"
+ kernel_additional_args="${9:-}"
+ boot_devices="${10:-}"
+
+ submenu_indentation="$(printf %${submenu_level}s | tr " " "${grub_tab}")"
+
+ echo "${submenu_indentation}menuentry '$(echo "${title}" | grub_quote)' ${CLASS} \${menuentry_id_option} 'gnulinux-${dataset}-${kernel_version}' {"
+
+ if [ "${quick_boot}" = 1 ]; then
+ echo "${submenu_indentation} recordfail"
+ fi
+
+ if [ "${type}" != "recovery" ] ; then
+ GRUB_SAVEDEFAULT=${GRUB_SAVEDEFAULT:-}
+ default_entry="$(save_default_entry)"
+ if [ -n "${default_entry}" ]; then
+ echo "${submenu_indentation} ${default_entry}"
+ fi
+ fi
+
+ # Use ELILO's generic "efifb" when it's known to be available.
+ # FIXME: We need an interface to select vesafb in case efifb can't be used.
+ if [ "${GRUB_GFXPAYLOAD_LINUX}" = "" ]; then
+ echo "${submenu_indentation} load_video"
+ else
+ if [ "${GRUB_GFXPAYLOAD_LINUX}" != "text" ]; then
+ echo "${submenu_indentation} load_video"
+ fi
+ fi
+
+ if ([ "${ubuntu_recovery}" = 0 ] || [ "${type}" != "recovery" ]) && \
+ ([ "${GRUB_GFXPAYLOAD_LINUX}" != "" ] || [ "${gfxpayload_dynamic}" = 1 ]); then
+ echo "${submenu_indentation} gfxmode \${linux_gfx_mode}"
+ fi
+
+ echo "${submenu_indentation} insmod gzio"
+ echo "${submenu_indentation} if [ \"\${grub_platform}\" = xen ]; then insmod xzio; insmod lzopio; fi"
+
+ if [ -n "$boot_devices" ]; then
+ for device in ${boot_devices}; do
+ echo "${submenu_indentation} if [ "${boot_device}" = "${device}" ]; then"
+ echo "$(prepare_grub_to_access_device_cached "${device}" $(( submenu_level +1 )) )"
+ echo "${submenu_indentation} fi"
+ done
+ else
+ echo "$(prepare_grub_to_access_device_cached "${boot_device}" "${submenu_level}")"
+ fi
+
+ if [ "${quiet_boot}" = 0 ] || [ "${type}" != simple ]; then
+ echo "${submenu_indentation} echo $(gettext_printf "Loading Linux %s ..." ${kernel_version} | grub_quote)"
+ fi
+
+ linux_default_args="${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+ if [ ${type} = "recovery" ]; then
+ linux_default_args="${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
+ fi
+
+ # echo in echo trims end of line spaces
+ echo "${submenu_indentation} linux \"${kernel}\" root=ZFS=\"${dataset}\" ro $(echo ${linux_default_args} ${kernel_additional_args})"
+
+ if [ "${quiet_boot}" = 0 ] || [ "${type}" != simple ]; then
+ echo "${submenu_indentation} echo '$(gettext_printf "Loading initial ramdisk ..." | grub_quote)'"
+ fi
+ echo "${submenu_indentation} initrd \"${initrd}\""
+ echo "${submenu_indentation}}"
+}
+
+# Generate a GRUB Menu from menu meta data
+# $1 menu metadata
+generate_grub_menu() {
+ local menu_metadata="$1"
+ local last_section=""
+ local main_dataset_name=""
+ local main_dataset=""
+ local have_zsys=""
+
+ if [ -z "${menu_metadata}" ]; then
+ return
+ fi
+
+ CLASS="--class gnu-linux --class gnu --class os"
+
+ if [ "${GRUB_DISTRIBUTOR}" = "" ] ; then
+ OS=GNU/Linux
+ else
+ case ${GRUB_DISTRIBUTOR} in
+ Ubuntu|Kubuntu)
+ OS="${GRUB_DISTRIBUTOR}"
+ ;;
+ *)
+ OS="${GRUB_DISTRIBUTOR} GNU/Linux"
+ ;;
+ esac
+ CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1 | LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
+ fi
+
+ if [ -x /lib/recovery-mode/recovery-menu ]; then
+ GRUB_CMDLINE_LINUX_RECOVERY=recovery
+ else
+ GRUB_CMDLINE_LINUX_RECOVERY=single
+ fi
+ if [ "${ubuntu_recovery}" = 1 ]; then
+ GRUB_CMDLINE_LINUX_RECOVERY="${GRUB_CMDLINE_LINUX_RECOVERY} nomodeset"
+ fi
+
+ case "$GENKERNEL_ARCH" in
+ x86*) GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY dis_ucode_ldr";;
+ esac
+
+
+ if [ "${vt_handoff}" = 1 ]; then
+ for word in ${GRUB_CMDLINE_LINUX_DEFAULT}; do
+ if [ "${word}" = splash ]; then
+ GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} \${vt_handoff}"
+ fi
+ done
+ fi
+
+ print_menu_prologue
+
+ cat<<'EOF'
+function zsyshistorymenu {
+ # $1: root dataset (eg rpool/ROOT/ubuntu_2zhm07@autozsys_k56fr6)
+ # $2: boot device id (eg 411f29ce1557bfed)
+ # $3: initrd (eg /BOOT/ubuntu_2zhm07@autozsys_k56fr6/initrd.img-5.4.0-21-generic)
+ # $4: kernel (eg /BOOT/ubuntu_2zhm07@autozsys_k56fr6/vmlinuz-5.4.0-21-generic)
+ # $5: kernel_version (eg 5.4.0-21-generic)
+
+ set root_dataset="${1}"
+ set boot_device="${2}"
+ set initrd="${3}"
+ set kernel="${4}"
+ set kversion="${5}"
+
+EOF
+ boot_devices=$(echo "${menu_metadata}" | cut -d"$(printf '\t')" -f6 | sort -u)
+
+ title=$(gettext_printf "Revert system only")
+ zfs_linux_entry 1 "${title}" "simple" '${root_dataset}' '${boot_device}' '${initrd}' '${kernel}' '${kversion}' '' "${boot_devices}"
+
+ title="$(gettext_printf "Revert system and user data")"
+ zfs_linux_entry 1 "${title}" "simple" '${root_dataset}' '${boot_device}' '${initrd}' '${kernel}' '${kversion}' 'zsys-revert=userdata' "${boot_devices}"
+
+ GRUB_DISABLE_RECOVERY="${GRUB_DISABLE_RECOVERY:-}"
+ if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then
+ title="$(gettext_printf "Revert system only (%s)" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
+ zfs_linux_entry 1 "${title}" "recovery" '${root_dataset}' '${boot_device}' '${initrd}' '${kernel}' '${kversion}' '' "${boot_devices}"
+
+ title="$(gettext_printf "Revert system and user data (%s)" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
+ zfs_linux_entry 1 "${title}" "recovery" '${root_dataset}' '${boot_device}' '${initrd}' '${kernel}' '${kversion}' 'zsys-revert=userdata' "${boot_devices}"
+ fi
+echo "}"
+echo
+
+ # IFS is set to TAB (ASCII 0x09)
+ echo "${menu_metadata}" |
+ {
+ at_least_one_entry=0
+ have_zsys="$(which zsysd || true)"
+ while IFS="$(printf '\t')" read -r machineid iszsys section name dataset device initrd kernel opt; do
+
+ # Disable history for non zsys system or if systems is a zsys one and zsys isn't installed.
+ # In pure zfs systems, we identified multiple issues due to the mount generator
+ # in upstream zfs which makes it incompatible. Don't show history for now.
+ if [ "${section}" = "history" ]; then
+ if [ "${iszsys}" != "yes" ] || [ "${iszsys}" = "yes" -a -z "${have_zsys}" ]; then
+ continue
+ fi
+ fi
+
+ if [ "${last_section}" != "${section}" -a -n "${last_section}" ]; then
+ # Close previous section wrapper
+ if [ "${last_section}" != "main" ]; then
+ echo "}" # Add grub_tabs
+ at_least_one_entry=0
+ fi
+ fi
+
+ case "${section}" in
+ main)
+ title="${name}"
+ main_dataset_name="${name}"
+ main_dataset="${dataset}"
+
+ kernel_version=$(basename "${kernel}" | sed -e "s,^[^0-9]*-,,g")
+ zfs_linux_entry 0 "${title}" "simple" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
+ at_least_one_entry=1
+ ;;
+ advanced)
+ # normal and recovery entries for a given kernel
+ if [ "${last_section}" != "${section}" ]; then
+ echo "submenu '$(gettext_printf "Advanced options for %s" "${main_dataset_name}" | grub_quote)' \${menuentry_id_option} 'gnulinux-advanced-${main_dataset}' {"
+ fi
+
+ last_booted_kernel_marker=""
+ if [ "${opt}" = "true" ]; then
+ last_booted_kernel_marker="* "
+ fi
+
+ kernel_version=$(basename "${kernel}" | sed -e "s,^[^0-9]*-,,g")
+ title="$(gettext_printf "%s%s, with Linux %s" "${last_booted_kernel_marker}" "${name}" "${kernel_version}")"
+ zfs_linux_entry 1 "${title}" "advanced" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
+
+ GRUB_DISABLE_RECOVERY=${GRUB_DISABLE_RECOVERY:-}
+ if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then
+ title="$(gettext_printf "%s%s, with Linux %s (%s)" "${last_booted_kernel_marker}" "${name}" "${kernel_version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
+ zfs_linux_entry 1 "${title}" "recovery" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
+ fi
+ at_least_one_entry=1
+ ;;
+ history)
+ # Revert to a snapshot
+ # revert system, revert system and user data and associated recovery entries
+ if [ "${last_section}" != "${section}" ]; then
+ echo "submenu '$(gettext_printf "History for %s" "${main_dataset_name}" | grub_quote)' \${menuentry_id_option} 'gnulinux-history-${main_dataset}' {"
+ fi
+
+ if [ "${iszsys}" = "yes" ]; then
+ title="$(gettext_printf "Revert to %s" "${name}" | grub_quote)"
+ else
+ title="$(gettext_printf "Boot on %s" "${name}" | grub_quote)"
+ fi
+ echo " submenu '${title}' \${menuentry_id_option} 'gnulinux-history-${dataset}' {"
+
+ kernel_version=$(basename "${kernel}" | sed -e "s,^[^0-9]*-,,g")
+
+ # Zsys only: let revert system without destroying snapshots
+ if [ "${iszsys}" = "yes" ]; then
+ echo "${grub_tab}${grub_tab}zsyshistorymenu" \"${dataset}\" \"${device}\" \"${initrd}\" \"${kernel}\" \"${kernel_version}\"
+ # Non-zsys: boot temporarly on snapshots or rollback (destroying intermediate snapshots)
+ else
+ title="$(gettext_printf "One time boot")"
+ zfs_linux_entry 2 "${title}" "simple" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
+
+ GRUB_DISABLE_RECOVERY="${GRUB_DISABLE_RECOVERY:-}"
+ if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then
+ title="$(gettext_printf "One time boot (%s)" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
+ zfs_linux_entry 2 "${title}" "recovery" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
+ fi
+
+ title="$(gettext_printf "Revert system (all intermediate snapshots will be destroyed)")"
+ zfs_linux_entry 2 "${title}" "simple" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}" "rollback=yes"
+ fi
+
+ echo " }"
+ at_least_one_entry=1
+ ;;
+ *)
+ grub_warn "unknown section: ${section}. Ignoring entry ${name} for ${dataset}"
+ ;;
+ esac
+ last_section="${section}"
+ done
+
+ if [ "${at_least_one_entry}" -eq 1 ]; then
+ echo "}"
+ fi
+ }
+}
+
+# don't add trailing newline of variable is empty
+# $1: content to write
+# $2: destination file
+trailing_newline_if_not_empty() {
+ content="$1"
+ dest="$2"
+
+ if [ -z "${content}" ]; then
+ rm -f "${dest}"
+ touch "${dest}"
+ return
+ fi
+ echo "${content}" > "${dest}"
+}
+
+
+GRUB_LINUX_ZFS_TEST="${GRUB_LINUX_ZFS_TEST:-}"
+case "${GRUB_LINUX_ZFS_TEST}" in
+ bootlist)
+ # Import all available pools on the system and return imported list
+ imported_pools=$(import_pools)
+ boot_list="$(bootlist ${MNTDIR})"
+ trailing_newline_if_not_empty "${boot_list}" "${GRUB_LINUX_ZFS_TEST_OUTPUT}"
+ break
+ ;;
+ metamenu)
+ boot_list="$(cat ${GRUB_LINUX_ZFS_TEST_INPUT})"
+ menu_metadata="$(generate_grub_menu_metadata "${boot_list}")"
+ trailing_newline_if_not_empty "${menu_metadata}" "${GRUB_LINUX_ZFS_TEST_OUTPUT}"
+ break
+ ;;
+ grubmenu)
+ menu_metadata="$(cat ${GRUB_LINUX_ZFS_TEST_INPUT})"
+ grub_menu=$(generate_grub_menu "${menu_metadata}")
+ trailing_newline_if_not_empty "${grub_menu}" "${GRUB_LINUX_ZFS_TEST_OUTPUT}"
+ break
+ ;;
+ *)
+ # Import all available pools on the system and return imported list
+ imported_pools=$(import_pools)
+ # Generate the complete list of boot entries
+ boot_list="$(bootlist ${MNTDIR})"
+ # Create boot menu meta data from the list of boot entries
+ menu_metadata="$(generate_grub_menu_metadata "${boot_list}")"
+ # Create boot menu meta data from the list of boot entries
+ grub_menu="$(generate_grub_menu "${menu_metadata}")"
+ if [ -n "${grub_menu}" ]; then
+ # We want the trailing newline as a marker will be added
+ echo "${grub_menu}"
+ fi
+ ;;
+esac
diff --git a/etc/grub.d/20_linux_xen b/etc/grub.d/20_linux_xen
new file mode 100755
index 0000000000..141076fb08
--- /dev/null
+++ b/etc/grub.d/20_linux_xen
@@ -0,0 +1,385 @@
+#! /bin/sh
+set -e
+
+# grub-mkconfig helper script.
+# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see .
+
+prefix="/usr"
+exec_prefix="/usr"
+datarootdir="/usr/share"
+
+. "$pkgdatadir/grub-mkconfig_lib"
+
+export TEXTDOMAIN=grub
+export TEXTDOMAINDIR="${datarootdir}/locale"
+
+CLASS="--class gnu-linux --class gnu --class os --class xen"
+
+if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
+ OS=GNU/Linux
+else
+ OS="${GRUB_DISTRIBUTOR} GNU/Linux"
+ CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
+fi
+
+# loop-AES arranges things so that /dev/loop/X can be our root device, but
+# the initrds that Linux uses don't like that.
+case ${GRUB_DEVICE} in
+ /dev/loop/*|/dev/loop[0-9])
+ GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
+ # We can't cope with devices loop-mounted from files here.
+ case ${GRUB_DEVICE} in
+ /dev/*) ;;
+ *) exit 0 ;;
+ esac
+ ;;
+esac
+
+: ${GRUB_CMDLINE_LINUX_RECOVERY:=single}
+
+# Default to disabling partition uuid support to maintian compatibility with
+# older kernels.
+: ${GRUB_DISABLE_LINUX_PARTUUID=true}
+
+# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
+# and mounting btrfs requires user space scanning, so force UUID in this case.
+if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \
+ || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
+ && [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \
+ || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
+ && ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
+ || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
+ LINUX_ROOT_DEVICE=${GRUB_DEVICE}
+elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \
+ || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then
+ LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
+else
+ LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
+fi
+
+# Allow overriding GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT.
+if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE}" ]; then
+ GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX_XEN_REPLACE}"
+fi
+if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}" ]; then
+ GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}"
+fi
+
+case x"$GRUB_FS" in
+ xbtrfs)
+ rootsubvol="`make_system_path_relative_to_its_root /`"
+ rootsubvol="${rootsubvol#/}"
+ if [ "x${rootsubvol}" != x ]; then
+ GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
+ fi;;
+ xzfs)
+ rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
+ bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
+ LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}"
+ ;;
+esac
+
+title_correction_code=
+
+linux_entry ()
+{
+ linux_entry_xsm "$@" false
+ linux_entry_xsm "$@" true
+}
+linux_entry_xsm ()
+{
+ os="$1"
+ version="$2"
+ entry_xen_version="$3"
+ type="$4"
+ args="$5"
+ xen_args="$6"
+ xsm="$7"
+ # If user wants to enable XSM support, make sure there's
+ # corresponding policy file.
+ xenpolicy=
+ if ${xsm} ; then
+ xenpolicy="xenpolicy-$entry_xen_version"
+ if test ! -e "${xen_dirname}/${xenpolicy}" ; then
+ return
+ fi
+ xen_args="$xen_args flask=enforcing"
+ entry_xen_version="$(gettext_printf "%s (XSM enabled)" "$entry_xen_version")"
+ # entry_xen_version is used for messages only; actual file is xen_basename
+ fi
+ if [ -z "$boot_device_id" ]; then
+ boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
+ fi
+ if [ x$type != xsimple ] ; then
+ if [ x$type = xrecovery ] ; then
+ title="$(gettext_printf "%s, with Xen %s and Linux %s (%s)" "${os}" "${entry_xen_version}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
+ else
+ title="$(gettext_printf "%s, with Xen %s and Linux %s" "${os}" "${entry_xen_version}" "${version}")"
+ fi
+ replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
+ if [ x"Xen ${entry_xen_version}>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
+ quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
+ title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
+ grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
+ fi
+ echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+ else
+ title="$(gettext_printf "%s, with Xen hypervisor" "${os}")"
+ echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+ fi
+ if [ x$type != xrecovery ] ; then
+ save_default_entry | grub_add_tab | sed "s/^/$submenu_indentation/"
+ fi
+
+ if [ -z "${prepare_boot_cache}" ]; then
+ prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
+ fi
+ printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
+ xmessage="$(gettext_printf "Loading Xen %s ..." ${entry_xen_version})"
+ lmessage="$(gettext_printf "Loading Linux %s ..." ${version})"
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$(echo "$xmessage" | grub_quote)'
+ if [ "\$grub_platform" = "pc" -o "\$grub_platform" = "" ]; then
+ xen_rm_opts=
+ else
+ xen_rm_opts="no-real-mode edd=off"
+ fi
+ ${xen_loader} ${rel_xen_dirname}/${xen_basename} placeholder ${xen_args} \${xen_rm_opts}
+ echo '$(echo "$lmessage" | grub_quote)'
+ ${module_loader} ${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ro ${args}
+EOF
+ if test -n "${initrd}" ; then
+ # TRANSLATORS: ramdisk isn't identifier. Should be translated.
+ message="$(gettext_printf "Loading initial ramdisk ...")"
+ initrd_path=
+ for i in ${initrd}; do
+ initrd_path="${rel_dirname}/${i}"
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$(echo "$message" | grub_quote)'
+ ${module_loader} --nounzip $(echo $initrd_path)
+EOF
+ done
+ fi
+ if ${xsm} && test -n "${xenpolicy}" ; then
+ message="$(gettext_printf "Loading XSM policy ...")"
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$(echo "$message" | grub_quote)'
+ ${module_loader} ${rel_dirname}/${xenpolicy}
+EOF
+ fi
+ sed "s/^/$submenu_indentation/" << EOF
+}
+EOF
+}
+
+linux_list=
+for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* /boot/kernel-*; do
+ if grub_file_is_not_garbage "$i"; then
+ basename=$(basename $i)
+ version=$(echo $basename | sed -e "s,^[^0-9]*-,,g")
+ dirname=$(dirname $i)
+ config=
+ for j in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
+ if test -e "${j}" ; then
+ config="${j}"
+ break
+ fi
+ done
+ if (grep -qx "CONFIG_XEN_DOM0=y" "${config}" 2> /dev/null || grep -qx "CONFIG_XEN_PRIVILEGED_GUEST=y" "${config}" 2> /dev/null); then linux_list="$linux_list $i" ; fi
+ fi
+done
+if [ "x${linux_list}" = "x" ] ; then
+ exit 0
+fi
+
+file_is_not_xen_garbage () {
+ case "$1" in
+ */xen-syms-*)
+ return 1;;
+ */xenpolicy-*)
+ return 1;;
+ */*.config)
+ return 1;;
+ *)
+ return 0;;
+ esac
+}
+
+xen_list=
+for i in /boot/xen*; do
+ if grub_file_is_not_garbage "$i" && file_is_not_xen_garbage "$i" ; then xen_list="$xen_list $i" ; fi
+done
+prepare_boot_cache=
+boot_device_id=
+
+title_correction_code=
+
+machine=`uname -m`
+
+case "$machine" in
+ i?86) GENKERNEL_ARCH="x86" ;;
+ mips|mips64) GENKERNEL_ARCH="mips" ;;
+ mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
+ arm*) GENKERNEL_ARCH="arm" ;;
+ *) GENKERNEL_ARCH="$machine" ;;
+esac
+
+# Extra indentation to add to menu entries in a submenu. We're not in a submenu
+# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
+submenu_indentation=""
+
+# Perform a reverse version sort on the entire xen_list and linux_list.
+# Temporarily replace the '.old' suffix by ' 1' and append ' 2' for all
+# other files to order the '.old' files after their non-old counterpart
+# in reverse-sorted order.
+
+reverse_sorted_xen_list=$(echo ${xen_list} | tr ' ' '\n' | sed -e 's/\.old$/ 1/; / 1$/! s/$/ 2/' | version_sort -r | sed -e 's/ 1$/.old/; s/ 2$//')
+reverse_sorted_linux_list=$(echo ${linux_list} | tr ' ' '\n' | sed -e 's/\.old$/ 1/; / 1$/! s/$/ 2/' | version_sort -r | sed -e 's/ 1$/.old/; s/ 2$//')
+
+if [ "x$GRUB_TOP_LEVEL_XEN" != x ]; then
+ reverse_sorted_xen_list=$(grub_move_to_front "$GRUB_TOP_LEVEL_XEN" ${reverse_sorted_xen_list})
+fi
+if [ "x$GRUB_TOP_LEVEL" != x ]; then
+ reverse_sorted_linux_list=$(grub_move_to_front "$GRUB_TOP_LEVEL" ${reverse_sorted_linux_list})
+fi
+
+is_top_level=true
+
+for current_xen in ${reverse_sorted_xen_list}; do
+ xen_basename=`basename ${current_xen}`
+ xen_dirname=`dirname ${current_xen}`
+ rel_xen_dirname=`make_system_path_relative_to_its_root $xen_dirname`
+ xen_version=`echo $xen_basename | sed -e "s,.gz$,,g;s,^xen-,,g"`
+ if [ -z "$boot_device_id" ]; then
+ boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
+ fi
+ if [ "x$is_top_level" != xtrue ]; then
+ echo " submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {"
+ fi
+ if ($grub_file --is-arm64-efi $current_xen); then
+ xen_loader="xen_hypervisor"
+ module_loader="xen_module"
+ else
+ if ($grub_file --is-x86-multiboot2 $current_xen); then
+ xen_loader="multiboot2"
+ module_loader="module2"
+ else
+ xen_loader="multiboot"
+ module_loader="module"
+ fi
+ fi
+
+ initrd_early=
+ for i in ${GRUB_EARLY_INITRD_LINUX_STOCK} \
+ ${GRUB_EARLY_INITRD_LINUX_CUSTOM}; do
+ if test -e "${xen_dirname}/${i}" ; then
+ initrd_early="${initrd_early} ${i}"
+ fi
+ done
+
+ for linux in ${reverse_sorted_linux_list}; do
+ gettext_printf "Found linux image: %s\n" "$linux" >&2
+ basename=`basename $linux`
+ dirname=`dirname $linux`
+ rel_dirname=`make_system_path_relative_to_its_root $dirname`
+ version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
+ alt_version=`echo $version | sed -e "s,\.old$,,g"`
+ linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
+
+ initrd_real=
+ for i in "initrd.img-${version}" "initrd-${version}.img" \
+ "initrd-${alt_version}.img.old" "initrd-${version}.gz" \
+ "initrd-${alt_version}.gz.old" "initrd-${version}" \
+ "initramfs-${version}.img" "initramfs-${alt_version}.img.old" \
+ "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
+ "initrd-${alt_version}" "initramfs-${alt_version}.img" \
+ "initramfs-genkernel-${version}" \
+ "initramfs-genkernel-${alt_version}" \
+ "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
+ "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}" ; do
+ if test -e "${dirname}/${i}" ; then
+ initrd_real="$i"
+ break
+ fi
+ done
+
+ initrd=
+ if test -n "${initrd_early}" || test -n "${initrd_real}"; then
+ # Xen assumes the real initrd is the first module after the kernel.
+ # Additional (later) initrds can also be used for microcode update,
+ # with Xen option 'ucode= (non-default anyway).
+ initrd="${initrd_real} ${initrd_early}"
+
+ initrd_display=
+ for i in ${initrd}; do
+ initrd_display="${initrd_display} ${dirname}/${i}"
+ done
+ gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2
+ fi
+
+ if test -z "${initrd_real}"; then
+ # "UUID=" magic is parsed by initrds. Since there's no initrd, it can't work here.
+ if [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
+ || [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ]; then
+
+ linux_root_device_thisversion=${GRUB_DEVICE}
+ else
+ linux_root_device_thisversion=PARTUUID=${GRUB_DEVICE_PARTUUID}
+ fi
+ fi
+
+ # The GRUB_DISABLE_SUBMENU option used to be different than others since it was
+ # mentioned in the documentation that has to be set to 'y' instead of 'true' to
+ # enable it. This caused a lot of confusion to users that set the option to 'y',
+ # 'yes' or 'true'. This was fixed but all of these values must be supported now.
+ if [ "x${GRUB_DISABLE_SUBMENU}" = xyes ] || [ "x${GRUB_DISABLE_SUBMENU}" = xy ]; then
+ GRUB_DISABLE_SUBMENU="true"
+ fi
+
+ if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then
+ linux_entry "${OS}" "${version}" "${xen_version}" simple \
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
+
+ submenu_indentation="$grub_tab$grub_tab"
+
+ if [ -z "$boot_device_id" ]; then
+ boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
+ fi
+ # TRANSLATORS: %s is replaced with an OS name
+ echo "submenu '$(gettext_printf "Advanced options for %s (with Xen hypervisor)" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
+ echo " submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {"
+ is_top_level=false
+ fi
+
+ linux_entry "${OS}" "${version}" "${xen_version}" advanced \
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
+ if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
+ linux_entry "${OS}" "${version}" "${xen_version}" recovery \
+ "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}"
+ fi
+ done
+ if [ x"$is_top_level" != xtrue ]; then
+ echo ' }'
+ fi
+done
+
+# If at least one kernel was found, then we need to
+# add a closing '}' for the submenu command.
+if [ x"$is_top_level" != xtrue ]; then
+ echo '}'
+fi
+
+echo "$title_correction_code"
diff --git a/etc/grub.d/25_bli b/etc/grub.d/25_bli
new file mode 100755
index 0000000000..26e27a0197
--- /dev/null
+++ b/etc/grub.d/25_bli
@@ -0,0 +1,24 @@
+#! /bin/sh
+set -e
+
+# grub-mkconfig helper script.
+# Copyright (C) 2023 Free Software Foundation, Inc.
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see .
+
+cat << EOF
+if [ "\$grub_platform" = "efi" ]; then
+ insmod bli
+fi
+EOF
diff --git a/etc/grub.d/30_os-prober b/etc/grub.d/30_os-prober
new file mode 100755
index 0000000000..e0481b4e26
--- /dev/null
+++ b/etc/grub.d/30_os-prober
@@ -0,0 +1,377 @@
+#! /bin/sh
+set -e
+
+# grub-mkconfig helper script.
+# Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see .
+
+prefix="/usr"
+exec_prefix="/usr"
+datarootdir="/usr/share"
+quick_boot="1"
+
+export TEXTDOMAIN=grub
+export TEXTDOMAINDIR="${datarootdir}/locale"
+
+. "$pkgdatadir/grub-mkconfig_lib"
+
+found_other_os=
+
+adjust_timeout () {
+ if [ "$quick_boot" = 1 ] && [ "x${found_other_os}" != "x" ]; then
+ cat << EOF
+set timeout_style=menu
+if [ "\${timeout}" = 0 ]; then
+ set timeout=10
+fi
+EOF
+ fi
+}
+
+if ! command -v os-prober > /dev/null || ! command -v linux-boot-prober > /dev/null ; then
+ # missing os-prober and/or linux-boot-prober
+ exit 0
+elif [ "x${GRUB_DISABLE_OS_PROBER}" = "xauto" ]; then
+ # UBUNTU: We do not want to disable os-prober on upgrades if we found items before.
+ if test -e /boot/grub/grub.cfg && ! grep -q osprober /boot/grub/grub.cfg; then
+ grub_warn "$(gettext_printf "os-prober will not be executed to detect other bootable partitions.\nSystems on them will not be added to the GRUB boot configuration.\nCheck GRUB_DISABLE_OS_PROBER documentation entry.")"
+ exit 0
+ fi
+fi
+
+if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
+ grub_warn "$(gettext_printf "os-prober will not be executed to detect other bootable partitions.\nSystems on them will not be added to the GRUB boot configuration.\nCheck GRUB_DISABLE_OS_PROBER documentation entry.")"
+ exit 0
+fi
+
+grub_warn "$(gettext_printf "os-prober will be executed to detect other bootable partitions.\nIts output will be used to detect bootable binaries on them and create new boot entries.")"
+
+OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
+if [ -z "${OSPROBED}" ] ; then
+ # empty os-prober output, nothing doing
+ exit 0
+fi
+
+osx_entry() {
+ found_other_os=1
+ if [ x$2 = x32 ]; then
+ # TRANSLATORS: it refers to kernel architecture (32-bit)
+ bitstr="$(gettext "(32-bit)")"
+ else
+ # TRANSLATORS: it refers to kernel architecture (64-bit)
+ bitstr="$(gettext "(64-bit)")"
+ fi
+ # TRANSLATORS: it refers on the OS residing on device %s
+ onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
+ cat << EOF
+menuentry '$(echo "${LONGNAME} $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'osprober-xnu-$2-$(grub_get_device_id "${DEVICE}")' {
+EOF
+ save_default_entry | grub_add_tab
+ prepare_grub_to_access_device ${DEVICE} | grub_add_tab
+ cat << EOF
+ load_video
+ set do_resume=0
+ if [ /var/vm/sleepimage -nt10 / ]; then
+ if xnu_resume /var/vm/sleepimage; then
+ set do_resume=1
+ fi
+ fi
+ if [ \$do_resume = 0 ]; then
+ xnu_uuid ${OSXUUID} uuid
+ if [ -f /Extra/DSDT.aml ]; then
+ acpi -e /Extra/DSDT.aml
+ fi
+ if [ /kernelcache -nt /System/Library/Extensions ]; then
+ $1 /kernelcache boot-uuid=\${uuid} rd=*uuid
+ elif [ -f /System/Library/Kernels/kernel ]; then
+ $1 /System/Library/Kernels/kernel boot-uuid=\${uuid} rd=*uuid
+ xnu_kextdir /System/Library/Extensions
+ else
+ $1 /mach_kernel boot-uuid=\${uuid} rd=*uuid
+ if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
+ xnu_mkext /System/Library/Extensions.mkext
+ else
+ xnu_kextdir /System/Library/Extensions
+ fi
+ fi
+ if [ -f /Extra/Extensions.mkext ]; then
+ xnu_mkext /Extra/Extensions.mkext
+ fi
+ if [ -d /Extra/Extensions ]; then
+ xnu_kextdir /Extra/Extensions
+ fi
+ if [ -f /Extra/devprop.bin ]; then
+ xnu_devprop_load /Extra/devprop.bin
+ fi
+ if [ -f /Extra/splash.jpg ]; then
+ insmod jpeg
+ xnu_splash /Extra/splash.jpg
+ fi
+ if [ -f /Extra/splash.png ]; then
+ insmod png
+ xnu_splash /Extra/splash.png
+ fi
+ if [ -f /Extra/splash.tga ]; then
+ insmod tga
+ xnu_splash /Extra/splash.tga
+ fi
+ fi
+}
+EOF
+}
+
+used_osprober_linux_ids=
+
+if [ "x$GRUB_TOP_LEVEL_OS_PROBER" != x ]; then
+ OSPROBED=$(grub_move_to_front "$GRUB_TOP_LEVEL_OS_PROBER" ${OSPROBED})
+fi
+
+for OS in ${OSPROBED} ; do
+ DEVICE="`echo ${OS} | cut -d ':' -f 1`"
+ LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
+ LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
+ BOOT="`echo ${OS} | cut -d ':' -f 4`"
+ if UUID="`${grub_probe} --target=fs_uuid --device ${DEVICE%@*}`"; then
+ EXPUUID="$UUID"
+
+ if [ x"${DEVICE#*@}" != x ] ; then
+ EXPUUID="${EXPUUID}@${DEVICE#*@}"
+ fi
+
+ if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" ] && [ "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then
+ echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2
+ continue
+ fi
+ fi
+
+ BTRFS="`echo ${OS} | cut -d ':' -f 5`"
+ if [ "x$BTRFS" = "xbtrfs" ]; then
+ BTRFSuuid="`echo ${OS} | cut -d ':' -f 6`"
+ BTRFSsubvol="`echo ${OS} | cut -d ':' -f 7`"
+ fi
+
+ if [ -z "${LONGNAME}" ] ; then
+ LONGNAME="${LABEL}"
+ fi
+
+ # os-prober returns text string followed by optional counter
+ CLASS="--class $(echo "${LABEL}" | LC_ALL=C sed 's,[[:digit:]]*$,,' | cut -d' ' -f1 | tr 'A-Z' 'a-z' | LC_ALL=C sed 's,[^[:alnum:]_],_,g')"
+
+ gettext_printf "Found %s on %s\n" "${LONGNAME}" "${DEVICE}" >&2
+
+ case ${BOOT} in
+ chain)
+
+ onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
+ cat << EOF
+menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' $CLASS --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}")' {
+EOF
+ save_default_entry | grub_add_tab
+ prepare_grub_to_access_device ${DEVICE} | grub_add_tab
+
+ if [ x"`${grub_probe} --device ${DEVICE} --target=partmap`" = xmsdos ]; then
+ cat << EOF
+ parttool \${root} hidden-
+EOF
+ fi
+
+ case ${LONGNAME} in
+ Windows\ Vista*|Windows\ 7*|Windows\ Server\ 2008*)
+ ;;
+ *)
+ cat << EOF
+ drivemap -s (hd0) \${root}
+EOF
+ ;;
+ esac
+
+ cat < /dev/null; do
+ counter=$((counter+1));
+ done
+ if [ -z "$boot_device_id" ]; then
+ boot_device_id="$(grub_get_device_id "${DEVICE}")"
+ fi
+ used_osprober_linux_ids="$used_osprober_linux_ids 'osprober-gnulinux-$LKERNEL-${recovery_params}-$counter-$boot_device_id'"
+
+ # The GRUB_DISABLE_SUBMENU option used to be different than others since it was
+ # mentioned in the documentation that has to be set to 'y' instead of 'true' to
+ # enable it. This caused a lot of confusion to users that set the option to 'y',
+ # 'yes' or 'true'. This was fixed but all of these values must be supported now.
+ if [ "x${GRUB_DISABLE_SUBMENU}" = xyes ] || [ "x${GRUB_DISABLE_SUBMENU}" = xy ]; then
+ GRUB_DISABLE_SUBMENU="true"
+ fi
+
+ if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then
+ cat << EOF
+menuentry '$(echo "$OS $onstr" | grub_quote)' $CLASS --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-simple-$boot_device_id' {
+EOF
+ save_default_entry | grub_add_tab
+ printf '%s\n' "${prepare_boot_cache}"
+ cat << EOF
+ linux ${LKERNEL} ${LPARAMS}
+EOF
+ if [ -n "${LINITRD}" ] ; then
+ cat << EOF
+ initrd ${LINITRD}
+EOF
+ fi
+ cat << EOF
+}
+EOF
+ echo "submenu '$(gettext_printf "Advanced options for %s" "${OS} $onstr" | grub_quote)' \$menuentry_id_option 'osprober-gnulinux-advanced-$boot_device_id' {"
+ is_top_level=false
+ fi
+ title="${LLABEL} $onstr"
+ cat << EOF
+ menuentry '$(echo "$title" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-$LKERNEL-${recovery_params}-$boot_device_id' {
+EOF
+ save_default_entry | sed -e "s/^/$grub_tab$grub_tab/"
+ printf '%s\n' "${prepare_boot_cache}" | grub_add_tab
+ cat << EOF
+ linux ${LKERNEL} ${LPARAMS}
+EOF
+ if [ -n "${LINITRD}" ] ; then
+ cat << EOF
+ initrd ${LINITRD}
+EOF
+ fi
+ cat << EOF
+ }
+EOF
+ if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
+ replacement_title="$(echo "Advanced options for ${OS} $onstr" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
+ quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
+ title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
+ grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
+ fi
+ done
+ if [ x"$is_top_level" != xtrue ]; then
+ echo '}'
+ fi
+ echo "$title_correction_code"
+ ;;
+ macosx)
+ if [ "${UUID}" ]; then
+ OSXUUID="${UUID}"
+ osx_entry xnu_kernel 32
+ osx_entry xnu_kernel64 64
+ fi
+ ;;
+ hurd)
+ found_other_os=1
+ onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
+ cat << EOF
+menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class hurd --class gnu --class os \$menuentry_id_option 'osprober-gnuhurd-/boot/gnumach.gz-false-$(grub_get_device_id "${DEVICE}")' {
+EOF
+ save_default_entry | grub_add_tab
+ prepare_grub_to_access_device ${DEVICE} | grub_add_tab
+ grub_device="`${grub_probe} --device ${DEVICE} --target=drive`"
+ mach_device="`echo "${grub_device}" | sed -e 's/(\(hd.*\),msdos\(.*\))/\1s\2/'`"
+ grub_fs="`${grub_probe} --device ${DEVICE} --target=fs`"
+ case "${grub_fs}" in
+ *fs) hurd_fs="${grub_fs}" ;;
+ *) hurd_fs="${grub_fs}fs" ;;
+ esac
+ cat << EOF
+ multiboot /boot/gnumach.gz root=device:${mach_device}
+ module /hurd/${hurd_fs}.static ${hurd_fs} --readonly \\
+ --multiboot-command-line='\${kernel-command-line}' \\
+ --host-priv-port='\${host-port}' \\
+ --device-master-port='\${device-port}' \\
+ --exec-server-task='\${exec-task}' -T typed '\${root}' \\
+ '\$(task-create)' '\$(task-resume)'
+ module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
+}
+EOF
+ ;;
+ minix)
+ cat << EOF
+menuentry "${LONGNAME} (on ${DEVICE}, Multiboot)" {
+EOF
+ save_default_entry | sed -e "s/^/\t/"
+ prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
+ cat << EOF
+ multiboot /boot/image_latest
+}
+EOF
+ ;;
+ *)
+ # TRANSLATORS: %s is replaced by OS name.
+ gettext_printf "%s is not yet supported by grub-mkconfig.\n" " ${LONGNAME}" >&2
+ ;;
+ esac
+done
+
+adjust_timeout
diff --git a/etc/grub.d/30_uefi-firmware b/etc/grub.d/30_uefi-firmware
new file mode 100755
index 0000000000..377913d2d9
--- /dev/null
+++ b/etc/grub.d/30_uefi-firmware
@@ -0,0 +1,42 @@
+#! /bin/sh
+set -e
+
+# grub-mkconfig helper script.
+# Copyright (C) 2020 Free Software Foundation, Inc.
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see .
+
+prefix="/usr"
+exec_prefix="/usr"
+datarootdir="/usr/share"
+
+export TEXTDOMAIN=grub
+export TEXTDOMAINDIR="${datarootdir}/locale"
+
+. "$pkgdatadir/grub-mkconfig_lib"
+
+LABEL="UEFI Firmware Settings"
+
+gettext_printf "Adding boot menu entry for UEFI Firmware Settings ...\n" >&2
+
+cat << EOF
+if [ "\$grub_platform" = "efi" ]; then
+ fwsetup --is-supported
+ if [ "\$?" = 0 ]; then
+ menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' {
+ fwsetup
+ }
+ fi
+fi
+EOF
diff --git a/etc/grub.d/35_fwupd b/etc/grub.d/35_fwupd
new file mode 100755
index 0000000000..e7c3a7f76c
--- /dev/null
+++ b/etc/grub.d/35_fwupd
@@ -0,0 +1,24 @@
+#! /bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+set -e
+
+[ -d ${pkgdatadir:?} ]
+# shellcheck source=/dev/null
+. "$pkgdatadir/grub-mkconfig_lib"
+
+if [ -f /var/lib/fwupd/uefi_capsule.conf ] &&
+ ls /sys/firmware/efi/efivars/fwupd-*-0abba7dc-e516-4167-bbf5-4d9d1c739416 1>/dev/null 2>&1; then
+ . /var/lib/fwupd/uefi_capsule.conf
+ if [ "${EFI_PATH}" != "" ] && [ "${ESP}" != "" ]; then
+ echo "Adding Linux Firmware Updater entry" >&2
+cat << EOF
+menuentry 'Linux Firmware Updater' \$menuentry_id_option 'fwupd' {
+EOF
+ ${grub_probe:?} --version > /dev/null
+ prepare_grub_to_access_device "$(${grub_probe} --target=device ${ESP})" | sed -e "s/^/\t/"
+cat << EOF
+ chainloader ${EFI_PATH}
+}
+EOF
+ fi
+fi
diff --git a/etc/grub.d/40_custom b/etc/grub.d/40_custom
new file mode 100755
index 0000000000..48068de469
--- /dev/null
+++ b/etc/grub.d/40_custom
@@ -0,0 +1,5 @@
+#!/bin/sh
+exec tail -n +3 $0
+# This file provides an easy way to add custom menu entries. Simply type the
+# menu entries you want to add after this comment. Be careful not to change
+# the 'exec tail' line above.
diff --git a/etc/grub.d/41_custom b/etc/grub.d/41_custom
new file mode 100755
index 0000000000..a08363da18
--- /dev/null
+++ b/etc/grub.d/41_custom
@@ -0,0 +1,9 @@
+#!/bin/sh
+cat < /dev/null && echo "$APACHE_RUN_USER")
+
+# Default values. Edit /etc/default/apache-htcacheclean$DIR_SUFFIX to change these
+HTCACHECLEAN_SIZE="${HTCACHECLEAN_SIZE:=300M}"
+HTCACHECLEAN_DAEMON_INTERVAL="${HTCACHECLEAN_DAEMON_INTERVAL:=120}"
+HTCACHECLEAN_PATH="${HTCACHECLEAN_PATH:=/var/cache/apache2$DIR_SUFFIX/mod_cache_disk}"
+HTCACHECLEAN_OPTIONS="${HTCACHECLEAN_OPTIONS:=-n}"
+
+# Read configuration variable file if it is present
+if [ -f /etc/default/apache-htcacheclean$DIR_SUFFIX ] ; then
+ . /etc/default/apache-htcacheclean$DIR_SUFFIX
+elif [ -f /etc/default/apache-htcacheclean ] ; then
+ . /etc/default/apache-htcacheclean
+fi
+
+PIDDIR="/var/run/apache2/$RUN_USER"
+PIDFILE="$PIDDIR/$NAME.pid"
+DAEMON_ARGS="$HTCACHECLEAN_OPTIONS \
+ -d$HTCACHECLEAN_DAEMON_INTERVAL \
+ -P$PIDFILE -i \
+ -p$HTCACHECLEAN_PATH \
+ -l$HTCACHECLEAN_SIZE"
+
+do_start_prepare () {
+ if [ ! -d "$PIDDIR" ] ; then
+ mkdir -p "$PIDDIR"
+ chown "$RUN_USER:" "$PIDDIR"
+ fi
+ if [ ! -d "$HTCACHECLEAN_PATH" ] ; then
+ echo "Directory $HTCACHECLEAN_PATH does not exist!" >&2
+ exit 2
+ fi
+}
+
+do_start_cmd_override () {
+ start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
+ -u $RUN_USER --startas $DAEMON --name htcacheclean --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
+ -c $RUN_USER --startas $DAEMON --name htcacheclean -- $DAEMON_ARGS \
+ || return 2
+}
+
+do_stop_cmd_override () {
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
+ -u $RUN_USER --pidfile ${PIDFILE} --name htcacheclean
+}
diff --git a/etc/init.d/apache2 b/etc/init.d/apache2
new file mode 100755
index 0000000000..c2959d4574
--- /dev/null
+++ b/etc/init.d/apache2
@@ -0,0 +1,353 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: apache2
+# Required-Start: $local_fs $remote_fs $network $syslog $named
+# Required-Stop: $local_fs $remote_fs $network $syslog $named
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# X-Interactive: true
+# Short-Description: Apache2 web server
+# Description: Start the web server
+# This script will start the apache2 web server.
+### END INIT INFO
+
+DESC="Apache httpd web server"
+NAME=apache2
+DAEMON=/usr/sbin/$NAME
+
+SCRIPTNAME="${0##*/}"
+SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
+if [ -n "$APACHE_CONFDIR" ] ; then
+ if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
+ DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
+ else
+ DIR_SUFFIX=
+ fi
+elif [ "${SCRIPTNAME##apache2-}" != "$SCRIPTNAME" ] ; then
+ DIR_SUFFIX="-${SCRIPTNAME##apache2-}"
+ APACHE_CONFDIR=/etc/apache2$DIR_SUFFIX
+else
+ DIR_SUFFIX=
+ APACHE_CONFDIR=/etc/apache2
+fi
+if [ -z "$APACHE_ENVVARS" ] ; then
+ APACHE_ENVVARS=$APACHE_CONFDIR/envvars
+fi
+export APACHE_CONFDIR APACHE_ENVVARS
+
+ENV="env -i LANG=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+if [ "$APACHE_CONFDIR" != /etc/apache2 ] ; then
+ ENV="$ENV APACHE_CONFDIR=$APACHE_CONFDIR"
+fi
+if [ "$APACHE_ENVVARS" != "$APACHE_CONFDIR/envvars" ] ; then
+ ENV="$ENV APACHE_ENVVARS=$APACHE_ENVVARS"
+fi
+
+PIDFILE=$(. $APACHE_ENVVARS && echo $APACHE_PID_FILE)
+
+VERBOSE=no
+if [ -f /etc/default/rcS ]; then
+ . /etc/default/rcS
+fi
+. /lib/lsb/init-functions
+
+
+# Now, set defaults:
+APACHE2CTL="$ENV apache2ctl"
+PIDFILE=$(. $APACHE_ENVVARS && echo $APACHE_PID_FILE)
+APACHE2_INIT_MESSAGE=""
+
+CONFTEST_OUTFILE=
+cleanup() {
+ if [ -n "$CONFTEST_OUTFILE" ] ; then
+ rm -f "$CONFTEST_OUTFILE"
+ fi
+}
+trap cleanup 0 # "0" means "EXIT", but "EXIT" is not portable
+
+
+apache_conftest() {
+ [ -z "$CONFTEST_OUTFILE" ] || rm -f "$CONFTEST_OUTFILE"
+ CONFTEST_OUTFILE=$(mktemp)
+ if ! $APACHE2CTL configtest > "$CONFTEST_OUTFILE" 2>&1 ; then
+ return 1
+ else
+ rm -f "$CONFTEST_OUTFILE"
+ CONFTEST_OUTFILE=
+ return 0
+ fi
+}
+
+clear_error_msg() {
+ [ -z "$CONFTEST_OUTFILE" ] || rm -f "$CONFTEST_OUTFILE"
+ CONFTEST_OUTFILE=
+ APACHE2_INIT_MESSAGE=
+}
+
+print_error_msg() {
+ [ -z "$APACHE2_INIT_MESSAGE" ] || log_warning_msg "$APACHE2_INIT_MESSAGE"
+ if [ -n "$CONFTEST_OUTFILE" ] ; then
+ echo "Output of config test was:" >&2
+ cat "$CONFTEST_OUTFILE" >&2
+ rm -f "$CONFTEST_OUTFILE"
+ CONFTEST_OUTFILE=
+ fi
+}
+
+apache_wait_start() {
+ local STATUS=$1
+ local i=0
+
+ if [ $STATUS != 0 ] ; then
+ return $STATUS
+ fi
+ while : ; do
+ PIDTMP=$(pidofproc -p $PIDFILE $DAEMON)
+ if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
+ return $STATUS
+ fi
+
+ if [ $i = "20" ] ; then
+ APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX instance did not start within 20 seconds. Please read the log files to discover problems"
+ return 2
+ fi
+
+ [ "$VERBOSE" != no ] && log_progress_msg "."
+ sleep 1
+ i=$(($i+1))
+ done
+}
+
+apache_wait_stop() {
+ local STATUS=$1
+ local METH=$2
+
+ if [ $STATUS != 0 ] ; then
+ return $STATUS
+ fi
+
+ PIDTMP=$(pidofproc -p $PIDFILE $DAEMON)
+ if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
+ if [ "$METH" = "kill" ]; then
+ killproc -p $PIDFILE $DAEMON
+ else
+ $APACHE2CTL $METH > /dev/null 2>&1
+ fi
+
+ local i=0
+ while kill -0 "${PIDTMP:-}" 2> /dev/null; do
+ if [ $i = '60' ]; then
+ STATUS=2
+ break
+ fi
+ [ "$VERBOSE" != no ] && log_progress_msg "."
+ sleep 1
+ i=$(($i+1))
+ done
+ return $STATUS
+ else
+ return $STATUS
+ fi
+}
+
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+
+ if pidofproc -p $PIDFILE "$DAEMON" > /dev/null 2>&1 ; then
+ return 1
+ fi
+
+ if apache_conftest ; then
+ $APACHE2CTL start
+ apache_wait_start $?
+ return $?
+ else
+ APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest failed."
+ return 2
+ fi
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+
+ # either "stop" or "graceful-stop"
+ local STOP=$1
+ # can't use pidofproc from LSB here
+ local AP_RET=0
+
+ if pidof $DAEMON > /dev/null 2>&1 ; then
+ if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
+ AP_RET=2
+ else
+ AP_RET=1
+ fi
+ else
+ AP_RET=0
+ fi
+
+ # AP_RET is:
+ # 0 if Apache (whichever) is not running
+ # 1 if Apache (whichever) is running
+ # 2 if Apache from the PIDFILE is running
+
+ if [ $AP_RET = 0 ] ; then
+ return 1
+ fi
+
+ if [ $AP_RET = 2 ] && apache_conftest ; then
+ apache_wait_stop $? $STOP
+ return $?
+ else
+ if [ $AP_RET = 2 ]; then
+ clear_error_msg
+ APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest failed, so we are trying to kill it manually. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!"
+ apache_wait_stop $? "kill"
+ return $?
+ elif [ $AP_RET = 1 ] ; then
+ APACHE2_INIT_MESSAGE="There are processes named 'apache2' running which do not match your pid file which are left untouched in the name of safety, Please review the situation by hand".
+ return 2
+ fi
+ fi
+
+}
+
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ if apache_conftest; then
+ if ! pidofproc -p $PIDFILE "$DAEMON" > /dev/null 2>&1 ; then
+ APACHE2_INIT_MESSAGE="Apache2 is not running"
+ return 2
+ fi
+ $APACHE2CTL graceful > /dev/null 2>&1
+ return $?
+ else
+ APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest failed. Not doing anything."
+ return 2
+ fi
+}
+
+
+# Sanity checks. They need to occur after function declarations
+[ -x $DAEMON ] || exit 0
+
+if [ ! -x $DAEMON ] ; then
+ echo "No apache-bin package installed"
+ exit 0
+fi
+
+if [ -z "$PIDFILE" ] ; then
+ echo ERROR: APACHE_PID_FILE needs to be defined in $APACHE_ENVVARS >&2
+ exit 2
+fi
+
+
+case "$1" in
+ start)
+ log_daemon_msg "Starting $DESC" "$NAME"
+ do_start
+ RET_STATUS=$?
+ case "$RET_STATUS" in
+ 0|1)
+ log_success_msg
+ [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && log_warning_msg "Server was already running"
+ ;;
+ 2)
+ log_failure_msg
+ print_error_msg
+ exit 1
+ ;;
+ esac
+ ;;
+ stop|graceful-stop)
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop "$1"
+ RET_STATUS=$?
+ case "$RET_STATUS" in
+ 0|1)
+ log_success_msg
+ [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && log_warning_msg "Server was not running"
+ ;;
+ 2)
+ log_failure_msg
+ print_error_msg
+ exit 1
+ ;;
+ esac
+ print_error_msg
+
+ ;;
+ status)
+ status_of_proc -p $PIDFILE "apache2" "$NAME"
+ exit $?
+ ;;
+ reload|force-reload|graceful)
+ log_daemon_msg "Reloading $DESC" "$NAME"
+ do_reload
+ RET_STATUS=$?
+ case "$RET_STATUS" in
+ 0|1)
+ log_success_msg
+ [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && log_warning_msg "Server was already running"
+ ;;
+ 2)
+ log_failure_msg
+ print_error_msg
+ exit 1
+ ;;
+ esac
+ print_error_msg
+ ;;
+ restart)
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop stop
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0)
+ log_end_msg 0
+ ;;
+ 1|*)
+ log_end_msg 1 # Old process is still or failed to running
+ print_error_msg
+ exit 1
+ ;;
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ print_error_msg
+ exit 1
+ ;;
+ esac
+ ;;
+ start-htcacheclean|stop-htcacheclean)
+ echo "Use 'service apache-htcacheclean' instead"
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|graceful-stop|restart|reload|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/apparmor b/etc/init.d/apparmor
new file mode 100755
index 0000000000..f8a2453b56
--- /dev/null
+++ b/etc/init.d/apparmor
@@ -0,0 +1,156 @@
+#!/bin/sh
+# ----------------------------------------------------------------------
+# Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+# NOVELL (All rights reserved)
+# Copyright (c) 2008, 2009 Canonical, Ltd.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of version 2 of the GNU General Public
+# License published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, contact Novell, Inc.
+# ----------------------------------------------------------------------
+# Authors:
+# Steve Beattie
+# Kees Cook
+#
+# /etc/init.d/apparmor
+#
+# Note: "Required-Start: $local_fs" implies that the cache may not be available
+# yet when /var is on a remote filesystem. The worst consequence this should
+# have is slowing down the boot.
+#
+### BEGIN INIT INFO
+# Provides: apparmor
+# Required-Start: $local_fs
+# Required-Stop: umountfs
+# Default-Start: S
+# Default-Stop:
+# Short-Description: AppArmor initialization
+# Description: AppArmor init script. This script loads all AppArmor profiles.
+### END INIT INFO
+
+APPARMOR_FUNCTIONS=/lib/apparmor/rc.apparmor.functions
+
+# Functions needed by rc.apparmor.functions
+
+. /lib/lsb/init-functions
+
+aa_action() {
+ STRING=$1
+ shift
+ $*
+ rc=$?
+ if [ $rc -eq 0 ] ; then
+ aa_log_success_msg $"$STRING "
+ else
+ aa_log_failure_msg $"$STRING "
+ fi
+ return $rc
+}
+
+aa_log_action_start() {
+ log_action_begin_msg $@
+}
+
+aa_log_action_end() {
+ log_action_end_msg $@
+}
+
+aa_log_success_msg() {
+ log_success_msg $@
+}
+
+aa_log_warning_msg() {
+ log_warning_msg $@
+}
+
+aa_log_failure_msg() {
+ log_failure_msg $@
+}
+
+aa_log_skipped_msg() {
+ if [ -n "$1" ]; then
+ log_warning_msg "${1}: Skipped."
+ fi
+}
+
+aa_log_daemon_msg() {
+ log_daemon_msg $@
+}
+
+aa_log_end_msg() {
+ log_end_msg $@
+}
+
+# Source AppArmor function library
+if [ -f "${APPARMOR_FUNCTIONS}" ]; then
+ . ${APPARMOR_FUNCTIONS}
+else
+ aa_log_failure_msg "Unable to find AppArmor initscript functions"
+ exit 1
+fi
+
+usage() {
+ echo "Usage: $0 {start|stop|restart|reload|force-reload|status}"
+}
+
+test -x ${PARSER} || exit 0 # by debian policy
+# LSM is built-in, so it is either there or not enabled for this boot
+test -d /sys/module/apparmor || exit 0
+
+# do not perform start/stop/reload actions when running from liveCD
+test -d /rofs/etc/apparmor.d && exit 0
+
+rc=255
+case "$1" in
+ start)
+ if [ -x /usr/bin/systemd-detect-virt ] && \
+ systemd-detect-virt --quiet --container && \
+ ! is_container_with_internal_policy; then
+ aa_log_daemon_msg "Not starting AppArmor in container"
+ aa_log_end_msg 0
+ exit 0
+ fi
+ apparmor_start
+ rc=$?
+ ;;
+ restart|reload|force-reload)
+ if [ -x /usr/bin/systemd-detect-virt ] && \
+ systemd-detect-virt --quiet --container && \
+ ! is_container_with_internal_policy; then
+ aa_log_daemon_msg "Not starting AppArmor in container"
+ aa_log_end_msg 0
+ exit 0
+ fi
+ apparmor_restart
+ rc=$?
+ ;;
+ stop)
+ aa_log_daemon_msg "Leaving AppArmor profiles loaded"
+ cat >&2 <= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+
+ $AGENT --start
+
+ # check for incomplete suspend/resume or hibernate
+ if [ -e /var/lib/pm-utils/status ]; then
+ /usr/share/apport/apportcheckresume || true
+ rm -f /var/lib/pm-utils/status
+ rm -f /var/lib/pm-utils/resume-hang.log
+ fi
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+
+ # Check for a hung resume. If we find one try and grab everything
+ # we can to aid in its discovery.
+ if [ -e /var/lib/pm-utils/status ]; then
+ ps -wwef >/var/lib/pm-utils/resume-hang.log
+ fi
+
+ $AGENT --stop
+}
+
+case "$1" in
+ start)
+ # don't start in containers
+ grep -zqs '^container=' /proc/1/environ && exit 0
+
+ [ "$enabled" = "1" ] || [ "$force_start" = "1" ] || exit 0
+ [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC:" "$NAME"
+ do_start
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ # don't stop in containers
+ grep -zqs '^container=' /proc/1/environ && exit 0
+
+ [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC:" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ restart|force-reload)
+ $0 stop || true
+ $0 start
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+:
diff --git a/etc/init.d/console-setup.sh b/etc/init.d/console-setup.sh
new file mode 100755
index 0000000000..d8d93492ec
--- /dev/null
+++ b/etc/init.d/console-setup.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: console-setup.sh
+# Required-Start: $remote_fs
+# Required-Stop:
+# Should-Start: console-screen kbd
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# X-Interactive: true
+# Short-Description: Set console font and keymap
+### END INIT INFO
+
+if [ -f /bin/setupcon ]; then
+ case "$1" in
+ stop|status)
+ # console-setup isn't a daemon
+ ;;
+ start|force-reload|restart|reload)
+ if [ -f /lib/lsb/init-functions ]; then
+ . /lib/lsb/init-functions
+ else
+ log_action_begin_msg () {
+ echo -n "$@... "
+ }
+
+ log_action_end_msg () {
+ if [ "$1" -eq 0 ]; then
+ echo done.
+ else
+ echo failed.
+ fi
+ }
+ fi
+ log_action_begin_msg "Setting up console font and keymap"
+ if /lib/console-setup/console-setup.sh; then
+ log_action_end_msg 0
+ else
+ log_action_end_msg $?
+ fi
+ ;;
+ *)
+ echo 'Usage: /etc/init.d/console-setup.sh {start|reload|restart|force-reload|stop|status}'
+ exit 3
+ ;;
+ esac
+fi
diff --git a/etc/init.d/cron b/etc/init.d/cron
new file mode 100755
index 0000000000..5334e6b98f
--- /dev/null
+++ b/etc/init.d/cron
@@ -0,0 +1,92 @@
+#!/bin/sh
+# Start/stop the cron daemon.
+#
+### BEGIN INIT INFO
+# Provides: cron
+# Required-Start: $remote_fs $syslog $time
+# Required-Stop: $remote_fs $syslog $time
+# Should-Start: $network $named slapd autofs ypbind nscd nslcd winbind sssd
+# Should-Stop: $network $named slapd autofs ypbind nscd nslcd winbind sssd
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# Short-Description: Regular background program processing daemon
+# Description: cron is a standard UNIX program that runs user-specified
+# programs at periodic scheduled times. vixie cron adds a
+# number of features to the basic UNIX cron, including better
+# security and more powerful configuration options.
+### END INIT INFO
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DESC="cron daemon"
+NAME=cron
+DAEMON=/usr/sbin/cron
+PIDFILE=/var/run/crond.pid
+SCRIPTNAME=/etc/init.d/"$NAME"
+
+test -f $DAEMON || exit 0
+
+. /lib/lsb/init-functions
+
+[ -r /etc/default/cron ] && . /etc/default/cron
+
+# Read the system's locale and set cron's locale. This is only used for
+# setting the charset of mails generated by cron. To provide locale
+# information to tasks running under cron, see /etc/pam.d/cron.
+#
+# We read /etc/environment, but warn about locale information in
+# there because it should be in /etc/default/locale.
+parse_environment ()
+{
+ for ENV_FILE in /etc/environment /etc/default/locale; do
+ [ -r "$ENV_FILE" ] || continue
+ [ -s "$ENV_FILE" ] || continue
+
+ for var in LANG LANGUAGE LC_ALL LC_CTYPE; do
+ value=`egrep "^${var}=" "$ENV_FILE" | tail -n1 | cut -d= -f2`
+ [ -n "$value" ] && eval export $var=$value
+
+ if [ -n "$value" ] && [ "$ENV_FILE" = /etc/environment ]; then
+ log_warning_msg "/etc/environment has been deprecated for locale information; use /etc/default/locale for $var=$value instead"
+ fi
+ done
+ done
+
+# Get the timezone set.
+ if [ -z "$TZ" -a -e /etc/localtime ]; then
+ TZ=$(readlink /etc/localtime | sed "s|/usr/share/zoneinfo/||")
+ fi
+}
+
+# Parse the system's environment
+if [ "$READ_ENV" = "yes" ] ; then
+ parse_environment
+fi
+
+
+case "$1" in
+start) log_daemon_msg "Starting periodic command scheduler" "cron"
+ start_daemon -p $PIDFILE $DAEMON -P $EXTRA_OPTS
+ log_end_msg $?
+ ;;
+stop) log_daemon_msg "Stopping periodic command scheduler" "cron"
+ killproc -p $PIDFILE $DAEMON
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && [ -e "$PIDFILE" ] && rm -f $PIDFILE
+ log_end_msg $RETVAL
+ ;;
+restart) log_daemon_msg "Restarting periodic command scheduler" "cron"
+ $0 stop
+ $0 start
+ ;;
+reload|force-reload) log_daemon_msg "Reloading configuration files for periodic command scheduler" "cron"
+ # cron reloads automatically
+ log_end_msg 0
+ ;;
+status)
+ status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
+ ;;
+*) log_action_msg "Usage: /etc/init.d/cron {start|stop|status|restart|reload|force-reload}"
+ exit 2
+ ;;
+esac
+exit 0
diff --git a/etc/init.d/cryptdisks b/etc/init.d/cryptdisks
new file mode 100755
index 0000000000..0cd4a831db
--- /dev/null
+++ b/etc/init.d/cryptdisks
@@ -0,0 +1,53 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: cryptdisks
+# Required-Start: checkroot cryptdisks-early
+# Required-Stop: umountroot cryptdisks-early
+# Should-Start: udev mdadm-raid lvm2
+# Should-Stop: udev mdadm-raid lvm2
+# X-Start-Before: checkfs
+# X-Stop-After: umountfs
+# X-Interactive: true
+# Default-Start: S
+# Default-Stop: 0 6
+# Short-Description: Setup remaining encrypted block devices.
+# Description:
+### END INIT INFO
+
+set -e
+
+if [ -r /lib/cryptsetup/cryptdisks-functions ]; then
+ . /lib/cryptsetup/cryptdisks-functions
+else
+ exit 0
+fi
+
+INITSTATE="remaining"
+DEFAULT_LOUD="yes"
+
+case "$CRYPTDISKS_ENABLE" in
+[Nn]*)
+ exit 0
+ ;;
+esac
+
+case "$1" in
+start)
+ do_start
+ ;;
+stop)
+ do_stop
+ ;;
+restart|reload|force-reload)
+ do_stop
+ do_start
+ ;;
+force-start)
+ FORCE_START="yes"
+ do_start
+ ;;
+*)
+ echo "Usage: cryptdisks {start|stop|restart|reload|force-reload|force-start}"
+ exit 1
+ ;;
+esac
diff --git a/etc/init.d/cryptdisks-early b/etc/init.d/cryptdisks-early
new file mode 100755
index 0000000000..6498431ed1
--- /dev/null
+++ b/etc/init.d/cryptdisks-early
@@ -0,0 +1,53 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: cryptdisks-early
+# Required-Start: checkroot
+# Required-Stop: umountroot
+# Should-Start: udev mdadm-raid
+# Should-Stop: udev mdadm-raid
+# X-Start-Before: lvm2
+# X-Stop-After: lvm2 umountfs
+# X-Interactive: true
+# Default-Start: S
+# Default-Stop: 0 6
+# Short-Description: Setup early encrypted block devices.
+# Description:
+### END INIT INFO
+
+set -e
+
+if [ -r /lib/cryptsetup/cryptdisks-functions ]; then
+ . /lib/cryptsetup/cryptdisks-functions
+else
+ exit 0
+fi
+
+INITSTATE="early"
+DEFAULT_LOUD=""
+
+case "$CRYPTDISKS_ENABLE" in
+[Nn]*)
+ exit 0
+ ;;
+esac
+
+case "$1" in
+start)
+ do_start
+ ;;
+stop)
+ do_stop
+ ;;
+restart|reload|force-reload)
+ do_stop
+ do_start
+ ;;
+force-start)
+ FORCE_START="yes"
+ do_start
+ ;;
+*)
+ echo "Usage: cryptdisks-early {start|stop|restart|reload|force-reload|force-start}"
+ exit 1
+ ;;
+esac
diff --git a/etc/init.d/dbus b/etc/init.d/dbus
new file mode 100755
index 0000000000..105c83b809
--- /dev/null
+++ b/etc/init.d/dbus
@@ -0,0 +1,129 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: dbus
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# Short-Description: D-Bus systemwide message bus
+# Description: D-Bus is a simple interprocess messaging system, used
+# for sending messages between applications.
+### END INIT INFO
+# -*- coding: utf-8 -*-
+# Debian init.d script for D-BUS
+# Copyright © 2003 Colin Walters
+# Copyright © 2005 Sjoerd Simons
+
+set -e
+
+DAEMON=/usr/bin/dbus-daemon
+UUIDGEN=/usr/bin/dbus-uuidgen
+UUIDGEN_OPTS=--ensure
+NAME=dbus
+DAEMONUSER=messagebus
+PIDDIR=/var/run/dbus
+PIDFILE=$PIDDIR/pid
+DESC="system message bus"
+
+test -x $DAEMON || exit 0
+
+. /lib/lsb/init-functions
+
+# Source defaults file; edit that file to configure this script.
+PARAMS=""
+if [ -e /etc/default/dbus ]; then
+ . /etc/default/dbus
+fi
+
+create_machineid() {
+ # Create machine-id file
+ if [ -x $UUIDGEN ]; then
+ $UUIDGEN $UUIDGEN_OPTS
+ fi
+}
+
+start_it_up()
+{
+ if [ ! -d $PIDDIR ]; then
+ mkdir -p $PIDDIR
+ chown $DAEMONUSER $PIDDIR
+ chgrp $DAEMONUSER $PIDDIR
+ fi
+
+ if ! mountpoint -q /proc/ ; then
+ log_failure_msg "Can't start $DESC - /proc is not mounted"
+ return
+ fi
+
+ if [ -e $PIDFILE ]; then
+ if $0 status > /dev/null ; then
+ log_success_msg "$DESC already started; not starting."
+ return
+ else
+ log_success_msg "Removing stale PID file $PIDFILE."
+ rm -f $PIDFILE
+ fi
+ fi
+
+ create_machineid
+
+ # Force libnss-systemd to avoid trying to communicate via D-Bus, which
+ # is never going to work well from within dbus-daemon. systemd
+ # special-cases this internally, but we might need to do the same when
+ # booting with sysvinit if libnss-systemd is still installed.
+ # (Workaround for #940971)
+ export SYSTEMD_NSS_BYPASS_BUS=1
+
+ log_daemon_msg "Starting $DESC" "$NAME"
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --exec $DAEMON -- --system $PARAMS
+ log_end_msg $?
+}
+
+shut_it_down()
+{
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ start-stop-daemon --stop --retry 5 --quiet --oknodo --pidfile $PIDFILE \
+ --user $DAEMONUSER
+ # We no longer include these arguments so that start-stop-daemon
+ # can do its job even given that we may have been upgraded.
+ # We rely on the pidfile being sanely managed
+ # --exec $DAEMON -- --system $PARAMS
+ log_end_msg $?
+ rm -f $PIDFILE
+}
+
+reload_it()
+{
+ create_machineid
+ log_action_begin_msg "Reloading $DESC config"
+ dbus-send --print-reply --system --type=method_call \
+ --dest=org.freedesktop.DBus \
+ / org.freedesktop.DBus.ReloadConfig > /dev/null
+ # hopefully this is enough time for dbus to reload it's config file.
+ log_action_end_msg $?
+}
+
+case "$1" in
+ start)
+ start_it_up
+ ;;
+ stop)
+ shut_it_down
+ ;;
+ reload|force-reload)
+ reload_it
+ ;;
+ restart)
+ shut_it_down
+ start_it_up
+ ;;
+ status)
+ status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
+ ;;
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload|status}" >&2
+ exit 2
+ ;;
+esac
+
diff --git a/etc/init.d/docker b/etc/init.d/docker
new file mode 100755
index 0000000000..ee7883454a
--- /dev/null
+++ b/etc/init.d/docker
@@ -0,0 +1,118 @@
+#!/bin/sh
+set -e
+
+### BEGIN INIT INFO
+# Provides: docker
+# Required-Start: $syslog $remote_fs
+# Required-Stop: $syslog $remote_fs
+# Should-Start: cgroupfs-mount cgroup-lite
+# Should-Stop: cgroupfs-mount cgroup-lite
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Create lightweight, portable, self-sufficient containers.
+# Description:
+# Docker is an open-source project to easily create lightweight, portable,
+# self-sufficient containers from any application. The same container that a
+# developer builds and tests on a laptop can run at scale, in production, on
+# VMs, bare metal, OpenStack clusters, public clouds and more.
+### END INIT INFO
+
+export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
+
+BASE=docker
+
+# modify these in /etc/default/$BASE (/etc/default/docker)
+DOCKERD=/usr/bin/dockerd
+# This is the pid file managed by docker itself
+DOCKER_PIDFILE=/var/run/$BASE.pid
+# This is the pid file created/managed by start-stop-daemon
+DOCKER_SSD_PIDFILE=/var/run/$BASE-ssd.pid
+DOCKER_LOGFILE=/var/log/$BASE.log
+DOCKER_OPTS=
+DOCKER_DESC="Docker"
+
+# Get lsb functions
+. /lib/lsb/init-functions
+
+if [ -f /etc/default/$BASE ]; then
+ . /etc/default/$BASE
+fi
+
+# Check docker is present
+if [ ! -x $DOCKERD ]; then
+ log_failure_msg "$DOCKERD not present or not executable"
+ exit 1
+fi
+
+fail_unless_root() {
+ if [ "$(id -u)" != '0' ]; then
+ log_failure_msg "$DOCKER_DESC must be run as root"
+ exit 1
+ fi
+}
+
+case "$1" in
+ start)
+ fail_unless_root
+
+ touch "$DOCKER_LOGFILE"
+ chgrp docker "$DOCKER_LOGFILE"
+
+ # Only set the hard limit (soft limit should remain as the system default of 1024):
+ ulimit -Hn 524288
+
+ # Having non-zero limits causes performance problems due to accounting overhead
+ # in the kernel. We recommend using cgroups to do container-local accounting.
+ if [ "$BASH" ]; then
+ ulimit -u unlimited
+ else
+ ulimit -p unlimited
+ fi
+
+ log_begin_msg "Starting $DOCKER_DESC: $BASE"
+ start-stop-daemon --start --background \
+ --no-close \
+ --exec "$DOCKERD" \
+ --pidfile "$DOCKER_SSD_PIDFILE" \
+ --make-pidfile \
+ -- \
+ -p "$DOCKER_PIDFILE" \
+ $DOCKER_OPTS \
+ >> "$DOCKER_LOGFILE" 2>&1
+ log_end_msg $?
+ ;;
+
+ stop)
+ fail_unless_root
+ if [ -f "$DOCKER_SSD_PIDFILE" ]; then
+ log_begin_msg "Stopping $DOCKER_DESC: $BASE"
+ start-stop-daemon --stop --pidfile "$DOCKER_SSD_PIDFILE" --retry 10
+ log_end_msg $?
+ else
+ log_warning_msg "Docker already stopped - file $DOCKER_SSD_PIDFILE not found."
+ fi
+ ;;
+
+ restart)
+ fail_unless_root
+ docker_pid=$(cat "$DOCKER_SSD_PIDFILE" 2> /dev/null || true)
+ [ -n "$docker_pid" ] \
+ && ps -p $docker_pid > /dev/null 2>&1 \
+ && $0 stop
+ $0 start
+ ;;
+
+ force-reload)
+ fail_unless_root
+ $0 restart
+ ;;
+
+ status)
+ status_of_proc -p "$DOCKER_SSD_PIDFILE" "$DOCKERD" "$DOCKER_DESC"
+ ;;
+
+ *)
+ echo "Usage: service docker {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
diff --git a/etc/init.d/drwebd b/etc/init.d/drwebd
new file mode 100755
index 0000000000..097f25e320
--- /dev/null
+++ b/etc/init.d/drwebd
@@ -0,0 +1,197 @@
+#!/bin/sh
+#
+# Dr.Web drwebd init script
+#
+# $Id: 4f28f79ede3baa352db7e7ab479ae6bf294ace4e $
+#
+# chkconfig: 235 20 80
+# description: drwebd is a Dr.Web Daemon
+# processname: drwebd
+# config: /etc/drweb/drweb32.ini
+# pidfile: /var/drweb/run/drwebd.pid
+### BEGIN INIT INFO
+# Provides: drwebd
+# Required-Start: $local_fs $network
+# Required-Stop: $null
+# Should-Start: $null
+# Should-Stop: $null
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# X-Start-Before: keriomailserver
+# Description: drwebd is a Dr.Web Daemon
+### END INIT INFO
+
+DAEMON=/opt/drweb/drwebd
+PIDFILE=/var/drweb/run/drwebd.pid
+TIMEOUT=300
+
+PATH=/usr/xpg4/bin:/bin:/usr/bin:/usr/ucb:/sbin:/usr/sbin:${PATH}
+
+EXIT_SUCCESS=0
+EXIT_FAILURE_NOFILE=1
+EXIT_FAILURE_RUNNING=2
+EXIT_FAILURE_NOT_RUNNING=3
+EXIT_FAILURE_TIMEOUT=4
+EXIT_FAILURE_NOARGS=5
+EXIT_FAILURE_NOT_ROOT=6
+
+STATUS_NOPID=1
+STATUS_ALIVE=0
+STATUS_NOT_ALIVE=2
+STATUS_WRONG_PID=3
+
+if test -n "$1" -a ! "$1" = "status" ; then
+ case "`id`" in
+ uid=0*)
+ ;;
+ *)
+ echo "$0 $1 must be executed with root privileges"
+ exit $EXIT_FAILURE_NOT_ROOT
+ ;;
+ esac
+fi
+
+check_run() {
+ runfiles="/etc/drweb/drwebd.enable /etc/default/drwebd /etc/sysconfig/drwebd /etc/drweb/daemons.run"
+ enabled=""
+ found=""
+ for runfile in $runfiles ; do
+ if test -f "$runfile" ; then
+ found=1
+ . "$runfile"
+ if test "$RUN_DRWEBD" = "1" -o "$ENABLE" = "1" ; then
+ enabled=1
+ break
+ else
+ echo "Dr.Web drwebd is disabled according to $runfile"
+ fi
+ fi
+ done
+ if test -z "$found" ; then
+ echo "Didn't found a enable file for Dr.Web drwebd. See documentation to solve this problem"
+ exit $EXIT_FAILURE_NOFILE
+ fi
+ test -z "$enabled" && exit $EXIT_SUCCESS
+}
+
+get_pid() {
+ head -1 "$PIDFILE" 2>/dev/null
+}
+
+check_pid() {
+ if test -r "$PIDFILE" ; then
+ pid=`get_pid`
+ if test -n "$pid" ; then
+ if kill -0 "$pid" 2>/dev/null || ps -p "$pid" >/dev/null 2>&1 ; then
+ return $STATUS_ALIVE
+ else
+ return $STATUS_NOT_ALIVE
+ fi
+ else
+ return $STATUS_WRONG_PID
+ fi
+ else
+ return $STATUS_NOPID
+ fi
+}
+
+start_daemon() {
+ if test ! -x "$DAEMON" ; then
+ echo "Dr.Web drwebd is not installed"
+ exit $EXIT_FAILURE_NOFILE
+ fi
+
+
+
+ "$DAEMON" "$@"
+ return $?
+}
+
+stop_daemon() {
+ pid=`get_pid`
+ if test -n "$pid" ; then
+ kill "$pid"
+ fi
+ seconds=0
+ retval=0
+ while check_pid ; do
+ sleep 1
+ printf "."
+ seconds=`expr $seconds + 1`
+ if test "$seconds" -gt "$TIMEOUT" ; then
+ retval=1
+ break
+ fi
+ done
+ test "$seconds" -gt "0" && echo
+ return $retval
+}
+
+die() {
+ echo "$2" && exit $1
+}
+
+die_if_running() {
+ check_pid && die $EXIT_FAILURE_RUNNING "Dr.Web drwebd is already running"
+}
+
+die_if_not_running() {
+ check_pid
+ case "$?" in
+ $STATUS_NOPID) die $EXIT_FAILURE_NOT_RUNNING "Dr.Web drwebd is not running" ;;
+ $STATUS_NOT_ALIVE|$STATUS_WRONG_PID) die $EXIT_FAILURE_NOT_RUNNING \
+ "Dr.Web drwebd is not running but $PIDFILE exists" ;;
+ esac
+}
+
+die_if_timeout() {
+ die $EXIT_FAILURE_RUNNING "Dr.Web drwebd seems is still running"
+}
+
+case "$1" in
+ stop)
+ die_if_not_running
+ echo "Shutting down Dr.Web drwebd..."
+ stop_daemon || die_if_timeout
+ ;;
+ reload)
+ die_if_not_running
+ echo "Reloading Dr.Web drwebd..."
+ pid=`get_pid`
+ if test -n "$pid" ; then
+ kill -HUP "$pid"
+ fi
+ ;;
+ restart)
+ echo "Restarting Dr.Web drwebd..."
+ if check_pid ; then
+ stop_daemon || die_if_timeout
+ fi
+ start_daemon
+ ;;
+ condrestart)
+ die_if_not_running
+ echo "Restarting Dr.Web drwebd..."
+ stop_daemon || die_if_timeout
+ start_daemon
+ ;;
+ start)
+ die_if_running
+ echo "Starting Dr.Web drwebd..."
+ start_daemon
+ ;;
+ status)
+ check_pid
+ case "$?" in
+ $STATUS_ALIVE) echo "Dr.Web drwebd is running" ;;
+ $STATUS_NOPID) echo "Dr.Web drwebd is not running" ;;
+ $STATUS_NOT_ALIVE|$STATUS_WRONG_PID) echo "Dr.Web drwebd is not running but $PIDFILE exists" ;;
+ esac
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|condrestart|reload|status}"
+ exit $EXIT_FAILURE_NOARGS
+ ;;
+esac
+
+exit $EXIT_SUCCESS
diff --git a/etc/init.d/grub-common b/etc/init.d/grub-common
new file mode 100755
index 0000000000..fd8314ff7d
--- /dev/null
+++ b/etc/init.d/grub-common
@@ -0,0 +1,39 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: grub-common
+# Required-Start: $all
+# Required-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# Short-Description: Record successful boot for GRUB
+# Description: GRUB displays the boot menu at the next boot if it
+# believes that the previous boot failed. This script
+# informs it that the system booted successfully.
+### END INIT INFO
+
+command -v grub-editenv >/dev/null || exit 0
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+case $1 in
+ start|restart|force-reload)
+ log_action_msg "Recording successful boot for GRUB"
+ [ -s /boot/grub/grubenv ] || rm -f /boot/grub/grubenv
+ mkdir -p /boot/grub
+ grub-editenv /boot/grub/grubenv unset recordfail
+ log_end_msg $?
+ ;;
+ stop)
+ ;;
+ status)
+ exit 0
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|status|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/iscsid b/etc/init.d/iscsid
new file mode 100755
index 0000000000..6f2c565cb9
--- /dev/null
+++ b/etc/init.d/iscsid
@@ -0,0 +1,48 @@
+#!/bin/sh
+# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
+if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
+ set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
+fi
+### BEGIN INIT INFO
+# Provides: iscsid
+# Required-Start: $network $local_fs
+# Required-Stop: $network $local_fs sendsigs
+# Default-Start: S
+# Default-Stop: 0 1 6
+# Short-Description: iSCSI initiator daemon (iscsid)
+# Description: The iSCSI initiator daemon takes care of
+# monitoring iSCSI connections to targets. It is
+# also the daemon providing the interface for the
+# iscisadm tool to talk to when administering iSCSI
+# connections.
+### END INIT INFO
+
+# Author: Christian Seiler
+
+DESC="iSCSI initiator daemon"
+DAEMON=/usr/sbin/iscsid
+PIDFILE=/run/iscsid.pid
+OMITDIR=/run/sendsigs.omit.d
+
+do_start_prepare() {
+ if ! /usr/lib/open-iscsi/startup-checks.sh ; then
+ exit 1
+ fi
+}
+
+do_start_cleanup() {
+ ln -sf $PIDFILE $OMITDIR
+}
+
+do_stop_override() {
+ # Don't stop iscsid if we're on initramfs or we had some
+ # excluded sessions. We could actually stop it, it's not
+ # required for the kernel to continue working with active
+ # sessions, but it also doesn't hurt to leave it running.
+ if [ -f /etc/iscsi/iscsi.initramfs ] ||
+ ( [ -f /run/open-iscsi/shutdown-keep-sessions ] && [ -n "$(cat /run/open-iscsi/shutdown-keep-sessions)" ] )
+ then
+ return
+ fi
+ do_stop "$@"
+}
diff --git a/etc/init.d/keyboard-setup.sh b/etc/init.d/keyboard-setup.sh
new file mode 100755
index 0000000000..9f50168fe5
--- /dev/null
+++ b/etc/init.d/keyboard-setup.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: keyboard-setup.sh
+# Required-Start: mountkernfs
+# Required-Stop:
+# X-Start-Before: checkroot
+# Default-Start: S
+# Default-Stop:
+# X-Interactive: true
+# Short-Description: Set the console keyboard layout
+# Description: Set the console keyboard as early as possible
+# so during the file systems checks the administrator
+# can interact. At this stage of the boot process
+# only the ASCII symbols are supported.
+### END INIT INFO
+
+if [ -f /bin/setupcon ]; then
+ case "$1" in
+ stop|status)
+ # console-setup isn't a daemon
+ ;;
+ start|force-reload|restart|reload)
+ if [ -f /lib/lsb/init-functions ]; then
+ . /lib/lsb/init-functions
+ else
+ log_action_begin_msg () {
+ echo -n "$@... "
+ }
+
+ log_action_end_msg () {
+ if [ "$1" -eq 0 ]; then
+ echo done.
+ else
+ echo failed.
+ fi
+ }
+ fi
+ log_action_begin_msg "Setting up keyboard layout"
+ if /lib/console-setup/keyboard-setup.sh; then
+ log_action_end_msg 0
+ else
+ log_action_end_msg $?
+ fi
+ ;;
+ *)
+ echo 'Usage: /etc/init.d/keyboard-setup.sh {start|reload|restart|force-reload|stop|status}'
+ exit 3
+ ;;
+ esac
+fi
diff --git a/etc/init.d/kmod b/etc/init.d/kmod
new file mode 100755
index 0000000000..19af5461ca
--- /dev/null
+++ b/etc/init.d/kmod
@@ -0,0 +1,92 @@
+#!/bin/sh -e
+### BEGIN INIT INFO
+# Provides: kmod
+# Required-Start:
+# Required-Stop:
+# Should-Start: checkroot
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Load the modules listed in /etc/modules.
+# Description: Load the modules listed in /etc/modules.
+### END INIT INFO
+
+# Silently exit if the kernel does not support modules.
+[ -f /proc/modules ] || exit 0
+[ -x /sbin/modprobe ] || exit 0
+
+[ -f /etc/default/rcS ] && . /etc/default/rcS
+. /lib/lsb/init-functions
+
+PATH='/usr/sbin:/usr/bin:/sbin:/bin'
+
+case "$1" in
+ start)
+ ;;
+
+ stop|restart|reload|force-reload)
+ log_warning_msg "Action '$1' is meaningless for this init script"
+ exit 0
+ ;;
+
+ *)
+ log_success_msg "Usage: $0 start"
+ exit 1
+esac
+
+load_module() {
+ local module args
+ module="$1"
+ args="$2"
+
+ if [ "$VERBOSE" != no ]; then
+ log_action_msg "Loading kernel module $module"
+ modprobe $module $args || true
+ else
+ modprobe $module $args > /dev/null 2>&1 || true
+ fi
+}
+
+modules_files() {
+ local modules_load_dirs='/etc/modules-load.d /run/modules-load.d /usr/local/lib/modules-load.d /usr/lib/modules-load.d'
+ local processed=' '
+ local add_etc_modules=true
+
+ for dir in $modules_load_dirs; do
+ [ -d $dir ] || continue
+ for file in $(run-parts --list --regex='\.conf$' $dir 2> /dev/null || true); do
+ local base=${file##*/}
+ if echo -n "$processed" | grep -qF " $base "; then
+ continue
+ fi
+ if [ "$add_etc_modules" -a -L $file \
+ -a "$(readlink -f $file)" = /etc/modules ]; then
+ add_etc_modules=
+ fi
+ processed="$processed$base "
+ echo $file
+ done
+ done
+
+ if [ "$add_etc_modules" ]; then
+ echo /etc/modules
+ fi
+}
+
+if [ "$VERBOSE" = no ]; then
+ log_action_begin_msg 'Loading kernel modules'
+fi
+
+files=$(modules_files)
+if [ "$files" ] ; then
+ grep -h '^[^#]' $files |
+ while read module args; do
+ [ "$module" ] || continue
+ load_module "$module" "$args"
+ done
+fi
+
+if [ "$VERBOSE" = no ]; then
+ log_action_end_msg 0
+fi
+
diff --git a/etc/init.d/mariadb b/etc/init.d/mariadb
new file mode 100755
index 0000000000..7957204915
--- /dev/null
+++ b/etc/init.d/mariadb
@@ -0,0 +1,298 @@
+#!/bin/bash
+#
+### BEGIN INIT INFO
+# Provides: mariadb
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Should-Start: $network $named $time
+# Should-Stop: $network $named $time
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start and stop the MariaDB database server daemon
+# Description: Controls the main MariaDB database server daemon "mariadbd"
+# and its wrapper script "mysqld_safe".
+### END INIT INFO
+#
+set -e
+set -u
+${DEBIAN_SCRIPT_DEBUG:+ set -v -x}
+
+test -x /usr/sbin/mariadbd || exit 0
+
+# shellcheck source=/dev/null
+. /lib/lsb/init-functions
+
+SELF="$(cd "$(dirname "$0")"; pwd -P)/$(basename "$0")"
+
+if [ -f /usr/bin/mariadb-admin ]
+then
+ MYADMIN="/usr/bin/mariadb-admin --defaults-file=/etc/mysql/debian.cnf"
+elif [ -f /usr/bin/mysqladmin ]
+then
+ MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
+else
+ log_failure_msg "Command mariadb-admin/mysqladmin not found! This SysV init script depends on it."
+ exit 1
+fi
+
+if [ ! -x /usr/bin/mariadbd-safe ]
+then
+ log_failure_msg "/usr/bin/mariadbd-safe not found or executable! This SysV init script depends on it."
+ exit 1
+fi
+
+# priority can be overridden and "-s" adds output to stderr
+ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mariadb -i"
+
+if [ -f /etc/default/mysql ]
+then
+ # shellcheck source=/dev/null
+ . /etc/default/mysql
+fi
+
+# Also source default/mariadb in case the installation was upgraded from
+# packages originally installed from MariaDB.org repositories, which have
+# had support for reading /etc/default/mariadb since March 2016.
+if [ -f /etc/default/mariadb ]
+then
+ # shellcheck source=/dev/null
+ . /etc/default/mariadb
+fi
+
+# Safeguard (relative paths, core dumps..)
+cd /
+umask 077
+
+# mysqladmin likes to read /root/.my.cnf. This is usually not what I want
+# as many admins e.g. only store a password without a username there and
+# so break my scripts.
+export HOME=/etc/mysql/
+
+## Fetch a particular option from mysql's invocation.
+#
+# Usage: void mariadbd_get_param option
+mariadbd_get_param() {
+ /usr/sbin/mariadbd --print-defaults \
+ | tr " " "\n" \
+ | grep -- "--$1" \
+ | tail -n 1 \
+ | cut -d= -f2
+}
+
+## Do some sanity checks before even trying to start mariadbd.
+sanity_checks() {
+ # check for config file
+ if [ ! -r /etc/mysql/my.cnf ]
+ then
+ log_warning_msg "$0: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz"
+ echo "WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz" | $ERR_LOGGER
+ fi
+
+ # check for diskspace shortage
+ datadir="$(mariadbd_get_param datadir)"
+
+ # If datadir location is not customized in configuration
+ # then it's not printed with /usr/sbin/mariadbd --print-defaults
+ # and this should fall backt to a sane default value
+ if [ -z "$datadir" ]
+ then
+ datadir="/var/lib/mysql"
+ fi
+
+ # Verify the datadir location exists
+ if [ ! -d "$datadir" ] && [ ! -L "$datadir" ]
+ then
+ log_failure_msg "$0: ERROR: Can't locate MariaDB data location at $datadir"
+ echo "ERROR: Can't locate MariaDB data location at $datadir" | $ERR_LOGGER
+ exit 1
+ fi
+
+ # As preset blocksize of GNU df is 1024 then available bytes is $df_available_blocks * 1024
+ # 4096 blocks is then lower than 4 MB
+ df_available_blocks="$(LC_ALL=C BLOCKSIZE='' df --output=avail "$datadir" | tail -n 1)"
+ if [ "$df_available_blocks" -lt "4096" ]
+ then
+ log_failure_msg "$0: ERROR: The partition with $datadir is too full!"
+ echo "ERROR: The partition with $datadir is too full!" | $ERR_LOGGER
+ exit 1
+ fi
+}
+
+## Checks if there is a server running and if so if it is accessible.
+#
+# check_alive insists on a pingable server
+# check_dead also fails if there is a lost mariadbd in the process list
+#
+# Usage: boolean mariadbd_status [check_alive|check_dead] [warn|nowarn]
+mariadbd_status () {
+ ping_output="$($MYADMIN ping 2>&1)"
+ # The whole mariadbd_status function should be rewritten in clean shell script,
+ # so ignore minor Shellcheck nag for now as fixing it would be half of the
+ # rewrite
+ # shellcheck disable=SC2181
+ ping_alive="$(( ! $? ))"
+
+ ps_alive=0
+ pidfile="$(mariadbd_get_param pid-file)"
+ if [ -f "$pidfile" ] && ps "$(cat "$pidfile")" >/dev/null 2>&1
+ then
+ ps_alive=1
+ fi
+
+ # Using '-a' is unstandard, but it works and might be needed for the grouping
+ # of the if-else, so keep it and just ignore in Shellcheck
+ # shellcheck disable=SC2166
+ if [ "$1" = "check_alive" -a $ping_alive = 1 ] ||
+ [ "$1" = "check_dead" -a $ping_alive = 0 -a $ps_alive = 0 ]
+ then
+ return 0 # EXIT_SUCCESS
+ else
+ if [ "$2" = "warn" ]
+ then
+ echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug
+ fi
+ return 1 # EXIT_FAILURE
+ fi
+}
+
+#
+# main()
+#
+
+case "${1:-''}" in
+
+ 'start')
+ sanity_checks;
+ # Start daemon
+ log_daemon_msg "Starting MariaDB database server" "mariadbd"
+ if mariadbd_status check_alive nowarn
+ then
+ log_progress_msg "already running"
+ log_end_msg 0
+ else
+ # Could be removed during boot
+ test -e /run/mysqld || install -m 755 -o mysql -g root -d /run/mysqld
+
+ # Start MariaDB!
+ /usr/bin/mariadbd-safe "${@:2}" 2>&1 >/dev/null | $ERR_LOGGER &
+
+ for _ in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-30}")
+ do
+ sleep 1
+ if mariadbd_status check_alive nowarn
+ then
+ break
+ fi
+ log_progress_msg "."
+ done
+ if mariadbd_status check_alive warn
+ then
+ log_end_msg 0
+ # Now start mysqlcheck or whatever the admin wants.
+ output=$(/etc/mysql/debian-start)
+ if [ -n "$output" ]
+ then
+ log_action_msg "$output"
+ fi
+ else
+ # Try one more time but save error log separately, then spit it out
+ # before logging ends and init script execution ends.
+ if pgrep -ax mariadbd > /dev/null
+ then
+ echo "ERROR: The mariadbd process is running but not responding:"
+ # shellcheck disable=SC2009
+ # Show the mariadbd process and it's parent and next line (if there is a child process)
+ ps faxu | grep mariadbd -C 1
+ else
+ ERROR_LOG_FILE="$(mktemp).err"
+ echo # ensure newline
+ timeout --kill-after=20 10 /usr/bin/mysqld_safe "${@:2}" --log-error="$ERROR_LOG_FILE"
+ echo "Running '/etc/init.d/mariadb start' failed with error log:"
+ cat "$ERROR_LOG_FILE"
+ fi
+
+ log_end_msg 1
+ log_failure_msg "Please take a look at the syslog"
+ fi
+ fi
+ ;;
+
+ 'stop')
+ # * As a passwordless mysqladmin (e.g. via ~/.my.cnf) must be possible
+ # at least for cron, we can rely on it here, too. (although we have
+ # to specify it explicit as e.g. sudo environments points to the normal
+ # users home and not /root)
+ log_daemon_msg "Stopping MariaDB database server" "mariadbd"
+ if ! mariadbd_status check_dead nowarn
+ then
+ set +e
+ shutdown_out="$($MYADMIN shutdown 2>&1)"
+ r=$?
+ set -e
+ if [ "$r" -ne 0 ]
+ then
+ log_end_msg 1
+ [ "$VERBOSE" != "no" ] && log_failure_msg "Error: $shutdown_out"
+ log_daemon_msg "Killing MariaDB database server by signal" "mariadbd"
+ killall -15 mariadbd || killall -15 mysqld
+ server_down=
+ for _ in {1..600}
+ do
+ sleep 1
+ if mariadbd_status check_dead nowarn
+ then
+ server_down=1
+ break
+ fi
+ done
+ if test -z "$server_down"
+ then
+ killall -9 mariadbd || killall -9 mysqld
+ fi
+ fi
+ fi
+
+ if ! mariadbd_status check_dead warn
+ then
+ log_end_msg 1
+ log_failure_msg "Please stop MariaDB manually and read /usr/share/doc/mariadb-server/README.Debian.gz!"
+ exit 1
+ else
+ log_end_msg 0
+ fi
+ ;;
+
+ 'restart')
+ set +e; $SELF stop; set -e
+ shift
+ $SELF start "${@}"
+ ;;
+
+ 'reload'|'force-reload')
+ log_daemon_msg "Reloading MariaDB database server" "mariadbd"
+ $MYADMIN reload
+ log_end_msg 0
+ ;;
+
+ 'status')
+ if mariadbd_status check_alive nowarn
+ then
+ log_action_msg "$($MYADMIN version)"
+ else
+ log_action_msg "MariaDB is stopped."
+ exit 3
+ fi
+ ;;
+
+ 'bootstrap')
+ # Bootstrap the cluster, start the first node
+ # that initiates the cluster
+ log_daemon_msg "Bootstrapping the cluster" "mariadbd"
+ $SELF start "${@:2}" --wsrep-new-cluster
+ ;;
+
+ *)
+ echo "Usage: $SELF start|stop|restart|reload|force-reload|status"
+ exit 1
+ ;;
+esac
diff --git a/etc/init.d/monit b/etc/init.d/monit
new file mode 100755
index 0000000000..6dc4e0c430
--- /dev/null
+++ b/etc/init.d/monit
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: monit
+# Required-Start: $remote_fs
+# Required-Stop: $remote_fs
+# Should-Start: $all
+# Should-Stop: $all
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: service and resource monitoring daemon
+# Description: monit is a utility for managing and monitoring
+# processes, programs, files, directories and filesystems
+# on a Unix system. Monit conducts automatic maintenance
+# and repair and can execute meaningful causal actions
+# in error situations.
+### END INIT INFO
+
+set -e
+
+. /lib/lsb/init-functions
+
+DAEMON=/usr/bin/monit
+CONFIG=/etc/monit/monitrc
+NAME=monit
+DESC="daemon monitor"
+MONIT_OPTS=
+PID="/run/$NAME.pid"
+
+# Check if DAEMON binary exist
+[ -f $DAEMON ] || exit 0
+
+[ -f "/etc/default/$NAME" ] && . /etc/default/$NAME
+
+MONIT_OPTS="-c $CONFIG $MONIT_OPTS"
+
+case "$1" in
+ start)
+ log_daemon_msg "Starting $DESC" "$NAME"
+ if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $MONIT_OPTS 1>/dev/null
+ then
+ log_end_msg 0
+ else
+ log_end_msg 1
+ fi
+ ;;
+ stop)
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ if start-stop-daemon --retry TERM/5/KILL/5 --oknodo --stop --quiet --pidfile $PID 1>/dev/null
+ then
+ log_end_msg 0
+ else
+ log_end_msg 1
+ fi
+ ;;
+ reload)
+ log_daemon_msg "Reloading $DESC configuration" "$NAME"
+ if start-stop-daemon --stop --signal HUP --quiet --oknodo --pidfile $PID --exec $DAEMON -- $MONIT_OPTS 1>/dev/null
+ then
+ log_end_msg 0
+ else
+ log_end_msg 1
+ fi
+ ;;
+ restart|force-reload)
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ start-stop-daemon --retry TERM/5/KILL/5 --oknodo --stop --quiet --pidfile $PID 1>/dev/null
+ if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $MONIT_OPTS 1>/dev/null
+ then
+ log_end_msg 0
+ else
+ log_end_msg 1
+ fi
+ ;;
+ syntax)
+ $DAEMON $MONIT_OPTS -t
+ ;;
+ status)
+ status_of_proc -p $PID $DAEMON $NAME
+ ;;
+ *)
+ log_action_msg "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload|syntax|status}"
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/nginx b/etc/init.d/nginx
new file mode 100755
index 0000000000..db10b7df02
--- /dev/null
+++ b/etc/init.d/nginx
@@ -0,0 +1,196 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: nginx
+# Required-Start: $local_fs $remote_fs $network $syslog $named
+# Required-Stop: $local_fs $remote_fs $network $syslog $named
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: starts the nginx web server
+# Description: starts nginx using start-stop-daemon
+### END INIT INFO
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/nginx
+NAME=nginx
+DESC=nginx
+
+# Include nginx defaults if available
+if [ -r /etc/default/nginx ]; then
+ . /etc/default/nginx
+fi
+
+STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}"
+
+test -x $DAEMON || exit 0
+
+. /lib/init/vars.sh
+. /lib/lsb/init-functions
+
+# Try to extract nginx pidfile
+PID=$(cat /etc/nginx/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)
+if [ -z "$PID" ]; then
+ PID=/run/nginx.pid
+fi
+
+if [ -n "$ULIMIT" ]; then
+ # Set ulimit if it is set in /etc/default/nginx
+ ulimit $ULIMIT
+fi
+
+start_nginx() {
+ # Start the daemon/service
+ #
+ # Returns:
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- \
+ $DAEMON_OPTS 2>/dev/null \
+ || return 2
+}
+
+test_config() {
+ # Test the nginx configuration
+ $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1
+}
+
+stop_nginx() {
+ # Stops the daemon/service
+ #
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $NAME
+ RETVAL="$?"
+ sleep 1
+ return "$RETVAL"
+}
+
+reload_nginx() {
+ # Function that sends a SIGHUP to the daemon/service
+ start-stop-daemon --stop --signal HUP --quiet --pidfile $PID --name $NAME
+ return 0
+}
+
+rotate_logs() {
+ # Rotate log files
+ start-stop-daemon --stop --signal USR1 --quiet --pidfile $PID --name $NAME
+ return 0
+}
+
+upgrade_nginx() {
+ # Online upgrade nginx executable
+ # http://nginx.org/en/docs/control.html
+ #
+ # Return
+ # 0 if nginx has been successfully upgraded
+ # 1 if nginx is not running
+ # 2 if the pid files were not created on time
+ # 3 if the old master could not be killed
+ if start-stop-daemon --stop --signal USR2 --quiet --pidfile $PID --name $NAME; then
+ # Wait for both old and new master to write their pid file
+ while [ ! -s "${PID}.oldbin" ] || [ ! -s "${PID}" ]; do
+ cnt=`expr $cnt + 1`
+ if [ $cnt -gt 10 ]; then
+ return 2
+ fi
+ sleep 1
+ done
+ # Everything is ready, gracefully stop the old master
+ if start-stop-daemon --stop --signal QUIT --quiet --pidfile "${PID}.oldbin" --name $NAME; then
+ return 0
+ else
+ return 3
+ fi
+ else
+ return 1
+ fi
+}
+
+case "$1" in
+ start)
+ log_daemon_msg "Starting $DESC" "$NAME"
+ start_nginx
+ case "$?" in
+ 0|1) log_end_msg 0 ;;
+ 2) log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ stop_nginx
+ case "$?" in
+ 0|1) log_end_msg 0 ;;
+ 2) log_end_msg 1 ;;
+ esac
+ ;;
+ restart)
+ log_daemon_msg "Restarting $DESC" "$NAME"
+
+ # Check configuration before stopping nginx
+ if ! test_config; then
+ log_end_msg 1 # Configuration error
+ exit $?
+ fi
+
+ stop_nginx
+ case "$?" in
+ 0|1)
+ start_nginx
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ reload|force-reload)
+ log_daemon_msg "Reloading $DESC configuration" "$NAME"
+
+ # Check configuration before stopping nginx
+ #
+ # This is not entirely correct since the on-disk nginx binary
+ # may differ from the in-memory one, but that's not common.
+ # We prefer to check the configuration and return an error
+ # to the administrator.
+ if ! test_config; then
+ log_end_msg 1 # Configuration error
+ exit $?
+ fi
+
+ reload_nginx
+ log_end_msg $?
+ ;;
+ configtest|testconfig)
+ log_daemon_msg "Testing $DESC configuration"
+ test_config
+ log_end_msg $?
+ ;;
+ status)
+ status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $?
+ ;;
+ upgrade)
+ log_daemon_msg "Upgrading binary" "$NAME"
+ upgrade_nginx
+ log_end_msg $?
+ ;;
+ rotate)
+ log_daemon_msg "Re-opening $DESC log files" "$NAME"
+ rotate_logs
+ log_end_msg $?
+ ;;
+ *)
+ echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}" >&2
+ exit 3
+ ;;
+esac
diff --git a/etc/init.d/open-iscsi b/etc/init.d/open-iscsi
new file mode 100755
index 0000000000..1cd3ab718e
--- /dev/null
+++ b/etc/init.d/open-iscsi
@@ -0,0 +1,113 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: open-iscsi iscsi
+# Required-Start: $network $local_fs iscsid
+# Required-Stop: $network $local_fs iscsid sendsigs
+# Default-Start: S
+# Default-Stop: 0 1 6
+# Short-Description: Login to default iSCSI targets
+# Description: Login to default iSCSI targets at boot and log out
+# of all iSCSI targets at shutdown.
+### END INIT INFO
+
+PATH=/usr/sbin:/sbin:/usr/bin:/bin
+DAEMON=/usr/sbin/iscsid
+ADM=/usr/sbin/iscsiadm
+PIDFILE=/run/iscsid.pid
+NAMEFILE=/etc/iscsi/initiatorname.iscsi
+CONFIGFILE=/etc/iscsi/iscsid.conf
+OMITDIR=/run/sendsigs.omit.d
+
+[ -x "$DAEMON" ] || exit 0
+
+. /lib/lsb/init-functions
+
+# Include defaults if available
+if [ -f /etc/default/open-iscsi ]; then
+ . /etc/default/open-iscsi
+fi
+
+
+if [ ! -d /sys/class/ ]; then
+ log_failure_msg "iSCSI requires a mounted sysfs, not started."
+ exit 0
+fi
+
+RETVAL=0
+
+start() {
+ if ! [ -s $PIDFILE ] || ! kill -0 `sed -n 1p $PIDFILE` >/dev/null ; then
+ log_failure_msg "iSCSI initiator daemon not started: not logging in to default targets"
+ exit 1
+ fi
+
+ starttargets
+
+ # activate LVM, mount filesystems, etc.
+ /usr/lib/open-iscsi/activate-storage.sh
+}
+
+starttargets() {
+ log_daemon_msg "Setting up iSCSI targets"
+ echo
+ $ADM -m node --loginall=automatic
+ log_end_msg 0
+}
+
+stoptargets() {
+ log_daemon_msg "Disconnecting iSCSI targets"
+ sync
+ # only logout if daemon is running, iscsiadm hangs otherwise
+ if [ -s $PIDFILE ] && kill -0 `sed -n 1p $PIDFILE` >/dev/null ; then
+ /usr/lib/open-iscsi/logout-all.sh
+ fi
+
+ log_end_msg 0
+}
+
+stop() {
+ # Call umountiscsi.sh to unmount iSCSI devices first (always do
+ # that, regardless of whether root is on iSCSI, umountiscsi.sh
+ # will exclude it - and even if that shouldn't work, the mount
+ # point will be busy)
+ log_daemon_msg "Umounting iSCSI filesystems"
+ /usr/lib/open-iscsi/umountiscsi.sh
+ umount_exit_status=$?
+ log_end_msg $umount_exit_status
+
+ if [ $umount_exit_status -ne 0 ]; then
+ log_failure_msg "Couldn't unmount all iSCSI devices. not logging out from any target."
+ exit 1
+ fi
+
+ stoptargets
+}
+
+restart() {
+ stop
+ start
+}
+
+restarttargets() {
+ stoptargets
+ starttargets
+}
+
+status() {
+ echo Current active iSCSI sessions:
+ $ADM -m session
+}
+
+case "$1" in
+ start|starttargets|stop|stoptargets|restart|restarttargets|status)
+ $1
+ ;;
+ force-reload)
+ restart
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload|status}"
+ exit 1
+ ;;
+esac
+exit $RETVAL
diff --git a/etc/init.d/open-vm-tools b/etc/init.d/open-vm-tools
new file mode 100755
index 0000000000..fa7fcf6d2d
--- /dev/null
+++ b/etc/init.d/open-vm-tools
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: open-vm-tools
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# X-Start-Before:
+# X-Stop-After:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Description: Runs the open-vm-tools services
+# Short-Description: Runs the open-vm-tools services
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+exit_if_not_in_vm () {
+ if which systemd-detect-virt 1>/dev/null; then
+ checktool='systemd-detect-virt'
+ else
+ checktool='vmware-checkvm'
+ fi
+
+ if ! ${checktool} | grep -iq vmware; then
+ echo "open-vm-tools: not starting as this is not a VMware VM"
+ exit 0
+ fi
+}
+
+case "${1}" in
+ start)
+ # Check if we're running inside VMWare
+ exit_if_not_in_vm
+
+ log_daemon_msg "Starting open-vm daemon" "vmtoolsd"
+ start-stop-daemon --start --quiet --pidfile /var/run/vmtoolsd.pid --exec /usr/bin/vmtoolsd --test > /dev/null || exit 1
+ start-stop-daemon --start --quiet --pidfile /var/run/vmtoolsd.pid --exec /usr/bin/vmtoolsd -- --background /var/run/vmtoolsd.pid || exit 2
+ log_end_msg 0
+ ;;
+
+ stop)
+ log_daemon_msg "Stopping open-vm guest daemon" "vmtoolsd"
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile /var/run/vmtoolsd.pid --exec /usr/bin/vmtoolsd
+ RETURN="${?}"
+ [ "${RETURN}" = 2 ] && exit 2
+ # Many daemons don't delete their pidfiles when they exit.
+ rm -f /var/run/vmtoolsd.pid
+ log_end_msg 0
+ ;;
+
+ force-reload|restart)
+ ${0} stop
+ ${0} start
+ ;;
+
+ status)
+ status_of_proc -p /var/run/vmtoolsd.pid /usr/bin/vmtoolsd vmtoolsd && exit 0 || exit $?
+ ;;
+
+ *)
+ log_success_msg "Usage: ${0} {start|stop|restart|force-reload|status}"
+ exit 1
+ ;;
+esac
diff --git a/etc/init.d/openvpn b/etc/init.d/openvpn
new file mode 100755
index 0000000000..ae88417118
--- /dev/null
+++ b/etc/init.d/openvpn
@@ -0,0 +1,298 @@
+#!/bin/sh -e
+
+### BEGIN INIT INFO
+# Provides: openvpn
+# Required-Start: $network $remote_fs $syslog
+# Required-Stop: $network $remote_fs $syslog
+# Should-Start: network-manager
+# Should-Stop: network-manager
+# X-Start-Before: $x-display-manager gdm kdm xdm wdm ldm sdm nodm
+# X-Interactive: true
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Openvpn VPN service
+# Description: This script will start OpenVPN tunnels as specified
+# in /etc/default/openvpn and /etc/openvpn/*.conf
+### END INIT INFO
+
+# Original version by Robert Leslie
+# , edited by iwj and cs
+# Modified for openvpn by Alberto Gonzalez Iniesta
+# Modified for restarting / starting / stopping single tunnels by Richard Mueller
+
+. /lib/lsb/init-functions
+
+test $DEBIAN_SCRIPT_DEBUG && set -v -x
+
+DAEMON=/usr/sbin/openvpn
+DESC="virtual private network daemon"
+CONFIG_DIR=/etc/openvpn
+test -x $DAEMON || exit 0
+test -d $CONFIG_DIR || exit 0
+
+# Source defaults file; edit that file to configure this script.
+AUTOSTART="all"
+STATUSREFRESH=10
+OMIT_SENDSIGS=0
+if test -e /etc/default/openvpn ; then
+ . /etc/default/openvpn
+fi
+
+start_vpn () {
+ if grep -q '^[ ]*daemon' $CONFIG_DIR/$NAME.conf ; then
+ # daemon already given in config file
+ DAEMONARG=
+ else
+ # need to daemonize
+ DAEMONARG="--daemon ovpn-$NAME"
+ fi
+
+ if grep -q '^[ ]*status ' $CONFIG_DIR/$NAME.conf ; then
+ # status file already given in config file
+ STATUSARG=""
+ elif test $STATUSREFRESH -eq 0 ; then
+ # default status file disabled in /etc/default/openvpn
+ STATUSARG=""
+ else
+ # prepare default status file
+ STATUSARG="--status /run/openvpn/$NAME.status $STATUSREFRESH"
+ fi
+
+ # tun using the "subnet" topology confuses the routing code that wrongly
+ # emits ICMP redirects for client to client communications
+ SAVED_DEFAULT_SEND_REDIRECTS=0
+ if grep -q '^[[:space:]]*dev[[:space:]]*tun' $CONFIG_DIR/$NAME.conf && \
+ grep -q '^[[:space:]]*topology[[:space:]]*subnet' $CONFIG_DIR/$NAME.conf ; then
+ # When using "client-to-client", OpenVPN routes the traffic itself without
+ # involving the TUN/TAP interface so no ICMP redirects are sent
+ if ! grep -q '^[[:space:]]*client-to-client' $CONFIG_DIR/$NAME.conf ; then
+ sysctl -w net.ipv4.conf.all.send_redirects=0 > /dev/null
+
+ # Save the default value for send_redirects before disabling it
+ # to make sure the tun device is created with send_redirects disabled
+ SAVED_DEFAULT_SEND_REDIRECTS=$(sysctl -n net.ipv4.conf.default.send_redirects)
+
+ if [ "$SAVED_DEFAULT_SEND_REDIRECTS" -ne 0 ]; then
+ sysctl -w net.ipv4.conf.default.send_redirects=0 > /dev/null
+ fi
+ fi
+ fi
+
+ log_progress_msg "$NAME"
+ STATUS=0
+
+ start-stop-daemon --start --quiet --oknodo \
+ --pidfile /run/openvpn/$NAME.pid \
+ --exec $DAEMON -- $OPTARGS --writepid /run/openvpn/$NAME.pid \
+ $DAEMONARG $STATUSARG --cd $CONFIG_DIR \
+ --config $CONFIG_DIR/$NAME.conf || STATUS=1
+
+ [ "$OMIT_SENDSIGS" -ne 1 ] || ln -s /run/openvpn/$NAME.pid /run/sendsigs.omit.d/openvpn.$NAME.pid
+
+ # Set the back the original default value of send_redirects if it was changed
+ if [ "$SAVED_DEFAULT_SEND_REDIRECTS" -ne 0 ]; then
+ sysctl -w net.ipv4.conf.default.send_redirects=$SAVED_DEFAULT_SEND_REDIRECTS > /dev/null
+ fi
+}
+stop_vpn () {
+ start-stop-daemon --stop --quiet --oknodo \
+ --pidfile $PIDFILE --exec $DAEMON --retry 10
+ if [ "$?" -eq 0 ]; then
+ rm -f $PIDFILE
+ [ "$OMIT_SENDSIGS" -ne 1 ] || rm -f /run/sendsigs.omit.d/openvpn.$NAME.pid
+ rm -f /run/openvpn/$NAME.status 2> /dev/null
+ fi
+}
+
+case "$1" in
+start)
+ log_daemon_msg "Starting $DESC"
+
+ # first create /run directory so it's present even
+ # when no VPN are autostarted by this script, but later
+ # by systemd openvpn@.service
+ mkdir -p /run/openvpn
+
+ # autostart VPNs
+ if test -z "$2" ; then
+ # check if automatic startup is disabled by AUTOSTART=none
+ if test "x$AUTOSTART" = "xnone" -o -z "$AUTOSTART" ; then
+ log_warning_msg " Autostart disabled."
+ exit 0
+ fi
+ if test -z "$AUTOSTART" -o "x$AUTOSTART" = "xall" ; then
+ # all VPNs shall be started automatically
+ for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do
+ NAME=${CONFIG%%.conf}
+ start_vpn
+ done
+ else
+ # start only specified VPNs
+ for NAME in $AUTOSTART ; do
+ if test -e $CONFIG_DIR/$NAME.conf ; then
+ start_vpn
+ else
+ log_failure_msg "No such VPN: $NAME"
+ STATUS=1
+ fi
+ done
+ fi
+ #start VPNs from command line
+ else
+ while shift ; do
+ [ -z "$1" ] && break
+ if test -e $CONFIG_DIR/$1.conf ; then
+ NAME=$1
+ start_vpn
+ else
+ log_failure_msg " No such VPN: $1"
+ STATUS=1
+ fi
+ done
+ fi
+ log_end_msg ${STATUS:-0}
+
+ ;;
+stop)
+ log_daemon_msg "Stopping $DESC"
+
+ if test -z "$2" ; then
+ for PIDFILE in `ls /run/openvpn/*.pid 2> /dev/null`; do
+ NAME=`echo $PIDFILE | cut -c14-`
+ NAME=${NAME%%.pid}
+ stop_vpn
+ log_progress_msg "$NAME"
+ done
+ else
+ while shift ; do
+ [ -z "$1" ] && break
+ if test -e /run/openvpn/$1.pid ; then
+ PIDFILE=`ls /run/openvpn/$1.pid 2> /dev/null`
+ NAME=`echo $PIDFILE | cut -c14-`
+ NAME=${NAME%%.pid}
+ stop_vpn
+ log_progress_msg "$NAME"
+ else
+ log_failure_msg " (failure: No such VPN is running: $1)"
+ fi
+ done
+ fi
+ log_end_msg 0
+ ;;
+# Only 'reload' running VPNs. New ones will only start with 'start' or 'restart'.
+reload|force-reload)
+ log_daemon_msg "Reloading $DESC"
+ for PIDFILE in `ls /run/openvpn/*.pid 2> /dev/null`; do
+ NAME=`echo $PIDFILE | cut -c14-`
+ NAME=${NAME%%.pid}
+# If openvpn if running under a different user than root we'll need to restart
+ if egrep '^[[:blank:]]*user[[:blank:]]' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then
+ stop_vpn
+ start_vpn
+ log_progress_msg "(restarted)"
+ else
+ kill -HUP `cat $PIDFILE` || true
+ log_progress_msg "$NAME"
+ fi
+ done
+ log_end_msg 0
+ ;;
+
+# Only 'soft-restart' running VPNs. New ones will only start with 'start' or 'restart'.
+soft-restart)
+ log_daemon_msg "$DESC sending SIGUSR1"
+ for PIDFILE in `ls /run/openvpn/*.pid 2> /dev/null`; do
+ NAME=`echo $PIDFILE | cut -c14-`
+ NAME=${NAME%%.pid}
+ kill -USR1 `cat $PIDFILE` || true
+ log_progress_msg "$NAME"
+ done
+ log_end_msg 0
+ ;;
+
+restart)
+ shift
+ $0 stop ${@}
+ $0 start ${@}
+ ;;
+cond-restart)
+ log_daemon_msg "Restarting $DESC."
+ for PIDFILE in `ls /run/openvpn/*.pid 2> /dev/null`; do
+ NAME=`echo $PIDFILE | cut -c14-`
+ NAME=${NAME%%.pid}
+ stop_vpn
+ start_vpn
+ done
+ log_end_msg 0
+ ;;
+status)
+ GLOBAL_STATUS=0
+ if test -z "$2" ; then
+ # We want status for all defined VPNs.
+ # Returns success if all autostarted VPNs are defined and running
+ if test "x$AUTOSTART" = "xnone" ; then
+ # Consider it a failure if AUTOSTART=none
+ log_warning_msg "No VPN autostarted"
+ GLOBAL_STATUS=1
+ else
+ if ! test -z "$AUTOSTART" -o "x$AUTOSTART" = "xall" ; then
+ # Consider it a failure if one of the autostarted VPN is not defined
+ for VPN in $AUTOSTART ; do
+ if ! test -f $CONFIG_DIR/$VPN.conf ; then
+ log_warning_msg "VPN '$VPN' is in AUTOSTART but is not defined"
+ GLOBAL_STATUS=1
+ fi
+ done
+ fi
+ fi
+ for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do
+ NAME=${CONFIG%%.conf}
+ # Is it an autostarted VPN ?
+ if test -z "$AUTOSTART" -o "x$AUTOSTART" = "xall" ; then
+ AUTOVPN=1
+ else
+ if test "x$AUTOSTART" = "xnone" ; then
+ AUTOVPN=0
+ else
+ AUTOVPN=0
+ for VPN in $AUTOSTART; do
+ if test "x$VPN" = "x$NAME" ; then
+ AUTOVPN=1
+ fi
+ done
+ fi
+ fi
+ if test "x$AUTOVPN" = "x1" ; then
+ # If it is autostarted, then it contributes to global status
+ status_of_proc -p /run/openvpn/${NAME}.pid openvpn "VPN '${NAME}'" || GLOBAL_STATUS=1
+ else
+ status_of_proc -p /run/openvpn/${NAME}.pid openvpn "VPN '${NAME}' (non autostarted)" || true
+ fi
+ done
+ else
+ # We just want status for specified VPNs.
+ # Returns success if all specified VPNs are defined and running
+ while shift ; do
+ [ -z "$1" ] && break
+ NAME=$1
+ if test -e $CONFIG_DIR/$NAME.conf ; then
+ # Config exists
+ status_of_proc -p /run/openvpn/${NAME}.pid openvpn "VPN '${NAME}'" || GLOBAL_STATUS=1
+ else
+ # Config does not exist
+ log_warning_msg "VPN '$NAME': missing $CONFIG_DIR/$NAME.conf file !"
+ GLOBAL_STATUS=1
+ fi
+ done
+ fi
+ exit $GLOBAL_STATUS
+ ;;
+*)
+ echo "Usage: $0 {start|stop|reload|restart|force-reload|cond-restart|soft-restart|status}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# vim:set ai sts=2 sw=2 tw=0:
diff --git a/etc/init.d/pcscd b/etc/init.d/pcscd
new file mode 100755
index 0000000000..58ff62a195
--- /dev/null
+++ b/etc/init.d/pcscd
@@ -0,0 +1,146 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: pcscd
+# Required-Start: $local_fs $remote_fs $syslog
+# Required-Stop: $local_fs $remote_fs $syslog
+# Should-Start: udev
+# Should-Stop: udev
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Daemon to access a smart card using PC/SC
+# Description: The PC/SC daemon is used to dynamically
+# allocate/deallocate reader drivers at runtime and manage
+# connections to the readers.
+### END INIT INFO
+
+# Authors:
+# Carlos Prados Bocos
+# Ludovic Rousseau
+
+# Do NOT "set -e"
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="PCSC Lite resource manager"
+NAME=pcscd
+DAEMON=/usr/sbin/$NAME
+IPCDIR=/var/run/pcscd
+PIDFILE=$IPCDIR/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+
+# if you need to pass arguments to pcscd you should edit the file
+# /etc/default/pcscd and add a line
+# DAEMON_ARGS="--your-option"
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+# get LANG variable (code from /etc/init.d/keymap.sh)
+ENV_FILE="none"
+[ -r /etc/environment ] && ENV_FILE="/etc/environment"
+[ -r /etc/default/locale ] && ENV_FILE="/etc/default/locale"
+
+value=$(grep -E "^[^#]*LANG=" $ENV_FILE | tail -n1 | cut -d= -f2)
+eval LANG=$value
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # create $IPCDIR with correct access rights
+ if [ ! -d $IPCDIR ]
+ then
+ rm -rf $IPCDIR
+ mkdir $IPCDIR
+ fi
+ chmod 0755 $IPCDIR
+
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+ $DAEMON_ARGS \
+ || return 2
+ # Add code here, if necessary, that waits for the process to be ready
+ # to handle requests from services started subsequently which depend
+ # on this one. As a last resort, sleep for some time.
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon --stop --quiet --retry=3 --pidfile $PIDFILE --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+}
+
+case "$1" in
+ start)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+ do_start
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ status)
+ status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
+ ;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented then remove the
+ # 'force-reload' alias
+ #
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+:
diff --git a/etc/init.d/php8.3-fpm b/etc/init.d/php8.3-fpm
new file mode 100755
index 0000000000..b4dfb36ba4
--- /dev/null
+++ b/etc/init.d/php8.3-fpm
@@ -0,0 +1,161 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: php8.3-fpm
+# Required-Start: $remote_fs $network
+# Required-Stop: $remote_fs $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: starts php8.3-fpm
+# Description: Starts The PHP FastCGI Process Manager Daemon
+### END INIT INFO
+
+# Author: Ondrej Sury
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="PHP 8.3 FastCGI Process Manager"
+NAME=php-fpm8.3
+CONFFILE=/etc/php/8.3/fpm/php-fpm.conf
+DAEMON=/usr/sbin/$NAME
+DAEMON_ARGS="--daemonize --fpm-config $CONFFILE"
+CONF_PIDFILE=$(sed -n 's/^pid[ =]*//p' $CONFFILE)
+PIDFILE=${CONF_PIDFILE:-/run/php/php8.3-fpm.pid}
+TIMEOUT=30
+SCRIPTNAME=/etc/init.d/$NAME
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+ $DAEMON_ARGS 2>/dev/null \
+ || return 2
+ # Add code here, if necessary, that waits for the process to be ready
+ # to handle requests from services started subsequently which depend
+ # on this one. As a last resort, sleep for some time.
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon --stop --quiet --retry=QUIT/$TIMEOUT/TERM/5/KILL/5 --pidfile $PIDFILE --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ # Wait for children to finish too if this is a daemon that forks
+ # and if the daemon is only ever run from this initscript.
+ # If the above conditions are not satisfied then add some other code
+ # that waits for the process to drop all resources that could be
+ # needed by services started subsequently. A last resort is to
+ # sleep for some time.
+ start-stop-daemon --stop --quiet --oknodo --retry=0/30/TERM/5/KILL/5 --exec $DAEMON
+ [ "$?" = 2 ] && return 2
+ # Many daemons don't delete their pidfiles when they exit.
+ rm -f $PIDFILE
+ return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ #
+ # If the daemon can reload its configuration without
+ # restarting (for example, when it is sent a SIGHUP),
+ # then implement that here.
+ #
+ start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
+ return 0
+}
+
+case "$1" in
+ start)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+ systemd-tmpfiles --remove --create /usr/lib/tmpfiles.d/php8.3-fpm.conf
+ case "$?" in
+ 0)
+ do_start
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ 1) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ status)
+ status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+ ;;
+ reload|force-reload)
+ log_daemon_msg "Reloading $DESC" "$NAME"
+ do_reload
+ log_end_msg $?
+ ;;
+ reopen-logs)
+ log_daemon_msg "Reopening $DESC logs" $NAME
+ if start-stop-daemon --stop --signal USR1 --oknodo --quiet \
+ --pidfile $PIDFILE --exec $DAEMON
+ then
+ log_end_msg 0
+ else
+ log_end_msg 1
+ fi
+ ;;
+ restart)
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+:
diff --git a/etc/init.d/plymouth b/etc/init.d/plymouth
new file mode 100755
index 0000000000..fd9b39a71f
--- /dev/null
+++ b/etc/init.d/plymouth
@@ -0,0 +1,89 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: plymouth
+# Required-Start: udev $remote_fs $all
+# Required-Stop: $remote_fs
+# Should-Start: $x-display-manager
+# Should-Stop: $x-display-manager
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 6
+# Short-Description: Stop plymouth during boot and start it on shutdown
+### END INIT INFO
+
+PATH="/sbin:/bin:/usr/sbin:/usr/bin"
+NAME="plymouth"
+DESC="Boot splash manager"
+
+test -x /usr/sbin/plymouthd || exit 0
+
+if [ -r "/etc/default/${NAME}" ]
+then
+ . "/etc/default/${NAME}"
+fi
+
+. /lib/lsb/init-functions
+
+set -e
+
+SPLASH="true"
+for ARGUMENT in $(cat /proc/cmdline)
+do
+ case "${ARGUMENT}" in
+ splash*)
+ SPLASH="true"
+ ;;
+
+ nosplash*|plymouth.enable=0)
+ SPLASH="false"
+ ;;
+ esac
+done
+
+case "${1}" in
+ start)
+ case "${SPLASH}" in
+ true)
+ /usr/bin/plymouth quit --retain-splash
+ ;;
+ esac
+ ;;
+
+ stop)
+ case "${SPLASH}" in
+ true)
+ if ! plymouth --ping
+ then
+ /usr/sbin/plymouthd --mode=shutdown
+ fi
+
+ RUNLEVEL="$(/sbin/runlevel | cut -d " " -f 2)"
+
+ case "${RUNLEVEL}" in
+ 0)
+ TEXT="Shutting down system..."
+ ;;
+
+ 6)
+ TEXT="Restarting system..."
+ ;;
+ esac
+
+ /usr/bin/plymouth message --text="${TEXT}"
+
+ /usr/bin/plymouth --show-splash
+ ;;
+ esac
+ ;;
+
+ restart|force-reload)
+
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/plymouth-log b/etc/init.d/plymouth-log
new file mode 100755
index 0000000000..599ac66e49
--- /dev/null
+++ b/etc/init.d/plymouth-log
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: plymouth-log
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Should-Start:
+# Should-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Inform plymouth that /var/log is writable
+### END INIT INFO
+
+PATH="/sbin:/bin:/usr/sbin:/usr/bin"
+NAME="plymouth-log"
+DESC="Boot splash manager (write log file)"
+
+test -x /usr/bin/plymouth || exit 0
+
+if [ -r "/etc/default/${NAME}" ]
+then
+ . "/etc/default/${NAME}"
+fi
+
+. /lib/lsb/init-functions
+
+set -e
+
+case "${1}" in
+ start)
+ if plymouth --ping
+ then
+ /usr/bin/plymouth update-root-fs --read-write
+ fi
+ ;;
+
+ stop|restart|force-reload)
+
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/postfix b/etc/init.d/postfix
new file mode 100755
index 0000000000..c6fe853524
--- /dev/null
+++ b/etc/init.d/postfix
@@ -0,0 +1,129 @@
+#!/bin/sh -e
+
+# Start or stop Postfix
+#
+# LaMont Jones
+# based on sendmail's init.d script
+
+### BEGIN INIT INFO
+# Provides: postfix mail-transport-agent
+# Required-Start: $local_fs $remote_fs $syslog $named $network $time
+# Required-Stop: $local_fs $remote_fs $syslog $named $network
+# Should-Start: postgresql mysql clamav-daemon postgrey spamassassin saslauthd dovecot
+# Should-Stop: postgresql mysql clamav-daemon postgrey spamassassin saslauthd dovecot
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Postfix Mail Transport Agent
+# Description: postfix is a Mail Transport agent
+### END INIT INFO
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DAEMON=/usr/sbin/postfix
+NAME=Postfix
+TZ=
+unset TZ
+
+test -x $DAEMON && test -f /etc/postfix/main.cf || exit 0
+
+. /lib/lsb/init-functions
+#DISTRO=$(lsb_release -is 2>/dev/null || echo Debian)
+
+enabled_instances() {
+ postmulti -l -a | awk '($3=="y") { print $1}'
+}
+
+running() {
+ INSTANCE="$1"
+ if [ "X$INSTANCE" = X ]; then
+ POSTMULTI=""
+ else
+ POSTMULTI="postmulti -i $INSTANCE -x "
+ fi
+ POSTCONF="${POSTMULTI} postconf"
+
+ daemon_directory=$($POSTCONF -hx daemon_directory 2>/dev/null || echo /usr/lib/postfix/sbin)
+ if ! ${POSTMULTI} $daemon_directory/master -t 2>/dev/null ; then
+ echo y
+ fi
+}
+
+case "$1" in
+ start)
+ RET=0
+ # for all instances that are not already running, handle chroot setup if needed, and start
+ for INSTANCE in $(enabled_instances); do
+ RUNNING=$(running $INSTANCE)
+ if [ "X$RUNNING" = X ]; then
+ /usr/lib/postfix/configure-instance.sh $INSTANCE
+ CMD="/usr/sbin/postmulti -- -i $INSTANCE -x ${DAEMON}"
+ if ! start-stop-daemon --start --exec $CMD start; then
+ RET=1
+ fi
+ fi
+ done
+ log_end_msg $RET
+ ;;
+
+ stop)
+ RET=0
+ # for all instances that are not already running, handle chroot setup if needed, and start
+ for INSTANCE in $(enabled_instances); do
+ RUNNING=$(running $INSTANCE)
+ if [ "X$RUNNING" != X ]; then
+ CMD="/usr/sbin/postmulti -i $INSTANCE -x ${DAEMON}"
+ if ! ${CMD} stop; then
+ RET=1
+ fi
+ fi
+ done
+ log_end_msg $RET
+ ;;
+
+ restart)
+ $0 stop
+ $0 start
+ ;;
+
+ force-reload|reload)
+ ${DAEMON} reload
+ ;;
+
+ status)
+ ALL=1
+ ANY=0
+ # for all instances that are not already running, handle chroot setup if needed, and start
+ for INSTANCE in $(enabled_instances); do
+ RUNNING=$(running $INSTANCE)
+ if [ "X$RUNNING" != X ]; then
+ ANY=1
+ else
+ ALL=0
+ fi
+ done
+ # handle the case when postmulti returns *no* configured instances
+ if [ $ANY = 0 ]; then
+ ALL=0
+ fi
+ if [ $ALL = 1 ]; then
+ log_success_msg "postfix is running"
+ exit 0
+ elif [ $ANY = 1 ]; then
+ log_success_msg "some postfix instances are running"
+ exit 0
+ else
+ log_success_msg "postfix is not running"
+ exit 3
+ fi
+ ;;
+
+ flush|check|abort)
+ ${DAEMON} $1
+ ;;
+
+ *)
+ log_action_msg "Usage: /etc/init.d/postfix {start|stop|restart|reload|flush|check|abort|force-reload|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/procps b/etc/init.d/procps
new file mode 100755
index 0000000000..c9a494b374
--- /dev/null
+++ b/etc/init.d/procps
@@ -0,0 +1,35 @@
+#! /bin/sh
+# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
+if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
+ set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
+fi
+### BEGIN INIT INFO
+# Provides: procps
+# Required-Start: mountkernfs $local_fs
+# Required-Stop:
+# Should-Start: udev module-init-tools
+# X-Start-Before: $network
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Configure kernel parameters at boottime
+# Description: Loads kernel parameters that are specified in /etc/sysctl.conf
+### END INIT INFO
+#
+# written by Elrond
+
+DESC="Setting kernel variables"
+DAEMON=/sbin/sysctl
+PIDFILE=none
+
+# Comment this out for sysctl to print every item changed
+QUIET_SYSCTL="-q"
+
+do_start_cmd() {
+ STATUS=0
+ $DAEMON $QUIET_SYSCTL --system || STATUS=$?
+ return $STATUS
+}
+
+do_reload() { call do_start_cmd; }
+do_stop() { return 0; }
+do_status() { return 0; }
diff --git a/etc/init.d/rsync b/etc/init.d/rsync
new file mode 100755
index 0000000000..3cb044771d
--- /dev/null
+++ b/etc/init.d/rsync
@@ -0,0 +1,156 @@
+#! /bin/sh
+
+### BEGIN INIT INFO
+# Provides: rsyncd
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Should-Start: $named autofs
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# Short-Description: fast remote file copy program daemon
+# Description: rsync is a program that allows files to be copied to and
+# from remote machines in much the same way as rcp.
+# This provides rsyncd daemon functionality.
+### END INIT INFO
+
+set -e
+
+# /etc/init.d/rsync: start and stop the rsync daemon
+
+DAEMON=/usr/bin/rsync
+RSYNC_ENABLE=false
+RSYNC_OPTS=''
+RSYNC_DEFAULTS_FILE=/etc/default/rsync
+RSYNC_CONFIG_FILE=/etc/rsyncd.conf
+RSYNC_PID_FILE=/var/run/rsync.pid
+RSYNC_NICE_PARM=''
+RSYNC_IONICE_PARM=''
+
+test -x $DAEMON || exit 0
+
+. /lib/lsb/init-functions
+
+if [ -s $RSYNC_DEFAULTS_FILE ]; then
+ . $RSYNC_DEFAULTS_FILE
+ case "x$RSYNC_ENABLE" in
+ xtrue|xfalse) ;;
+ xinetd) exit 0
+ ;;
+ *) log_failure_msg "Value of RSYNC_ENABLE in $RSYNC_DEFAULTS_FILE must be either 'true' or 'false';"
+ log_failure_msg "not starting rsync daemon."
+ exit 1
+ ;;
+ esac
+ case "x$RSYNC_NICE" in
+ x[0-9]|x1[0-9]) RSYNC_NICE_PARM="--nicelevel $RSYNC_NICE";;
+ x) ;;
+ *) log_warning_msg "Value of RSYNC_NICE in $RSYNC_DEFAULTS_FILE must be a value between 0 and 19 (inclusive);"
+ log_warning_msg "ignoring RSYNC_NICE now."
+ ;;
+ esac
+ case "x$RSYNC_IONICE" in
+ x-c[123]*) RSYNC_IONICE_PARM="$RSYNC_IONICE";;
+ x) ;;
+ *) log_warning_msg "Value of RSYNC_IONICE in $RSYNC_DEFAULTS_FILE must be -c1, -c2 or -c3;"
+ log_warning_msg "ignoring RSYNC_IONICE now."
+ ;;
+ esac
+fi
+
+export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
+
+rsync_start() {
+ if [ ! -s "$RSYNC_CONFIG_FILE" ]; then
+ log_failure_msg "missing or empty config file $RSYNC_CONFIG_FILE"
+ log_end_msg 1
+ exit 0
+ fi
+ # See ionice(1)
+ if [ -n "$RSYNC_IONICE_PARM" ] && [ -x /usr/bin/ionice ] &&
+ /usr/bin/ionice "$RSYNC_IONICE_PARM" true 2>/dev/null; then
+ /usr/bin/ionice "$RSYNC_IONICE_PARM" -p$$ > /dev/null 2>&1
+ fi
+ if start-stop-daemon --start --quiet --background \
+ --pidfile $RSYNC_PID_FILE --make-pidfile \
+ $RSYNC_NICE_PARM --exec $DAEMON \
+ -- --no-detach --daemon --config "$RSYNC_CONFIG_FILE" $RSYNC_OPTS
+ then
+ rc=0
+ sleep 1
+ if ! kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
+ log_failure_msg "rsync daemon failed to start"
+ rc=1
+ fi
+ else
+ rc=1
+ fi
+ if [ $rc -eq 0 ]; then
+ log_end_msg 0
+ else
+ log_end_msg 1
+ rm -f $RSYNC_PID_FILE
+ fi
+} # rsync_start
+
+
+case "$1" in
+ start)
+ if "$RSYNC_ENABLE"; then
+ log_daemon_msg "Starting rsync daemon" "rsync"
+ if [ -s $RSYNC_PID_FILE ] && kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
+ log_progress_msg "apparently already running"
+ log_end_msg 0
+ exit 0
+ fi
+ rsync_start
+ else
+ if [ -s "$RSYNC_CONFIG_FILE" ]; then
+ [ "$VERBOSE" != no ] && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..."
+ fi
+ fi
+ ;;
+ stop)
+ log_daemon_msg "Stopping rsync daemon" "rsync"
+ start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $RSYNC_PID_FILE
+ RETVAL="$?"
+ log_end_msg $RETVAL
+ if [ $RETVAL != 0 ]
+ then
+ exit 1
+ fi
+ rm -f $RSYNC_PID_FILE
+ ;;
+
+ reload|force-reload)
+ log_warning_msg "Reloading rsync daemon: not needed, as the daemon"
+ log_warning_msg "re-reads the config file whenever a client connects."
+ ;;
+
+ restart)
+ set +e
+ if $RSYNC_ENABLE; then
+ log_daemon_msg "Restarting rsync daemon" "rsync"
+ if [ -s $RSYNC_PID_FILE ] && kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
+ start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $RSYNC_PID_FILE
+ else
+ log_warning_msg "rsync daemon not running, attempting to start."
+ rm -f $RSYNC_PID_FILE
+ fi
+ rsync_start
+ else
+ if [ -s "$RSYNC_CONFIG_FILE" ]; then
+ [ "$VERBOSE" != no ] && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..."
+ fi
+ fi
+ ;;
+
+ status)
+ status_of_proc -p $RSYNC_PID_FILE "$DAEMON" rsync
+ exit $? # notreached due to set -e
+ ;;
+ *)
+ echo "Usage: /etc/init.d/rsync {start|stop|reload|force-reload|restart|status}"
+ exit 1
+esac
+
+exit 0
diff --git a/etc/init.d/screen-cleanup b/etc/init.d/screen-cleanup
new file mode 100755
index 0000000000..3eb41855c4
--- /dev/null
+++ b/etc/init.d/screen-cleanup
@@ -0,0 +1,49 @@
+#!/bin/sh
+# $Id: init,v 1.3 2004/03/16 01:43:45 zal Exp $
+#
+# Script to remove stale screen named pipes on bootup.
+#
+
+### BEGIN INIT INFO
+# Provides: screen-cleanup
+# Required-Start: $remote_fs
+# Required-Stop: $remote_fs
+# Default-Start: S
+# Default-Stop:
+# Short-Description: screen sessions cleaning
+# Description: Cleans up the screen session directory and fixes its
+# permissions if needed.
+### END INIT INFO
+
+set -e
+
+test -f /usr/bin/screen || exit 0
+
+SCREENDIR=/run/screen
+
+case "$1" in
+start)
+ if test -L $SCREENDIR || ! test -d $SCREENDIR; then
+ rm -f $SCREENDIR
+ mkdir $SCREENDIR
+ chown root:utmp $SCREENDIR
+ [ -x /sbin/restorecon ] && /sbin/restorecon $SCREENDIR
+ fi
+ find $SCREENDIR -type p -delete
+# If the local admin has used dpkg-statoverride to install the screen
+# binary with different set[ug]id bits, change the permissions of
+# $SCREENDIR accordingly
+ BINARYPERM=`stat -c%a /usr/bin/screen`
+ if [ "$BINARYPERM" -ge 4000 ]; then
+ chmod 0755 $SCREENDIR
+ elif [ "$BINARYPERM" -ge 2000 ]; then
+ chmod 0775 $SCREENDIR
+ else
+ chmod 1777 $SCREENDIR
+ fi
+ ;;
+stop|restart|reload|force-reload)
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/spamd b/etc/init.d/spamd
new file mode 100755
index 0000000000..da84280a5e
--- /dev/null
+++ b/etc/init.d/spamd
@@ -0,0 +1,94 @@
+#! /bin/sh
+
+### BEGIN INIT INFO
+# Provides: spamassassin
+# Required-Start: $remote_fs
+# Required-Stop: $remote_fs
+# Should-Start: $network $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+### END INIT INFO
+
+# Spamd init script
+# June 2002
+# Duncan Findlay
+
+# Based on skeleton by Miquel van Smoorenburg and Ian Murdock
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/spamd
+NAME=spamd
+SNAME=spamassassin
+DESC="SpamAssassin Mail Filter Daemon"
+PIDFILE="/run/$NAME.pid"
+
+export TMPDIR=/tmp
+# Apparently people have trouble if this isn't explicitly set...
+
+# Defaults - don't touch, edit /etc/default/spamassassin
+OPTIONS=""
+NICE=
+
+. /lib/lsb/init-functions
+
+test -f /etc/default/spamd && . /etc/default/spamd
+
+DOPTIONS="-d --pidfile=$PIDFILE"
+
+# Note: check_enabled should go away as soon as possible after the
+# next stable release to complete the transition away from using
+# ENABLED=1 in /etc/default/spamassassin
+check_enabled() {
+ if [ "$ENABLED" = "0" ]; then
+ echo "$DESC: disabled, see /etc/default/spamassassin"
+ exit 0
+ fi
+}
+
+test -f $DAEMON || exit 0
+
+set -e
+
+case "$1" in
+ start)
+ check_enabled
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start --pidfile $PIDFILE --name $NAME \
+ $NICE --oknodo --startas $DAEMON -- $OPTIONS $DOPTIONS
+ echo "$NAME."
+ ;;
+
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon --stop --pidfile $PIDFILE --name $NAME --oknodo
+ echo "$NAME."
+ ;;
+
+ reload|force-reload)
+ check_enabled
+ echo -n "Reloading $DESC: "
+ start-stop-daemon --stop --pidfile $PIDFILE --signal HUP --name $NAME
+ echo "$NAME."
+ ;;
+
+ restart)
+ check_enabled
+ echo -n "Restarting $DESC: "
+ start-stop-daemon --stop --pidfile $PIDFILE --name $NAME \
+ --retry 5 --oknodo
+ start-stop-daemon --start --pidfile $PIDFILE --name $NAME \
+ $NICE --oknodo --startas $DAEMON -- $OPTIONS $DOPTIONS
+
+ echo "$NAME."
+ ;;
+ status)
+ status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
+ ;;
+ *)
+ N=/etc/init.d/$SNAME
+ echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/ssh b/etc/init.d/ssh
new file mode 100755
index 0000000000..1913218e30
--- /dev/null
+++ b/etc/init.d/ssh
@@ -0,0 +1,166 @@
+#! /bin/sh
+
+### BEGIN INIT INFO
+# Provides: ssh sshd
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# Short-Description: OpenBSD Secure Shell server
+### END INIT INFO
+
+set -e
+
+# /etc/init.d/ssh: start and stop the OpenBSD "secure shell(tm)" daemon
+
+test -x /usr/sbin/sshd || exit 0
+( /usr/sbin/sshd -\? 2>&1 | grep -q OpenSSH ) 2>/dev/null || exit 0
+
+umask 022
+
+if test -f /etc/default/ssh; then
+ . /etc/default/ssh
+fi
+
+. /lib/lsb/init-functions
+
+if [ -n "$2" ]; then
+ SSHD_OPTS="$SSHD_OPTS $2"
+fi
+
+# Are we running from init?
+run_by_init() {
+ ([ "$previous" ] && [ "$runlevel" ]) || [ "$runlevel" = S ]
+}
+
+check_for_no_start() {
+ # forget it if we're trying to start, and /etc/ssh/sshd_not_to_be_run exists
+ if [ -e /etc/ssh/sshd_not_to_be_run ]; then
+ if [ "$1" = log_end_msg ]; then
+ log_end_msg 0 || true
+ fi
+ if ! run_by_init; then
+ log_action_msg "OpenBSD Secure Shell server not in use (/etc/ssh/sshd_not_to_be_run)" || true
+ fi
+ exit 0
+ fi
+}
+
+check_dev_null() {
+ if [ ! -c /dev/null ]; then
+ if [ "$1" = log_end_msg ]; then
+ log_end_msg 1 || true
+ fi
+ if ! run_by_init; then
+ log_action_msg "/dev/null is not a character device!" || true
+ fi
+ exit 1
+ fi
+}
+
+check_privsep_dir() {
+ # Create the PrivSep empty dir if necessary
+ if [ ! -d /run/sshd ]; then
+ mkdir /run/sshd
+ chmod 0755 /run/sshd
+ fi
+}
+
+check_config() {
+ if [ ! -e /etc/ssh/sshd_not_to_be_run ]; then
+ # shellcheck disable=SC2086
+ /usr/sbin/sshd $SSHD_OPTS -t || exit 1
+ fi
+}
+
+export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
+
+case "$1" in
+ start)
+ check_privsep_dir
+ check_for_no_start
+ check_dev_null
+ log_daemon_msg "Starting OpenBSD Secure Shell server" "sshd" || true
+ # shellcheck disable=SC2086
+ if start-stop-daemon --start --quiet --oknodo --chuid 0:0 --pidfile /run/sshd.pid --exec /usr/sbin/sshd -- $SSHD_OPTS; then
+ log_end_msg 0 || true
+ else
+ log_end_msg 1 || true
+ fi
+ ;;
+ stop)
+ log_daemon_msg "Stopping OpenBSD Secure Shell server" "sshd" || true
+ if start-stop-daemon --stop --quiet --oknodo --pidfile /run/sshd.pid --exec /usr/sbin/sshd; then
+ log_end_msg 0 || true
+ else
+ log_end_msg 1 || true
+ fi
+ ;;
+
+ reload|force-reload)
+ check_for_no_start
+ check_config
+ log_daemon_msg "Reloading OpenBSD Secure Shell server's configuration" "sshd" || true
+ if start-stop-daemon --stop --signal 1 --quiet --oknodo --pidfile /run/sshd.pid --exec /usr/sbin/sshd; then
+ log_end_msg 0 || true
+ else
+ log_end_msg 1 || true
+ fi
+ ;;
+
+ restart)
+ check_privsep_dir
+ check_config
+ log_daemon_msg "Restarting OpenBSD Secure Shell server" "sshd" || true
+ start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile /run/sshd.pid --exec /usr/sbin/sshd
+ check_for_no_start log_end_msg
+ check_dev_null log_end_msg
+ # shellcheck disable=SC2086
+ if start-stop-daemon --start --quiet --oknodo --chuid 0:0 --pidfile /run/sshd.pid --exec /usr/sbin/sshd -- $SSHD_OPTS; then
+ log_end_msg 0 || true
+ else
+ log_end_msg 1 || true
+ fi
+ ;;
+
+ try-restart)
+ check_privsep_dir
+ check_config
+ log_daemon_msg "Restarting OpenBSD Secure Shell server" "sshd" || true
+ RET=0
+ start-stop-daemon --stop --quiet --retry 30 --pidfile /run/sshd.pid --exec /usr/sbin/sshd || RET="$?"
+ case $RET in
+ 0)
+ # old daemon stopped
+ check_for_no_start log_end_msg
+ check_dev_null log_end_msg
+ # shellcheck disable=SC2086
+ if start-stop-daemon --start --quiet --oknodo --chuid 0:0 --pidfile /run/sshd.pid --exec /usr/sbin/sshd -- $SSHD_OPTS; then
+ log_end_msg 0 || true
+ else
+ log_end_msg 1 || true
+ fi
+ ;;
+ 1)
+ # daemon not running
+ log_progress_msg "(not running)" || true
+ log_end_msg 0 || true
+ ;;
+ *)
+ # failed to stop
+ log_progress_msg "(failed to stop)" || true
+ log_end_msg 1 || true
+ ;;
+ esac
+ ;;
+
+ status)
+ status_of_proc -p /run/sshd.pid /usr/sbin/sshd sshd && exit 0 || exit $?
+ ;;
+
+ *)
+ log_action_msg "Usage: /etc/init.d/ssh {start|stop|reload|force-reload|restart|try-restart|status}" || true
+ exit 1
+esac
+
+exit 0
diff --git a/etc/init.d/sysstat b/etc/init.d/sysstat
new file mode 100755
index 0000000000..d983676c16
--- /dev/null
+++ b/etc/init.d/sysstat
@@ -0,0 +1,62 @@
+#! /bin/sh
+# vim:ft=sh:et
+### BEGIN INIT INFO
+# Provides: sysstat
+# Required-Start: $remote_fs $local_fs $syslog
+# Required-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# Short-Description: Start/stop sysstat's sadc
+# Description: Sysstat contains system performance tools for Linux
+# The init file runs the sadc command in order to write
+# the "LINUX RESTART" mark to the daily data file
+### END INIT INFO
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/lib/sysstat/debian-sa1
+NAME=sadc
+DESC="the system activity data collector"
+
+test -f "$DAEMON" || exit 0
+umask 022
+
+# our configuration file
+DEFAULT=/etc/default/sysstat
+
+# default setting...
+ENABLED="false"
+
+# ...overridden in the configuration file
+test -r "$DEFAULT" && . "$DEFAULT"
+
+set -e
+status=0
+
+. /lib/lsb/init-functions
+
+case "$1" in
+ start|restart|reload|force-reload)
+ if [ "$ENABLED" = "true" ] ; then
+ log_daemon_msg "Starting $DESC" "$NAME"
+ start-stop-daemon --start --quiet --exec $DAEMON -- --boot || status=$?
+ log_end_msg $status
+ fi
+ ;;
+ stop)
+ ;;
+ status)
+ if [ "$ENABLED" = "true" ] ; then
+ log_success_msg "sadc cron jobs are enabled"
+ exit 0
+ else
+ log_failure_msg "sadc cron jobs are disabled"
+ exit 3
+ fi
+ ;;
+ *)
+ log_failure_msg "Usage: $0 {start|stop|restart|reload|force-reload|status}"
+ exit 1
+ ;;
+esac
+
+exit $status
diff --git a/etc/init.d/ufw b/etc/init.d/ufw
new file mode 100755
index 0000000000..e6a033f160
--- /dev/null
+++ b/etc/init.d/ufw
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: ufw
+# Required-Start: $local_fs
+# Required-Stop: $local_fs
+# Default-Start: S
+# Default-Stop: 1
+# Short-Description: start firewall
+# Description: Start ufw firewall
+### END INIT INFO
+
+set -e
+
+PATH="/sbin:/bin"
+
+[ -d /usr/lib/ufw ] || exit 0
+
+. /lib/lsb/init-functions
+
+for s in "/usr/lib/ufw/ufw-init-functions" "/etc/ufw/ufw.conf" "/etc/default/ufw" ; do
+ if [ -s "$s" ]; then
+ . "$s"
+ else
+ log_failure_msg "Could not find $s (aborting)"
+ exit 1
+ fi
+done
+
+error=0
+case "$1" in
+start)
+ if [ "$ENABLED" = "yes" ] || [ "$ENABLED" = "YES" ]; then
+ log_action_begin_msg "Starting firewall:" "ufw"
+ output=`ufw_start` || error="$?"
+ if [ "$error" = "0" ]; then
+ log_action_cont_msg "Setting kernel variables ($IPT_SYSCTL)"
+ fi
+ if [ ! -z "$output" ]; then
+ echo "$output" | while read line ; do
+ log_action_cont_msg "$line"
+ done
+ fi
+ else
+ log_action_begin_msg "Skip starting firewall:" "ufw (not enabled)"
+ fi
+ log_action_end_msg $error
+ exit $error
+ ;;
+stop)
+ if [ "$ENABLED" = "yes" ] || [ "$ENABLED" = "YES" ]; then
+ log_action_begin_msg "Stopping firewall:" "ufw"
+ output=`ufw_stop` || error="$?"
+ if [ ! -z "$output" ]; then
+ log_action_cont_msg "$output"
+ fi
+ else
+ log_action_begin_msg "Skip stopping firewall:" "ufw (not enabled)"
+ fi
+ log_action_end_msg $error
+ exit $error
+ ;;
+restart|force-reload)
+ log_action_begin_msg "Reloading firewall:" "ufw"
+ output=`ufw_reload` || error="$?"
+ if [ ! -z "$output" ]; then
+ log_action_cont_msg "$output"
+ fi
+ log_action_end_msg $error
+ exit $error
+ ;;
+status)
+ output=`ufw_status` || error="$?"
+ if [ ! -z "$output" ]; then
+ log_action_cont_msg "$output"
+ fi
+ log_action_end_msg $error
+ exit $error
+ ;;
+*)
+ echo "Usage: /etc/init.d/ufw {start|stop|restart|force-reload|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/unattended-upgrades b/etc/init.d/unattended-upgrades
new file mode 100755
index 0000000000..f77a7301f8
--- /dev/null
+++ b/etc/init.d/unattended-upgrades
@@ -0,0 +1,51 @@
+#! /bin/sh
+#
+### BEGIN INIT INFO
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Provides: unattended-upgrade-shutdown-check
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 6
+# Short-Description: Check if unattended upgrades are being applied
+# Description: Check if unattended upgrades are being applied
+# and wait for them to finish
+### END INIT INFO
+set -e
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+NAME="unattended-upgrades-shutdown"
+DESC="unattended package upgrades shutdown"
+SCRIPTNAME="/etc/init.d/$NAME"
+SHUTDOWN_HELPER="/usr/share/unattended-upgrades/unattended-upgrade-shutdown"
+
+if [ -x /usr/bin/python3 ]; then
+ PYTHON=python3
+else
+ PYTHON=python
+fi
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
+. /lib/lsb/init-functions
+
+case "$1" in
+start|restart|force-reload|status)
+ # nothing, just to keep update-rc.d happy (see debian #630732)
+ ;;
+stop)
+ if [ -e $SHUTDOWN_HELPER ]; then
+ [ "$VERBOSE" != "no" ] && log_action_begin_msg "Checking for running $DESC"
+ $PYTHON $SHUTDOWN_HELPER
+ [ "$VERBOSE" != "no" ] && log_action_end_msg $? "$NAME"
+ fi
+ ;;
+*)
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+:
diff --git a/etc/init.d/uuidd b/etc/init.d/uuidd
new file mode 100755
index 0000000000..cb615d15b0
--- /dev/null
+++ b/etc/init.d/uuidd
@@ -0,0 +1,62 @@
+#! /bin/sh -e
+### BEGIN INIT INFO
+# Provides: uuidd
+# Required-Start: $time $local_fs $remote_fs
+# Required-Stop: $time $local_fs $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: uuidd daemon
+# Description: Init script for the uuid generation daemon
+### END INIT INFO
+#
+# Author: "Theodore Ts'o"
+#
+set -e
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DAEMON=/usr/sbin/uuidd
+UUIDD_USER=uuidd
+UUIDD_GROUP=uuidd
+UUIDD_DIR=/run/uuidd
+PIDFILE=$UUIDD_DIR/uuidd.pid
+
+test -x $DAEMON || exit 0
+
+. /lib/lsb/init-functions
+
+case "$1" in
+ start)
+ log_daemon_msg "Starting uuid generator" "uuidd"
+ if ! test -d $UUIDD_DIR; then
+ mkdir -p $UUIDD_DIR
+ chown -R $UUIDD_USER:$UUIDD_GROUP $UUIDD_DIR
+ fi
+ start_daemon -p $PIDFILE $DAEMON
+ log_end_msg $?
+ ;;
+ stop)
+ log_daemon_msg "Stopping uuid generator" "uuidd"
+ killproc -p $PIDFILE $DAEMON
+ log_end_msg $?
+ ;;
+ status)
+ if pidofproc -p $PIDFILE $DAEMON >/dev/null 2>&1; then
+ echo "$DAEMON is running";
+ exit 0;
+ else
+ echo "$DAEMON is NOT running";
+ if test -f $PIDFILE; then exit 2; fi
+ exit 3;
+ fi
+ ;;
+ force-reload|restart)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/uuidd {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/etc/init.d/x11-common b/etc/init.d/x11-common
new file mode 100755
index 0000000000..afea20b72f
--- /dev/null
+++ b/etc/init.d/x11-common
@@ -0,0 +1,122 @@
+#!/bin/sh
+# /etc/init.d/x11-common: set up the X server and ICE socket directories
+### BEGIN INIT INFO
+# Provides: x11-common
+# Required-Start: $remote_fs
+# Required-Stop: $remote_fs
+# Default-Start: S
+# Default-Stop:
+# Short-Description: set up the X server and ICE socket directories
+### END INIT INFO
+
+set -e
+
+PATH=/usr/bin:/usr/sbin:/bin:/sbin
+SOCKET_DIR=.X11-unix
+ICE_DIR=.ICE-unix
+
+. /lib/lsb/init-functions
+if [ -f /etc/default/rcS ]; then
+ . /etc/default/rcS
+fi
+
+do_restorecon () {
+ # Restore file security context (SELinux).
+ if command -v restorecon >/dev/null 2>&1; then
+ restorecon "$1"
+ fi
+}
+
+# create a directory in /tmp.
+# assumes /tmp has a sticky bit set (or is only writeable by root)
+set_up_dir () {
+ DIR="/tmp/$1"
+
+ if [ "$VERBOSE" != no ]; then
+ log_progress_msg "$DIR"
+ fi
+ # if $DIR exists and isn't a directory, move it aside
+ if [ -e $DIR ] && ! [ -d $DIR ] || [ -h $DIR ]; then
+ mv "$DIR" "$(mktemp -d $DIR.XXXXXX)"
+ fi
+
+ error=0
+ while :; do
+ if [ $error -ne 0 ] ; then
+ # an error means the file-system is readonly or an attacker
+ # is doing evil things, distinguish by creating a temporary file,
+ # but give up after a while.
+ if [ $error -gt 5 ]; then
+ log_failure_msg "failed to set up $DIR"
+ return 1
+ fi
+ fn="$(mktemp /tmp/testwriteable.XXXXXXXXXX)" || return 1
+ rm "$fn"
+ fi
+ mkdir -p -m 01777 "$DIR" || { rm "$DIR" || error=$((error + 1)) ; continue ; }
+ case "$(LC_ALL=C stat -c '%u %g %a %F' "$DIR")" in
+ "0 0 1777 directory")
+ # everything as it is supposed to be
+ break
+ ;;
+ "0 0 "*" directory")
+ # as it is owned by root, cannot be replaced with a symlink:
+ chmod 01777 "$DIR"
+ break
+ ;;
+ *" directory")
+ # if the chown succeeds, the next step can change it savely
+ chown -h root:root "$DIR" || error=$((error + 1))
+ continue
+ ;;
+ *)
+ log_failure_msg "failed to set up $DIR"
+ return 1
+ ;;
+ esac
+ done
+ do_restorecon "$DIR"
+
+ return 0
+}
+
+do_status () {
+ if [ -d "/tmp/$ICE_DIR" ] && [ -d "/tmp/$SOCKET_DIR" ]; then
+ return 0
+ else
+ return 4
+ fi
+}
+
+case "$1" in
+ start)
+ if [ "$VERBOSE" != no ]; then
+ log_begin_msg "Setting up X socket directories..."
+ fi
+ set_up_dir "$SOCKET_DIR"
+ set_up_dir "$ICE_DIR"
+ if [ "$VERBOSE" != no ]; then
+ log_end_msg 0
+ fi
+ ;;
+
+ restart|reload|force-reload)
+ /etc/init.d/x11-common start
+ ;;
+
+ stop)
+ :
+ ;;
+
+ status)
+ do_status
+ ;;
+ *)
+ log_success_msg "Usage: /etc/init.d/x11-common {start|stop|status|restart|reload|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# vim:set ai et sts=2 sw=2 tw=0:
diff --git a/etc/init.d/xinetd b/etc/init.d/xinetd
new file mode 100755
index 0000000000..c8ea9c398e
--- /dev/null
+++ b/etc/init.d/xinetd
@@ -0,0 +1,84 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: xinetd inetd
+# Required-Start: $local_fs $remote_fs $network
+# Required-Stop: $local_fs $remote_fs $network
+# Should-Start: $syslog
+# Should-Stop: $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Starts or stops the xinetd daemon.
+# Description: Starts and stops xinetd, an inetd replacement
+### END INIT INFO
+
+# clear poisonned environment
+unset TMPDIR
+
+NAME=xinetd
+DAEMON=/usr/sbin/$NAME
+PIDFILE=/run/$NAME.pid
+
+test -x "$DAEMON" || exit 0
+
+test -e /etc/default/$NAME && . /etc/default/$NAME
+case "$INETD_COMPAT" in
+ [Yy]*)
+ XINETD_OPTS="$XINETD_OPTS -inetd_compat"
+ if perl -MSocket -e 'exit (!socket($sock, AF_INET6, SOCK_STREAM, 0))'; then
+ XINETD_OPTS="$XINETD_OPTS -inetd_ipv6"
+ fi
+ ;;
+esac
+
+. /lib/lsb/init-functions
+
+checkportmap () {
+ if grep "^[^ *#]" /etc/xinetd.conf | grep -q 'rpc/'; then
+ if ! rpcinfo -u localhost portmapper >/dev/null 2>&1; then
+ echo
+ echo "WARNING: portmapper inactive - RPC services unavailable!"
+ echo " Commenting out or removing the RPC services from"
+ echo " the /etc/xinetd.conf file will remove this message."
+ echo
+ fi
+ fi
+}
+
+case "$1" in
+ start)
+ checkportmap
+ log_daemon_msg "Starting internet superserver" "$NAME"
+ start-stop-daemon --pidfile "$PIDFILE" --start --quiet --background --exec "$DAEMON" -- \
+ -pidfile "$PIDFILE" $XINETD_OPTS
+ log_end_msg $?
+ ;;
+ stop)
+ log_daemon_msg "Stopping internet superserver" "$NAME"
+ start-stop-daemon --pidfile "$PIDFILE" --stop --signal 3 --quiet --oknodo --exec "$DAEMON"
+ log_end_msg $?
+ ;;
+ reload)
+ log_daemon_msg "Reloading internet superserver configuration" "$NAME"
+ start-stop-daemon --pidfile "$PIDFILE" --stop --signal 1 --quiet --oknodo --exec "$DAEMON"
+ log_end_msg $?
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ status)
+ status_of_proc -p "$PIDFILE" "$DAEMON"
+ R=$?
+ if test "$R" = "0" ; then
+ kill -10 $(cat "$PIDFILE")
+ cat /var/run/xinetd.dump
+ fi
+ exit $R
+ ;;
+ *)
+ echo "Usage: /etc/init.d/xinetd {start|stop|reload|force-reload|restart|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/etc/initramfs-tools/initramfs.conf b/etc/initramfs-tools/initramfs.conf
new file mode 100644
index 0000000000..6453d4dd24
--- /dev/null
+++ b/etc/initramfs-tools/initramfs.conf
@@ -0,0 +1,82 @@
+#
+# initramfs.conf
+# Configuration file for mkinitramfs(8). See initramfs.conf(5).
+#
+# Note that configuration options from this file can be overridden
+# by config files in the /etc/initramfs-tools/conf.d directory.
+
+#
+# MODULES: [ most | netboot | dep | list ]
+#
+# most - Add most filesystem and all harddrive drivers.
+#
+# dep - Try and guess which modules to load.
+#
+# netboot - Add the base modules, network modules, but skip block devices.
+#
+# list - Only include modules from the 'additional modules' list
+#
+
+MODULES=most
+
+#
+# BUSYBOX: [ y | n | auto ]
+#
+# Use busybox shell and utilities. If set to n, klibc utilities will be used.
+# If set to auto (or unset), busybox will be used if installed and klibc will
+# be used otherwise.
+#
+
+BUSYBOX=auto
+
+#
+# COMPRESS: [ gzip | bzip2 | lz4 | lzma | lzop | xz | zstd ]
+#
+
+COMPRESS=zstd
+
+#
+# COMPRESSLEVEL: ...
+#
+# Set a compression level for the compressor.
+# Defaults vary by compressor.
+#
+# Valid values are:
+# 1 - 9 for gzip|bzip2|lzma|lzop
+# 0 - 9 for lz4|xz
+# 0 - 19 for zstd
+#
+# COMPRESSLEVEL=1
+
+#
+# DEVICE: ...
+#
+# Specify a specific network interface, like eth0
+# Overridden by optional ip= or BOOTIF= bootarg
+#
+
+DEVICE=
+
+#
+# NFSROOT: [ auto | HOST:MOUNT ]
+#
+
+NFSROOT=auto
+
+#
+# RUNSIZE: ...
+#
+# The size of the /run tmpfs mount point, like 256M or 10%
+# Overridden by optional initramfs.runsize= bootarg
+#
+
+RUNSIZE=10%
+
+#
+# FSTYPE: ...
+#
+# The filesystem type(s) to support, or "auto" to use the current root
+# filesystem type
+#
+
+FSTYPE=auto
diff --git a/etc/initramfs-tools/modules b/etc/initramfs-tools/modules
new file mode 100644
index 0000000000..dd9dc54e58
--- /dev/null
+++ b/etc/initramfs-tools/modules
@@ -0,0 +1,11 @@
+# List of modules that you want to include in your initramfs.
+# They will be loaded at boot time in the order below.
+#
+# Syntax: module_name [args ...]
+#
+# You must run update-initramfs(8) to effect this change.
+#
+# Examples:
+#
+# raid1
+# sd_mod
diff --git a/etc/initramfs-tools/update-initramfs.conf b/etc/initramfs-tools/update-initramfs.conf
new file mode 100644
index 0000000000..31823e2632
--- /dev/null
+++ b/etc/initramfs-tools/update-initramfs.conf
@@ -0,0 +1,20 @@
+#
+# Configuration file for update-initramfs(8)
+#
+
+#
+# update_initramfs [ yes | all | no ]
+#
+# Default is yes
+# If set to all update-initramfs will update all initramfs
+# If set to no disables any update to initramfs beside kernel upgrade
+
+update_initramfs=yes
+
+#
+# backup_initramfs [ yes | no ]
+#
+# Default is no
+# If set to no leaves no .bak backup files.
+
+backup_initramfs=no
diff --git a/etc/inputrc b/etc/inputrc
new file mode 100644
index 0000000000..a16ddabb8e
--- /dev/null
+++ b/etc/inputrc
@@ -0,0 +1,71 @@
+# /etc/inputrc - global inputrc for libreadline
+# See readline(3readline) and `info rluserman' for more information.
+
+# Be 8 bit clean.
+set input-meta on
+set output-meta on
+
+# To allow the use of 8bit-characters like the german umlauts, uncomment
+# the line below. However this makes the meta key not work as a meta key,
+# which is annoying to those which don't need to type in 8-bit characters.
+
+# set convert-meta off
+
+# try to enable the application keypad when it is called. Some systems
+# need this to enable the arrow keys.
+# set enable-keypad on
+
+# see /usr/share/doc/bash/inputrc.arrows for other codes of arrow keys
+
+# do not bell on tab-completion
+# set bell-style none
+# set bell-style visible
+
+# make autocompletion case insensitive and display suggestions
+# set completion-ignore-case On
+# set show-all-if-ambiguous On
+
+# some defaults / modifications for the emacs mode
+$if mode=emacs
+
+# allow the use of the Home/End keys
+"\e[1~": beginning-of-line
+"\e[4~": end-of-line
+
+# allow the use of the Delete/Insert keys
+"\e[3~": delete-char
+"\e[2~": quoted-insert
+
+# mappings for "page up" and "page down" to step to the beginning/end
+# of the history
+# "\e[5~": beginning-of-history
+# "\e[6~": end-of-history
+
+# alternate mappings for "page up" and "page down" to search the history
+# "\e[5~": history-search-backward
+# "\e[6~": history-search-forward
+
+# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
+"\e[1;5C": forward-word
+"\e[1;5D": backward-word
+"\e[5C": forward-word
+"\e[5D": backward-word
+"\e\e[C": forward-word
+"\e\e[D": backward-word
+
+$if term=rxvt
+"\e[7~": beginning-of-line
+"\e[8~": end-of-line
+"\eOc": forward-word
+"\eOd": backward-word
+$endif
+
+# for non RH/Debian xterm, can't hurt for RH/Debian xterm
+# "\eOH": beginning-of-line
+# "\eOF": end-of-line
+
+# for freebsd console
+# "\e[H": beginning-of-line
+# "\e[F": end-of-line
+
+$endif
diff --git a/etc/insserv.conf.d/postfix b/etc/insserv.conf.d/postfix
new file mode 100644
index 0000000000..ddd00348a0
--- /dev/null
+++ b/etc/insserv.conf.d/postfix
@@ -0,0 +1 @@
+$mail-transport-agent postfix
diff --git a/etc/iproute2/bpf_pinning b/etc/iproute2/bpf_pinning
new file mode 100644
index 0000000000..2b39c709f3
--- /dev/null
+++ b/etc/iproute2/bpf_pinning
@@ -0,0 +1,6 @@
+#
+# subpath mappings from mount point for pinning
+#
+#3 tracing
+#4 foo/bar
+#5 tc/cls1
diff --git a/etc/iproute2/ematch_map b/etc/iproute2/ematch_map
new file mode 100644
index 0000000000..4d6bb2f039
--- /dev/null
+++ b/etc/iproute2/ematch_map
@@ -0,0 +1,8 @@
+# lookup table for ematch kinds
+1 cmp
+2 nbyte
+3 u32
+4 meta
+7 canid
+8 ipset
+9 ipt
diff --git a/etc/iproute2/group b/etc/iproute2/group
new file mode 100644
index 0000000000..6f000b2491
--- /dev/null
+++ b/etc/iproute2/group
@@ -0,0 +1,2 @@
+# device group names
+0 default
diff --git a/etc/iproute2/nl_protos b/etc/iproute2/nl_protos
new file mode 100644
index 0000000000..7c17cf0f9b
--- /dev/null
+++ b/etc/iproute2/nl_protos
@@ -0,0 +1,23 @@
+# Netlink protocol names mapping
+
+0 rtnl
+1 unused
+2 usersock
+3 fw
+4 tcpdiag
+5 nflog
+6 xfrm
+7 selinux
+8 iscsi
+9 audit
+10 fiblookup
+11 connector
+12 nft
+13 ip6fw
+14 dec-rt
+15 uevent
+16 genl
+18 scsi-trans
+19 ecryptfs
+20 rdma
+21 crypto
diff --git a/etc/iproute2/rt_dsfield b/etc/iproute2/rt_dsfield
new file mode 100644
index 0000000000..1426d601fb
--- /dev/null
+++ b/etc/iproute2/rt_dsfield
@@ -0,0 +1,26 @@
+# Differentiated field values
+# These include the DSCP and unused bits
+0x0 default
+# Newer RFC2597 values
+0x28 AF11
+0x30 AF12
+0x38 AF13
+0x48 AF21
+0x50 AF22
+0x58 AF23
+0x68 AF31
+0x70 AF32
+0x78 AF33
+0x88 AF41
+0x90 AF42
+0x98 AF43
+# Older values RFC2474
+0x20 CS1
+0x40 CS2
+0x60 CS3
+0x80 CS4
+0xA0 CS5
+0xC0 CS6
+0xE0 CS7
+# RFC 2598
+0xB8 EF
diff --git a/etc/iproute2/rt_protos b/etc/iproute2/rt_protos
new file mode 100644
index 0000000000..0f98609f74
--- /dev/null
+++ b/etc/iproute2/rt_protos
@@ -0,0 +1,25 @@
+#
+# Reserved protocols.
+#
+0 unspec
+1 redirect
+2 kernel
+3 boot
+4 static
+8 gated
+9 ra
+10 mrt
+11 zebra
+12 bird
+13 dnrouted
+14 xorp
+15 ntk
+16 dhcp
+18 keepalived
+42 babel
+99 openr
+186 bgp
+187 isis
+188 ospf
+189 rip
+192 eigrp
diff --git a/etc/iproute2/rt_protos.d/README b/etc/iproute2/rt_protos.d/README
new file mode 100644
index 0000000000..f9c599c654
--- /dev/null
+++ b/etc/iproute2/rt_protos.d/README
@@ -0,0 +1,2 @@
+Each file in this directory is an rt_protos configuration file. iproute2
+commands scan this directory processing all files that end in '.conf'.
diff --git a/etc/iproute2/rt_realms b/etc/iproute2/rt_realms
new file mode 100644
index 0000000000..eedd76d23f
--- /dev/null
+++ b/etc/iproute2/rt_realms
@@ -0,0 +1,13 @@
+#
+# reserved values
+#
+0 cosmos
+#
+# local
+#
+#1 inr.ac
+#2 inr.ruhep
+#3 freenet
+#4 radio-msu
+#5 russia
+#6 internet
diff --git a/etc/iproute2/rt_scopes b/etc/iproute2/rt_scopes
new file mode 100644
index 0000000000..8514bc11a0
--- /dev/null
+++ b/etc/iproute2/rt_scopes
@@ -0,0 +1,11 @@
+#
+# reserved values
+#
+0 global
+255 nowhere
+254 host
+253 link
+#
+# pseudo-reserved
+#
+200 site
diff --git a/etc/iproute2/rt_tables b/etc/iproute2/rt_tables
new file mode 100644
index 0000000000..541abfd272
--- /dev/null
+++ b/etc/iproute2/rt_tables
@@ -0,0 +1,11 @@
+#
+# reserved values
+#
+255 local
+254 main
+253 default
+0 unspec
+#
+# local
+#
+#1 inr.ruhep
diff --git a/etc/iproute2/rt_tables.d/README b/etc/iproute2/rt_tables.d/README
new file mode 100644
index 0000000000..0920cb1699
--- /dev/null
+++ b/etc/iproute2/rt_tables.d/README
@@ -0,0 +1,2 @@
+Each file in this directory is an rt_tables configuration file. iproute2
+commands scan this directory processing all files that end in '.conf'.
diff --git a/etc/iscsi/initiatorname.iscsi b/etc/iscsi/initiatorname.iscsi
new file mode 100644
index 0000000000..8e059aae64
--- /dev/null
+++ b/etc/iscsi/initiatorname.iscsi
@@ -0,0 +1 @@
+GenerateName=yes
diff --git a/etc/iscsi/iscsid.conf b/etc/iscsi/iscsid.conf
new file mode 100644
index 0000000000..fa8f2abdbf
--- /dev/null
+++ b/etc/iscsi/iscsid.conf
@@ -0,0 +1,361 @@
+#
+# Open-iSCSI default configuration.
+#
+# Note: To set any of these values for a specific node/session run
+# the iscsiadm --mode node --op command for the value. See the README
+# and man page for iscsiadm for details on the --op command.
+#
+
+######################
+# iscsid daemon config
+######################
+#
+# If you want iscsid to start the first time an iscsi tool
+# needs to access it, instead of starting it when the init
+# scripts run, set the iscsid startup command here. This
+# should normally only need to be done by distro package
+# maintainers. If you leave the iscsid daemon running all
+# the time then leave this attribute commented out.
+#
+# Default for Fedora and RHEL. Uncomment to activate.
+# iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket
+#
+# Default for Debian and Ubuntu. Uncomment to activate.
+iscsid.startup = /bin/systemctl start iscsid.socket
+#
+# Default if you are not using systemd. Uncomment to activate.
+# iscsid.startup = /usr/bin/service start iscsid
+
+# Check for active mounts on devices reachable through a session
+# and refuse to logout if there are any. Defaults to "No".
+# iscsid.safe_logout = Yes
+
+# Only require UID auth for MGMT IPCs, and not username.
+# Checking username is a legacy security practice, and is on the path
+# to deprecation.
+# Set to "No" for legacy compatibility.
+# Defaults to "Yes".
+# iscsid.ipc_auth_uid = No
+
+#############################
+# NIC/HBA and driver settings
+#############################
+# open-iscsi can create a session and bind it to a NIC/HBA.
+# To set this up see the example iface config file.
+
+#*****************
+# Startup settings
+#*****************
+
+# To request that the iscsi service scripts startup a session, use "automatic":
+# node.startup = automatic
+#
+# To manually startup the session, use "manual". The default is manual.
+node.startup = manual
+
+# For "automatic" startup nodes, setting this to "Yes" will try logins on each
+# available iface until one succeeds, and then stop. The default "No" will try
+# logins on all available ifaces simultaneously.
+node.leading_login = No
+
+# *************
+# CHAP Settings
+# *************
+
+# To enable CHAP authentication set node.session.auth.authmethod
+# to CHAP. The default is None.
+#node.session.auth.authmethod = CHAP
+
+# To configure which CHAP algorithms to enable, set
+# node.session.auth.chap_algs to a comma separated list.
+# The algorithms should be listed in order of decreasing
+# preference — in particular, with the most preferred algorithm first.
+# Valid values are MD5, SHA1, SHA256, and SHA3-256.
+# The default is MD5.
+#node.session.auth.chap_algs = SHA3-256,SHA256,SHA1,MD5
+
+# To set a CHAP username and password for initiator
+# authentication by the target(s), uncomment the following lines:
+#node.session.auth.username = username
+#node.session.auth.password = password
+
+# To set a CHAP username and password for target(s)
+# authentication by the initiator, uncomment the following lines:
+#node.session.auth.username_in = username_in
+#node.session.auth.password_in = password_in
+
+# To enable CHAP authentication for a discovery session to the target,
+# set discovery.sendtargets.auth.authmethod to CHAP. The default is None.
+#discovery.sendtargets.auth.authmethod = CHAP
+
+# To set a discovery session CHAP username and password for the initiator
+# authentication by the target(s), uncomment the following lines:
+#discovery.sendtargets.auth.username = username
+#discovery.sendtargets.auth.password = password
+
+# To set a discovery session CHAP username and password for target(s)
+# authentication by the initiator, uncomment the following lines:
+#discovery.sendtargets.auth.username_in = username_in
+#discovery.sendtargets.auth.password_in = password_in
+
+# ********
+# Timeouts
+# ********
+#
+# See the iSCSI README's Advanced Configuration section for tips
+# on setting timeouts when using multipath or doing root over iSCSI.
+#
+# To specify the length of time to wait for session re-establishment
+# before failing SCSI commands back to the application when running
+# the Linux SCSI Layer error handler, edit the line.
+# The value is in seconds and the default is 120 seconds.
+# Special values:
+# - If the value is 0, IO will be failed immediately.
+# - If the value is less than 0, IO will remain queued until the session
+# is logged back in, or until the user runs the logout command.
+node.session.timeo.replacement_timeout = 120
+
+# To specify the time to wait for login to complete, edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.conn[0].timeo.login_timeout = 15
+
+# To specify the time to wait for logout to complete, edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.conn[0].timeo.logout_timeout = 15
+
+# Time interval to wait for on connection before sending a ping.
+# The value is in seconds and the default is 5 seconds.
+node.conn[0].timeo.noop_out_interval = 5
+
+# To specify the time to wait for a Nop-out response before failing
+# the connection, edit this line. Failing the connection will
+# cause IO to be failed back to the SCSI layer. If using dm-multipath
+# this will cause the IO to be failed to the multipath layer.
+# The value is in seconds and the default is 5 seconds.
+node.conn[0].timeo.noop_out_timeout = 5
+
+# To specify the time to wait for an abort response before
+# failing the operation and trying a logical unit reset, edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.session.err_timeo.abort_timeout = 15
+
+# To specify the time to wait for a logical unit response
+# before failing the operation and trying session re-establishment,
+# edit the line.
+# The value is in seconds and the default is 30 seconds.
+node.session.err_timeo.lu_reset_timeout = 30
+
+# To specify the time to wait for a target response
+# before failing the operation and trying session re-establishment,
+# edit the line.
+# The value is in seconds and the default is 30 seconds.
+node.session.err_timeo.tgt_reset_timeout = 30
+
+# The value is in seconds and the default is 60 seconds.
+node.session.err_timeo.host_reset_timeout = 60
+
+
+#******
+# Retry
+#******
+
+# To specify the number of times iscsid should retry a login
+# if the login attempt fails due to the node.conn[0].timeo.login_timeout
+# expiring, modify the following line. Note that if the login fails
+# quickly (before node.conn[0].timeo.login_timeout fires) because the network
+# layer or the target returns an error, iscsid may retry the login more than
+# node.session.initial_login_retry_max times.
+#
+# This retry count along with node.conn[0].timeo.login_timeout
+# determines the maximum amount of time iscsid will try to
+# establish the initial login. node.session.initial_login_retry_max is
+# multiplied by the node.conn[0].timeo.login_timeout to determine the
+# maximum amount.
+#
+# The default node.session.initial_login_retry_max is 8 and
+# node.conn[0].timeo.login_timeout is 15 so we have:
+#
+# node.conn[0].timeo.login_timeout * node.session.initial_login_retry_max = 120s
+#
+# Valid values are any integer value. This only
+# affects the initial login. Setting it to a high value can slow
+# down the iscsi service startup. Setting it to a low value can
+# cause a session to not get logged into, if there are distuptions
+# during startup or if the network is not ready at that time.
+node.session.initial_login_retry_max = 8
+
+################################
+# session and device queue depth
+################################
+
+# To control how many commands the session will queue, set
+# node.session.cmds_max to an integer between 2 and 2048 that is also
+# a power of 2. The default is 128.
+node.session.cmds_max = 128
+
+# To control the device's queue depth, set node.session.queue_depth
+# to a value between 1 and 1024. The default is 32.
+node.session.queue_depth = 32
+
+##################################
+# MISC SYSTEM PERFORMANCE SETTINGS
+##################################
+
+# For software iscsi (iscsi_tcp) and iser (ib_iser), each session
+# has a thread used to transmit or queue data to the hardware. For
+# cxgb3i, you will get a thread per host.
+#
+# Setting the thread's priority to a lower value can lead to higher throughput
+# and lower latencies. The lowest value is -20. Setting the priority to
+# a higher value, can lead to reduced IO performance, but if you are seeing
+# the iscsi or scsi threads dominate the use of the CPU then you may want
+# to set this value higher.
+#
+# Note: For cxgb3i, you must set all sessions to the same value.
+# Otherwise the behavior is not defined.
+#
+# This is done by scanning /proc/PID/stat, and this doesn't work in
+# newer kernels (6.* on), as the workqueue transmit thread can be
+# passive, and not show in in the process table when not actively
+# doing work. If the proper workqueue process is found, and the
+# priority value is non-zero, then the priority of that process will
+# be modified when a session is created.
+#
+# Note: as mentioned above, the default value is now zero, which means
+# that we don't do anything to the transmit workqueue process priority,
+# by default. If you wish to get the previous behavior, set this value
+# to -20. In the future, this functionality will be removed, once this
+# functionality is no longer needed or works.
+#
+# The default value is 0. The setting must be between -20 and 20.
+# node.session.xmit_thread_priority = 0
+
+
+#***************
+# iSCSI settings
+#***************
+
+# To enable R2T flow control (i.e., the initiator must wait for an R2T
+# command before sending any data), uncomment the following line:
+#
+#node.session.iscsi.InitialR2T = Yes
+#
+# To disable R2T flow control (i.e., the initiator has an implied
+# initial R2T of "FirstBurstLength" at offset 0), uncomment the following line:
+#
+# The defaults is No.
+node.session.iscsi.InitialR2T = No
+
+#
+# To disable immediate data (i.e., the initiator does not send
+# unsolicited data with the iSCSI command PDU), uncomment the following line:
+#
+#node.session.iscsi.ImmediateData = No
+#
+# To enable immediate data (i.e., the initiator sends unsolicited data
+# with the iSCSI command packet), uncomment the following line:
+#
+# The default is Yes.
+node.session.iscsi.ImmediateData = Yes
+
+# To specify the maximum number of unsolicited data bytes the initiator
+# can send in an iSCSI PDU to a target, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 262144.
+node.session.iscsi.FirstBurstLength = 262144
+
+# To specify the maximum SCSI payload that the initiator will negotiate
+# with the target for, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the defauls it 16776192.
+node.session.iscsi.MaxBurstLength = 16776192
+
+# To specify the maximum number of data bytes the initiator can receive
+# in an iSCSI PDU from a target, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 262144.
+node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
+
+# To specify the maximum number of data bytes the initiator will send
+# in an iSCSI PDU to the target, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1).
+# Zero is a special case. If set to zero, the initiator will use
+# the target's MaxRecvDataSegmentLength for the MaxXmitDataSegmentLength.
+# The default is 0.
+node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
+
+# To specify the maximum number of data bytes the initiator can receive
+# in an iSCSI PDU from a target during a discovery session, edit the
+# following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 32768.
+discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
+
+# To allow the targets to control the setting of the digest checking,
+# with the initiator requesting a preference of enabling the checking,
+# uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = CRC32C,None
+#node.conn[0].iscsi.DataDigest = CRC32C,None
+#
+# To allow the targets to control the setting of the digest checking,
+# with the initiator requesting a preference of disabling the checking,
+# uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = None,CRC32C
+#node.conn[0].iscsi.DataDigest = None,CRC32C
+#
+# To enable CRC32C digest checking for the header and/or data part of
+# iSCSI PDUs, uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = CRC32C
+#node.conn[0].iscsi.DataDigest = CRC32C
+#
+# To disable digest checking for the header and/or data part of
+# iSCSI PDUs, uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = None
+#node.conn[0].iscsi.DataDigest = None
+#
+# The default is to never use DataDigests or HeaderDigests.
+#
+
+# For multipath configurations, you may want more than one session to be
+# created on each iface record. If node.session.nr_sessions is greater
+# than 1, performing a 'login' for that node will ensure that the
+# appropriate number of sessions is created.
+node.session.nr_sessions = 1
+
+# When iscsid starts up, it recovers existing sessions (if possible).
+# If the target for a session has gone away when this occurs, the
+# iscsid daemon normally tries to reestablish each session,
+# in succession, in the background, by trying again every two
+# seconds until all sessions are restored. This configuration
+# variable can limits the number of retries for each session.
+# For example, setting reopen_max=150 would mean that each session
+# recovery was limited to about five minutes.
+node.session.reopen_max = 0
+
+#************
+# Workarounds
+#************
+
+# Some targets like IET prefer that an initiator does not respond to PDUs like
+# R2Ts after it has sent a task management function like an ABORT TASK or a
+# LOGICAL UNIT RESET. To adopt this behavior, uncomment the following line.
+# The default is Yes.
+node.session.iscsi.FastAbort = Yes
+
+# Some targets like Equalogic prefer that an initiator continue to respond to
+# R2Ts after it has sent a task management function like an ABORT TASK or a
+# LOGICAL UNIT RESET. To adopt this behavior, uncomment the following line.
+# node.session.iscsi.FastAbort = No
+
+# To prevent doing automatic scans that would add unwanted luns to the system,
+# we can disable them and have sessions only do manually requested scans.
+# Automatic scans are performed on startup, on login, and on AEN/AER reception
+# on devices supporting it. For HW drivers, all sessions will use the value
+# defined in the configuration file. This configuration option is independent
+# of the scsi_mod.scan parameter. The default is auto.
+node.session.scan = auto
diff --git a/etc/issue b/etc/issue
new file mode 100644
index 0000000000..a9eabb2211
--- /dev/null
+++ b/etc/issue
@@ -0,0 +1,2 @@
+Ubuntu 24.04.3 LTS \n \l
+
diff --git a/etc/issue.net b/etc/issue.net
new file mode 100644
index 0000000000..3902cae353
--- /dev/null
+++ b/etc/issue.net
@@ -0,0 +1 @@
+Ubuntu 24.04.3 LTS
diff --git a/etc/kernel/postinst.d/initramfs-tools b/etc/kernel/postinst.d/initramfs-tools
new file mode 100755
index 0000000000..6b6fef39bc
--- /dev/null
+++ b/etc/kernel/postinst.d/initramfs-tools
@@ -0,0 +1,36 @@
+#!/bin/sh -e
+
+version="$1"
+bootopt=""
+
+command -v update-initramfs >/dev/null 2>&1 || exit 0
+
+# passing the kernel version is required
+if [ -z "${version}" ]; then
+ echo >&2 "W: initramfs-tools: ${DPKG_MAINTSCRIPT_PACKAGE:-kernel package} did not pass a version number"
+ exit 2
+fi
+
+# exit if kernel does not need an initramfs
+if [ "$INITRD" = 'No' ]; then
+ exit 0
+fi
+
+# absolute file name of kernel image may be passed as a second argument;
+# create the initrd in the same directory
+if [ -n "$2" ]; then
+ bootdir=$(dirname "$2")
+ bootopt="-b ${bootdir}"
+fi
+
+# avoid running multiple times
+if [ -n "$DEB_MAINT_PARAMS" ]; then
+ eval set -- "$DEB_MAINT_PARAMS"
+ if [ -z "$1" ] || [ "$1" != "configure" ]; then
+ exit 0
+ fi
+fi
+
+# we're good - create initramfs. update runs do_bootloader
+# shellcheck disable=SC2086
+update-initramfs -c -k "${version}" ${bootopt} >&2
diff --git a/etc/kernel/postinst.d/unattended-upgrades b/etc/kernel/postinst.d/unattended-upgrades
new file mode 100755
index 0000000000..dafc491349
--- /dev/null
+++ b/etc/kernel/postinst.d/unattended-upgrades
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+case "$DPKG_MAINTSCRIPT_PACKAGE::$DPKG_MAINTSCRIPT_NAME" in
+ linux-image-extra*::postrm)
+ exit 0;;
+esac
+
+KERNEL_UPGRADED=0
+# Prefer showing the canonical-livepatch reboot message if one is required
+if [ -f "/snap/bin/canonical-livepatch" ]; then
+ # k-u-r returns 1 if livepatch isn't enabled or if a reboot isn't required
+ kur_rc=$(/snap/bin/canonical-livepatch kernel-upgrade-required 2> /dev/null)
+ if [ $? -eq 0 ]; then
+ exit 0;
+ elif [ $? -eq 1 ]; then
+ # status returns 1 if livepatch isn't enabled
+ status_rc=$(/snap/bin/canonical-livepatch status 2> /dev/null)
+ if [ $? -eq 0 ]; then
+ KERNEL_UPGRADED=1
+ fi
+ fi
+fi
+
+# while a reboot isn't required for the new kernel it might be for another package
+if [ $KERNEL_UPGRADED -eq 1 ]; then
+ if [ "$(echo $DPKG_MAINTSCRIPT_PACKAGE | cut -c1-5)" = "linux" ]; then
+ exit 0;
+ fi
+fi
+
+if [ -d /var/run ]; then
+ touch /var/run/reboot-required
+ if ! grep -q "^$DPKG_MAINTSCRIPT_PACKAGE$" /var/run/reboot-required.pkgs 2> /dev/null ; then
+ echo "$DPKG_MAINTSCRIPT_PACKAGE" >> /var/run/reboot-required.pkgs
+ fi
+fi
diff --git a/etc/kernel/postinst.d/update-notifier b/etc/kernel/postinst.d/update-notifier
new file mode 120000
index 0000000000..e34356ca9e
--- /dev/null
+++ b/etc/kernel/postinst.d/update-notifier
@@ -0,0 +1 @@
+/usr/share/update-notifier/notify-reboot-required
\ No newline at end of file
diff --git a/etc/kernel/postinst.d/xx-update-initrd-links b/etc/kernel/postinst.d/xx-update-initrd-links
new file mode 100755
index 0000000000..51f2a391c1
--- /dev/null
+++ b/etc/kernel/postinst.d/xx-update-initrd-links
@@ -0,0 +1,24 @@
+#!/bin/sh
+set -e
+
+# installkernel script calls postinst.d without any DEB_MAINT_PARAMS set
+# linux-image-* postinst calls postinst.d with DEB_MAINT_PARAMS set
+# do nothing in case linux-image-* calls this, as it already calls `linux-update-symlinks`
+[ -z "$DEB_MAINT_PARAMS" ] || exit 0
+
+# installkernel must call postinst.d with two args, version & image_path
+version="$1"
+image_path="$2"
+
+[ -n "$version" ] || exit 0
+[ -n "$image_path" ] || exit 0
+
+# call linux-update-symlinks in install mode, which will correctly
+# update vmlinuz & initrd.img symlinks. Even if initrd.img does not
+# exist yet, or has already been created by the initramfs-update
+# postinst.d hook. It will also honor kernel_img.conf settings to
+# link_in_boot yes/no. Thus matching behaviour of linux-image-*
+# postinst call to linux-update-symlinks.
+linux-update-symlinks install $version $image_path
+
+exit 0
diff --git a/etc/kernel/postinst.d/zz-shim b/etc/kernel/postinst.d/zz-shim
new file mode 100755
index 0000000000..4a02c2ebbd
--- /dev/null
+++ b/etc/kernel/postinst.d/zz-shim
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+efi_archs="x64 aa64"
+
+# Try to update shim alternative if pointing to previous shim
+for efi_arch in ${efi_archs}; do
+ test -e /usr/lib/shim/shim${efi_arch}.efi.signed.latest || continue
+ if update-alternatives --query shim${efi_arch}.efi.signed | grep "Best: /usr/lib/shim/shim${efi_arch}.efi.signed.previous" -q; then
+ dpkg-trigger shim-kernel-check
+ fi
+done
diff --git a/etc/kernel/postinst.d/zz-update-grub b/etc/kernel/postinst.d/zz-update-grub
new file mode 100755
index 0000000000..952105769c
--- /dev/null
+++ b/etc/kernel/postinst.d/zz-update-grub
@@ -0,0 +1,26 @@
+#! /bin/sh
+set -e
+
+command -v update-grub >/dev/null || exit 0
+
+if type systemd-detect-virt >/dev/null 2>&1 &&
+ systemd-detect-virt --quiet --container; then
+ exit 0
+fi
+
+set -- $DEB_MAINT_PARAMS
+mode="${1#\'}"
+mode="${mode%\'}"
+case $0:$mode in
+ # Only run on postinst configure and postrm remove, to avoid wasting
+ # time by calling update-grub multiple times on upgrade and removal.
+ # Also run if we have no DEB_MAINT_PARAMS, in order to work with old
+ # kernel packages.
+ */postinst.d/*:|*/postinst.d/*:configure|*/postrm.d/*:|*/postrm.d/*:remove)
+ if [ -e /boot/grub/grub.cfg ]; then
+ exec update-grub
+ fi
+ ;;
+esac
+
+exit 0
diff --git a/etc/kernel/postrm.d/initramfs-tools b/etc/kernel/postrm.d/initramfs-tools
new file mode 100755
index 0000000000..c340beb1e2
--- /dev/null
+++ b/etc/kernel/postrm.d/initramfs-tools
@@ -0,0 +1,36 @@
+#!/bin/sh -e
+
+version="$1"
+bootopt=""
+
+[ -x /usr/sbin/update-initramfs ] || exit 0
+
+# passing the kernel version is required
+if [ -z "${version}" ]; then
+ echo >&2 "W: initramfs-tools: ${DPKG_MAINTSCRIPT_PACKAGE:-kernel package} did not pass a version number"
+ exit 0
+fi
+
+# exit if custom kernel does not need an initramfs
+if [ "$INITRD" = 'No' ]; then
+ exit 0
+fi
+
+# absolute file name of kernel image may be passed as a second argument;
+# create the initrd in the same directory
+if [ -n "$2" ]; then
+ bootdir=$(dirname "$2")
+ bootopt="-b ${bootdir}"
+fi
+
+# avoid running multiple times
+if [ -n "$DEB_MAINT_PARAMS" ]; then
+ eval set -- "$DEB_MAINT_PARAMS"
+ if [ -z "$1" ] || [ "$1" != "remove" ]; then
+ exit 0
+ fi
+fi
+
+# delete initramfs
+# shellcheck disable=SC2086
+update-initramfs -d -k "${version}" ${bootopt} >&2
diff --git a/etc/kernel/postrm.d/zz-update-grub b/etc/kernel/postrm.d/zz-update-grub
new file mode 100755
index 0000000000..952105769c
--- /dev/null
+++ b/etc/kernel/postrm.d/zz-update-grub
@@ -0,0 +1,26 @@
+#! /bin/sh
+set -e
+
+command -v update-grub >/dev/null || exit 0
+
+if type systemd-detect-virt >/dev/null 2>&1 &&
+ systemd-detect-virt --quiet --container; then
+ exit 0
+fi
+
+set -- $DEB_MAINT_PARAMS
+mode="${1#\'}"
+mode="${mode%\'}"
+case $0:$mode in
+ # Only run on postinst configure and postrm remove, to avoid wasting
+ # time by calling update-grub multiple times on upgrade and removal.
+ # Also run if we have no DEB_MAINT_PARAMS, in order to work with old
+ # kernel packages.
+ */postinst.d/*:|*/postinst.d/*:configure|*/postrm.d/*:|*/postrm.d/*:remove)
+ if [ -e /boot/grub/grub.cfg ]; then
+ exec update-grub
+ fi
+ ;;
+esac
+
+exit 0
diff --git a/etc/ld.so.cache b/etc/ld.so.cache
new file mode 100644
index 0000000000..7bf8dc1e8d
Binary files /dev/null and b/etc/ld.so.cache differ
diff --git a/etc/ld.so.conf b/etc/ld.so.conf
new file mode 100644
index 0000000000..20c9763080
--- /dev/null
+++ b/etc/ld.so.conf
@@ -0,0 +1,2 @@
+include /etc/ld.so.conf.d/*.conf
+
diff --git a/etc/ld.so.conf.d/libc.conf b/etc/ld.so.conf.d/libc.conf
new file mode 100644
index 0000000000..463b8bb750
--- /dev/null
+++ b/etc/ld.so.conf.d/libc.conf
@@ -0,0 +1,2 @@
+# libc default configuration
+/usr/local/lib
diff --git a/etc/ld.so.conf.d/x86_64-linux-gnu.conf b/etc/ld.so.conf.d/x86_64-linux-gnu.conf
new file mode 100644
index 0000000000..cd691abf25
--- /dev/null
+++ b/etc/ld.so.conf.d/x86_64-linux-gnu.conf
@@ -0,0 +1,4 @@
+# Multiarch support
+/usr/local/lib/x86_64-linux-gnu
+/lib/x86_64-linux-gnu
+/usr/lib/x86_64-linux-gnu
diff --git a/etc/ld.so.conf.d/zz_i386-biarch-compat.conf b/etc/ld.so.conf.d/zz_i386-biarch-compat.conf
new file mode 100644
index 0000000000..447564e2b8
--- /dev/null
+++ b/etc/ld.so.conf.d/zz_i386-biarch-compat.conf
@@ -0,0 +1,3 @@
+# Legacy biarch compatibility support
+/lib32
+/usr/lib32
diff --git a/etc/ldap/ldap.conf b/etc/ldap/ldap.conf
new file mode 100644
index 0000000000..635114a624
--- /dev/null
+++ b/etc/ldap/ldap.conf
@@ -0,0 +1,17 @@
+#
+# LDAP Defaults
+#
+
+# See ldap.conf(5) for details
+# This file should be world readable but not world writable.
+
+#BASE dc=example,dc=com
+#URI ldap://ldap.example.com ldap://ldap-provider.example.com:666
+
+#SIZELIMIT 12
+#TIMELIMIT 15
+#DEREF never
+
+# TLS certificates (needed for GnuTLS)
+TLS_CACERT /etc/ssl/certs/ca-certificates.crt
+
diff --git a/etc/legal b/etc/legal
new file mode 100644
index 0000000000..cf276aa462
--- /dev/null
+++ b/etc/legal
@@ -0,0 +1,8 @@
+
+The programs included with the Ubuntu system are free software;
+the exact distribution terms for each program are described in the
+individual files in /usr/share/doc/*/copyright.
+
+Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
+applicable law.
+
diff --git a/etc/libaudit.conf b/etc/libaudit.conf
new file mode 100644
index 0000000000..90855d72b7
--- /dev/null
+++ b/etc/libaudit.conf
@@ -0,0 +1,7 @@
+# This is the configuration file for libaudit tunables.
+# It is currently only used for the failure_action tunable.
+
+# failure_action can be: log, ignore, terminate
+failure_action = ignore
+
+
diff --git a/etc/libblockdev/3/conf.d/00-default.cfg b/etc/libblockdev/3/conf.d/00-default.cfg
new file mode 100644
index 0000000000..95f8d7e0b4
--- /dev/null
+++ b/etc/libblockdev/3/conf.d/00-default.cfg
@@ -0,0 +1,52 @@
+# This is the default configuration for the libblockdev library. For
+# each supported technology/plugin there is a separate section/group
+# with the 'sonames' key. The value of the key has to be a list of
+# sonames of shared objects that should be attempted to be loaded for
+# the plugin falling back to the next one in the list.
+#
+# So this example:
+# [lvm]
+# sonames=libbd_lvm-dbus.so.0;libbd_lvm.so.0
+#
+# would result in the libbd_lvm-dbus.so.0 shared object attempted to
+# be loaded and if that failed, the libbd_lvm.so.0 would be attempted
+# to be loaded.
+
+[btrfs]
+sonames=libbd_btrfs.so.3
+
+[crypto]
+sonames=libbd_crypto.so.3
+
+[dm]
+sonames=libbd_dm.so.3
+
+[fs]
+sonames=libbd_fs.so.3
+
+[loop]
+sonames=libbd_loop.so.3
+
+[lvm]
+sonames=libbd_lvm.so.3
+
+[mdraid]
+sonames=libbd_mdraid.so.3
+
+[mpath]
+sonames=libbd_mpath.so.3
+
+[nvdimm]
+sonames=libbd_nvdimm.so.3
+
+[nvme]
+sonames=libbd_nvme.so.3
+
+[part]
+sonames=libbd_part.so.3
+
+[swap]
+sonames=libbd_swap.so.3
+
+[s390]
+sonames=libbd_s390.so.3
diff --git a/etc/libccid_Info.plist b/etc/libccid_Info.plist
new file mode 100644
index 0000000000..7083eb532b
--- /dev/null
+++ b/etc/libccid_Info.plist
@@ -0,0 +1,1898 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ libccid.so
+ CFBundleIdentifier
+ fr.apdu.ccid.smartcardccid
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ CCIDCLASSDRIVER
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.5.5
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 0.0.1d1
+ ifdCapabilities
+ 0x00000000
+
+
+
+ ifdProtocolSupport
+ 0x00000001
+ ifdVersionNumber
+ 0x00000001
+
+ ifdLogLevel
+ 0x0003
+
+
+
+ ifdDriverOptions
+ 0x0000
+
+
+
+ ifdManufacturerString
+ Ludovic Rousseau (ludovic.rousseau@free.fr)
+
+ ifdProductString
+ Generic CCID driver
+
+ ifdVendorID
+
+ 0x072F
+ 0x09C3
+ 0x09C3
+ 0x058F
+ 0x0DC3
+ 0x0DC3
+ 0x1B0E
+ 0x0783
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x0982
+ 0x413C
+ 0x413C
+ 0x073D
+ 0x073D
+ 0x073D
+ 0x073D
+ 0x073D
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x1059
+ 0x1059
+ 0x0B81
+ 0x0F14
+ 0x0F14
+ 0x0D46
+ 0x0D46
+ 0x0D46
+ 0x0D46
+ 0x17EF
+ 0x09BE
+ 0x076B
+ 0x076B
+ 0x03F0
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0xA625
+ 0x08E6
+ 0x08E6
+ 0x0F14
+ 0x0F14
+ 0x0F14
+ 0x0DB5
+ 0x0DB5
+ 0x0DB5
+ 0x0DB5
+ 0x0DB5
+ 0x0DB5
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x072F
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x2021
+ 0x2021
+ 0x2021
+ 0x0A89
+ 0x0A89
+ 0x0A89
+ 0x0A89
+ 0x0A89
+ 0x0A89
+ 0x0A89
+ 0x0A89
+ 0x24DC
+ 0x24DC
+ 0x24DC
+ 0x24DC
+ 0x24DC
+ 0x24DC
+ 0x24DC
+ 0x24DC
+ 0x2CE3
+ 0x2CE3
+ 0x2CE3
+ 0x058F
+ 0x2A0C
+ 0x0483
+ 0x2406
+ 0x2406
+ 0x2406
+ 0x33B6
+ 0x1FD3
+ 0x0DC3
+ 0x0DC3
+ 0x0DC3
+ 0x03EB
+ 0x03EB
+ 0x03EB
+ 0x03EB
+ 0x03EB
+ 0x03EB
+ 0x03EB
+ 0xC1A6
+ 0x15CF
+ 0x15CF
+ 0x15CF
+ 0x04E6
+ 0x23A0
+ 0x23A0
+ 0x23A0
+ 0x23A0
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x25DD
+ 0x2ABE
+ 0x1B0E
+ 0x1B0E
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0783
+ 0x0783
+ 0x0783
+ 0x0783
+ 0x20A0
+ 0x0CA6
+ 0x8829
+ 0x2DFF
+ 0x2DFF
+ 0x19E7
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x046A
+ 0x04F2
+ 0x03F0
+ 0x03F0
+ 0x04F2
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x31AA
+ 0x1FC9
+ 0x0982
+ 0x0982
+ 0x23D8
+ 0x257B
+ 0x1AC2
+ 0x1AC2
+ 0x0483
+ 0x0483
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1DB2
+ 0x1DB2
+ 0x1DB2
+ 0x257B
+ 0x09D8
+ 0x09D8
+ 0x1FFA
+ 0x2CE4
+ 0x2CE4
+ 0x2CE4
+ 0x1EA8
+ 0x1209
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x2925
+ 0x234B
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x096E
+ 0x0BF8
+ 0x0BF8
+ 0x0BF8
+ 0x0BF8
+ 0x0BF8
+ 0x0BF8
+ 0x0BF8
+ 0x0898
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x0BDA
+ 0x048D
+ 0x058C
+ 0x076B
+ 0x05E3
+ 0x05E3
+ 0x05E3
+ 0x20A0
+ 0xAE68
+ 0x1059
+ 0x1059
+ 0x0F1A
+ 0x19C8
+ 0x32A3
+ 0x1677
+ 0x03F0
+ 0x03F0
+ 0x03F0
+ 0x09C3
+ 0x09C3
+ 0x09C3
+ 0x09C3
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x04A4
+ 0x04A4
+ 0x0B81
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x1FFA
+ 0x2406
+ 0x03EB
+ 0x03EB
+ 0x0C27
+ 0x2FD2
+ 0x2FB0
+ 0x2022
+ 0x1FC9
+ 0x1403
+ 0x1403
+ 0x1403
+ 0x2406
+ 0x2406
+ 0x2406
+ 0x2406
+ 0x2406
+ 0x2406
+ 0x2406
+ 0x2406
+ 0x076B
+ 0x04D8
+ 0x2A18
+ 0x2A18
+ 0x2A18
+ 0x2947
+ 0x2947
+ 0x2947
+ 0x2947
+ 0x2947
+ 0x2947
+ 0x2947
+ 0x2947
+ 0x2947
+ 0x28B9
+ 0x2F76
+ 0x0483
+ 0x0D46
+ 0x0D46
+ 0x0D46
+ 0x0D46
+ 0x0D46
+ 0x0D46
+ 0x0D46
+ 0x2D25
+ 0x2D25
+ 0x0925
+ 0x2C97
+ 0x2C97
+ 0x2C97
+ 0x2C97
+ 0x2C97
+ 0x2C97
+ 0x17EF
+ 0x17EF
+ 0x17EF
+ 0x03F0
+ 0x03F0
+ 0x03F0
+ 0x08AE
+ 0x1403
+ 0x0424
+ 0x0424
+ 0x0416
+ 0x0416
+ 0x079B
+ 0x079B
+ 0x0BDA
+ 0x4D55
+ 0x1E0D
+ 0x1E0D
+ 0x1E0D
+ 0x1E0D
+ 0x20A0
+ 0x20A0
+ 0x20A0
+ 0x20A0
+ 0x20A0
+ 0x04E6
+ 0x1FC9
+ 0x1FC9
+ 0x1FC9
+ 0x1A74
+ 0x1A74
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x076B
+ 0x04DA
+ 0x0471
+ 0x04B9
+ 0x096E
+ 0x21AB
+ 0x316D
+ 0x14DD
+ 0x1C6A
+ 0x0C4B
+ 0x0C4B
+ 0x0C4B
+ 0x0C4B
+ 0x0C4B
+ 0x0C27
+ 0x14CD
+ 0x13FE
+ 0x0529
+ 0x0529
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x08E6
+ 0x24A2
+ 0x2EE1
+ 0x0973
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x04E6
+ 0x0B81
+ 0x0403
+ 0x356F
+ 0x356F
+ 0x1677
+ 0x0DF6
+ 0x04E8
+ 0x1209
+ 0x054C
+ 0x054C
+ 0x054C
+ 0x316E
+ 0x316E
+ 0x316E
+ 0x316E
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x1C34
+ 0x08DF
+ 0x08DF
+ 0x08DF
+ 0x08DF
+ 0x08DF
+ 0x05AF
+ 0x1370
+ 0x1206
+ 0x1206
+ 0x0E6A
+ 0x1D50
+ 0x1862
+ 0x08E6
+ 0x17B9
+ 0x1976
+ 0xA625
+ 0x0B0C
+ 0x0B0C
+ 0x349E
+ 0x349E
+ 0x23EB
+ 0x19A6
+ 0x2A17
+ 0x2DFF
+ 0x2DFF
+ 0x1CF0
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x1A44
+ 0x0E0F
+ 0x163C
+ 0x163C
+ 0x163C
+ 0x163C
+ 0x163C
+ 0x34EB
+ 0x0416
+ 0x1050
+ 0x1050
+ 0x1050
+ 0x1050
+ 0x1050
+ 0x1050
+ 0x1050
+ 0x1050
+ 0x072F
+ 0x09C3
+ 0x058F
+ 0x0DC3
+ 0x03EB
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0A5C
+ 0x0783
+ 0x096E
+ 0x0BDA
+ 0x03F0
+ 0x03F0
+ 0x04CC
+ 0x0D46
+ 0x0D46
+ 0x0B97
+ 0x0B97
+ 0x08C3
+ 0x08C3
+ 0x15E1
+ 0x062D
+
+
+ ifdProductID
+
+ 0x90CC
+ 0x0013
+ 0x0014
+ 0x9520
+ 0x1004
+ 0x1102
+ 0x1078
+ 0x0006
+ 0x0005
+ 0x0010
+ 0x002D
+ 0x003E
+ 0x01A2
+ 0x0007
+ 0x2100
+ 0x2101
+ 0x0007
+ 0x0008
+ 0x0B00
+ 0x0C00
+ 0x0C01
+ 0x1227
+ 0x3437
+ 0x3438
+ 0x3478
+ 0x3480
+ 0x34C0
+ 0x34C3
+ 0x4433
+ 0x5503
+ 0x5504
+ 0x8000
+ 0x8141
+ 0x0017
+ 0x0019
+ 0x0200
+ 0x003B
+ 0x003D
+ 0x3001
+ 0x3002
+ 0x3003
+ 0x3010
+ 0x1003
+ 0x0002
+ 0x3021
+ 0xA022
+ 0x0824
+ 0x5111
+ 0x5116
+ 0x511D
+ 0x5410
+ 0xE001
+ 0xE003
+ 0x0801
+ 0x1359
+ 0xACE0
+ 0x0011
+ 0x0037
+ 0x0038
+ 0x0138
+ 0x0160
+ 0x0164
+ 0x0170
+ 0x0180
+ 0x0184
+ 0x1204
+ 0x221A
+ 0x2224
+ 0x223B
+ 0x223E
+ 0x223F
+ 0x2259
+ 0x226B
+ 0x2301
+ 0x2303
+ 0x2308
+ 0x8201
+ 0x8202
+ 0x8300
+ 0x90DB
+ 0xB000
+ 0xB100
+ 0xB106
+ 0xB112
+ 0xB501
+ 0xB506
+ 0xAFC0
+ 0xAFC1
+ 0xAFC2
+ 0xAFC3
+ 0x0001
+ 0x0011
+ 0x0101
+ 0x0025
+ 0x0030
+ 0x0069
+ 0x006A
+ 0x0080
+ 0x0081
+ 0x0082
+ 0x0060
+ 0x0101
+ 0x0102
+ 0x0201
+ 0x0401
+ 0x0402
+ 0x0428
+ 0x0501
+ 0x100F
+ 0x9563
+ 0x9567
+ 0x9573
+ 0x9522
+ 0x0021
+ 0xACD1
+ 0x5003
+ 0x5004
+ 0x5006
+ 0x0001
+ 0xCC1D
+ 0x0900
+ 0x1007
+ 0x1008
+ 0x6004
+ 0x6009
+ 0x600B
+ 0x6010
+ 0x6011
+ 0x6012
+ 0x6014
+ 0x0131
+ 0x0019
+ 0x001D
+ 0x0020
+ 0x511C
+ 0x0001
+ 0x0002
+ 0x0003
+ 0x0008
+ 0x1101
+ 0x1201
+ 0x2221
+ 0x2321
+ 0x2341
+ 0x2351
+ 0x2354
+ 0x2361
+ 0x2362
+ 0x2371
+ 0x3211
+ 0xB001
+ 0x3111
+ 0x3403
+ 0x3503
+ 0x1003
+ 0x1079
+ 0x5A02
+ 0x5802
+ 0x5804
+ 0x5832
+ 0x5833
+ 0x5834
+ 0x5842
+ 0x5843
+ 0x5864
+ 0x5865
+ 0x0007
+ 0x0009
+ 0x0010
+ 0x0036
+ 0x42D4
+ 0x00A0
+ 0xCCB2
+ 0xB601
+ 0xB602
+ 0x0002
+ 0x0090
+ 0x0092
+ 0x00A1
+ 0x00A2
+ 0x00A3
+ 0x00A4
+ 0x00A5
+ 0x00A7
+ 0x005B
+ 0x0070
+ 0x0072
+ 0x0967
+ 0x114A
+ 0x124A
+ 0x1469
+ 0x0224
+ 0x0324
+ 0x1000
+ 0x1100
+ 0x2000
+ 0x2001
+ 0x2100
+ 0x3000
+ 0x3001
+ 0x3002
+ 0x3003
+ 0x3100
+ 0x4000
+ 0x4001
+ 0x5000
+ 0x6000
+ 0x6001
+ 0x7001
+ 0x7003
+ 0x7004
+ 0x7005
+ 0x7006
+ 0x0905
+ 0x0008
+ 0x0040
+ 0x0603
+ 0xC305
+ 0x0300
+ 0x0302
+ 0xA389
+ 0xA40B
+ 0xAFD0
+ 0xAFD1
+ 0xAFD2
+ 0xAFD3
+ 0x0801
+ 0x080C
+ 0x088B
+ 0xD205
+ 0x0427
+ 0x0428
+ 0x0002
+ 0x5001
+ 0x5020
+ 0x7479
+ 0x8013
+ 0x2702
+ 0x0608
+ 0x060D
+ 0x0621
+ 0x0622
+ 0x0623
+ 0x0624
+ 0x062E
+ 0x0685
+ 0x0807
+ 0x080F
+ 0x0619
+ 0x061A
+ 0x061C
+ 0x0505
+ 0x700A
+ 0x0000
+ 0x080A
+ 0x0853
+ 0x0855
+ 0x0856
+ 0x0859
+ 0x0867
+ 0x0868
+ 0x0869
+ 0x086C
+ 0x1022
+ 0x1023
+ 0x1024
+ 0x1005
+ 0x1006
+ 0x1017
+ 0x1021
+ 0x0101
+ 0x2202
+ 0x34C1
+ 0x34C2
+ 0x34C5
+ 0x34EC
+ 0x4042
+ 0x5743
+ 0x8108
+ 0x3440
+ 0x3479
+ 0x0169
+ 0x1366
+ 0x9590
+ 0x3A21
+ 0x0757
+ 0x0758
+ 0x0771
+ 0x4107
+ 0x8001
+ 0x000C
+ 0x000D
+ 0x0002
+ 0x0012
+ 0x3201
+ 0x0025
+ 0x104A
+ 0x2924
+ 0x581D
+ 0x0028
+ 0x0029
+ 0x002B
+ 0x002D
+ 0x3031
+ 0x5022
+ 0x5023
+ 0x5400
+ 0x5412
+ 0x5422
+ 0x5432
+ 0x5A27
+ 0x6632
+ 0x502A
+ 0x5127
+ 0x5326
+ 0x5427
+ 0x00C7
+ 0x00D4
+ 0x0220
+ 0x5612
+ 0x5613
+ 0x5713
+ 0x5724
+ 0x5725
+ 0x5790
+ 0x5791
+ 0x5811
+ 0x5812
+ 0x5814
+ 0x5815
+ 0x5816
+ 0x5818
+ 0x5819
+ 0x581A
+ 0x581B
+ 0x581C
+ 0x581D
+ 0x5826
+ 0x5710
+ 0x5720
+ 0x5721
+ 0x5723
+ 0x5810
+ 0x5817
+ 0x000C
+ 0x6200
+ 0x9308
+ 0x9324
+ 0xCCDB
+ 0x0100
+ 0x003A
+ 0x016C
+ 0x0102
+ 0x7506
+ 0x750C
+ 0x750D
+ 0x6300
+ 0x6301
+ 0x6302
+ 0x6403
+ 0x6404
+ 0x6407
+ 0x6303
+ 0x6305
+ 0x3B01
+ 0xEB61
+ 0x5000
+ 0x5001
+ 0x5002
+ 0x0101
+ 0x0102
+ 0x0103
+ 0x0104
+ 0x0105
+ 0x0112
+ 0x0111
+ 0x0113
+ 0x0114
+ 0x0002
+ 0x0906
+ 0x0007
+ 0x3014
+ 0x301D
+ 0x4189
+ 0x41A9
+ 0x4289
+ 0x4389
+ 0x43A9
+ 0x0000
+ 0x0001
+ 0x900A
+ 0x0001
+ 0x0004
+ 0x0005
+ 0x1009
+ 0x4009
+ 0x5009
+ 0x6007
+ 0x6055
+ 0x6111
+ 0x164A
+ 0x174A
+ 0x184A
+ 0x0BDF
+ 0x7502
+ 0x1104
+ 0x1202
+ 0xC136
+ 0xC137
+ 0x0026
+ 0x0052
+ 0x0161
+ 0x0010
+ 0x0013
+ 0x0033
+ 0x1023
+ 0x8033
+ 0x4108
+ 0x4109
+ 0x4211
+ 0x4230
+ 0x42B2
+ 0x511A
+ 0x0107
+ 0x010B
+ 0x0117
+ 0xB111
+ 0x6354
+ 0x1021
+ 0x4321
+ 0x5321
+ 0x5421
+ 0x6321
+ 0x3022
+ 0x3621
+ 0x3821
+ 0x5121
+ 0x5125
+ 0x6622
+ 0x6623
+ 0xA021
+ 0x117A
+ 0x040F
+ 0x1400
+ 0x0603
+ 0x0010
+ 0x4C4B
+ 0x1006
+ 0x7050
+ 0x0504
+ 0x0520
+ 0x0551
+ 0x0580
+ 0x9102
+ 0xCCDA
+ 0x8166
+ 0xC831
+ 0x0602
+ 0x0620
+ 0x34CC
+ 0x34CE
+ 0x34CF
+ 0x34D2
+ 0x0102
+ 0x0001
+ 0x0003
+ 0x5113
+ 0x5115
+ 0x5117
+ 0x5119
+ 0x511F
+ 0x5120
+ 0x5121
+ 0x512B
+ 0x512C
+ 0x5291
+ 0x5293
+ 0x8007
+ 0xC587
+ 0x22FC
+ 0x23FE
+ 0x0341
+ 0x800A
+ 0x0007
+ 0xBEEE
+ 0x0D8F
+ 0x0DC8
+ 0x0DC9
+ 0x0001
+ 0x0002
+ 0x0003
+ 0x0010
+ 0x6012
+ 0x601A
+ 0x6112
+ 0x611A
+ 0x6122
+ 0x612A
+ 0x6132
+ 0x613A
+ 0x6212
+ 0x621A
+ 0x7113
+ 0x7121
+ 0x7123
+ 0x7124
+ 0x7136
+ 0x7138
+ 0x7141
+ 0x8141
+ 0x91B1
+ 0xA1A1
+ 0x0004
+ 0x3115
+ 0x3117
+ 0x3201
+ 0x3203
+ 0x605A
+ 0x0901
+ 0x2105
+ 0x2107
+ 0x5083
+ 0x6141
+ 0x0000
+ 0x34C7
+ 0x400B
+ 0x0001
+ 0x0810
+ 0x0050
+ 0x0052
+ 0x0300
+ 0x0430
+ 0x0003
+ 0x0009
+ 0x0001
+ 0x1540
+ 0x1543
+ 0x0001
+ 0x0001
+ 0x0101
+ 0x0112
+ 0x0115
+ 0x0117
+ 0x0119
+ 0x0120
+ 0x0122
+ 0x0855
+ 0x0865
+ 0x0870
+ 0x0875
+ 0x0920
+ 0x0004
+ 0x0406
+ 0x0407
+ 0x0417
+ 0x0418
+ 0x0A03
+ 0x1506
+ 0x3815
+ 0x0111
+ 0x0112
+ 0x0115
+ 0x0116
+ 0x0404
+ 0x0405
+ 0x0406
+ 0x0407
+ 0x2200
+ 0x0008
+ 0x9540
+ 0x100F
+ 0x6016
+ 0x5800
+ 0x5801
+ 0x5805
+ 0x5844
+ 0x5845
+ 0x5866
+ 0x5867
+ 0x0003
+ 0x0503
+ 0x0165
+ 0x0036
+ 0x1024
+ 0x5072
+ 0x4000
+ 0x4001
+ 0x7762
+ 0x7772
+ 0x0401
+ 0x0402
+ 0x2007
+ 0x0001
+
+
+ ifdFriendlyName
+
+ ACS ACR 38U-CCID
+ ActivIdentity USB Reader V3
+ ActivIdentity Activkey_Sim
+ Alcor Micro AU9520
+ Athena ASE IIIe
+ Athena ASEDrive IIIe KB
+ BLUTRONICS BLUDRIVE II CCID
+ C3PO LTC31 v2
+ Cherry GmbH SmartBoard XX33
+ Cherry GmbH SmartBoard XX44
+ Cherry GmbH SmartTerminal XX44
+ Cherry GmbH SmartTerminal ST-2xxx
+ Cherry GmbH CHERRY SECURE BOARD 1.0
+ COVADIS ALYA
+ Dell keyboard SK-3106
+ Dell Dell Smart Card Reader Keyboard
+ Eutron CryptoIdentity CCID
+ Eutron CryptoIdentity CCID
+ Eutron Digipass 860
+ Eutron Card Reader
+ Eutron Smart Pocket
+ Gemalto PDT
+ Gemalto PC Twin Reader
+ Gemalto USB Shell Token V2
+ Gemalto USB GemPCPinpad SmartCard Reader
+ Gemalto GemCore SIM Pro Smart Card Reader
+ Gemalto Ezio Shield
+ Gemalto EZIO CB+
+ Gemalto Gemplus USB SmartCard Reader 433-Swap
+ Gemalto Prox Dual USB PC Link Reader
+ Gemalto Prox SU USB PC LinkReader
+ Gemalto Smart Enterprise Guardian Secure USB Device
+ Gemalto IDBridge K3000
+ Giesecke & Devrient GmbH StarSign Crypto USB Token
+ Giesecke & Devrient GmbH StarSign CUT S
+ id3 Semiconductors CL1356T
+ INGENICO Leo
+ Ingenico WITEO USB Smart Card Reader
+ KOBIL KAAN Base
+ KOBIL KAAN Advanced
+ KOBIL KAAN SIM III
+ KOBIL EMV CAP - SecOVID Reader III
+ Lenovo Integrated Smart Card Reader
+ MYSMART MySMART PAD V2.0
+ OMNIKEY AG CardMan 3121
+ Precise Biometrics Sense MC
+ SCM Microsystems Inc. HP USB Smartcard Reader
+ SCM Microsystems Inc. SCR 331-DI
+ SCM Microsystems Inc. SCR 3310
+ SCM Microsystems Inc. SCR 3311
+ SCM Microsystems Inc. SCR 355
+ SCM Microsystems Inc. SCR 331
+ SCM Microsystems Inc. SPR 532
+ TianYu CCID Key TianYu CCID SmartKey
+ Verisign Secure Storage Token
+ Verisign Secure Token
+ XIRING XI-SIGN USB V2
+ XIRING MyLeo
+ XIRING Leo v2
+ Access IS ePassport Reader
+ Access IS NFC Smart Module
+ Access IS NFC Smart Module
+ Access IS ATR210
+ Access IS ATR220
+ Access IS ATR220
+ ACS ACR101 ICC Reader
+ ACS ACR1251 Dual Reader
+ ACS ACR1281U
+ ACS ACR1252 Dual Reader
+ ACS ACR1252 Reader
+ ACS ACR1255U-J1
+ ACS ACR1252IMP Reader
+ ACS WalletMate 1S CL Reader
+ ACS ACR1581 1S Dual Reader
+ ACS ACR1552 1S CL Reader
+ ACS ACR1552 CL Reader
+ ACS APG8201 PINhandy 1
+ ACS APG8201 USB Reader
+ ACS ACR33 ICC Reader
+ ACS CryptoMate64
+ ACS ACR3901U ICC Reader
+ ACS ACR39U ICC Reader
+ ACS CryptoMate (T2)
+ ACS CryptoMate EVO
+ ACS ACR40T ICC Reader
+ ACS ACR40U ICC Reader
+ AF Care One
+ AF Care One
+ AF Care Two
+ AF Care Two
+ AK910 CKey
+ AK910 CKey
+ AK910 IDONE
+ Aktiv Rutoken lite
+ Aktiv Rutoken ECP
+ Aktiv Rutoken SCR 3001 Reader
+ Aktiv Rutoken SCR 3101 NFC Reader
+ Aktiv PINPad Ex
+ Aktiv PINPad In
+ Aktiv Rutoken PINPad 2
+ Aktiv Co., ProgramPark Rutoken Magistra
+ Aladdin R.D. JaCarta
+ Aladdin R.D. JaCarta LT
+ Aladdin R.D. JCR-770
+ Aladdin R.D. JC-WebPass (JC600)
+ Aladdin R.D. JaCarta
+ Aladdin R.D. JaCartaReader
+ Aladdin R.D. JaCarta U2F (JC602)
+ Aladdin R.D. JaCarta Flash
+ Alcor Link AK9563
+ Alcor Link AK9567
+ Alcor Link AK9572
+ Alcor Micro AU9522
+ Alpha-Project ANGARA Token
+ ANCUD CCID USB Reader & RNG
+ appidkey GmbH ID50 -USB
+ appidkey GmbH ID100L-USB-SC-Reader
+ appidkey GmbH ID60-USB
+ ArkSigner Connect2Sign
+ ASK-RFID CPL108
+ Athena IDProtect Key v2
+ Athena ASEDrive IIIe KB Bio PIV
+ Athena ASEDrive IIIe Combo Bio PIV
+ ATMEL AT91SO CCID Smart Card Reader
+ ATMEL AT98SC032CT-USB
+ ATMEL AT91SC192192CT-USB ICCD reader
+ ATMEL AT90SCR100
+ ATMEL AT90SCR050
+ ATMEL VaultIC420 Smart Object
+ ATMEL VaultIC440
+ AvestUA AvestKey
+ Avtor SecureToken
+ Avtor SC Reader 371
+ Avtor SecureToken
+ Axalto Reflex USB v3
+ BIFIT USB-Token iBank2key
+ BIFIT iBank2Key
+ BIFIT iToken
+ BIFIT ANGARA
+ Bit4id miniLector-s
+ Bit4id cryptokey
+ Bit4id iAM
+ Bit4id CKey4
+ Bit4id tokenME FIPS v3
+ Bit4id Digital DNA Key
+ Bit4id Digital-DNA Key
+ Bit4id Digital-DNA Key BT
+ Bit4id Digital-DNA Key
+ Bit4id TokenME EVO v2
+ Bit4id miniLector AIR EVO
+ Bit4id miniLector Blue
+ bit4id miniLector-EVO
+ BIT4ID miniLector AIR NFC v3
+ BIT4ID mLector AIR DI V3
+ Bluink Ltd. Bluink CCID
+ BLUTRONICS BLUDRIVE II CCID
+ BLUTRONICS TAURUS NFC
+ Broadcom Corp 5880
+ Broadcom Corp 5880
+ Broadcom Corp 5880
+ Broadcom Corp 5880
+ Broadcom Corp 5880
+ Broadcom Corp 58200
+ Broadcom Corp 58200
+ Broadcom Corp 58200
+ Broadcom Corp 58200
+ C3PO TLTC2USB
+ C3PO KBR36
+ C3PO LTC32
+ C3PO LTC36
+ Canokeys Canokey
+ CASTLES EZCCID Smart Card Reader
+ CCB eSafeLD
+ Certgate GmbH AirID 2 USB
+ Certgate GmbH ONEKEY ID 2 USB
+ charismathics plug'n'crypt CCID token
+ Cherry Smart Card Reader USB
+ Cherry TC 1300
+ Cherry KC 1000 SC
+ Cherry KC 1000 SC/DI
+ Cherry Smartcard Keyboard G87-1xx44
+ Cherry KC 1000 SC Z
+ Cherry KC 1000 SC/DI Z
+ Cherry SmartTerminal XX44
+ Cherry GmbH SmartBoard XX1X
+ Cherry GmbH SmartTerminal XX1X
+ Cherry GmbH SmartTerminal ST-1275
+ Chicony USB Smart Card Keyboard
+ Chicony HP USB Smartcard CCID Keyboard KR
+ Chicony HP USB Smartcard CCID Keyboard JP
+ Chicony HP Skylab USB Smartcard Keyboard
+ Circle Idaxis SecurePIV
+ Circle CIR315
+ Circle CIR115 ICC
+ Circle CIR125 ICC
+ Circle CIR215 PICC
+ Circle CIR215 CL
+ Circle CIR215 CL
+ Circle CIR315 Dual & 1S
+ Circle CIR315
+ Circle CIR315 CL
+ Circle CIR315 DI
+ Circle CIR315
+ Circle CIR415 CL & 1S
+ Circle CIR415 CL
+ Circle CIR515 ICC
+ Circle CIR615 CL & 1S
+ Circle CIR615 CL
+ Circle CCR7115 ICC
+ Circle CCR7315
+ Circle CIR315
+ Circle CCR7125 ICC
+ Circle CIR125-DOT ICC
+ CIRIGHT ONE PASS U2F
+ COVADIS VEGA-ALPHA
+ COVADIS Auriga
+ CREATOR CRT-603(CZ1) CCR
+ DC.Ltd DC4 5CCID READER
+ DESKO GmbH IDenty chrom
+ DESKO GmbH PENTA Scanner
+ Dexon Tecnologias Digitais LTDA DXToken
+ Dexon Tecnologias Digitais LTDA eSmartDX
+ Doctolib SR
+ Doctolib SR
+ Doctolib SR
+ Doctolib SR
+ DUALi DE-620 Combi
+ DUALi DE-ABCM6 RFRW
+ DUALi DRAGON NFC READER
+ eID_R6 001 X8
+ Elatec TWN4 SmartCard NFC
+ Elatec TWN4/B1.06/CPF3.05/S1SC1.32/P (Beta 3)
+ ELYCTIS CL reader
+ ESMART Reader ER433x ICC
+ ESMART Reader ER773x Dual & 1S
+ ESMART Token GOST
+ Excelsecu Card reader
+ F-Secure Foundry USB Armory Mk II
+ Feitian 502-CL
+ Feitian R502
+ Feitian BLE CCID Dongle
+ Feitian VR504 VHBR Contactless & Contact Card Reader
+ Feitian bR500
+ Feitian bR301
+ Feitian R701
+ Feitian R805
+ Feitian ePass2003
+ Feitian eJAVA Token
+ FEITIAN iR301
+ FEITIAN bR301
+ FEITIAN iR301
+ Feitian Technologies FT SCR310
+ Flight system consulting Incredist
+ Free Software Initiative of Japan Gnuk
+ FT ePass2003Auto
+ FT U2F CCID KB
+ FT CCID KB
+ FT U2F CCID
+ FT CCID
+ FT Biopass FIDO2
+ FT Biopass KB FIDO CCID
+ FT Biopass KB CCID
+ FT Biopass CCID
+ Fujitsu Keyboard KB100 SCR
+ Fujitsu Keyboard KB100 SCR eSIG
+ Fujitsu Smartcard Reader D323
+ Fujitsu Siemens Computers SmartCard Keyboard USB 2A
+ Fujitsu Siemens Computers SmartCard USB 2A
+ FujitsuTechnologySolutions GmbH SmartCase KB SCR eSIG
+ FujitsuTechnologySolutions GmbH Keyboard KB SCR2
+ Gemalto RF CR5400
+ Gemalto Gem e-Seal Pro USB Token
+ Gemalto Ezio Shield Secure Channel
+ Gemalto Ezio Shield
+ Gemalto Ezio Shield Branch Reader
+ Gemalto GemPC Express
+ Gemalto SA .NET Dual
+ Gemalto Hybrid Smartcard Reader
+ Gemalto Smart Enterprise Guardian Secure USB Device
+ GEMALTO CT1100
+ Gemplus GemCore POS Pro Smart Card Reader
+ Generic USB2.0-CRW
+ Generic MultiCard Device
+ Generic EMV Smartcard Reader
+ Generic USB Smart Card Reader
+ Genesys Logic CCID Card Reader
+ Genesys Logic Combo Card Reader
+ Genesys Logic CCID Card Reader
+ German Privacy Foundation Crypto Stick v1.2
+ GHI NC001
+ Giesecke & Devrient GmbH Star Sign Card Token 350 (ICCD)
+ Giesecke & Devrient GmbH Star Sign Card Token 550 (ICCD)
+ GIS Ltd SmartMouse USB
+ GoldKey Security PIV Token
+ GoTrust Idem Key
+ HDZB uKeyCI800-K18
+ Hewlett Packard HP USB Smartcard CCID Keyboard
+ Hewlett Packard MFP Smart Card Reader
+ Hewlett-Packard HP lt4112 Gobi 4G Module
+ HID Global Crescendo Key
+ HID Global Crescendo Key
+ HID Global Crescendo Key
+ HID Global Crescendo Key
+ HID Global OMNIKEY 3x21 Smart Card Reader
+ HID Global OMNIKEY 5022 Smart Card Reader
+ HID Global OMNIKEY 5023 Smart Card Reader
+ HID Global veriCLASS Reader
+ HID Global OMNIKEY 5122 Smartcard Reader
+ HID Global OMNIKEY 5422 Smartcard Reader
+ HID Global OMNIKEY 5122 Dual
+ HID Global OMNIKEY 5027CK CCID CONFIG IF
+ HID Global OMNIKEY 6121 Smart Card Reader
+ HID OMNIKEY 5025-CL
+ HID OMNIKEY 5127 CK
+ HID OMNIKEY 5326 DFR
+ HID OMNIKEY 5427 CK
+ Hitachi, Ltd. Hitachi Biometric Reader
+ Hitachi, Ltd. Hitachi Portable Biometric Reader
+ id3 Semiconductors CL1356A_HID
+ Identiv uTrust 3720 Contactless Reader
+ Identiv uTrust 3721 Contactless Reader
+ Identiv CLOUD 2980 F Smart Card Reader
+ Identiv Identiv uTrust 4701 F Dual Interface Reader
+ Identiv Identiv uTrust 4711 F CL + SAM Reader
+ Identiv uTrust 3700 F CL Reader
+ Identiv uTrust 3701 F CL Reader
+ Identiv uTrust 2900 R Smart Card Reader
+ Identiv uTrust 2910 R Smart Card Reader
+ Identiv SCR3500 A Contact Reader
+ Identiv SCR3500 B Contact Reader
+ Identiv uTrust 3512 SAM slot Token
+ Identiv @MAXX Light2 token
+ Identiv @MAXX ID-1 Smart Card Reader
+ Identiv uTrust 3522 embd SE RFID Token
+ Identiv uTrust 2910 R Taglio SC Reader
+ Identiv SCR35xx USB Smart Card Reader
+ Identiv SCR3500 C Contact Reader
+ Identiv uTrust Token Flex
+ Identive CLOUD 2700 F Smart Card Reader
+ Identive Identive CLOUD 4500 F Dual Interface Reader
+ Identive Identive CLOUD 4510 F Contactless + SAM Reader
+ Identive Identive CLOUD 4000 F DTC
+ Identive CLOUD 2700 R Smart Card Reader
+ Identive SCT3522CC token
+ Identive Technologies Multi-ISO HF Reader - USB
+ IID AT90S064 CCID READER
+ IIT E.Key Crystal-1
+ IIT E.Key Almaz-1C
+ Imprivata USB CCID
+ InfoCert WirelessKey
+ Infocrypt Token++ lite
+ Infocrypt HWDSSL DEVICE
+ InfoThink IT-102MU Reader
+ InfoThink IT-500U Reader
+ INMAX DWR18 HC
+ INMAX DWR18 HPC
+ Inside Secure VaultIC 420 Smart Object
+ Inside Secure VaultIC 440 Smart Object
+ Inside Secure VaultIC 460 Smart Object
+ Inside Secure AT90SCR100
+ Inside Secure AT90SCR050
+ Inside Secure AT90SCR200
+ INSIDE Secure VaultIC 405 Smart Object
+ INSIDE Secure VaultIC 441 Smart Object
+ IonIDe Smartcard Reader
+ jSolutions s.r.o. Multi SIM card reader 4/8
+ KACST HSID Reader
+ KACST HSID Reader Single Storage
+ KACST HSID Reader Dual Storage
+ KAPELSE KAP-LINK
+ KAPELSE KAP-Care
+ KAPELSE KAP-GO
+ KAPELSE eS-KAP-Ad
+ KAPELSE KAP-LINK2
+ KAPELSE KAP-eCV
+ Kapelse Ti-Kap
+ Kapelse inSide
+ Kapelse KAP-Move
+ Kapsch TrafficCom USB SAM reader
+ KeyXentic Inc. KX906 Smart Card Reader
+ Kingtrust Multi-Reader
+ KOBIL Systems Smart Token
+ KOBIL Systems IDToken
+ KOBIL Systems mIDentity 4smart
+ KOBIL Systems mIDentity 4smart AES
+ KOBIL Systems mIDentity visual
+ KOBIL Systems mIDentity fullsize
+ KOBIL Systems mIDentity fullsize AES
+ KRONEGGER NFC blue Reader Platform
+ KRONEGGER Micro Core Platform
+ LDU LANDI
+ Ledger Nano S
+ Ledger Nano X
+ Ledger Nano SP
+ Ledger Nano S
+ Ledger Nano X
+ Ledger Nano S Plus
+ Lenovo Lenovo USB Smartcard Keyboard
+ Lenovo Lenovo USB Smartcard Keyboard
+ Lenovo Lenovo Smartcard Wired Keyboard II
+ Liteon HP SC Keyboard - Apollo (Liteon)
+ Liteon HP SC Keyboard - Apollo KR (Liteon)
+ Liteon HP SC Keyboard - Apollo JP (Liteon)
+ Macally NFC CCID eNetPad
+ mCore SCard-Reader
+ Microchip SEC1110
+ Microchip SEC1210
+ MK Technology KeyPass S1
+ MK Technology KeyPass D1
+ Morpho MSO350/MSO351 Fingerprint Sensor & SmartCard Reader
+ Morpho MSO1350 Fingerprint Sensor & SmartCard Reader
+ MSI StarReader SMART
+ Mulann PVT
+ Neowave Weneo
+ Neowave Weneo
+ Neowave Weneo
+ Neowave Weneo
+ Nitrokey Nitrokey Pro
+ Nitrokey Nitrokey Storage
+ Nitrokey Nitrokey Start
+ Nitrokey Nitrokey HSM
+ Nitrokey Nitrokey 3
+ NTT Communications Corp. SCR3310-NTTCom USB SmartCard Reader
+ NXP Pegoda 2 N
+ NXP PR533
+ NXP PN7462AU CCID
+ OBERTHUR TECHNOLOGIES ID-ONE TOKEN SLIM v2
+ OCS ID-One Cosmo Card USB Smart Chip Device
+ OMNIKEY CardMan 1021
+ OMNIKEY CardMan 4321
+ OMNIKEY CardMan 5321
+ OMNIKEY 5421
+ OMNIKEY 6321 CLi USB
+ OMNIKEY AG 3121 USB
+ OMNIKEY AG CardMan 3621
+ OMNIKEY AG CardMan 3821
+ OMNIKEY AG CardMan 5121
+ OMNIKEY AG CardMan 5125
+ OMNIKEY AG CardMan 6121
+ OMNIKEY AG 6121 USB mobile
+ OMNIKEY AG Smart Card Reader
+ Panasonic Panasonic USB Smart Card Reader 7A-Smart
+ Philips Semiconductors JCOP41V221
+ Philips Semiconductors SmartMX Sample
+ PIVKey T800
+ Planeta RC700-NFC CCID
+ Purism, SPC Librem Key
+ Raritan D2CIM-DVUSB VM/CCID
+ Regula RFID Reader
+ REINER SCT cyberJack go
+ REINER SCT tanJack Bluetooth
+ REINER SCT tanJack USB
+ REINER SCT cyberJack one
+ REINER SCT cyberJack RFID basis
+ rf IDEAS USB CCID
+ Rocketek RT-SCR1
+ Route1 MobiKEY Fusion3
+ SafeNet eToken 7300
+ SafeNet eToken 5100
+ SafeNet eToken 5300
+ SafeNet eToken 5300 C
+ SafeNet eToken 5110+ FIPS
+ SafeNet eToken Fusion
+ SafeTech SafeTouch
+ SAFETRUST SABRE SCR
+ SchlumbergerSema SchlumbergerSema Cyberflex Access
+ SCM Microsystems Inc. SCR33x USB Smart Card Reader
+ SCM Microsystems Inc. SCR 335
+ SCM Microsystems Inc. SCR3320 - Smart Card Reader
+ SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader
+ SCM Microsystems Inc. SCR3310 USB Smart Card Reader
+ SCM Microsystems Inc. SCR331-DI USB Smart Card Reader
+ SCM Microsystems Inc. SDI010 Smart Card Reader
+ SCM Microsystems Inc. SDI011 Contactless Reader
+ SCM Microsystems Inc. SDI011 Contactless Reader
+ SCM Microsystems Inc. SCL010 Contactless Reader
+ SCM Microsystems Inc. SCL01x Contactless Reader
+ Secure Device Solutions DOMINO-Key TWIN
+ SecuTech SecuTech Token
+ Sensyl SSC-NFC Reader
+ Sensyl SSC-HV Reader
+ SIMHUB pcsc reader
+ Sitecom Sitecom USB simcard reader MD-010
+ Softforum Co., Ltd XecureHSM
+ SoloKeys Solo 2
+ SONY FeliCa RC-S660/U
+ SONY FeliCa RC-S300/S
+ SONY FeliCa RC-S300/P
+ SPECINFOSYSTEMS DIAMOND token
+ SPECINFOSYSTEMS DIAMOND PRO token
+ SPECINFOSYSTEMS DIAMOND PLUS token
+ SPECINFOSYSTEMS DIAMOND HSM
+ SpringCard SpringCore
+ SpringCard SpringCore
+ SpringCard E518
+ SpringCard E518
+ SpringCard H518
+ SpringCard H518
+ SpringCard Puck
+ SpringCard Puck
+ SpringCard M519
+ SpringCard M519
+ SpringCard CrazyWriter
+ SpringCard CSB6 Basic
+ SpringCard CSB6 Secure
+ SpringCard CSB6 Ultimate
+ SpringCard EasyFinger Standard
+ SpringCard EasyFinger Ultimate
+ SpringCard Prox'N'Roll
+ SpringCard NFC'Roll
+ SpringCard H663 Series
+ SpringCard H512 Series
+ Spyrus Inc Rosetta USB
+ Spyrus Inc WorkSafe Pro
+ Spyrus Inc WorkSafe Pro
+ Spyrus Inc PocketVault P-3X
+ Spyrus Inc PocketVault P-3X
+ Sunrex HP USB Business Slim Smartcard CCID Keyboard
+ Swissbit Secure USB PU-50n SE/PE
+ SYNNIX STD200
+ SYNNIX CL-2100R
+ Sysking MII136C
+ sysmocom - s.f.m.c. GmbH sysmoOCTSIM
+ Teridian Semiconductors TSC12xxFV.09
+ Thales Shield M4 Reader
+ Thales RF Reader
+ THURSBY SOFTWARE TSS-PK1
+ Tianyu Smart Card Reader
+ Todos Argos Mini II
+ Todos CX00
+ TOKEN2 Molto2
+ TOKEN2 MFA NFC Reader
+ TOPPAN FORMS CO.,LTD TC63CUT021
+ ubisys 13.56MHz RFID (CCID)
+ udea MILKO V1.
+ Unicept GmbH AirID USB
+ Unicept GmbH AirID USB Dongle
+ Validy TokenA sl vt
+ VASCO DP905v1.1
+ VASCO DIGIPASS KEY 101
+ VASCO DIGIPASS KEY 860
+ VASCO DIGIPASS KEY 200
+ VASCO DIGIPASS KEY 860
+ VASCO DIGIPASS KEY 200
+ VASCO DIGIPASS KEY 202
+ VASCO DIGIPASS KEY 202
+ VASCO DP855
+ VASCO DP865
+ VASCO DIGIPASS 870
+ VASCO DIGIPASS 875
+ VASCO DIGIPASS 920
+ VMware Virtual USB CCID
+ WatchCNPC USB CCID Key
+ Watchdata USB Key
+ Watchdata USB Key
+ Watchdata USB Key
+ Watchdata W5181
+ WCMi SD5931
+ Winbond CCID SmartCard Controller
+ Yubico Yubikey NEO OTP+CCID
+ Yubico Yubikey NEO CCID
+ Yubico Yubikey NEO U2F+CCID
+ Yubico Yubikey NEO OTP+U2F+CCID
+ Yubico YubiKey CCID
+ Yubico YubiKey OTP+CCID
+ Yubico YubiKey FIDO+CCID
+ Yubico YubiKey OTP+FIDO+CCID
+ ACS ACR122U PICC Interface
+ ActivCard ActivCard USB Reader V2
+ Alcor Micro AU9540
+ Athena IDProtect Flash
+ ATMEL VaultIC460
+ Broadcom Corp 5880
+ Broadcom Corp 5880
+ Broadcom Corp 5880
+ Broadcom Corp 58200
+ Broadcom Corp 58200
+ Broadcom Corp 58200
+ Broadcom Corp 58200
+ C3PO LTC3x USB
+ Feitian SCR301
+ Generic Smart Card Reader Interface
+ Hewlett-Packard Company HP USB CCID Smartcard Keyboard
+ Hewlett-Packard Company HP USB Smart Card Keyboard
+ KEBTechnology KONA USB SmartCard
+ KOBIL Systems mIDentity M
+ KOBIL Systems mIDentity XL
+ O2 Micro Oz776
+ O2 Micro Oz776
+ Precise Biometrics Precise 250 MC
+ Precise Biometrics Precise 200 MC
+ RSA RSA SecurID (R) Authenticator
+ THRC Smart Card Reader
+
+
+ Copyright
+ This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version.
+
+
+
diff --git a/etc/libibverbs.d/bnxt_re.driver b/etc/libibverbs.d/bnxt_re.driver
new file mode 100644
index 0000000000..d0573c8b8f
--- /dev/null
+++ b/etc/libibverbs.d/bnxt_re.driver
@@ -0,0 +1 @@
+driver bnxt_re
diff --git a/etc/libibverbs.d/cxgb4.driver b/etc/libibverbs.d/cxgb4.driver
new file mode 100644
index 0000000000..e041cb24c6
--- /dev/null
+++ b/etc/libibverbs.d/cxgb4.driver
@@ -0,0 +1 @@
+driver cxgb4
diff --git a/etc/libibverbs.d/efa.driver b/etc/libibverbs.d/efa.driver
new file mode 100644
index 0000000000..d8570cb23f
--- /dev/null
+++ b/etc/libibverbs.d/efa.driver
@@ -0,0 +1 @@
+driver efa
diff --git a/etc/libibverbs.d/erdma.driver b/etc/libibverbs.d/erdma.driver
new file mode 100644
index 0000000000..f4ff124620
--- /dev/null
+++ b/etc/libibverbs.d/erdma.driver
@@ -0,0 +1 @@
+driver erdma
diff --git a/etc/libibverbs.d/hfi1verbs.driver b/etc/libibverbs.d/hfi1verbs.driver
new file mode 100644
index 0000000000..3ceb7ee85a
--- /dev/null
+++ b/etc/libibverbs.d/hfi1verbs.driver
@@ -0,0 +1 @@
+driver hfi1verbs
diff --git a/etc/libibverbs.d/hns.driver b/etc/libibverbs.d/hns.driver
new file mode 100644
index 0000000000..bba7737ad5
--- /dev/null
+++ b/etc/libibverbs.d/hns.driver
@@ -0,0 +1 @@
+driver hns
diff --git a/etc/libibverbs.d/ipathverbs.driver b/etc/libibverbs.d/ipathverbs.driver
new file mode 100644
index 0000000000..d212578617
--- /dev/null
+++ b/etc/libibverbs.d/ipathverbs.driver
@@ -0,0 +1 @@
+driver ipathverbs
diff --git a/etc/libibverbs.d/irdma.driver b/etc/libibverbs.d/irdma.driver
new file mode 100644
index 0000000000..4b7c5a3373
--- /dev/null
+++ b/etc/libibverbs.d/irdma.driver
@@ -0,0 +1 @@
+driver irdma
diff --git a/etc/libibverbs.d/mana.driver b/etc/libibverbs.d/mana.driver
new file mode 100644
index 0000000000..6e0584b112
--- /dev/null
+++ b/etc/libibverbs.d/mana.driver
@@ -0,0 +1 @@
+driver mana
diff --git a/etc/libibverbs.d/mlx4.driver b/etc/libibverbs.d/mlx4.driver
new file mode 100644
index 0000000000..4d29fa818a
--- /dev/null
+++ b/etc/libibverbs.d/mlx4.driver
@@ -0,0 +1 @@
+driver mlx4
diff --git a/etc/libibverbs.d/mlx5.driver b/etc/libibverbs.d/mlx5.driver
new file mode 100644
index 0000000000..5190aa59ab
--- /dev/null
+++ b/etc/libibverbs.d/mlx5.driver
@@ -0,0 +1 @@
+driver mlx5
diff --git a/etc/libibverbs.d/mthca.driver b/etc/libibverbs.d/mthca.driver
new file mode 100644
index 0000000000..5880a477f9
--- /dev/null
+++ b/etc/libibverbs.d/mthca.driver
@@ -0,0 +1 @@
+driver mthca
diff --git a/etc/libibverbs.d/ocrdma.driver b/etc/libibverbs.d/ocrdma.driver
new file mode 100644
index 0000000000..73e896858d
--- /dev/null
+++ b/etc/libibverbs.d/ocrdma.driver
@@ -0,0 +1 @@
+driver ocrdma
diff --git a/etc/libibverbs.d/qedr.driver b/etc/libibverbs.d/qedr.driver
new file mode 100644
index 0000000000..cd112f8cd7
--- /dev/null
+++ b/etc/libibverbs.d/qedr.driver
@@ -0,0 +1 @@
+driver qedr
diff --git a/etc/libibverbs.d/rxe.driver b/etc/libibverbs.d/rxe.driver
new file mode 100644
index 0000000000..ed63053225
--- /dev/null
+++ b/etc/libibverbs.d/rxe.driver
@@ -0,0 +1 @@
+driver rxe
diff --git a/etc/libibverbs.d/siw.driver b/etc/libibverbs.d/siw.driver
new file mode 100644
index 0000000000..d83a372102
--- /dev/null
+++ b/etc/libibverbs.d/siw.driver
@@ -0,0 +1 @@
+driver siw
diff --git a/etc/libibverbs.d/vmw_pvrdma.driver b/etc/libibverbs.d/vmw_pvrdma.driver
new file mode 100644
index 0000000000..076999c118
--- /dev/null
+++ b/etc/libibverbs.d/vmw_pvrdma.driver
@@ -0,0 +1 @@
+driver vmw_pvrdma
diff --git a/etc/libnl-3/classid b/etc/libnl-3/classid
new file mode 100644
index 0000000000..2203243145
--- /dev/null
+++ b/etc/libnl-3/classid
@@ -0,0 +1,45 @@
+###############################################################################
+#
+# ClassID <-> Name Translation Table
+#
+# This file can be used to assign names to classids for easier reference
+# in all libnl tools.
+#
+# Format:
+# # qdisc definition
+# # class deifnition
+# # class definition referencing an
+# existing qdisc definition.
+#
+# Example:
+# 1: top # top -> 1:0
+# top:1 interactive # interactive -> 1:1
+# top:2 www # www -> 1:2
+# top:3 bulk # bulk -> 1:3
+# 2:1 test_class # test_class -> 2:1
+#
+# Illegal Example:
+# 30:1 classD
+# classD:2 invalidClass # classD refers to a class, not a qdisc
+#
+###############################################################################
+
+#
+
+# Reserved default classids
+0:0 none
+ffff:ffff root
+ffff:fff1 ingress
+
+#
+# List your classid definitions here:
+#
+
+
+
+###############################################################################
+# List of auto-generated classids
+#
+# DO NOT ADD CLASSID DEFINITIONS BELOW THIS LINE
+#
+#
diff --git a/etc/libnl-3/pktloc b/etc/libnl-3/pktloc
new file mode 100644
index 0000000000..8559161b3b
--- /dev/null
+++ b/etc/libnl-3/pktloc
@@ -0,0 +1,76 @@
+#
+# Location definitions for packet matching
+#
+
+# name alignment offset mask shift
+ip.version u8 net+0 0xF0 4
+ip.hdrlen u8 net+0 0x0F
+ip.diffserv u8 net+1
+ip.length u16 net+2
+ip.id u16 net+4
+ip.flag.res u8 net+6 0xff 7
+ip.df u8 net+6 0x40 6
+ip.mf u8 net+6 0x20 5
+ip.offset u16 net+6 0x1FFF
+ip.ttl u8 net+8
+ip.proto u8 net+9
+ip.chksum u16 net+10
+ip.src u32 net+12
+ip.dst u32 net+16
+
+# if ip.ihl > 5
+ip.opts u32 net+20
+
+
+#
+# IP version 6
+#
+# name alignment offset mask shift
+ip6.version u8 net+0 0xF0 4
+ip6.tc u16 net+0 0xFF0 4
+ip6.flowlabel u32 net+0 0xFFFFF
+ip6.length u16 net+4
+ip6.nexthdr u8 net+6
+ip6.hoplimit u8 net+7
+ip6.src 16 net+8
+ip6.dst 16 net+24
+
+#
+# Transmission Control Protocol (TCP)
+#
+# name alignment offset mask shift
+tcp.sport u16 tcp+0
+tcp.dport u16 tcp+2
+tcp.seq u32 tcp+4
+tcp.ack u32 tcp+8
+
+# Data offset (4 bits)
+tcp.off u8 tcp+12 0xF0 4
+
+# Reserved [0 0 0] (3 bits)
+tcp.reserved u8 tcp+12 0x04 1
+
+# ECN [N C E] (3 bits)
+tcp.ecn u16 tcp+12 0x01C00 6
+
+# Individual TCP flags (0|1) (6 bits in total)
+tcp.flag.urg u8 tcp+13 0x20 5
+tcp.flag.ack u8 tcp+13 0x10 4
+tcp.flag.psh u8 tcp+13 0x08 3
+tcp.flag.rst u8 tcp+13 0x04 2
+tcp.flag.syn u8 tcp+13 0x02 1
+tcp.flag.fin u8 tcp+13 0x01
+
+tcp.win u16 tcp+14
+tcp.csum u16 tcp+16
+tcp.urg u16 tcp+18
+tcp.opts u32 tcp+20
+
+#
+# User Datagram Protocol (UDP)
+#
+# name alignment offset mask shift
+udp.sport u16 tcp+0
+udp.dport u16 tcp+2
+udp.length u16 tcp+4
+udp.csum u16 tcp+6
diff --git a/etc/locale.alias b/etc/locale.alias
new file mode 100644
index 0000000000..21baef05be
--- /dev/null
+++ b/etc/locale.alias
@@ -0,0 +1,82 @@
+# Locale name alias data base.
+# Copyright (C) 1996-2024 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see .
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+# /usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is obsolete and is kept around for the time being for
+# backward compatibility. Nobody should rely on the names defined here.
+# Locales should always be specified by their full name.
+
+# Note: This file used to contain the following lines:
+# bokmaal nb_NO.ISO-8859-1
+# franc,ais fr_FR.ISO-8859-1
+# except that the "aa" was actually the byte '\0xE5' (the Latin-1
+# encoding for U+00E5 LATIN SMALL LETTER A WITH RING ABOVE) and the
+# "c," was actually the byte '\xE7' (the Latin-1 encoding for U+00E7
+# LATIN SMALL LETTER C WITH CEDILLA). These lines were removed
+# because they caused 'locale -a' to output text encoded in Latin-1,
+# which broke applications in UTF-8 locales. See:
+# https://sourceware.org/bugzilla/show_bug.cgi?id=18412
+
+bokmal nb_NO.ISO-8859-1
+catalan ca_ES.ISO-8859-1
+croatian hr_HR.ISO-8859-2
+czech cs_CZ.ISO-8859-2
+danish da_DK.ISO-8859-1
+dansk da_DK.ISO-8859-1
+deutsch de_DE.ISO-8859-1
+dutch nl_NL.ISO-8859-1
+eesti et_EE.ISO-8859-15
+estonian et_EE.ISO-8859-15
+finnish fi_FI.ISO-8859-1
+french fr_FR.ISO-8859-1
+galego gl_ES.ISO-8859-1
+galician gl_ES.ISO-8859-1
+german de_DE.ISO-8859-1
+greek el_GR.ISO-8859-7
+hebrew he_IL.ISO-8859-8
+hrvatski hr_HR.ISO-8859-2
+hungarian hu_HU.ISO-8859-2
+icelandic is_IS.ISO-8859-1
+italian it_IT.ISO-8859-1
+japanese ja_JP.eucJP
+japanese.euc ja_JP.eucJP
+ja_JP ja_JP.eucJP
+ja_JP.ujis ja_JP.eucJP
+japanese.sjis ja_JP.SJIS
+korean ko_KR.eucKR
+korean.euc ko_KR.eucKR
+ko_KR ko_KR.eucKR
+lithuanian lt_LT.ISO-8859-13
+no_NO nb_NO.ISO-8859-1
+no_NO.ISO-8859-1 nb_NO.ISO-8859-1
+norwegian nb_NO.ISO-8859-1
+nynorsk nn_NO.ISO-8859-1
+polish pl_PL.ISO-8859-2
+portuguese pt_PT.ISO-8859-1
+romanian ro_RO.ISO-8859-2
+russian ru_RU.KOI8-R
+slovak sk_SK.ISO-8859-2
+slovene sl_SI.ISO-8859-2
+slovenian sl_SI.ISO-8859-2
+spanish es_ES.ISO-8859-1
+swedish sv_SE.ISO-8859-1
+thai th_TH.TIS-620
+turkish tr_TR.ISO-8859-9
diff --git a/etc/locale.conf b/etc/locale.conf
new file mode 100644
index 0000000000..f9c983cc4d
--- /dev/null
+++ b/etc/locale.conf
@@ -0,0 +1 @@
+LANG=C.UTF-8
diff --git a/etc/locale.gen b/etc/locale.gen
new file mode 100644
index 0000000000..b1f930183f
--- /dev/null
+++ b/etc/locale.gen
@@ -0,0 +1,515 @@
+# This file lists locales that you wish to have built. You can find a list
+# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
+# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
+# this file, you need to rerun locale-gen.
+
+
+# C.UTF-8 UTF-8
+# aa_DJ ISO-8859-1
+# aa_DJ.UTF-8 UTF-8
+# aa_ER UTF-8
+# aa_ET UTF-8
+# af_ZA ISO-8859-1
+# af_ZA.UTF-8 UTF-8
+# agr_PE UTF-8
+# ak_GH UTF-8
+# am_ET UTF-8
+# an_ES ISO-8859-15
+# an_ES.UTF-8 UTF-8
+# anp_IN UTF-8
+# ar_AE ISO-8859-6
+# ar_AE.UTF-8 UTF-8
+# ar_BH ISO-8859-6
+# ar_BH.UTF-8 UTF-8
+# ar_DZ ISO-8859-6
+# ar_DZ.UTF-8 UTF-8
+# ar_EG ISO-8859-6
+# ar_EG.UTF-8 UTF-8
+# ar_IN UTF-8
+# ar_IQ ISO-8859-6
+# ar_IQ.UTF-8 UTF-8
+# ar_JO ISO-8859-6
+# ar_JO.UTF-8 UTF-8
+# ar_KW ISO-8859-6
+# ar_KW.UTF-8 UTF-8
+# ar_LB ISO-8859-6
+# ar_LB.UTF-8 UTF-8
+# ar_LY ISO-8859-6
+# ar_LY.UTF-8 UTF-8
+# ar_MA ISO-8859-6
+# ar_MA.UTF-8 UTF-8
+# ar_OM ISO-8859-6
+# ar_OM.UTF-8 UTF-8
+# ar_QA ISO-8859-6
+# ar_QA.UTF-8 UTF-8
+# ar_SA ISO-8859-6
+# ar_SA.UTF-8 UTF-8
+# ar_SD ISO-8859-6
+# ar_SD.UTF-8 UTF-8
+# ar_SS UTF-8
+# ar_SY ISO-8859-6
+# ar_SY.UTF-8 UTF-8
+# ar_TN ISO-8859-6
+# ar_TN.UTF-8 UTF-8
+# ar_YE ISO-8859-6
+# ar_YE.UTF-8 UTF-8
+# as_IN UTF-8
+# ast_ES ISO-8859-15
+# ast_ES.UTF-8 UTF-8
+# ayc_PE UTF-8
+# az_AZ UTF-8
+# az_IR UTF-8
+# be_BY CP1251
+# be_BY.UTF-8 UTF-8
+# be_BY@latin UTF-8
+# bem_ZM UTF-8
+# ber_DZ UTF-8
+# ber_MA UTF-8
+# bg_BG CP1251
+# bg_BG.UTF-8 UTF-8
+# bhb_IN.UTF-8 UTF-8
+# bho_IN UTF-8
+# bho_NP UTF-8
+# bi_VU UTF-8
+# bn_BD UTF-8
+# bn_IN UTF-8
+# bo_CN UTF-8
+# bo_IN UTF-8
+# br_FR ISO-8859-1
+# br_FR.UTF-8 UTF-8
+# br_FR@euro ISO-8859-15
+# brx_IN UTF-8
+# bs_BA ISO-8859-2
+# bs_BA.UTF-8 UTF-8
+# byn_ER UTF-8
+# ca_AD ISO-8859-15
+# ca_AD.UTF-8 UTF-8
+# ca_ES ISO-8859-1
+# ca_ES.UTF-8 UTF-8
+# ca_ES@euro ISO-8859-15
+# ca_ES@valencia UTF-8
+# ca_FR ISO-8859-15
+# ca_FR.UTF-8 UTF-8
+# ca_IT ISO-8859-15
+# ca_IT.UTF-8 UTF-8
+# ce_RU UTF-8
+# chr_US UTF-8
+# ckb_IQ UTF-8
+# cmn_TW UTF-8
+# crh_RU UTF-8
+# crh_UA UTF-8
+# cs_CZ ISO-8859-2
+# cs_CZ.UTF-8 UTF-8
+# csb_PL UTF-8
+# cv_RU UTF-8
+# cy_GB ISO-8859-14
+# cy_GB.UTF-8 UTF-8
+# da_DK ISO-8859-1
+# da_DK.UTF-8 UTF-8
+# de_AT ISO-8859-1
+# de_AT.UTF-8 UTF-8
+# de_AT@euro ISO-8859-15
+# de_BE ISO-8859-1
+# de_BE.UTF-8 UTF-8
+# de_BE@euro ISO-8859-15
+# de_CH ISO-8859-1
+# de_CH.UTF-8 UTF-8
+# de_DE ISO-8859-1
+# de_DE.UTF-8 UTF-8
+# de_DE@euro ISO-8859-15
+# de_IT ISO-8859-1
+# de_IT.UTF-8 UTF-8
+# de_LI.UTF-8 UTF-8
+# de_LU ISO-8859-1
+# de_LU.UTF-8 UTF-8
+# de_LU@euro ISO-8859-15
+# doi_IN UTF-8
+# dsb_DE UTF-8
+# dv_MV UTF-8
+# dz_BT UTF-8
+# el_CY ISO-8859-7
+# el_CY.UTF-8 UTF-8
+# el_GR ISO-8859-7
+# el_GR.UTF-8 UTF-8
+# el_GR@euro ISO-8859-7
+# en_AG UTF-8
+# en_AU ISO-8859-1
+# en_AU.UTF-8 UTF-8
+# en_BW ISO-8859-1
+# en_BW.UTF-8 UTF-8
+# en_CA ISO-8859-1
+# en_CA.UTF-8 UTF-8
+# en_DK ISO-8859-1
+# en_DK.ISO-8859-15 ISO-8859-15
+# en_DK.UTF-8 UTF-8
+# en_GB ISO-8859-1
+# en_GB.ISO-8859-15 ISO-8859-15
+# en_GB.UTF-8 UTF-8
+# en_HK ISO-8859-1
+# en_HK.UTF-8 UTF-8
+# en_IE ISO-8859-1
+# en_IE.UTF-8 UTF-8
+# en_IE@euro ISO-8859-15
+# en_IL UTF-8
+# en_IN UTF-8
+# en_NG UTF-8
+# en_NZ ISO-8859-1
+# en_NZ.UTF-8 UTF-8
+# en_PH ISO-8859-1
+# en_PH.UTF-8 UTF-8
+# en_SC.UTF-8 UTF-8
+# en_SG ISO-8859-1
+# en_SG.UTF-8 UTF-8
+# en_US ISO-8859-1
+# en_US.ISO-8859-15 ISO-8859-15
+en_US.UTF-8 UTF-8
+# en_ZA ISO-8859-1
+# en_ZA.UTF-8 UTF-8
+# en_ZM UTF-8
+# en_ZW ISO-8859-1
+# en_ZW.UTF-8 UTF-8
+# eo UTF-8
+# eo_US.UTF-8 UTF-8
+# es_AR ISO-8859-1
+# es_AR.UTF-8 UTF-8
+# es_BO ISO-8859-1
+# es_BO.UTF-8 UTF-8
+# es_CL ISO-8859-1
+# es_CL.UTF-8 UTF-8
+# es_CO ISO-8859-1
+# es_CO.UTF-8 UTF-8
+# es_CR ISO-8859-1
+# es_CR.UTF-8 UTF-8
+# es_CU UTF-8
+# es_DO ISO-8859-1
+# es_DO.UTF-8 UTF-8
+# es_EC ISO-8859-1
+# es_EC.UTF-8 UTF-8
+# es_ES ISO-8859-1
+# es_ES.UTF-8 UTF-8
+# es_ES@euro ISO-8859-15
+# es_GT ISO-8859-1
+# es_GT.UTF-8 UTF-8
+# es_HN ISO-8859-1
+# es_HN.UTF-8 UTF-8
+# es_MX ISO-8859-1
+# es_MX.UTF-8 UTF-8
+# es_NI ISO-8859-1
+# es_NI.UTF-8 UTF-8
+# es_PA ISO-8859-1
+# es_PA.UTF-8 UTF-8
+# es_PE ISO-8859-1
+# es_PE.UTF-8 UTF-8
+# es_PR ISO-8859-1
+# es_PR.UTF-8 UTF-8
+# es_PY ISO-8859-1
+# es_PY.UTF-8 UTF-8
+# es_SV ISO-8859-1
+# es_SV.UTF-8 UTF-8
+# es_US ISO-8859-1
+# es_US.UTF-8 UTF-8
+# es_UY ISO-8859-1
+# es_UY.UTF-8 UTF-8
+# es_VE ISO-8859-1
+# es_VE.UTF-8 UTF-8
+# et_EE ISO-8859-1
+# et_EE.ISO-8859-15 ISO-8859-15
+# et_EE.UTF-8 UTF-8
+# eu_ES ISO-8859-1
+# eu_ES.UTF-8 UTF-8
+# eu_ES@euro ISO-8859-15
+# eu_FR ISO-8859-1
+# eu_FR.UTF-8 UTF-8
+# eu_FR@euro ISO-8859-15
+# fa_IR UTF-8
+# ff_SN UTF-8
+# fi_FI ISO-8859-1
+# fi_FI.UTF-8 UTF-8
+# fi_FI@euro ISO-8859-15
+# fil_PH UTF-8
+# fo_FO ISO-8859-1
+# fo_FO.UTF-8 UTF-8
+# fr_BE ISO-8859-1
+# fr_BE.UTF-8 UTF-8
+# fr_BE@euro ISO-8859-15
+# fr_CA ISO-8859-1
+# fr_CA.UTF-8 UTF-8
+# fr_CH ISO-8859-1
+# fr_CH.UTF-8 UTF-8
+# fr_FR ISO-8859-1
+# fr_FR.UTF-8 UTF-8
+# fr_FR@euro ISO-8859-15
+# fr_LU ISO-8859-1
+# fr_LU.UTF-8 UTF-8
+# fr_LU@euro ISO-8859-15
+# fur_IT UTF-8
+# fy_DE UTF-8
+# fy_NL UTF-8
+# ga_IE ISO-8859-1
+# ga_IE.UTF-8 UTF-8
+# ga_IE@euro ISO-8859-15
+# gbm_IN UTF-8
+# gd_GB ISO-8859-15
+# gd_GB.UTF-8 UTF-8
+# gez_ER UTF-8
+# gez_ER@abegede UTF-8
+# gez_ET UTF-8
+# gez_ET@abegede UTF-8
+# gl_ES ISO-8859-1
+# gl_ES.UTF-8 UTF-8
+# gl_ES@euro ISO-8859-15
+# gu_IN UTF-8
+# gv_GB ISO-8859-1
+# gv_GB.UTF-8 UTF-8
+# ha_NG UTF-8
+# hak_TW UTF-8
+# he_IL ISO-8859-8
+# he_IL.UTF-8 UTF-8
+# hi_IN UTF-8
+# hif_FJ UTF-8
+# hne_IN UTF-8
+# hr_HR ISO-8859-2
+# hr_HR.UTF-8 UTF-8
+# hsb_DE ISO-8859-2
+# hsb_DE.UTF-8 UTF-8
+# ht_HT UTF-8
+# hu_HU ISO-8859-2
+# hu_HU.UTF-8 UTF-8
+# hy_AM UTF-8
+# hy_AM.ARMSCII-8 ARMSCII-8
+# ia_FR UTF-8
+# id_ID ISO-8859-1
+# id_ID.UTF-8 UTF-8
+# ig_NG UTF-8
+# ik_CA UTF-8
+# is_IS ISO-8859-1
+# is_IS.UTF-8 UTF-8
+# it_CH ISO-8859-1
+# it_CH.UTF-8 UTF-8
+# it_IT ISO-8859-1
+# it_IT.UTF-8 UTF-8
+# it_IT@euro ISO-8859-15
+# iu_CA UTF-8
+# ja_JP.EUC-JP EUC-JP
+# ja_JP.UTF-8 UTF-8
+# ka_GE GEORGIAN-PS
+# ka_GE.UTF-8 UTF-8
+# kab_DZ UTF-8
+# kk_KZ PT154
+# kk_KZ.RK1048 RK1048
+# kk_KZ.UTF-8 UTF-8
+# kl_GL ISO-8859-1
+# kl_GL.UTF-8 UTF-8
+# km_KH UTF-8
+# kn_IN UTF-8
+# ko_KR.EUC-KR EUC-KR
+# ko_KR.UTF-8 UTF-8
+# kok_IN UTF-8
+# ks_IN UTF-8
+# ks_IN@devanagari UTF-8
+# ku_TR ISO-8859-9
+# ku_TR.UTF-8 UTF-8
+# kv_RU UTF-8
+# kw_GB ISO-8859-1
+# kw_GB.UTF-8 UTF-8
+# ky_KG UTF-8
+# lb_LU UTF-8
+# lg_UG ISO-8859-10
+# lg_UG.UTF-8 UTF-8
+# li_BE UTF-8
+# li_NL UTF-8
+# lij_IT UTF-8
+# ln_CD UTF-8
+# lo_LA UTF-8
+# lt_LT ISO-8859-13
+# lt_LT.UTF-8 UTF-8
+# lv_LV ISO-8859-13
+# lv_LV.UTF-8 UTF-8
+# lzh_TW UTF-8
+# mag_IN UTF-8
+# mai_IN UTF-8
+# mai_NP UTF-8
+# mfe_MU UTF-8
+# mg_MG ISO-8859-15
+# mg_MG.UTF-8 UTF-8
+# mhr_RU UTF-8
+# mi_NZ ISO-8859-13
+# mi_NZ.UTF-8 UTF-8
+# miq_NI UTF-8
+# mjw_IN UTF-8
+# mk_MK ISO-8859-5
+# mk_MK.UTF-8 UTF-8
+# ml_IN UTF-8
+# mn_MN UTF-8
+# mni_IN UTF-8
+# mnw_MM UTF-8
+# mr_IN UTF-8
+# ms_MY ISO-8859-1
+# ms_MY.UTF-8 UTF-8
+# mt_MT ISO-8859-3
+# mt_MT.UTF-8 UTF-8
+# my_MM UTF-8
+# nan_TW UTF-8
+# nan_TW@latin UTF-8
+# nb_NO ISO-8859-1
+# nb_NO.UTF-8 UTF-8
+# nds_DE UTF-8
+# nds_NL UTF-8
+# ne_NP UTF-8
+# nhn_MX UTF-8
+# niu_NU UTF-8
+# niu_NZ UTF-8
+# nl_AW UTF-8
+# nl_BE ISO-8859-1
+# nl_BE.UTF-8 UTF-8
+# nl_BE@euro ISO-8859-15
+# nl_NL ISO-8859-1
+# nl_NL.UTF-8 UTF-8
+# nl_NL@euro ISO-8859-15
+# nn_NO ISO-8859-1
+# nn_NO.UTF-8 UTF-8
+# nr_ZA UTF-8
+# nso_ZA UTF-8
+# oc_FR ISO-8859-1
+# oc_FR.UTF-8 UTF-8
+# om_ET UTF-8
+# om_KE ISO-8859-1
+# om_KE.UTF-8 UTF-8
+# or_IN UTF-8
+# os_RU UTF-8
+# pa_IN UTF-8
+# pa_PK UTF-8
+# pap_AW UTF-8
+# pap_CW UTF-8
+# pl_PL ISO-8859-2
+# pl_PL.UTF-8 UTF-8
+# ps_AF UTF-8
+# pt_BR ISO-8859-1
+# pt_BR.UTF-8 UTF-8
+# pt_PT ISO-8859-1
+# pt_PT.UTF-8 UTF-8
+# pt_PT@euro ISO-8859-15
+# quz_PE UTF-8
+# raj_IN UTF-8
+# rif_MA UTF-8
+# ro_RO ISO-8859-2
+# ro_RO.UTF-8 UTF-8
+# ru_RU ISO-8859-5
+# ru_RU.CP1251 CP1251
+# ru_RU.KOI8-R KOI8-R
+# ru_RU.UTF-8 UTF-8
+# ru_UA KOI8-U
+# ru_UA.UTF-8 UTF-8
+# rw_RW UTF-8
+# sa_IN UTF-8
+# sah_RU UTF-8
+# sat_IN UTF-8
+# sc_IT UTF-8
+# sd_IN UTF-8
+# sd_IN@devanagari UTF-8
+# sd_PK UTF-8
+# se_NO UTF-8
+# sgs_LT UTF-8
+# shn_MM UTF-8
+# shs_CA UTF-8
+# si_LK UTF-8
+# sid_ET UTF-8
+# sk_SK ISO-8859-2
+# sk_SK.UTF-8 UTF-8
+# sl_SI ISO-8859-2
+# sl_SI.UTF-8 UTF-8
+# sm_WS UTF-8
+# so_DJ ISO-8859-1
+# so_DJ.UTF-8 UTF-8
+# so_ET UTF-8
+# so_KE ISO-8859-1
+# so_KE.UTF-8 UTF-8
+# so_SO ISO-8859-1
+# so_SO.UTF-8 UTF-8
+# sq_AL ISO-8859-1
+# sq_AL.UTF-8 UTF-8
+# sq_MK UTF-8
+# sr_ME UTF-8
+# sr_RS UTF-8
+# sr_RS@latin UTF-8
+# ss_ZA UTF-8
+# ssy_ER UTF-8
+# st_ZA ISO-8859-1
+# st_ZA.UTF-8 UTF-8
+# su_ID UTF-8
+# sv_FI ISO-8859-1
+# sv_FI.UTF-8 UTF-8
+# sv_FI@euro ISO-8859-15
+# sv_SE ISO-8859-1
+# sv_SE.ISO-8859-15 ISO-8859-15
+# sv_SE.UTF-8 UTF-8
+# sw_KE UTF-8
+# sw_TZ UTF-8
+# syr UTF-8
+# szl_PL UTF-8
+# ta_IN UTF-8
+# ta_LK UTF-8
+# tcy_IN.UTF-8 UTF-8
+# te_IN UTF-8
+# tg_TJ KOI8-T
+# tg_TJ.UTF-8 UTF-8
+# th_TH TIS-620
+# th_TH.UTF-8 UTF-8
+# the_NP UTF-8
+# ti_ER UTF-8
+# ti_ET UTF-8
+# tig_ER UTF-8
+# tk_TM UTF-8
+# tl_PH ISO-8859-1
+# tl_PH.UTF-8 UTF-8
+# tn_ZA UTF-8
+# to_TO UTF-8
+# tok UTF-8
+# tpi_PG UTF-8
+# tr_CY ISO-8859-9
+# tr_CY.UTF-8 UTF-8
+# tr_TR ISO-8859-9
+# tr_TR.UTF-8 UTF-8
+# ts_ZA UTF-8
+# tt_RU UTF-8
+# tt_RU@iqtelif UTF-8
+# ug_CN UTF-8
+# ug_CN@latin UTF-8
+# uk_UA KOI8-U
+# uk_UA.UTF-8 UTF-8
+# unm_US UTF-8
+# ur_IN UTF-8
+# ur_PK UTF-8
+# uz_UZ ISO-8859-1
+# uz_UZ.UTF-8 UTF-8
+# uz_UZ@cyrillic UTF-8
+# ve_ZA UTF-8
+# vi_VN UTF-8
+# wa_BE ISO-8859-1
+# wa_BE.UTF-8 UTF-8
+# wa_BE@euro ISO-8859-15
+# wae_CH UTF-8
+# wal_ET UTF-8
+# wo_SN UTF-8
+# xh_ZA ISO-8859-1
+# xh_ZA.UTF-8 UTF-8
+# yi_US CP1255
+# yi_US.UTF-8 UTF-8
+# yo_NG UTF-8
+# yue_HK UTF-8
+# yuw_PG UTF-8
+# zgh_MA UTF-8
+# zh_CN GB2312
+# zh_CN.GB18030 GB18030
+# zh_CN.GBK GBK
+# zh_CN.UTF-8 UTF-8
+# zh_HK BIG5-HKSCS
+# zh_HK.UTF-8 UTF-8
+# zh_SG GB2312
+# zh_SG.GBK GBK
+# zh_SG.UTF-8 UTF-8
+# zh_TW BIG5
+# zh_TW.EUC-TW EUC-TW
+# zh_TW.UTF-8 UTF-8
+# zu_ZA ISO-8859-1
+# zu_ZA.UTF-8 UTF-8
diff --git a/etc/localtime b/etc/localtime
new file mode 120000
index 0000000000..622b45b1d7
--- /dev/null
+++ b/etc/localtime
@@ -0,0 +1 @@
+/usr/share/zoneinfo/Europe/Berlin
\ No newline at end of file
diff --git a/etc/lock_manager_local.ini b/etc/lock_manager_local.ini
new file mode 100644
index 0000000000..58c4cecff4
--- /dev/null
+++ b/etc/lock_manager_local.ini
@@ -0,0 +1,31 @@
+[local]
+;lock_file = /tmp/lmlib.lock
+;memory_clear = false
+
+[shm]
+;name = SharedLockManagerStorageClient_v2
+;startSize = 4194304.
+
+[deadlock]
+;check_period = 1
+;clear_period = 1
+
+[linux]
+; in decimal
+;permissions = 438
+
+;[log]
+;log4cplus.rootLogger=INFO,LOGFILE
+
+;log4cplus.appender.LOGFILE=log4cplus::RollingFileAppender
+;log4cplus.appender.LOGFILE.File=/var/log/lock_manager/lock_manager_local.log
+;log4cplus.appender.LOGFILE.MaxFileSize=10MB
+;log4cplus.appender.LOGFILE.MaxBackupIndex=5
+;log4cplus.appender.LOGFILE.layout=log4cplus::PatternLayout
+;log4cplus.appender.LOGFILE.layout.ConversionPattern=%D{%d.%m.%Y %H:%M:%S} %-6p - %m %n
+
+;log4cplus.logger.authorizer=INFO
+;log4cplus.logger.deadlock_detector=INFO
+;log4cplus.logger.lock_bunch=INFO
+;log4cplus.logger.multilock_container=INFO
+;log4cplus.logger.executor_client=INFO
\ No newline at end of file
diff --git a/etc/logcheck/ignore.d.paranoid/mariadb-server b/etc/logcheck/ignore.d.paranoid/mariadb-server
new file mode 100644
index 0000000000..407d406327
--- /dev/null
+++ b/etc/logcheck/ignore.d.paranoid/mariadb-server
@@ -0,0 +1,9 @@
+/etc/init.d/mariadb\[[0-9]+\]: Check that mariadbd is running and that the socket: '/run/mysqld/mysqld.sock' exists\!$
+/etc/init.d/mariadb\[[0-9]+\]: '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
+/etc/mysql/debian-start\[[0-9]+\]: Checking for crashed MySQL tables\.$
+mariadbd\[[0-9]+\]: $
+mariadbd\[[0-9]+\]: Version: .* socket: '/run/mysqld/mysqld.sock' port: 3306$
+mariadbd\[[0-9]+\]: Warning: Ignoring user change to 'mysql' because the user was set to 'mysql' earlier on the command line$
+mysqld_safe\[[0-9]+\]: started$
+usermod\[[0-9]+\]: change user `mysql' GID from `([0-9]+)' to `\1'$
+usermod\[[0-9]+\]: change user `mysql' shell from `/bin/false' to `/bin/false'$
diff --git a/etc/logcheck/ignore.d.server/gpg-agent b/etc/logcheck/ignore.d.server/gpg-agent
new file mode 100644
index 0000000000..6de7991d0d
--- /dev/null
+++ b/etc/logcheck/ignore.d.server/gpg-agent
@@ -0,0 +1,11 @@
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Listening on GnuPG cryptographic agent and passphrase cache\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Listening on GnuPG network certificate management daemon\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Listening on GnuPG cryptographic agent and passphrase cache \(restricted\)\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Listening on GnuPG cryptographic agent and passphrase cache \(access for web browsers\)\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Listening on GnuPG cryptographic agent \(ssh-agent emulation\)\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Closed GnuPG network certificate management daemon\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Closed GnuPG cryptographic agent and passphrase cache\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Closed GnuPG cryptographic agent and passphrase cache \(restricted\)\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Closed GnuPG cryptographic agent \(ssh-agent emulation\)\.$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ systemd\[[[:digit:]]+\]: Closed GnuPG cryptographic agent and passphrase cache \(access for web browsers\)\.$
+
diff --git a/etc/logcheck/ignore.d.server/mariadb-server b/etc/logcheck/ignore.d.server/mariadb-server
new file mode 100644
index 0000000000..7db321a02d
--- /dev/null
+++ b/etc/logcheck/ignore.d.server/mariadb-server
@@ -0,0 +1,30 @@
+/etc/init.d/mariadb\[[0-9]+\]: [0-9]+ processes alive and '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
+/etc/init.d/mariadb\[[0-9]+\]: Check that mariadbd is running and that the socket: '/run/mysqld/mysqld.sock' exists\!$
+/etc/init.d/mariadb\[[0-9]+\]: '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
+/etc/mysql/debian-start\[[0-9]+\]: Checking for crashed MySQL tables\.$
+mariadbd\[[0-9]+\]: ?$
+mariadbd\[[0-9]+\]: .*InnoDB: Shutdown completed
+mariadbd\[[0-9]+\]: .*InnoDB: Started;
+mariadbd\[[0-9]+\]: .*InnoDB: Starting shutdown\.\.\.$
+mariadbd\[[0-9]+\]: .*\[Note\] /usr/sbin/mariadbd: Normal shutdown$
+mariadbd\[[0-9]+\]: .*\[Note\] /usr/sbin/mariadbd: ready for connections\.$
+mariadbd\[[0-9]+\]: .*\[Note\] /usr/sbin/mariadbd: Shutdown complete$
+mariadbd\[[0-9]+\]: /usr/sbin/mariadbd: ready for connections\.$
+mariadbd\[[0-9]+\]: .*/usr/sbin/mariadbd: Shutdown Complete$
+mariadbd\[[0-9]+\]: Version: .* socket
+mariadbd\[[0-9]+\]: Warning: Ignoring user change to 'mysql' because the user was set to 'mysql' earlier on the command line$
+mysqld_safe\[[0-9]+\]: ?$
+mysqld_safe\[[0-9]+\]: able to use the new GRANT command!$
+mysqld_safe\[[0-9]+\]: ended$
+mysqld_safe\[[0-9]+\]: NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run$
+mysqld_safe\[[0-9]+\]: PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !$
+mysqld_safe\[[0-9]+\]: Please report any problems at https://jira.mariadb.org$
+mysqld_safe\[[0-9]+\]: See the manual for more instructions.$
+mysqld_safe\[[0-9]+\]: started$
+mysqld_safe\[[0-9]+\]: The latest information about MariaDB is available at$
+mysqld_safe\[[0-9]+\]: the /usr/bin/mysql_fix_privilege_tables. Otherwise you will not be$
+mysqld_safe\[[0-9]+\]: To do so, start the server, then issue the following commands:$
+mysqld_safe\[[0-9]+\]: /usr/bin/mysqladmin -u root -h app109 password 'new-password'$
+mysqld_safe\[[0-9]+\]: /usr/bin/mysqladmin -u root password 'new-password'$
+usermod\[[0-9]+\]: change user `mysql' GID from `([0-9]+)' to `\1'$
+usermod\[[0-9]+\]: change user `mysql' shell from `/bin/false' to `/bin/false'$
diff --git a/etc/logcheck/ignore.d.server/mdadm b/etc/logcheck/ignore.d.server/mdadm
new file mode 100644
index 0000000000..448bf967e8
--- /dev/null
+++ b/etc/logcheck/ignore.d.server/mdadm
@@ -0,0 +1,23 @@
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: md driver [.[:digit:]]+ MAX_MD_DEVS=[[:digit:]]+, MD_SB_DISKS=[[:digit:]]+$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: bitmap version [.[:digit:]]+$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: md[[:digit:]]+ stopped\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: md[[:digit:]]+ still in use\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: cannot remove active disk [[:alnum:]]+ from md[[:digit:]]+ \.\.\. ?$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: raid([01456]|456|10) personality registered for level ([01456]|10)$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: (data-check|requested-resync|resync|reshape|recovery) of RAID array md[[:digit:]]+$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: resuming (data-check|requested-resync|resync|reshape|recovery) of md[[:digit:]]+ from checkpoint\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: md[[:digit:]]+: (data-check|requested-resync|resync|reshape|recovery) done\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: minimum _guaranteed_ ?speed: [[:digit:]]+ KB/sec/disk\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: using maximum available idle IO bandwidth \(but not more than [[:digit:]]+ KB/sec\) for (data-check|requested-resync|resync|reshape|recovery)\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: delaying (data-check|requested-resync|resync|reshape|recovery) of md[[:digit:]]+ until md[[:digit:]]+ has finished \(they share one or more physical units\)$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: using [[:digit:]]+k window, over a total of [[:digit:]]+k?( blocks)?\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: (un)?bind<[^>]+>$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: export_rdev\([^)]+\)$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? raid[[:digit:]]+: raid set [[:alnum:]]+ active with [[:digit:]]+ out of [[:digit:]]+ mirrors$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? RAID([01456]|10) conf printout:$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])?[[:space:]]+---( [wrf]d:[[:digit:]]+){2,3}$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])?[[:space:]]+disk [[:digit:]]+,( wo:[[:digit:]]+,)? o:[[:digit:]]+, dev:[[:alnum:]]+$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ mdadm(\[[[:digit:]]+\])?: Rebuild((Start|Finish)ed|[[:digit:]]+) event detected on md device /dev/[-_./[:alnum:]]+$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ mdadm(\[[[:digit:]]+\])?: SpareActive event detected on md device /dev/[-_./[:alnum:]]+, component device /dev/[-_./[:alnum:]]+$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ mdadm(\[[[:digit:]]+\])?: (New|Degraded)Array event detected on md device /dev/[-_./[:alnum:]]+$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ mdadm(\[[[:digit:]]+\])?: DeviceDisappeared event detected on md device /dev/[-_./[:alnum:]]+$
diff --git a/etc/logcheck/ignore.d.server/rsyslog b/etc/logcheck/ignore.d.server/rsyslog
new file mode 100644
index 0000000000..1186936306
--- /dev/null
+++ b/etc/logcheck/ignore.d.server/rsyslog
@@ -0,0 +1,7 @@
+^(\w{3} [ :0-9]{11}|[0-9T:.+-]{32}) [._[:alnum:]-]+ rsyslogd(\[[0-9]+\])?: \[origin software="rsyslogd" swVersion="[0-9.]+" x-pid="[0-9]+" x-info="https://www.rsyslog.com"\] exiting on signal [0-9]+.$
+^(\w{3} [ :0-9]{11}|[0-9T:.+-]{32}) [._[:alnum:]-]+ rsyslogd(\[[0-9]+\])?: \[origin software="rsyslogd" swVersion="[0-9.]+" x-pid="[0-9]+" x-info="https://www.rsyslog.com"\] rsyslogd was HUPed$
+^(\w{3} [ :0-9]{11}|[0-9T:.+-]{32}) [._[:alnum:]-]+ rsyslogd(\[[0-9]+\])?: \[origin software="rsyslogd" swVersion="[0-9.]+" x-pid="[0-9]+" x-info="https://www.rsyslog.com"\] start$
+^(\w{3} [ :0-9]{11}|[0-9T:.+-]{32}) [._[:alnum:]-]+ rsyslogd(\[[0-9]+\])?: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' \(fd [0-9]+\) from systemd\.\s+\[v[0-9.]+\]$
+^(\w{3} [ :0-9]{11}|[0-9T:.+-]{32}) [._[:alnum:]-]+ rsyslogd(\[[0-9]+\])?: rsyslogd's (groupid|userid) changed to [0-9]+$
+^(\w{3} [ :0-9]{11}|[0-9T:.+-]{32}) [._[:alnum:]-]+ rsyslogd(\[[0-9]+\])?:( rsyslogd:)? imklog: cannot open kernel log \(\/proc\/kmsg\): Permission denied.
+^(\w{3} [ :0-9]{11}|[0-9T:.+-]{32}) [._[:alnum:]-]+ rsyslogd(\[[0-9]+\])?:( rsyslogd:)? activation of module imklog failed \[v[.0-9]+ try https:\/\/www.rsyslog.com\/e\/2145 \]$
diff --git a/etc/logcheck/ignore.d.workstation/mariadb-server b/etc/logcheck/ignore.d.workstation/mariadb-server
new file mode 100644
index 0000000000..7db321a02d
--- /dev/null
+++ b/etc/logcheck/ignore.d.workstation/mariadb-server
@@ -0,0 +1,30 @@
+/etc/init.d/mariadb\[[0-9]+\]: [0-9]+ processes alive and '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
+/etc/init.d/mariadb\[[0-9]+\]: Check that mariadbd is running and that the socket: '/run/mysqld/mysqld.sock' exists\!$
+/etc/init.d/mariadb\[[0-9]+\]: '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
+/etc/mysql/debian-start\[[0-9]+\]: Checking for crashed MySQL tables\.$
+mariadbd\[[0-9]+\]: ?$
+mariadbd\[[0-9]+\]: .*InnoDB: Shutdown completed
+mariadbd\[[0-9]+\]: .*InnoDB: Started;
+mariadbd\[[0-9]+\]: .*InnoDB: Starting shutdown\.\.\.$
+mariadbd\[[0-9]+\]: .*\[Note\] /usr/sbin/mariadbd: Normal shutdown$
+mariadbd\[[0-9]+\]: .*\[Note\] /usr/sbin/mariadbd: ready for connections\.$
+mariadbd\[[0-9]+\]: .*\[Note\] /usr/sbin/mariadbd: Shutdown complete$
+mariadbd\[[0-9]+\]: /usr/sbin/mariadbd: ready for connections\.$
+mariadbd\[[0-9]+\]: .*/usr/sbin/mariadbd: Shutdown Complete$
+mariadbd\[[0-9]+\]: Version: .* socket
+mariadbd\[[0-9]+\]: Warning: Ignoring user change to 'mysql' because the user was set to 'mysql' earlier on the command line$
+mysqld_safe\[[0-9]+\]: ?$
+mysqld_safe\[[0-9]+\]: able to use the new GRANT command!$
+mysqld_safe\[[0-9]+\]: ended$
+mysqld_safe\[[0-9]+\]: NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run$
+mysqld_safe\[[0-9]+\]: PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !$
+mysqld_safe\[[0-9]+\]: Please report any problems at https://jira.mariadb.org$
+mysqld_safe\[[0-9]+\]: See the manual for more instructions.$
+mysqld_safe\[[0-9]+\]: started$
+mysqld_safe\[[0-9]+\]: The latest information about MariaDB is available at$
+mysqld_safe\[[0-9]+\]: the /usr/bin/mysql_fix_privilege_tables. Otherwise you will not be$
+mysqld_safe\[[0-9]+\]: To do so, start the server, then issue the following commands:$
+mysqld_safe\[[0-9]+\]: /usr/bin/mysqladmin -u root -h app109 password 'new-password'$
+mysqld_safe\[[0-9]+\]: /usr/bin/mysqladmin -u root password 'new-password'$
+usermod\[[0-9]+\]: change user `mysql' GID from `([0-9]+)' to `\1'$
+usermod\[[0-9]+\]: change user `mysql' shell from `/bin/false' to `/bin/false'$
diff --git a/etc/logcheck/violations.d/mdadm b/etc/logcheck/violations.d/mdadm
new file mode 100644
index 0000000000..ea8cce72a6
--- /dev/null
+++ b/etc/logcheck/violations.d/mdadm
@@ -0,0 +1,3 @@
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? md: kicking non-fresh [[:alnum:]]+ from array!$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])? raid[[:digit:]]+: Disk failure on [[:alnum:]]+, disabling device\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel:( \[ *[[:digit:]]+\.[[:digit:]]+\])?[[:space:]]+Operation continuing on [[:digit:]]+ devices?$
diff --git a/etc/login.defs b/etc/login.defs
new file mode 100644
index 0000000000..1877eee04c
--- /dev/null
+++ b/etc/login.defs
@@ -0,0 +1,395 @@
+#
+# /etc/login.defs - Configuration control definitions for the login package.
+#
+# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.
+# If unspecified, some arbitrary (and possibly incorrect) value will
+# be assumed. All other items are optional - if not specified then
+# the described action or option will be inhibited.
+#
+# Comment lines (lines beginning with "#") and blank lines are ignored.
+#
+# Modified for Linux. --marekm
+
+# REQUIRED for useradd/userdel/usermod
+# Directory where mailboxes reside, _or_ name of file, relative to the
+# home directory. If you _do_ define MAIL_DIR and MAIL_FILE,
+# MAIL_DIR takes precedence.
+#
+# Essentially:
+# - MAIL_DIR defines the location of users mail spool files
+# (for mbox use) by appending the username to MAIL_DIR as defined
+# below.
+# - MAIL_FILE defines the location of the users mail spool files as the
+# fully-qualified filename obtained by prepending the user home
+# directory before $MAIL_FILE
+#
+# NOTE: This is no more used for setting up users MAIL environment variable
+# which is, starting from shadow 4.0.12-1 in Debian, entirely the
+# job of the pam_mail PAM modules
+# See default PAM configuration files provided for
+# login, su, etc.
+#
+# This is a temporary situation: setting these variables will soon
+# move to /etc/default/useradd and the variables will then be
+# no more supported
+MAIL_DIR /var/mail
+#MAIL_FILE .mail
+
+#
+# Enable logging and display of /var/log/faillog login failure info.
+# This option conflicts with the pam_tally PAM module.
+#
+FAILLOG_ENAB yes
+
+#
+# Enable display of unknown usernames when login failures are recorded.
+#
+# WARNING: Unknown usernames may become world readable.
+# See #290803 and #298773 for details about how this could become a security
+# concern
+LOG_UNKFAIL_ENAB no
+
+#
+# Enable logging of successful logins
+#
+LOG_OK_LOGINS no
+
+#
+# Enable "syslog" logging of su activity - in addition to sulog file logging.
+# SYSLOG_SG_ENAB does the same for newgrp and sg.
+#
+SYSLOG_SU_ENAB yes
+SYSLOG_SG_ENAB yes
+
+#
+# If defined, all su activity is logged to this file.
+#
+#SULOG_FILE /var/log/sulog
+
+#
+# If defined, file which maps tty line to TERM environment parameter.
+# Each line of the file is in a format something like "vt100 tty01".
+#
+#TTYTYPE_FILE /etc/ttytype
+
+#
+# If defined, login failures will be logged here in a utmp format
+# last, when invoked as lastb, will read /var/log/btmp, so...
+#
+FTMP_FILE /var/log/btmp
+
+#
+# If defined, the command name to display when running "su -". For
+# example, if this is defined as "su" then a "ps" will display the
+# command is "-su". If not defined, then "ps" would display the
+# name of the shell actually being run, e.g. something like "-sh".
+#
+SU_NAME su
+
+#
+# If defined, file which inhibits all the usual chatter during the login
+# sequence. If a full pathname, then hushed mode will be enabled if the
+# user's name or shell are found in the file. If not a full pathname, then
+# hushed mode will be enabled if the file exists in the user's home directory.
+#
+HUSHLOGIN_FILE .hushlogin
+#HUSHLOGIN_FILE /etc/hushlogins
+
+#
+# *REQUIRED* The default PATH settings, for superuser and normal users.
+#
+# (they are minimal, add the rest in the shell startup files)
+ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
+
+#
+# Terminal permissions
+#
+# TTYGROUP Login tty will be assigned this group ownership.
+# TTYPERM Login tty will be set to this permission.
+#
+# If you have a "write" program which is "setgid" to a special group
+# which owns the terminals, define TTYGROUP to the group number and
+# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign
+# TTYPERM to either 622 or 600.
+#
+# In Debian /usr/bin/bsd-write or similar programs are setgid tty
+# However, the default and recommended value for TTYPERM is still 0600
+# to not allow anyone to write to anyone else console or terminal
+
+# Users can still allow other people to write them by issuing
+# the "mesg y" command.
+
+TTYGROUP tty
+TTYPERM 0600
+
+#
+# Login configuration initializations:
+#
+# ERASECHAR Terminal ERASE character ('\010' = backspace).
+# KILLCHAR Terminal KILL character ('\025' = CTRL/U).
+# UMASK Default "umask" value.
+#
+# The ERASECHAR and KILLCHAR are used only on System V machines.
+#
+# UMASK is the default umask value for pam_umask and is used by
+# useradd and newusers to set the mode of the new home directories.
+# 022 is the "historical" value in Debian for UMASK
+# 027, or even 077, could be considered better for privacy
+# There is no One True Answer here : each sysadmin must make up his/her
+# mind.
+#
+# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
+# for private user groups, i. e. the uid is the same as gid, and username is
+# the same as the primary group name: for these, the user permissions will be
+# used as group permissions, e. g. 022 will become 002.
+#
+# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
+#
+ERASECHAR 0177
+KILLCHAR 025
+UMASK 022
+
+# HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new
+# home directories.
+# If HOME_MODE is not set, the value of UMASK is used to create the mode.
+HOME_MODE 0750
+
+#
+# Password aging controls:
+#
+# PASS_MAX_DAYS Maximum number of days a password may be used.
+# PASS_MIN_DAYS Minimum number of days allowed between password changes.
+# PASS_WARN_AGE Number of days warning given before a password expires.
+#
+PASS_MAX_DAYS 99999
+PASS_MIN_DAYS 0
+PASS_WARN_AGE 7
+
+#
+# Min/max values for automatic uid selection in useradd
+#
+UID_MIN 1000
+UID_MAX 60000
+# System accounts
+#SYS_UID_MIN 100
+#SYS_UID_MAX 999
+# Extra per user uids
+SUB_UID_MIN 100000
+SUB_UID_MAX 600100000
+SUB_UID_COUNT 65536
+
+#
+# Min/max values for automatic gid selection in groupadd
+#
+GID_MIN 1000
+GID_MAX 60000
+# System accounts
+#SYS_GID_MIN 100
+#SYS_GID_MAX 999
+# Extra per user group ids
+SUB_GID_MIN 100000
+SUB_GID_MAX 600100000
+SUB_GID_COUNT 65536
+
+#
+# Max number of login retries if password is bad. This will most likely be
+# overriden by PAM, since the default pam_unix module has it's own built
+# in of 3 retries. However, this is a safe fallback in case you are using
+# an authentication module that does not enforce PAM_MAXTRIES.
+#
+LOGIN_RETRIES 5
+
+#
+# Max time in seconds for login
+#
+LOGIN_TIMEOUT 60
+
+#
+# Which fields may be changed by regular users using chfn - use
+# any combination of letters "frwh" (full name, room number, work
+# phone, home phone). If not defined, no changes are allowed.
+# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
+#
+CHFN_RESTRICT rwh
+
+#
+# Should login be allowed if we can't cd to the home directory?
+# Default is no.
+#
+DEFAULT_HOME yes
+
+#
+# If defined, this command is run when removing a user.
+# It should remove any at/cron/print jobs etc. owned by
+# the user to be removed (passed as the first argument).
+#
+#USERDEL_CMD /usr/sbin/userdel_local
+
+#
+# Enable setting of the umask group bits to be the same as owner bits
+# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
+# the same as gid, and username is the same as the primary group name.
+#
+# If set to yes, userdel will remove the user's group if it contains no
+# more members, and useradd will create by default a group with the name
+# of the user.
+#
+USERGROUPS_ENAB yes
+
+#
+# Instead of the real user shell, the program specified by this parameter
+# will be launched, although its visible name (argv[0]) will be the shell's.
+# The program may do whatever it wants (logging, additional authentification,
+# banner, ...) before running the actual shell.
+#
+# FAKE_SHELL /bin/fakeshell
+
+#
+# If defined, either full pathname of a file containing device names or
+# a ":" delimited list of device names. Root logins will be allowed only
+# upon these devices.
+#
+# This variable is used by login and su.
+#
+#CONSOLE /etc/consoles
+#CONSOLE console:tty01:tty02:tty03:tty04
+
+#
+# List of groups to add to the user's supplementary group set
+# when logging in on the console (as determined by the CONSOLE
+# setting). Default is none.
+#
+# Use with caution - it is possible for users to gain permanent
+# access to these groups, even when not logged in on the console.
+# How to do it is left as an exercise for the reader...
+#
+# This variable is used by login and su.
+#
+#CONSOLE_GROUPS floppy:audio:cdrom
+
+#
+# If set to "yes", new passwords will be encrypted using the MD5-based
+# algorithm compatible with the one used by recent releases of FreeBSD.
+# It supports passwords of unlimited length and longer salt strings.
+# Set to "no" if you need to copy encrypted passwords to other systems
+# which don't understand the new algorithm. Default is "no".
+#
+# This variable is deprecated. You should use ENCRYPT_METHOD.
+#
+#MD5_CRYPT_ENAB no
+
+#
+# If set to MD5, MD5-based algorithm will be used for encrypting password
+# If set to SHA256, SHA256-based algorithm will be used for encrypting password
+# If set to SHA512, SHA512-based algorithm will be used for encrypting password
+# If set to BCRYPT, BCRYPT-based algorithm will be used for encrypting password
+# If set to YESCRYPT, YESCRYPT-based algorithm will be used for encrypting password
+# If set to DES, DES-based algorithm will be used for encrypting password (default)
+# MD5 and DES should not be used for new hashes, see crypt(5) for recommendations.
+# Overrides the MD5_CRYPT_ENAB option
+#
+# Note: It is recommended to use a value consistent with
+# the PAM modules configuration.
+#
+ENCRYPT_METHOD SHA512
+
+#
+# Only works if ENCRYPT_METHOD is set to SHA256 or SHA512.
+#
+# Define the number of SHA rounds.
+# With a lot of rounds, it is more difficult to brute-force the password.
+# However, more CPU resources will be needed to authenticate users if
+# this value is increased.
+#
+# If not specified, the libc will choose the default number of rounds (5000),
+# which is orders of magnitude too low for modern hardware.
+# The values must be within the 1000-999999999 range.
+# If only one of the MIN or MAX values is set, then this value will be used.
+# If MIN > MAX, the highest value will be used.
+#
+#SHA_CRYPT_MIN_ROUNDS 5000
+#SHA_CRYPT_MAX_ROUNDS 5000
+
+#
+# Only works if ENCRYPT_METHOD is set to YESCRYPT.
+#
+# Define the YESCRYPT cost factor.
+# With a higher cost factor, it is more difficult to brute-force the password.
+# However, more CPU time and more memory will be needed to authenticate users
+# if this value is increased.
+#
+# If not specified, a cost factor of 5 will be used.
+# The value must be within the 1-11 range.
+#
+#YESCRYPT_COST_FACTOR 5
+
+#
+# The pwck(8) utility emits a warning for any system account with a home
+# directory that does not exist. Some system accounts intentionally do
+# not have a home directory. Such accounts may have this string as
+# their home directory in /etc/passwd to avoid a spurious warning.
+#
+NONEXISTENT /nonexistent
+
+#
+# Allow newuidmap and newgidmap when running under an alternative
+# primary group.
+#
+#GRANT_AUX_GROUP_SUBIDS yes
+
+#
+# Select the HMAC cryptography algorithm.
+# Used in pam_timestamp module to calculate the keyed-hash message
+# authentication code.
+#
+# Note: It is recommended to check hmac(3) to see the possible algorithms
+# that are available in your system.
+#
+#HMAC_CRYPTO_ALGO SHA512
+
+################# OBSOLETED BY PAM ##############
+# #
+# These options are now handled by PAM. Please #
+# edit the appropriate file in /etc/pam.d/ to #
+# enable the equivelants of them.
+#
+###############
+
+#MOTD_FILE
+#DIALUPS_CHECK_ENAB
+#LASTLOG_ENAB
+#MAIL_CHECK_ENAB
+#OBSCURE_CHECKS_ENAB
+#PORTTIME_CHECKS_ENAB
+#SU_WHEEL_ONLY
+#CRACKLIB_DICTPATH
+#PASS_CHANGE_TRIES
+#PASS_ALWAYS_WARN
+#ENVIRON_FILE
+#NOLOGINS_FILE
+#ISSUE_FILE
+#PASS_MIN_LEN
+#PASS_MAX_LEN
+#ULIMIT
+#ENV_HZ
+#CHFN_AUTH
+#CHSH_AUTH
+#FAIL_DELAY
+
+################# OBSOLETED #######################
+# #
+# These options are no more handled by shadow. #
+# #
+# Shadow utilities will display a warning if they #
+# still appear. #
+# #
+###################################################
+
+# CLOSE_SESSIONS
+# LOGIN_STRING
+# NO_PASSWORD_CONSOLE
+# QMAIL_DIR
+
+
+
diff --git a/etc/logrotate.conf b/etc/logrotate.conf
new file mode 100644
index 0000000000..223d180561
--- /dev/null
+++ b/etc/logrotate.conf
@@ -0,0 +1,27 @@
+# see "man logrotate" for details
+
+# global options do not affect preceding include directives
+
+# rotate log files weekly
+weekly
+
+# use the adm group by default, since this is the owning group
+# of /var/log/.
+su root adm
+
+# keep 4 weeks worth of backlogs
+rotate 4
+
+# create new (empty) log files after rotating old ones
+create
+
+# use date as a suffix of the rotated file
+#dateext
+
+# uncomment this if you want your log files compressed
+#compress
+
+# packages drop log rotation information into this directory
+include /etc/logrotate.d
+
+# system-specific logs may also be configured here.
diff --git a/etc/logrotate.d/alternatives b/etc/logrotate.d/alternatives
new file mode 100644
index 0000000000..41c8a9c0a0
--- /dev/null
+++ b/etc/logrotate.d/alternatives
@@ -0,0 +1,9 @@
+/var/log/alternatives.log {
+ monthly
+ rotate 12
+ compress
+ delaycompress
+ missingok
+ notifempty
+ create 644 root root
+}
diff --git a/etc/logrotate.d/apache2 b/etc/logrotate.d/apache2
new file mode 100644
index 0000000000..81d7141121
--- /dev/null
+++ b/etc/logrotate.d/apache2
@@ -0,0 +1,18 @@
+/var/log/apache2/*.log {
+ daily
+ missingok
+ rotate 14
+ compress
+ delaycompress
+ notifempty
+ create 640 root adm
+ sharedscripts
+ prerotate
+ if [ -d /etc/logrotate.d/httpd-prerotate ]; then
+ run-parts /etc/logrotate.d/httpd-prerotate
+ fi
+ endscript
+ postrotate
+ /opt/psa/admin/sbin/httpdmng --reload > /dev/null 2>/dev/null || true
+ endscript
+}
diff --git a/etc/logrotate.d/apport b/etc/logrotate.d/apport
new file mode 100644
index 0000000000..e255fea2b7
--- /dev/null
+++ b/etc/logrotate.d/apport
@@ -0,0 +1,9 @@
+/var/log/apport.log {
+ daily
+ rotate 7
+ delaycompress
+ compress
+ notifempty
+ missingok
+}
+
diff --git a/etc/logrotate.d/apt b/etc/logrotate.d/apt
new file mode 100644
index 0000000000..9a6e5d1555
--- /dev/null
+++ b/etc/logrotate.d/apt
@@ -0,0 +1,16 @@
+/var/log/apt/term.log {
+ rotate 12
+ monthly
+ compress
+ missingok
+ notifempty
+}
+
+/var/log/apt/history.log {
+ rotate 12
+ monthly
+ compress
+ missingok
+ notifempty
+}
+
diff --git a/etc/logrotate.d/bootlog b/etc/logrotate.d/bootlog
new file mode 100644
index 0000000000..9be1a64ef9
--- /dev/null
+++ b/etc/logrotate.d/bootlog
@@ -0,0 +1,8 @@
+/var/log/boot.log
+{
+ missingok
+ daily
+ copytruncate
+ rotate 7
+ notifempty
+}
diff --git a/etc/logrotate.d/btmp b/etc/logrotate.d/btmp
new file mode 100644
index 0000000000..0aa1ae1ade
--- /dev/null
+++ b/etc/logrotate.d/btmp
@@ -0,0 +1,7 @@
+# no packages own btmp -- we'll rotate it here
+/var/log/btmp {
+ missingok
+ monthly
+ create 0660 root utmp
+ rotate 1
+}
diff --git a/etc/logrotate.d/cloud-init b/etc/logrotate.d/cloud-init
new file mode 100644
index 0000000000..a2835df061
--- /dev/null
+++ b/etc/logrotate.d/cloud-init
@@ -0,0 +1,11 @@
+/var/log/cloud-init*.log
+{
+ su root root
+ missingok
+ nocreate
+ notifempty
+ rotate 6
+ compress
+ delaycompress
+ size 1M
+}
diff --git a/etc/logrotate.d/dpkg b/etc/logrotate.d/dpkg
new file mode 100644
index 0000000000..cf36f081fc
--- /dev/null
+++ b/etc/logrotate.d/dpkg
@@ -0,0 +1,9 @@
+/var/log/dpkg.log {
+ monthly
+ rotate 12
+ compress
+ delaycompress
+ missingok
+ notifempty
+ create 644 root root
+}
diff --git a/etc/logrotate.d/drweb-update b/etc/logrotate.d/drweb-update
new file mode 100644
index 0000000000..318e4486f9
--- /dev/null
+++ b/etc/logrotate.d/drweb-update
@@ -0,0 +1,8 @@
+/var/drweb/log/updater.log {
+ missingok
+ compress
+ rotate 7
+ daily
+ size 512k
+ copytruncate
+}
diff --git a/etc/logrotate.d/drwebd b/etc/logrotate.d/drwebd
new file mode 100644
index 0000000000..f8e1de7abf
--- /dev/null
+++ b/etc/logrotate.d/drwebd
@@ -0,0 +1,6 @@
+/var/drweb/log/drwebd.log {
+ missingok
+ compress
+ rotate 7
+ daily
+}
diff --git a/etc/logrotate.d/mariadb b/etc/logrotate.d/mariadb
new file mode 100644
index 0000000000..985c7c242b
--- /dev/null
+++ b/etc/logrotate.d/mariadb
@@ -0,0 +1,59 @@
+# This is the MariaDB configuration for the logrotate utility
+#
+# Note that on most Linux systems logs are written to journald, which has its
+# own rotation scheme.
+#
+# Read https://mariadb.com/kb/en/error-log/ to learn more about logging and
+# https://mariadb.com/kb/en/rotating-logs-on-unix-and-linux/ about rotating logs.
+
+/var/lib/mysql/mysqld.log /var/lib/mysql/mariadb.log /var/log/mysql/*.log {
+
+ # Depends on a mysql@localhost unix_socket authenticated user with RELOAD privilege
+ #su mysql mysql
+
+ # If any of the files listed above is missing, skip them silently without
+ # emitting any errors
+ missingok
+
+ # If file exists but is empty, don't rotate it
+ notifempty
+
+ # Run monthly
+ monthly
+
+ # Keep 6 months of logs
+ rotate 6
+
+ # If file is growing too big, rotate immediately
+ maxsize 500M
+
+ # If file size is too small, don't rotate at all
+ minsize 50M
+
+ # Compress logs, as they are text and compression will save a lot of disk space
+ compress
+
+ # Don't compress the log immediately to avoid errors about "file size changed while zipping"
+ delaycompress
+
+ # Don't run the postrotate script for each file configured in this file, but
+ # run it only once if one or more files were rotated
+ sharedscripts
+
+ # After each rotation, run this custom script to flush the logs. Note that
+ # this assumes that the mariadb-admin command has database access, which it
+ # has thanks to the default use of Unix socket authentication for the 'mysql'
+ # (or root on Debian) account used everywhere since MariaDB 10.4.
+ postrotate
+ if test -r /etc/mysql/debian.cnf
+ then
+ EXTRAPARAM='--defaults-file=/etc/mysql/debian.cnf'
+ fi
+
+ if test -x /usr/bin/mariadb-admin
+ then
+ /usr/bin/mariadb-admin $EXTRAPARAM --local flush-error-log \
+ flush-engine-log flush-general-log flush-slow-log
+ fi
+ endscript
+}
diff --git a/etc/logrotate.d/monit b/etc/logrotate.d/monit
new file mode 100644
index 0000000000..821d523bb3
--- /dev/null
+++ b/etc/logrotate.d/monit
@@ -0,0 +1,13 @@
+/var/log/monit.log {
+ rotate 4
+ weekly
+ minsize 1M
+ missingok
+ create 640 root adm
+ notifempty
+ compress
+ delaycompress
+ postrotate
+ invoke-rc.d monit reload > /dev/null
+ endscript
+}
diff --git a/etc/logrotate.d/nginx b/etc/logrotate.d/nginx
new file mode 100644
index 0000000000..423c6ad18a
--- /dev/null
+++ b/etc/logrotate.d/nginx
@@ -0,0 +1,18 @@
+/var/log/nginx/*.log {
+ daily
+ missingok
+ rotate 14
+ compress
+ delaycompress
+ notifempty
+ create 0640 www-data adm
+ sharedscripts
+ prerotate
+ if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
+ run-parts /etc/logrotate.d/httpd-prerotate; \
+ fi \
+ endscript
+ postrotate
+ invoke-rc.d nginx rotate >/dev/null 2>&1
+ endscript
+}
diff --git a/etc/logrotate.d/passenger b/etc/logrotate.d/passenger
new file mode 100644
index 0000000000..d1dfb92bae
--- /dev/null
+++ b/etc/logrotate.d/passenger
@@ -0,0 +1,14 @@
+/var/log/passenger/*.log {
+ copytruncate
+ missingok
+ notifempty
+ compress
+}
+
+/var/log/passenger-analytics/*.log {
+ missingok
+ notifempty
+ sharedscripts
+ compress
+ delaycompress
+}
diff --git a/etc/logrotate.d/php8.3-fpm b/etc/logrotate.d/php8.3-fpm
new file mode 100644
index 0000000000..b2903e35b2
--- /dev/null
+++ b/etc/logrotate.d/php8.3-fpm
@@ -0,0 +1,13 @@
+/var/log/php8.3-fpm.log {
+ rotate 12
+ weekly
+ missingok
+ notifempty
+ compress
+ delaycompress
+ postrotate
+ if [ -x /usr/lib/php/php8.3-fpm-reopenlogs ]; then
+ /usr/lib/php/php8.3-fpm-reopenlogs;
+ fi
+ endscript
+}
diff --git a/etc/logrotate.d/plesk b/etc/logrotate.d/plesk
new file mode 100644
index 0000000000..17fb75c809
--- /dev/null
+++ b/etc/logrotate.d/plesk
@@ -0,0 +1,15 @@
+/var/log/plesk/*.log /var/log/plesk/httpsd_access_log {
+ missingok
+ daily
+ rotate 3
+ size 10M
+ compress
+ copytruncate
+}
+
+/var/log/plesk/install/*.log {
+ missingok
+ rotate 3
+ size 10M
+ compress
+}
diff --git a/etc/logrotate.d/plesk-php74 b/etc/logrotate.d/plesk-php74
new file mode 100644
index 0000000000..d1418a87dc
--- /dev/null
+++ b/etc/logrotate.d/plesk-php74
@@ -0,0 +1,10 @@
+/var/log/plesk-php74-fpm/*log {
+ daily
+ missingok
+ notifempty
+ sharedscripts
+ delaycompress
+ postrotate
+ /bin/kill -SIGUSR1 `cat /run/plesk-php74-fpm.pid 2>/dev/null` 2>/dev/null || true
+ endscript
+}
diff --git a/etc/logrotate.d/proxmox-vm b/etc/logrotate.d/proxmox-vm
new file mode 100644
index 0000000000..bd0434c24a
--- /dev/null
+++ b/etc/logrotate.d/proxmox-vm
@@ -0,0 +1,11 @@
+su root root
+/var/log/proxmox-vm.log {
+ daily
+ rotate 7
+ size 50M
+ compress
+ delaycompress
+ missingok
+ notifempty
+ copytruncate
+}
diff --git a/etc/logrotate.d/rsyslog b/etc/logrotate.d/rsyslog
new file mode 100644
index 0000000000..b145324f6c
--- /dev/null
+++ b/etc/logrotate.d/rsyslog
@@ -0,0 +1,18 @@
+/var/log/syslog
+/var/log/mail.log
+/var/log/kern.log
+/var/log/auth.log
+/var/log/user.log
+/var/log/cron.log
+{
+ rotate 4
+ weekly
+ missingok
+ notifempty
+ compress
+ delaycompress
+ sharedscripts
+ postrotate
+ /usr/lib/rsyslog/rsyslog-rotate
+ endscript
+}
diff --git a/etc/logrotate.d/sw-cp-server b/etc/logrotate.d/sw-cp-server
new file mode 100644
index 0000000000..ff4c424ce9
--- /dev/null
+++ b/etc/logrotate.d/sw-cp-server
@@ -0,0 +1,8 @@
+/var/log/sw-cp-server/error_log /var/log/sw-cp-server/access.log {
+ copytruncate
+ missingok
+ notifempty
+ compress
+ delaycompress
+ notifempty
+}
diff --git a/etc/logrotate.d/sw-engine b/etc/logrotate.d/sw-engine
new file mode 100644
index 0000000000..e941baf92e
--- /dev/null
+++ b/etc/logrotate.d/sw-engine
@@ -0,0 +1,8 @@
+/var/log/sw-cp-server/sw-engine.log {
+ copytruncate
+ missingok
+ notifempty
+ compress
+ delaycompress
+ notifempty
+}
diff --git a/etc/logrotate.d/ubuntu-pro-client b/etc/logrotate.d/ubuntu-pro-client
new file mode 100644
index 0000000000..7c64857291
--- /dev/null
+++ b/etc/logrotate.d/ubuntu-pro-client
@@ -0,0 +1,12 @@
+# use the root group by default, since this is the owning group
+# of /var/log/ubuntu-advantage*.log files.
+/var/log/ubuntu-advantage*.log {
+ su root root
+ create 0644 root root
+ rotate 6
+ monthly
+ compress
+ delaycompress
+ missingok
+ notifempty
+}
diff --git a/etc/logrotate.d/ufw b/etc/logrotate.d/ufw
new file mode 100644
index 0000000000..9d15457431
--- /dev/null
+++ b/etc/logrotate.d/ufw
@@ -0,0 +1,13 @@
+/var/log/ufw.log
+{
+ rotate 4
+ weekly
+ missingok
+ notifempty
+ compress
+ delaycompress
+ sharedscripts
+ postrotate
+ [ -x /usr/lib/rsyslog/rsyslog-rotate ] && /usr/lib/rsyslog/rsyslog-rotate || true
+ endscript
+}
diff --git a/etc/logrotate.d/unattended-upgrades b/etc/logrotate.d/unattended-upgrades
new file mode 100644
index 0000000000..83937678f5
--- /dev/null
+++ b/etc/logrotate.d/unattended-upgrades
@@ -0,0 +1,10 @@
+/var/log/unattended-upgrades/unattended-upgrades.log
+/var/log/unattended-upgrades/unattended-upgrades-dpkg.log
+/var/log/unattended-upgrades/unattended-upgrades-shutdown.log
+{
+ rotate 6
+ monthly
+ compress
+ missingok
+ notifempty
+}
diff --git a/etc/logrotate.d/wtmp b/etc/logrotate.d/wtmp
new file mode 100644
index 0000000000..cc8a151e00
--- /dev/null
+++ b/etc/logrotate.d/wtmp
@@ -0,0 +1,8 @@
+# no packages own wtmp -- we'll rotate it here
+/var/log/wtmp {
+ missingok
+ monthly
+ create 0664 root utmp
+ minsize 1M
+ rotate 1
+}
diff --git a/etc/lsb-release b/etc/lsb-release
new file mode 100644
index 0000000000..616953936d
--- /dev/null
+++ b/etc/lsb-release
@@ -0,0 +1,4 @@
+DISTRIB_ID=Ubuntu
+DISTRIB_RELEASE=24.04
+DISTRIB_CODENAME=noble
+DISTRIB_DESCRIPTION="Ubuntu 24.04.3 LTS"
diff --git a/etc/lvm/lvm.conf b/etc/lvm/lvm.conf
new file mode 100644
index 0000000000..8a7030cbce
--- /dev/null
+++ b/etc/lvm/lvm.conf
@@ -0,0 +1,2449 @@
+# This is an example configuration file for the LVM2 system.
+# It contains the default settings that would be used if there was no
+# /etc/lvm/lvm.conf file.
+#
+# Refer to 'man lvm.conf' for further information including the file layout.
+#
+# Refer to 'man lvm.conf' for information about how settings configured in
+# this file are combined with built-in values and command line options to
+# arrive at the final values used by LVM.
+#
+# Refer to 'man lvmconfig' for information about displaying the built-in
+# and configured values used by LVM.
+#
+# If a default value is set in this file (not commented out), then a
+# new version of LVM using this file will continue using that value,
+# even if the new version of LVM changes the built-in default value.
+#
+# To put this file in a different directory and override /etc/lvm set
+# the environment variable LVM_SYSTEM_DIR before running the tools.
+#
+# N.B. Take care that each setting only appears once if uncommenting
+# example settings in this file.
+
+
+# Configuration section config.
+# How LVM configuration settings are handled.
+config {
+
+ # Configuration option config/checks.
+ # If enabled, any LVM configuration mismatch is reported.
+ # This implies checking that the configuration key is understood by
+ # LVM and that the value of the key is the proper type. If disabled,
+ # any configuration mismatch is ignored and the default value is used
+ # without any warning (a message about the configuration key not being
+ # found is issued in verbose mode only).
+ # This configuration option has an automatic default value.
+ # checks = 1
+
+ # Configuration option config/abort_on_errors.
+ # Abort the LVM process if a configuration mismatch is found.
+ # This configuration option has an automatic default value.
+ # abort_on_errors = 0
+
+ # Configuration option config/profile_dir.
+ # Directory where LVM looks for configuration profiles.
+ # This configuration option has an automatic default value.
+ # profile_dir = "/etc/lvm/profile"
+}
+
+# Configuration section devices.
+# How LVM uses block devices.
+devices {
+
+ # Configuration option devices/dir.
+ # Directory in which to create volume group device nodes.
+ # Commands also accept this as a prefix on volume group names.
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # dir = "/dev"
+
+ # Configuration option devices/scan.
+ # Directories containing device nodes to use with LVM.
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # scan = [ "/dev" ]
+
+ # Configuration option devices/obtain_device_list_from_udev.
+ # Obtain the list of available devices from udev.
+ # This avoids opening or using any inapplicable non-block devices or
+ # subdirectories found in the udev directory. Any device node or
+ # symlink not managed by udev in the udev directory is ignored. This
+ # setting applies only to the udev-managed device directory; other
+ # directories will be scanned fully. LVM needs to be compiled with
+ # udev support for this setting to apply.
+ # This configuration option has an automatic default value.
+ # obtain_device_list_from_udev = 0
+
+ # Configuration option devices/external_device_info_source.
+ # Enable device information from udev.
+ # If set to "udev", lvm will supplement its own native device information
+ # with information from libudev. This can potentially improve the detection
+ # of MD component devices and multipath component devices.
+ # This configuration option has an automatic default value.
+ # external_device_info_source = "none"
+
+ # Configuration option devices/hints.
+ # Use a local file to remember which devices have PVs on them.
+ # Some commands will use this as an optimization to reduce device
+ # scanning, and will only scan the listed PVs. Removing the hint file
+ # will cause lvm to generate a new one. Disable hints if PVs will
+ # be copied onto devices using non-lvm commands, like dd.
+ #
+ # Accepted values:
+ # all
+ # Use all hints.
+ # none
+ # Use no hints.
+ #
+ # This configuration option has an automatic default value.
+ # hints = "all"
+
+ # Configuration option devices/preferred_names.
+ # Select which path name to display for a block device.
+ # If multiple path names exist for a block device, and LVM needs to
+ # display a name for the device, the path names are matched against
+ # each item in this list of regular expressions. The first match is
+ # used. Try to avoid using undescriptive /dev/dm-N names, if present.
+ # If no preferred name matches, or if preferred_names are not defined,
+ # the following built-in preferences are applied in order until one
+ # produces a preferred name:
+ # Prefer names with path prefixes in the order of:
+ # /dev/mapper, /dev/disk, /dev/dm-*, /dev/block.
+ # Prefer the name with the least number of slashes.
+ # Prefer a name that is a symlink.
+ # Prefer the path with least value in lexicographical order.
+ #
+ # Example
+ # preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option devices/use_devicesfile.
+ # Enable or disable the use of a devices file.
+ # When enabled, lvm will only use devices that
+ # are lised in the devices file. A devices file will
+ # be used, regardless of this setting, when the --devicesfile
+ # option is set to a specific file name.
+ # This configuration option has an automatic default value.
+ # use_devicesfile = 0
+
+ # Configuration option devices/devicesfile.
+ # The name of the system devices file, listing devices that LVM should use.
+ # This should not be used to select a non-system devices file.
+ # The --devicesfile option is intended for alternative devices files.
+ # This configuration option has an automatic default value.
+ # devicesfile = "system.devices"
+
+ # Configuration option devices/search_for_devnames.
+ # Look outside of the devices file for missing devname entries.
+ # A devname entry is used for a device that does not have a stable
+ # device id, e.g. wwid, so the unstable device name is used as
+ # the device id. After reboot, or if the device is reattached,
+ # the device name may change, in which case lvm will not find
+ # the expected PV on the device listed in the devices file.
+ # This setting controls whether lvm will search other devices,
+ # outside the devices file, to look for the missing PV on a
+ # renamed device. If "none", lvm will not look at other devices,
+ # and the PV may appear to be missing. If "auto", lvm will look
+ # at other devices, but only those that are likely to have the PV.
+ # If "all", lvm will look at all devices on the system.
+ # This configuration option has an automatic default value.
+ # search_for_devnames = "auto"
+
+ # Configuration option devices/filter.
+ # Limit the block devices that are used by LVM commands.
+ # This is a list of regular expressions used to accept or reject block
+ # device path names. Each regex is delimited by a vertical bar '|'
+ # (or any character) and is preceded by 'a' to accept the path, or
+ # by 'r' to reject the path. The first regex in the list to match the
+ # path is used, producing the 'a' or 'r' result for the device.
+ # When multiple path names exist for a block device, if any path name
+ # matches an 'a' pattern before an 'r' pattern, then the device is
+ # accepted. If all the path names match an 'r' pattern first, then the
+ # device is rejected. Unmatching path names do not affect the accept
+ # or reject decision. If no path names for a device match a pattern,
+ # then the device is accepted. Be careful mixing 'a' and 'r' patterns,
+ # as the combination might produce unexpected results (test changes.)
+ # Run vgscan after changing the filter to regenerate the cache.
+ #
+ # Example
+ # Accept every block device:
+ # filter = [ "a|.*|" ]
+ # Reject the cdrom drive:
+ # filter = [ "r|/dev/cdrom|" ]
+ # Work with just loopback devices, e.g. for testing:
+ # filter = [ "a|loop|", "r|.*|" ]
+ # Accept all loop devices and ide drives except hdc:
+ # filter = [ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]
+ # Use anchors to be very specific:
+ # filter = [ "a|^/dev/hda8$|", "r|.*|" ]
+ #
+ # This configuration option has an automatic default value.
+ # filter = [ "a|.*|" ]
+
+ # Configuration option devices/global_filter.
+ # Limit the block devices that are used by LVM system components.
+ # Because devices/filter may be overridden from the command line, it is
+ # not suitable for system-wide device filtering, e.g. udev.
+ # Use global_filter to hide devices from these LVM system components.
+ # The syntax is the same as devices/filter. Devices rejected by
+ # global_filter are not opened by LVM.
+ # This configuration option has an automatic default value.
+ # global_filter = [ "a|.*|" ]
+
+ # Configuration option devices/types.
+ # List of additional acceptable block device types.
+ # These are of device type names from /proc/devices, followed by the
+ # maximum number of partitions.
+ #
+ # Example
+ # types = [ "fd", 16 ]
+ #
+ # This configuration option is advanced.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option devices/sysfs_scan.
+ # Restrict device scanning to block devices appearing in sysfs.
+ # This is a quick way of filtering out block devices that are not
+ # present on the system. sysfs must be part of the kernel and mounted.)
+ # This configuration option has an automatic default value.
+ # sysfs_scan = 1
+
+ # Configuration option devices/scan_lvs.
+ # Scan LVM LVs for layered PVs, allowing LVs to be used as PVs.
+ # When 1, LVM will detect PVs layered on LVs, and caution must be
+ # taken to avoid a host accessing a layered VG that may not belong
+ # to it, e.g. from a guest image. This generally requires excluding
+ # the LVs with device filters. Also, when this setting is enabled,
+ # every LVM command will scan every active LV on the system (unless
+ # filtered), which can cause performance problems on systems with
+ # many active LVs. When this setting is 0, LVM will not detect or
+ # use PVs that exist on LVs, and will not allow a PV to be created on
+ # an LV. The LVs are ignored using a built in device filter that
+ # identifies and excludes LVs.
+ # This configuration option has an automatic default value.
+ # scan_lvs = 0
+
+ # Configuration option devices/multipath_component_detection.
+ # Ignore devices that are components of DM multipath devices.
+ # This configuration option has an automatic default value.
+ # multipath_component_detection = 1
+
+ # Configuration option devices/multipath_wwids_file.
+ # The path to the multipath wwids file used for multipath component detection.
+ # Set this to an empty string to disable the use of the multipath wwids file.
+ # This configuration option has an automatic default value.
+ # multipath_wwids_file = "/etc/multipath/wwids"
+
+ # Configuration option devices/md_component_detection.
+ # Enable detection and exclusion of MD component devices.
+ # An MD component device is a block device that MD uses as part
+ # of a software RAID virtual device. When an LVM PV is created
+ # on an MD device, LVM must only use the top level MD device as
+ # the PV, and should ignore the underlying component devices.
+ # In cases where the MD superblock is located at the end of the
+ # component devices, it is more difficult for LVM to consistently
+ # identify an MD component, see the md_component_checks setting.
+ # This configuration option has an automatic default value.
+ # md_component_detection = 1
+
+ # Configuration option devices/md_component_checks.
+ # The checks LVM should use to detect MD component devices.
+ # MD component devices are block devices used by MD software RAID.
+ #
+ # Accepted values:
+ # auto
+ # LVM will skip scanning the end of devices when it has other
+ # indications that the device is not an MD component.
+ # start
+ # LVM will only scan the start of devices for MD superblocks.
+ # This does not incur extra I/O by LVM.
+ # full
+ # LVM will scan the start and end of devices for MD superblocks.
+ # This requires an extra read at the end of devices.
+ #
+ # This configuration option has an automatic default value.
+ # md_component_checks = "auto"
+
+ # Configuration option devices/fw_raid_component_detection.
+ # Ignore devices that are components of firmware RAID devices.
+ # LVM must use an external_device_info_source other than none for this
+ # detection to execute.
+ # This configuration option has an automatic default value.
+ # fw_raid_component_detection = 0
+
+ # Configuration option devices/md_chunk_alignment.
+ # Align the start of a PV data area with md device's stripe-width.
+ # This applies if a PV is placed directly on an md device.
+ # default_data_alignment will be overridden if it is not aligned
+ # with the value detected for this setting.
+ # This setting is overridden by data_alignment_detection,
+ # data_alignment, and the --dataalignment option.
+ # This configuration option has an automatic default value.
+ # md_chunk_alignment = 1
+
+ # Configuration option devices/default_data_alignment.
+ # Align the start of a PV data area with this number of MiB.
+ # Set to 1 for 1MiB, 2 for 2MiB, etc. Set to 0 to disable.
+ # This setting is overridden by data_alignment and the --dataalignment
+ # option.
+ # This configuration option has an automatic default value.
+ # default_data_alignment = 1
+
+ # Configuration option devices/data_alignment_detection.
+ # Align the start of a PV data area with sysfs io properties.
+ # The start of a PV data area will be a multiple of minimum_io_size or
+ # optimal_io_size exposed in sysfs. minimum_io_size is the smallest
+ # request the device can perform without incurring a read-modify-write
+ # penalty, e.g. MD chunk size. optimal_io_size is the device's
+ # preferred unit of receiving I/O, e.g. MD stripe width.
+ # minimum_io_size is used if optimal_io_size is undefined (0).
+ # If md_chunk_alignment is enabled, that detects the optimal_io_size.
+ # default_data_alignment and md_chunk_alignment will be overridden
+ # if they are not aligned with the value detected for this setting.
+ # This setting is overridden by data_alignment and the --dataalignment
+ # option.
+ # This configuration option has an automatic default value.
+ # data_alignment_detection = 1
+
+ # Configuration option devices/data_alignment.
+ # Align the start of a PV data area with this number of KiB.
+ # When non-zero, this setting overrides default_data_alignment.
+ # Set to 0 to disable, in which case default_data_alignment
+ # is used to align the first PE in units of MiB.
+ # This setting is overridden by the --dataalignment option.
+ # This configuration option has an automatic default value.
+ # data_alignment = 0
+
+ # Configuration option devices/data_alignment_offset_detection.
+ # Shift the start of an aligned PV data area based on sysfs information.
+ # After a PV data area is aligned, it will be shifted by the
+ # alignment_offset exposed in sysfs. This offset is often 0, but may
+ # be non-zero. Certain 4KiB sector drives that compensate for windows
+ # partitioning will have an alignment_offset of 3584 bytes (sector 7
+ # is the lowest aligned logical block, the 4KiB sectors start at
+ # LBA -1, and consequently sector 63 is aligned on a 4KiB boundary).
+ # This setting is overridden by the --dataalignmentoffset option.
+ # This configuration option has an automatic default value.
+ # data_alignment_offset_detection = 1
+
+ # Configuration option devices/ignore_suspended_devices.
+ # Ignore DM devices that have I/O suspended while scanning devices.
+ # Otherwise, LVM waits for a suspended device to become accessible.
+ # This should only be needed in recovery situations.
+ # This configuration option has an automatic default value.
+ # ignore_suspended_devices = 0
+
+ # Configuration option devices/ignore_lvm_mirrors.
+ # Do not scan 'mirror' LVs to avoid possible deadlocks.
+ # This avoids possible deadlocks when using the 'mirror' segment type.
+ # This setting determines whether LVs using the 'mirror' segment type
+ # are scanned for LVM labels. This affects the ability of mirrors to
+ # be used as physical volumes. If this setting is enabled, it is
+ # impossible to create VGs on top of mirror LVs, i.e. to stack VGs on
+ # mirror LVs. If this setting is disabled, allowing mirror LVs to be
+ # scanned, it may cause LVM processes and I/O to the mirror to become
+ # blocked. This is due to the way that the mirror segment type handles
+ # failures. In order for the hang to occur, an LVM command must be run
+ # just after a failure and before the automatic LVM repair process
+ # takes place, or there must be failures in multiple mirrors in the
+ # same VG at the same time with write failures occurring moments before
+ # a scan of the mirror's labels. The 'mirror' scanning problems do not
+ # apply to LVM RAID types like 'raid1' which handle failures in a
+ # different way, making them a better choice for VG stacking.
+ # This configuration option has an automatic default value.
+ # ignore_lvm_mirrors = 1
+
+ # Configuration option devices/require_restorefile_with_uuid.
+ # Allow use of pvcreate --uuid without requiring --restorefile.
+ # This configuration option has an automatic default value.
+ # require_restorefile_with_uuid = 1
+
+ # Configuration option devices/pv_min_size.
+ # Minimum size in KiB of block devices which can be used as PVs.
+ # In a clustered environment all nodes must use the same value.
+ # Any value smaller than 512KiB is ignored. The previous built-in
+ # value was 512.
+ # This configuration option has an automatic default value.
+ # pv_min_size = 2048
+
+ # Configuration option devices/issue_discards.
+ # Issue discards to PVs that are no longer used by an LV.
+ # Discards are sent to an LV's underlying physical volumes when the LV
+ # is no longer using the physical volumes' space, e.g. lvremove,
+ # lvreduce. Discards inform the storage that a region is no longer
+ # used. Storage that supports discards advertise the protocol-specific
+ # way discards should be issued by the kernel (TRIM, UNMAP, or
+ # WRITE SAME with UNMAP bit set). Not all storage will support or
+ # benefit from discards, but SSDs and thinly provisioned LUNs
+ # generally do. If enabled, discards will only be issued if both the
+ # storage and kernel provide support.
+ # This configuration option has an automatic default value.
+ issue_discards = 1
+
+ # Configuration option devices/allow_changes_with_duplicate_pvs.
+ # Allow VG modification while a PV appears on multiple devices.
+ # When a PV appears on multiple devices, LVM attempts to choose the
+ # best device to use for the PV. If the devices represent the same
+ # underlying storage, the choice has minimal consequence. If the
+ # devices represent different underlying storage, the wrong choice
+ # can result in data loss if the VG is modified. Disabling this
+ # setting is the safest option because it prevents modifying a VG
+ # or activating LVs in it while a PV appears on multiple devices.
+ # Enabling this setting allows the VG to be used as usual even with
+ # uncertain devices.
+ # This configuration option has an automatic default value.
+ # allow_changes_with_duplicate_pvs = 0
+
+ # Configuration option devices/allow_mixed_block_sizes.
+ # Allow PVs in the same VG with different logical block sizes.
+ # When allowed, the user is responsible to ensure that an LV is
+ # using PVs with matching block sizes when necessary.
+ # This configuration option has an automatic default value.
+ # allow_mixed_block_sizes = 0
+}
+
+# Configuration section allocation.
+# How LVM selects space and applies properties to LVs.
+allocation {
+
+ # Configuration option allocation/cling_tag_list.
+ # Advise LVM which PVs to use when searching for new space.
+ # When searching for free space to extend an LV, the 'cling' allocation
+ # policy will choose space on the same PVs as the last segment of the
+ # existing LV. If there is insufficient space and a list of tags is
+ # defined here, it will check whether any of them are attached to the
+ # PVs concerned and then seek to match those PV tags between existing
+ # extents and new extents.
+ #
+ # Example
+ # Use the special tag "@*" as a wildcard to match any PV tag:
+ # cling_tag_list = [ "@*" ]
+ # LVs are mirrored between two sites within a single VG, and
+ # PVs are tagged with either @site1 or @site2 to indicate where
+ # they are situated:
+ # cling_tag_list = [ "@site1", "@site2" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option allocation/maximise_cling.
+ # Use a previous allocation algorithm.
+ # Changes made in version 2.02.85 extended the reach of the 'cling'
+ # policies to detect more situations where data can be grouped onto
+ # the same disks. This setting can be used to disable the changes
+ # and revert to the previous algorithm.
+ # This configuration option has an automatic default value.
+ # maximise_cling = 1
+
+ # Configuration option allocation/use_blkid_wiping.
+ # Use blkid to detect and erase existing signatures on new PVs and LVs.
+ # The blkid library can detect more signatures than the native LVM
+ # detection code, but may take longer. LVM needs to be compiled with
+ # blkid wiping support for this setting to apply. LVM native detection
+ # code is currently able to recognize: MD device signatures,
+ # swap signature, and LUKS signatures. To see the list of signatures
+ # recognized by blkid, check the output of the 'blkid -k' command.
+ # This configuration option has an automatic default value.
+ # use_blkid_wiping = 1
+
+ # Configuration option allocation/wipe_signatures_when_zeroing_new_lvs.
+ # Look for and erase any signatures while zeroing a new LV.
+ # The --wipesignatures option overrides this setting.
+ # Zeroing is controlled by the -Z/--zero option, and if not specified,
+ # zeroing is used by default if possible. Zeroing simply overwrites the
+ # first 4KiB of a new LV with zeroes and does no signature detection or
+ # wiping. Signature wiping goes beyond zeroing and detects exact types
+ # and positions of signatures within the whole LV. It provides a
+ # cleaner LV after creation as all known signatures are wiped. The LV
+ # is not claimed incorrectly by other tools because of old signatures
+ # from previous use. The number of signatures that LVM can detect
+ # depends on the detection code that is selected (see
+ # use_blkid_wiping.) Wiping each detected signature must be confirmed.
+ # When this setting is disabled, signatures on new LVs are not detected
+ # or erased unless the --wipesignatures option is used directly.
+ # This configuration option has an automatic default value.
+ # wipe_signatures_when_zeroing_new_lvs = 1
+
+ # Configuration option allocation/mirror_logs_require_separate_pvs.
+ # Mirror logs and images will always use different PVs.
+ # The default setting changed in version 2.02.85.
+ # This configuration option has an automatic default value.
+ # mirror_logs_require_separate_pvs = 0
+
+ # Configuration option allocation/raid_stripe_all_devices.
+ # Stripe across all PVs when RAID stripes are not specified.
+ # If enabled, all PVs in the VG or on the command line are used for
+ # raid0/4/5/6/10 when the command does not specify the number of
+ # stripes to use.
+ # This was the default behaviour until release 2.02.162.
+ # This configuration option has an automatic default value.
+ # raid_stripe_all_devices = 0
+
+ # Configuration option allocation/cache_pool_metadata_require_separate_pvs.
+ # Cache pool metadata and data will always use different PVs.
+ # This configuration option has an automatic default value.
+ # cache_pool_metadata_require_separate_pvs = 0
+
+ # Configuration option allocation/cache_metadata_format.
+ # Sets default metadata format for new cache.
+ #
+ # Accepted values:
+ # 0 Automatically detected best available format
+ # 1 Original format
+ # 2 Improved 2nd. generation format
+ #
+ # This configuration option has an automatic default value.
+ # cache_metadata_format = 0
+
+ # Configuration option allocation/cache_mode.
+ # The default cache mode used for new cache.
+ #
+ # Accepted values:
+ # writethrough
+ # Data blocks are immediately written from the cache to disk.
+ # writeback
+ # Data blocks are written from the cache back to disk after some
+ # delay to improve performance.
+ #
+ # This setting replaces allocation/cache_pool_cachemode.
+ # This configuration option has an automatic default value.
+ # cache_mode = "writethrough"
+
+ # Configuration option allocation/cache_policy.
+ # The default cache policy used for new cache volume.
+ # Since kernel 4.2 the default policy is smq (Stochastic multiqueue),
+ # otherwise the older mq (Multiqueue) policy is selected.
+ # This configuration option does not have a default value defined.
+
+ # Configuration section allocation/cache_settings.
+ # Settings for the cache policy.
+ # See documentation for individual cache policies for more info.
+ # This configuration section has an automatic default value.
+ # cache_settings {
+ # }
+
+ # Configuration option allocation/cache_pool_chunk_size.
+ # The minimal chunk size in KiB for cache pool volumes.
+ # Using a chunk_size that is too large can result in wasteful use of
+ # the cache, where small reads and writes can cause large sections of
+ # an LV to be mapped into the cache. However, choosing a chunk_size
+ # that is too small can result in more overhead trying to manage the
+ # numerous chunks that become mapped into the cache. The former is
+ # more of a problem than the latter in most cases, so the default is
+ # on the smaller end of the spectrum. Supported values range from
+ # 32KiB to 1GiB in multiples of 32.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option allocation/cache_pool_max_chunks.
+ # The maximum number of chunks in a cache pool.
+ # For cache target v1.9 the recommended maximumm is 1000000 chunks.
+ # Using cache pool with more chunks may degrade cache performance.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option allocation/thin_pool_metadata_require_separate_pvs.
+ # Thin pool metadata and data will always use different PVs.
+ # This configuration option has an automatic default value.
+ # thin_pool_metadata_require_separate_pvs = 0
+
+ # Configuration option allocation/thin_pool_crop_metadata.
+ # Older version of lvm2 cropped pool's metadata size to 15.81 GiB.
+ # This is slightly less then the actual maximum 15.88 GiB.
+ # For compatibility with older version and use of cropped size set to 1.
+ # This configuration option has an automatic default value.
+ # thin_pool_crop_metadata = 0
+
+ # Configuration option allocation/thin_pool_zero.
+ # Thin pool data chunks are zeroed before they are first used.
+ # Zeroing with a larger thin pool chunk size reduces performance.
+ # This configuration option has an automatic default value.
+ # thin_pool_zero = 1
+
+ # Configuration option allocation/thin_pool_discards.
+ # The discards behaviour of thin pool volumes.
+ #
+ # Accepted values:
+ # ignore
+ # nopassdown
+ # passdown
+ #
+ # This configuration option has an automatic default value.
+ # thin_pool_discards = "passdown"
+
+ # Configuration option allocation/thin_pool_chunk_size_policy.
+ # The chunk size calculation policy for thin pool volumes.
+ #
+ # Accepted values:
+ # generic
+ # If thin_pool_chunk_size is defined, use it. Otherwise, calculate
+ # the chunk size based on estimation and device hints exposed in
+ # sysfs - the minimum_io_size. The chunk size is always at least
+ # 64KiB.
+ # performance
+ # If thin_pool_chunk_size is defined, use it. Otherwise, calculate
+ # the chunk size for performance based on device hints exposed in
+ # sysfs - the optimal_io_size. The chunk size is always at least
+ # 512KiB.
+ #
+ # This configuration option has an automatic default value.
+ # thin_pool_chunk_size_policy = "generic"
+
+ # Configuration option allocation/zero_metadata.
+ # Zero whole metadata area before use with thin or cache pool.
+ # This configuration option has an automatic default value.
+ # zero_metadata = 1
+
+ # Configuration option allocation/thin_pool_chunk_size.
+ # The minimal chunk size in KiB for thin pool volumes.
+ # Larger chunk sizes may improve performance for plain thin volumes,
+ # however using them for snapshot volumes is less efficient, as it
+ # consumes more space and takes extra time for copying. When unset,
+ # lvm tries to estimate chunk size starting from 64KiB. Supported
+ # values are in the range 64KiB to 1GiB.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option allocation/physical_extent_size.
+ # Default physical extent size in KiB to use for new VGs.
+ # This configuration option has an automatic default value.
+ # physical_extent_size = 4096
+
+ # Configuration option allocation/vdo_use_compression.
+ # Enables or disables compression when creating a VDO volume.
+ # Compression may be disabled if necessary to maximize performance
+ # or to speed processing of data that is unlikely to compress.
+ # This configuration option has an automatic default value.
+ # vdo_use_compression = 1
+
+ # Configuration option allocation/vdo_use_deduplication.
+ # Enables or disables deduplication when creating a VDO volume.
+ # Deduplication may be disabled in instances where data is not expected
+ # to have good deduplication rates but compression is still desired.
+ # This configuration option has an automatic default value.
+ # vdo_use_deduplication = 1
+
+ # Configuration option allocation/vdo_use_metadata_hints.
+ # Enables or disables whether VDO volume should tag its latency-critical
+ # writes with the REQ_SYNC flag. Some device mapper targets such as dm-raid5
+ # process writes with this flag at a higher priority.
+ # Default is enabled.
+ # This configuration option has an automatic default value.
+ # vdo_use_metadata_hints = 1
+
+ # Configuration option allocation/vdo_minimum_io_size.
+ # The minimum IO size for VDO volume to accept, in bytes.
+ # Valid values are 512 or 4096. The recommended and default value is 4096.
+ # This configuration option has an automatic default value.
+ # vdo_minimum_io_size = 4096
+
+ # Configuration option allocation/vdo_block_map_cache_size_mb.
+ # Specifies the amount of memory in MiB allocated for caching block map
+ # pages for VDO volume. The value must be a multiple of 4096 and must be
+ # at least 128MiB and less than 16TiB. The cache must be at least 16MiB
+ # per logical thread. Note that there is a memory overhead of 15%.
+ # This configuration option has an automatic default value.
+ # vdo_block_map_cache_size_mb = 128
+
+ # Configuration option allocation/vdo_block_map_period.
+ # The speed with which the block map cache writes out modified block map pages.
+ # A smaller era length is likely to reduce the amount time spent rebuilding,
+ # at the cost of increased block map writes during normal operation.
+ # The maximum and recommended value is 16380; the minimum value is 1.
+ # This configuration option has an automatic default value.
+ # vdo_block_map_period = 16380
+
+ # Configuration option allocation/vdo_check_point_frequency.
+ # The default check point frequency for VDO volume.
+ # This configuration option has an automatic default value.
+ # vdo_check_point_frequency = 0
+
+ # Configuration option allocation/vdo_use_sparse_index.
+ # Enables sparse indexing for VDO volume.
+ # This configuration option has an automatic default value.
+ # vdo_use_sparse_index = 0
+
+ # Configuration option allocation/vdo_index_memory_size_mb.
+ # Specifies the amount of index memory in MiB for VDO volume.
+ # The value must be at least 256MiB and at most 1TiB.
+ # This configuration option has an automatic default value.
+ # vdo_index_memory_size_mb = 256
+
+ # Configuration option allocation/vdo_slab_size_mb.
+ # Specifies the size in MiB of the increment by which a VDO is grown.
+ # Using a smaller size constrains the total maximum physical size
+ # that can be accommodated. Must be a power of two between 128MiB and 32GiB.
+ # This configuration option has an automatic default value.
+ # vdo_slab_size_mb = 2048
+
+ # Configuration option allocation/vdo_ack_threads.
+ # Specifies the number of threads to use for acknowledging
+ # completion of requested VDO I/O operations.
+ # The value must be at in range [0..100].
+ # This configuration option has an automatic default value.
+ # vdo_ack_threads = 1
+
+ # Configuration option allocation/vdo_bio_threads.
+ # Specifies the number of threads to use for submitting I/O
+ # operations to the storage device of VDO volume.
+ # The value must be in range [1..100]
+ # Each additional thread after the first will use an additional 18MiB of RAM,
+ # plus 1.12 MiB of RAM per megabyte of configured read cache size.
+ # This configuration option has an automatic default value.
+ # vdo_bio_threads = 4
+
+ # Configuration option allocation/vdo_bio_rotation.
+ # Specifies the number of I/O operations to enqueue for each bio-submission
+ # thread before directing work to the next. The value must be in range [1..1024].
+ # This configuration option has an automatic default value.
+ # vdo_bio_rotation = 64
+
+ # Configuration option allocation/vdo_cpu_threads.
+ # Specifies the number of threads to use for CPU-intensive work such as
+ # hashing or compression for VDO volume. The value must be in range [1..100]
+ # This configuration option has an automatic default value.
+ # vdo_cpu_threads = 2
+
+ # Configuration option allocation/vdo_hash_zone_threads.
+ # Specifies the number of threads across which to subdivide parts of the VDO
+ # processing based on the hash value computed from the block data.
+ # The value must be at in range [0..100].
+ # vdo_hash_zone_threads, vdo_logical_threads and vdo_physical_threads must be
+ # either all zero or all non-zero.
+ # This configuration option has an automatic default value.
+ # vdo_hash_zone_threads = 1
+
+ # Configuration option allocation/vdo_logical_threads.
+ # Specifies the number of threads across which to subdivide parts of the VDO
+ # processing based on the hash value computed from the block data.
+ # A logical thread count of 9 or more will require explicitly specifying
+ # a sufficiently large block map cache size, as well.
+ # The value must be in range [0..100].
+ # vdo_hash_zone_threads, vdo_logical_threads and vdo_physical_threads must be
+ # either all zero or all non-zero.
+ # This configuration option has an automatic default value.
+ # vdo_logical_threads = 1
+
+ # Configuration option allocation/vdo_physical_threads.
+ # Specifies the number of threads across which to subdivide parts of the VDO
+ # processing based on physical block addresses.
+ # Each additional thread after the first will use an additional 10MiB of RAM.
+ # The value must be in range [0..16].
+ # vdo_hash_zone_threads, vdo_logical_threads and vdo_physical_threads must be
+ # either all zero or all non-zero.
+ # This configuration option has an automatic default value.
+ # vdo_physical_threads = 1
+
+ # Configuration option allocation/vdo_write_policy.
+ # Specifies the write policy:
+ # auto - VDO will check the storage device and determine whether it supports flushes.
+ # If it does, VDO will run in async mode, otherwise it will run in sync mode.
+ # sync - Writes are acknowledged only after data is stably written.
+ # This policy is not supported if the underlying storage is not also synchronous.
+ # async - Writes are acknowledged after data has been cached for writing to stable storage.
+ # Data which has not been flushed is not guaranteed to persist in this mode.
+ # async-unsafe - Writes are handled like 'async' but there is no guarantee of the atomicity async provides.
+ # This mode should only be used for better performance when atomicity is not required.
+ # This configuration option has an automatic default value.
+ # vdo_write_policy = "auto"
+
+ # Configuration option allocation/vdo_max_discard.
+ # Specified the maximum size of discard bio accepted, in 4096 byte blocks.
+ # I/O requests to a VDO volume are normally split into 4096-byte blocks,
+ # and processed up to 2048 at a time. However, discard requests to a VDO volume
+ # can be automatically split to a larger size, up to 4096-byte blocks
+ # in a single bio, and are limited to 1500 at a time.
+ # Increasing this value may provide better overall performance, at the cost of
+ # increased latency for the individual discard requests.
+ # The default and minimum is 1. The maximum is UINT_MAX / 4096.
+ # This configuration option has an automatic default value.
+ # vdo_max_discard = 1
+
+ # Configuration option allocation/vdo_pool_header_size.
+ # Specified the emptry header size in KiB at the front and end of vdo pool device.
+ # This configuration option has an automatic default value.
+ # vdo_pool_header_size = 512
+}
+
+# Configuration section log.
+# How LVM log information is reported.
+log {
+
+ # Configuration option log/report_command_log.
+ # Enable or disable LVM log reporting.
+ # If enabled, LVM will collect a log of operations, messages,
+ # per-object return codes with object identification and associated
+ # error numbers (errnos) during LVM command processing. Then the
+ # log is either reported solely or in addition to any existing
+ # reports, depending on LVM command used. If it is a reporting command
+ # (e.g. pvs, vgs, lvs, lvm fullreport), then the log is reported in
+ # addition to any existing reports. Otherwise, there's only log report
+ # on output. For all applicable LVM commands, you can request that
+ # the output has only log report by using --logonly command line
+ # option. Use log/command_log_cols and log/command_log_sort settings
+ # to define fields to display and sort fields for the log report.
+ # You can also use log/command_log_selection to define selection
+ # criteria used each time the log is reported.
+ # This configuration option has an automatic default value.
+ # report_command_log = 0
+
+ # Configuration option log/command_log_sort.
+ # List of columns to sort by when reporting command log.
+ # See --logonly --configreport log -o help
+ # for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # command_log_sort = "log_seq_num"
+
+ # Configuration option log/command_log_cols.
+ # List of columns to report when reporting command log.
+ # See --logonly --configreport log -o help
+ # for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # command_log_cols = "log_seq_num,log_type,log_context,log_object_type,log_object_name,log_object_id,log_object_group,log_object_group_id,log_message,log_errno,log_ret_code"
+
+ # Configuration option log/command_log_selection.
+ # Selection criteria used when reporting command log.
+ # You can define selection criteria that are applied each
+ # time log is reported. This way, it is possible to control the
+ # amount of log that is displayed on output and you can select
+ # only parts of the log that are important for you. To define
+ # selection criteria, use fields from log report. See also
+ # --logonly --configreport log -S help for the
+ # list of possible fields and selection operators. You can also
+ # define selection criteria for log report on command line directly
+ # using --configreport log -S
+ # which has precedence over log/command_log_selection setting.
+ # For more information about selection criteria in general, see
+ # lvm(8) man page.
+ # This configuration option has an automatic default value.
+ # command_log_selection = "!(log_type=status && message=success)"
+
+ # Configuration option log/verbose.
+ # Controls the messages sent to stdout or stderr.
+ # This configuration option has an automatic default value.
+ # verbose = 0
+
+ # Configuration option log/silent.
+ # Suppress all non-essential messages from stdout.
+ # This has the same effect as -qq. When enabled, the following commands
+ # still produce output: dumpconfig, lvdisplay, lvmdiskscan, lvs, pvck,
+ # pvdisplay, pvs, version, vgcfgrestore -l, vgdisplay, vgs.
+ # Non-essential messages are shifted from log level 4 to log level 5
+ # for syslog and lvm2_log_fn purposes.
+ # Any 'yes' or 'no' questions not overridden by other arguments are
+ # suppressed and default to 'no'.
+ # This configuration option has an automatic default value.
+ # silent = 0
+
+ # Configuration option log/syslog.
+ # Send log messages through syslog.
+ # This configuration option has an automatic default value.
+ # syslog = 0
+
+ # Configuration option log/file.
+ # Write error and debug log messages to a file specified here.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option log/journal.
+ # Record lvm information in the systemd journal.
+ # command: record commands that are run.
+ # output: record default output from commands.
+ # debug: record debug messages from commands.
+ # This configuration option has an automatic default value.
+ # journal = [ ]
+
+ # Configuration option log/overwrite.
+ # Overwrite the log file each time the program is run.
+ # This configuration option has an automatic default value.
+ # overwrite = 0
+
+ # Configuration option log/level.
+ # The level of log messages that are sent to the log file or syslog.
+ # There are 6 syslog-like log levels currently in use: 2 to 7 inclusive.
+ # 7 is the most verbose (LOG_DEBUG).
+ # This configuration option has an automatic default value.
+ # level = 0
+
+ # Configuration option log/indent.
+ # Indent messages according to their severity.
+ # This configuration option has an automatic default value.
+ # indent = 0
+
+ # Configuration option log/command_names.
+ # Display the command name on each line of output.
+ # This configuration option has an automatic default value.
+ # command_names = 0
+
+ # Configuration option log/prefix.
+ # A prefix to use before the log message text.
+ # (After the command name, if selected).
+ # Two spaces allows you to see/grep the severity of each message.
+ # To make the messages look similar to the original LVM tools use:
+ # indent = 0, command_names = 1, prefix = " -- "
+ # This configuration option has an automatic default value.
+ # prefix = " "
+
+ # Configuration option log/activation.
+ # Log messages during activation.
+ # Don't use this in low memory situations (can deadlock).
+ # This configuration option has an automatic default value.
+ # activation = 0
+
+ # Configuration option log/debug_classes.
+ # Select log messages by class.
+ # Some debugging messages are assigned to a class and only appear in
+ # debug output if the class is listed here. Classes currently
+ # available: memory, devices, io, activation, allocation,
+ # metadata, cache, locking, lvmpolld. Use "all" to see everything.
+ # This configuration option has an automatic default value.
+ # debug_classes = [ "memory", "devices", "io", "activation", "allocation", "metadata", "cache", "locking", "lvmpolld", "dbus" ]
+
+ # Configuration option log/debug_file_fields.
+ # The fields included in debug output written to log file.
+ # Use "all" to include everything (the default).
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # debug_file_fields = [ "time", "command", "fileline", "message" ]
+
+ # Configuration option log/debug_output_fields.
+ # The fields included in debug output written to stderr.
+ # Use "all" to include everything (the default).
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # debug_output_fields = [ "time", "command", "fileline", "message" ]
+}
+
+# Configuration section backup.
+# How LVM metadata is backed up and archived.
+# In LVM, a 'backup' is a copy of the metadata for the current system,
+# and an 'archive' contains old metadata configurations. They are
+# stored in a human readable text format.
+backup {
+
+ # Configuration option backup/backup.
+ # Maintain a backup of the current metadata configuration.
+ # Think very hard before turning this off!
+ # This configuration option has an automatic default value.
+ # backup = 1
+
+ # Configuration option backup/backup_dir.
+ # Location of the metadata backup files.
+ # Remember to back up this directory regularly!
+ # This configuration option has an automatic default value.
+ # backup_dir = "/etc/lvm/backup"
+
+ # Configuration option backup/archive.
+ # Maintain an archive of old metadata configurations.
+ # Think very hard before turning this off.
+ # This configuration option has an automatic default value.
+ # archive = 1
+
+ # Configuration option backup/archive_dir.
+ # Location of the metdata archive files.
+ # Remember to back up this directory regularly!
+ # This configuration option has an automatic default value.
+ # archive_dir = "/etc/lvm/archive"
+
+ # Configuration option backup/retain_min.
+ # Minimum number of archives to keep.
+ # This configuration option has an automatic default value.
+ # retain_min = 10
+
+ # Configuration option backup/retain_days.
+ # Minimum number of days to keep archive files.
+ # This configuration option has an automatic default value.
+ # retain_days = 30
+}
+
+# Configuration section shell.
+# Settings for running LVM in shell (readline) mode.
+shell {
+
+ # Configuration option shell/history_size.
+ # Number of lines of history to store in ~/.lvm_history.
+ # This configuration option has an automatic default value.
+ # history_size = 100
+}
+
+# Configuration section global.
+# Miscellaneous global LVM settings.
+global {
+
+ # Configuration option global/umask.
+ # The file creation mask for any files and directories created.
+ # Interpreted as octal if the first digit is zero.
+ # This configuration option has an automatic default value.
+ # umask = 077
+
+ # Configuration option global/test.
+ # No on-disk metadata changes will be made in test mode.
+ # Equivalent to having the -t option on every command.
+ # This configuration option has an automatic default value.
+ # test = 0
+
+ # Configuration option global/units.
+ # Default value for --units argument.
+ # This configuration option has an automatic default value.
+ # units = "r"
+
+ # Configuration option global/si_unit_consistency.
+ # Distinguish between powers of 1024 and 1000 bytes.
+ # The LVM commands distinguish between powers of 1024 bytes,
+ # e.g. KiB, MiB, GiB, and powers of 1000 bytes, e.g. KB, MB, GB.
+ # If scripts depend on the old behaviour, disable this setting
+ # temporarily until they are updated.
+ # This configuration option has an automatic default value.
+ # si_unit_consistency = 1
+
+ # Configuration option global/suffix.
+ # Display unit suffix for sizes.
+ # This setting has no effect if the units are in human-readable form
+ # (global/units = "h") in which case the suffix is always displayed.
+ # This configuration option has an automatic default value.
+ # suffix = 1
+
+ # Configuration option global/activation.
+ # Enable/disable communication with the kernel device-mapper.
+ # Disable to use the tools to manipulate LVM metadata without
+ # activating any logical volumes. If the device-mapper driver
+ # is not present in the kernel, disabling this should suppress
+ # the error messages.
+ # This configuration option has an automatic default value.
+ # activation = 1
+
+ # Configuration option global/proc.
+ # Location of proc filesystem.
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # proc = "/proc"
+
+ # Configuration option global/etc.
+ # Location of /etc system configuration directory.
+ # This configuration option has an automatic default value.
+ # etc = "/etc"
+
+ # Configuration option global/wait_for_locks.
+ # When disabled, fail if a lock request would block.
+ # This configuration option has an automatic default value.
+ # wait_for_locks = 1
+
+ # Configuration option global/locking_dir.
+ # Directory to use for LVM command file locks.
+ # Local non-LV directory that holds file-based locks while commands are
+ # in progress. A directory like /tmp that may get wiped on reboot is OK.
+ # This configuration option has an automatic default value.
+ # locking_dir = "/run/lock/lvm"
+
+ # Configuration option global/prioritise_write_locks.
+ # Allow quicker VG write access during high volume read access.
+ # When there are competing read-only and read-write access requests for
+ # a volume group's metadata, instead of always granting the read-only
+ # requests immediately, delay them to allow the read-write requests to
+ # be serviced. Without this setting, write access may be stalled by a
+ # high volume of read-only requests. This option only affects file locks.
+ # This configuration option has an automatic default value.
+ # prioritise_write_locks = 1
+
+ # Configuration option global/library_dir.
+ # Search this directory first for shared libraries.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/abort_on_internal_errors.
+ # Abort a command that encounters an internal error.
+ # Treat any internal errors as fatal errors, aborting the process that
+ # encountered the internal error. Please only enable for debugging.
+ # This configuration option has an automatic default value.
+ # abort_on_internal_errors = 0
+
+ # Configuration option global/metadata_read_only.
+ # No operations that change on-disk metadata are permitted.
+ # Additionally, read-only commands that encounter metadata in need of
+ # repair will still be allowed to proceed exactly as if the repair had
+ # been performed (except for the unchanged vg_seqno). Inappropriate
+ # use could mess up your system, so seek advice first!
+ # This configuration option has an automatic default value.
+ # metadata_read_only = 0
+
+ # Configuration option global/mirror_segtype_default.
+ # The segment type used by the short mirroring option -m.
+ # The --type mirror|raid1 option overrides this setting.
+ #
+ # Accepted values:
+ # mirror
+ # The original RAID1 implementation from LVM/DM. It is
+ # characterized by a flexible log solution (core, disk, mirrored),
+ # and by the necessity to block I/O while handling a failure.
+ # There is an inherent race in the dmeventd failure handling logic
+ # with snapshots of devices using this type of RAID1 that in the
+ # worst case could cause a deadlock. (Also see
+ # devices/ignore_lvm_mirrors.)
+ # raid1
+ # This is a newer RAID1 implementation using the MD RAID1
+ # personality through device-mapper. It is characterized by a
+ # lack of log options. (A log is always allocated for every
+ # device and they are placed on the same device as the image,
+ # so no separate devices are required.) This mirror
+ # implementation does not require I/O to be blocked while
+ # handling a failure. This mirror implementation is not
+ # cluster-aware and cannot be used in a shared (active/active)
+ # fashion in a cluster.
+ #
+ # This configuration option has an automatic default value.
+ # mirror_segtype_default = "raid1"
+
+ # Configuration option global/support_mirrored_mirror_log.
+ # Enable mirrored 'mirror' log type for testing.
+ #
+ # This type is deprecated to create or convert to but can
+ # be enabled to test that activation of existing mirrored
+ # logs and conversion to disk/core works.
+ #
+ # Not supported for regular operation!
+ # This configuration option has an automatic default value.
+ # support_mirrored_mirror_log = 0
+
+ # Configuration option global/raid10_segtype_default.
+ # The segment type used by the -i -m combination.
+ # The --type raid10|mirror option overrides this setting.
+ # The --stripes/-i and --mirrors/-m options can both be specified
+ # during the creation of a logical volume to use both striping and
+ # mirroring for the LV. There are two different implementations.
+ #
+ # Accepted values:
+ # raid10
+ # LVM uses MD's RAID10 personality through DM. This is the
+ # preferred option.
+ # mirror
+ # LVM layers the 'mirror' and 'stripe' segment types. The layering
+ # is done by creating a mirror LV on top of striped sub-LVs,
+ # effectively creating a RAID 0+1 array. The layering is suboptimal
+ # in terms of providing redundancy and performance.
+ #
+ # This configuration option has an automatic default value.
+ # raid10_segtype_default = "raid10"
+
+ # Configuration option global/sparse_segtype_default.
+ # The segment type used by the -V -L combination.
+ # The --type snapshot|thin option overrides this setting.
+ # The combination of -V and -L options creates a sparse LV. There are
+ # two different implementations.
+ #
+ # Accepted values:
+ # snapshot
+ # The original snapshot implementation from LVM/DM. It uses an old
+ # snapshot that mixes data and metadata within a single COW
+ # storage volume and performs poorly when the size of stored data
+ # passes hundreds of MB.
+ # thin
+ # A newer implementation that uses thin provisioning. It has a
+ # bigger minimal chunk size (64KiB) and uses a separate volume for
+ # metadata. It has better performance, especially when more data
+ # is used. It also supports full snapshots.
+ #
+ # This configuration option has an automatic default value.
+ # sparse_segtype_default = "thin"
+
+ # Configuration option global/lvdisplay_shows_full_device_path.
+ # Enable this to reinstate the previous lvdisplay name format.
+ # The default format for displaying LV names in lvdisplay was changed
+ # in version 2.02.89 to show the LV name and path separately.
+ # Previously this was always shown as /dev/vgname/lvname even when that
+ # was never a valid path in the /dev filesystem.
+ # This configuration option has an automatic default value.
+ # lvdisplay_shows_full_device_path = 0
+
+ # Configuration option global/event_activation.
+ # Disable event based autoactivation commands.
+ # WARNING: setting this to zero may cause machine startup to fail.
+ # Previously, setting this to zero would enable static autoactivation
+ # services (via the lvm2-activation-generator), but the autoactivation
+ # services and generator have been removed.
+ # This configuration option has an automatic default value.
+ # event_activation = 1
+
+ # Configuration option global/use_aio.
+ # Use async I/O when reading and writing devices.
+ # This configuration option has an automatic default value.
+ # use_aio = 1
+
+ # Configuration option global/use_lvmlockd.
+ # Use lvmlockd for locking among hosts using LVM on shared storage.
+ # Applicable only if LVM is compiled with lockd support in which
+ # case there is also lvmlockd(8) man page available for more
+ # information.
+ # This configuration option has an automatic default value.
+ # use_lvmlockd = 0
+
+ # Configuration option global/lvmlockd_lock_retries.
+ # Retry lvmlockd lock requests this many times.
+ # Applicable only if LVM is compiled with lockd support
+ # This configuration option has an automatic default value.
+ # lvmlockd_lock_retries = 3
+
+ # Configuration option global/sanlock_lv_extend.
+ # Size in MiB to extend the internal LV holding sanlock locks.
+ # The internal LV holds locks for each LV in the VG, and after enough
+ # LVs have been created, the internal LV needs to be extended. lvcreate
+ # will automatically extend the internal LV when needed by the amount
+ # specified here. Setting this to 0 disables the automatic extension
+ # and can cause lvcreate to fail. Applicable only if LVM is compiled
+ # with lockd support
+ # This configuration option has an automatic default value.
+ # sanlock_lv_extend = 256
+
+ # Configuration option global/lvmlockctl_kill_command.
+ # The command that lvmlockctl --kill should use to force LVs offline.
+ # The lvmlockctl --kill command is run when a shared VG has lost
+ # access to locks (e.g. when sanlock has lost access to storage.)
+ # An empty string means that there will be no automatic attempt by
+ # lvmlockctl --kill to forcibly shut down LVs in the VG, and the user
+ # can manually intervene as described in lvmlockd(8).
+ # The VG name will be appended to the command specified here.
+ # This configuration option has an automatic default value.
+ # lvmlockctl_kill_command = ""
+
+ # Configuration option global/thin_check_executable.
+ # The full path to the thin_check command.
+ # LVM uses this command to check that a thin metadata device is in a
+ # usable state. When a thin pool is activated and after it is
+ # deactivated, this command is run. Activation will only proceed if
+ # the command has an exit status of 0. Set to "" to skip this check.
+ # (Not recommended.) Also see thin_check_options.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # thin_check_executable = "/usr/sbin/thin_check"
+
+ # Configuration option global/thin_dump_executable.
+ # The full path to the thin_dump command.
+ # LVM uses this command to dump thin pool metadata.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # thin_dump_executable = "/usr/sbin/thin_dump"
+
+ # Configuration option global/thin_repair_executable.
+ # The full path to the thin_repair command.
+ # LVM uses this command to repair a thin metadata device if it is in
+ # an unusable state. Also see thin_repair_options.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # thin_repair_executable = "/usr/sbin/thin_repair"
+
+ # Configuration option global/thin_check_options.
+ # List of options passed to the thin_check command.
+ # With thin_check version 2.1 or newer you can add the option
+ # --ignore-non-fatal-errors to let it pass through ignorable errors
+ # and fix them later. With thin_check version 3.2 or newer you should
+ # include the option --clear-needs-check-flag.
+ # This configuration option has an automatic default value.
+ # thin_check_options = [ "-q", "--clear-needs-check-flag" ]
+
+ # Configuration option global/thin_repair_options.
+ # List of options passed to the thin_repair command.
+ # This configuration option has an automatic default value.
+ # thin_repair_options = [ "" ]
+
+ # Configuration option global/thin_disabled_features.
+ # Features to not use in the thin driver.
+ # This can be helpful for testing, or to avoid using a feature that is
+ # causing problems. Features include: block_size, discards,
+ # discards_non_power_2, external_origin, metadata_resize,
+ # external_origin_extend, error_if_no_space.
+ #
+ # Example
+ # thin_disabled_features = [ "discards", "block_size" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/cache_disabled_features.
+ # Features to not use in the cache driver.
+ # This can be helpful for testing, or to avoid using a feature that is
+ # causing problems. Features include: policy_mq, policy_smq, metadata2.
+ #
+ # Example
+ # cache_disabled_features = [ "policy_smq" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/cache_check_executable.
+ # The full path to the cache_check command.
+ # LVM uses this command to check that a cache metadata device is in a
+ # usable state. When a cached LV is activated and after it is
+ # deactivated, this command is run. Activation will only proceed if the
+ # command has an exit status of 0. Set to "" to skip this check.
+ # (Not recommended.) Also see cache_check_options.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # cache_check_executable = "/usr/sbin/cache_check"
+
+ # Configuration option global/cache_dump_executable.
+ # The full path to the cache_dump command.
+ # LVM uses this command to dump cache pool metadata.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # cache_dump_executable = "/usr/sbin/cache_dump"
+
+ # Configuration option global/cache_repair_executable.
+ # The full path to the cache_repair command.
+ # LVM uses this command to repair a cache metadata device if it is in
+ # an unusable state. Also see cache_repair_options.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # cache_repair_executable = "/usr/sbin/cache_repair"
+
+ # Configuration option global/cache_check_options.
+ # List of options passed to the cache_check command.
+ # With cache_check version 5.0 or newer you should include the option
+ # --clear-needs-check-flag.
+ # This configuration option has an automatic default value.
+ # cache_check_options = [ "-q", "--clear-needs-check-flag" ]
+
+ # Configuration option global/cache_repair_options.
+ # List of options passed to the cache_repair command.
+ # This configuration option has an automatic default value.
+ # cache_repair_options = [ "" ]
+
+ # Configuration option global/vdo_format_executable.
+ # The full path to the vdoformat command.
+ # LVM uses this command to initial data volume for VDO type logical volume
+ # This configuration option has an automatic default value.
+ # vdo_format_executable = "/usr/bin/vdoformat"
+
+ # Configuration option global/vdo_format_options.
+ # List of options passed added to standard vdoformat command.
+ # This configuration option has an automatic default value.
+ # vdo_format_options = [ "" ]
+
+ # Configuration option global/vdo_disabled_features.
+ # Features to not use in the vdo driver.
+ # This can be helpful for testing, or to avoid using a feature that is
+ # causing problems. Features include: online_rename
+ #
+ # Example
+ # vdo_disabled_features = [ "online_rename" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/fsadm_executable.
+ # The full path to the fsadm command.
+ # LVM uses this command to help with lvresize -r operations.
+ # This configuration option has an automatic default value.
+ # fsadm_executable = "/usr/sbin/fsadm"
+
+ # Configuration option global/system_id_source.
+ # The method LVM uses to set the local system ID.
+ # Volume Groups can also be given a system ID (by vgcreate, vgchange,
+ # or vgimport.) A VG on shared storage devices is accessible only to
+ # the host with a matching system ID. See 'man lvmsystemid' for
+ # information on limitations and correct usage.
+ #
+ # Accepted values:
+ # none
+ # The host has no system ID.
+ # lvmlocal
+ # Obtain the system ID from the system_id setting in the 'local'
+ # section of an lvm configuration file, e.g. lvmlocal.conf.
+ # uname
+ # Set the system ID from the hostname (uname) of the system.
+ # System IDs beginning localhost are not permitted.
+ # appmachineid
+ # Use an LVM-specific derivation of the local machine-id as the
+ # system ID. See 'man machine-id'.
+ # machineid
+ # Use the contents of the machine-id file to set the system ID
+ # (appmachineid is recommended.)
+ # file
+ # Use the contents of another file (system_id_file) to set the
+ # system ID.
+ #
+ # This configuration option has an automatic default value.
+ # system_id_source = "none"
+
+ # Configuration option global/system_id_file.
+ # The full path to the file containing a system ID.
+ # This is used when system_id_source is set to 'file'.
+ # Comments starting with the character # are ignored.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/use_lvmpolld.
+ # Use lvmpolld to supervise long running LVM commands.
+ # When enabled, control of long running LVM commands is transferred
+ # from the original LVM command to the lvmpolld daemon. This allows
+ # the operation to continue independent of the original LVM command.
+ # After lvmpolld takes over, the LVM command displays the progress
+ # of the ongoing operation. lvmpolld itself runs LVM commands to
+ # manage the progress of ongoing operations. lvmpolld can be used as
+ # a native systemd service, which allows it to be started on demand,
+ # and to use its own control group. When this option is disabled, LVM
+ # commands will supervise long running operations by forking themselves.
+ # Applicable only if LVM is compiled with lvmpolld support.
+ # This configuration option has an automatic default value.
+ # use_lvmpolld = 1
+
+ # Configuration option global/notify_dbus.
+ # Enable D-Bus notification from LVM commands.
+ # When enabled, an LVM command that changes PVs, changes VG metadata,
+ # or changes the activation state of an LV will send a notification.
+ # This configuration option has an automatic default value.
+ # notify_dbus = 1
+
+ # Configuration option global/io_memory_size.
+ # The amount of memory in KiB that LVM allocates to perform disk io.
+ # LVM performance may benefit from more io memory when there are many
+ # disks or VG metadata is large. Increasing this size may be necessary
+ # when a single copy of VG metadata is larger than the current setting.
+ # This value should usually not be decreased from the default; setting
+ # it too low can result in lvm failing to read VGs.
+ # This configuration option has an automatic default value.
+ # io_memory_size = 8192
+}
+
+# Configuration section activation.
+activation {
+
+ # Configuration option activation/checks.
+ # Perform internal checks of libdevmapper operations.
+ # Useful for debugging problems with activation. Some of the checks may
+ # be expensive, so it's best to use this only when there seems to be a
+ # problem.
+ # This configuration option has an automatic default value.
+ # checks = 0
+
+ # Configuration option activation/udev_sync.
+ # Use udev notifications to synchronize udev and LVM.
+ # The --noudevsync option overrides this setting.
+ # When disabled, LVM commands will not wait for notifications from
+ # udev, but continue irrespective of any possible udev processing in
+ # the background. Only use this if udev is not running or has rules
+ # that ignore the devices LVM creates. If enabled when udev is not
+ # running, and LVM processes are waiting for udev, run the command
+ # 'dmsetup udevcomplete_all' to wake them up.
+ # This configuration option has an automatic default value.
+ # udev_sync = 1
+
+ # Configuration option activation/udev_rules.
+ # Use udev rules to manage LV device nodes and symlinks.
+ # When disabled, LVM will manage the device nodes and symlinks for
+ # active LVs itself. Manual intervention may be required if this
+ # setting is changed while LVs are active.
+ # This configuration option has an automatic default value.
+ # udev_rules = 1
+
+ # Configuration option activation/verify_udev_operations.
+ # Use extra checks in LVM to verify udev operations.
+ # This enables additional checks (and if necessary, repairs) on entries
+ # in the device directory after udev has completed processing its
+ # events. Useful for diagnosing problems with LVM/udev interactions.
+ # This configuration option has an automatic default value.
+ # verify_udev_operations = 0
+
+ # Configuration option activation/retry_deactivation.
+ # Retry failed LV deactivation.
+ # If LV deactivation fails, LVM will retry for a few seconds before
+ # failing. This may happen because a process run from a quick udev rule
+ # temporarily opened the device.
+ # This configuration option has an automatic default value.
+ # retry_deactivation = 1
+
+ # Configuration option activation/missing_stripe_filler.
+ # Method to fill missing stripes when activating an incomplete LV.
+ # Using 'error' will make inaccessible parts of the device return I/O
+ # errors on access. Using 'zero' will return success (and zero) on I/O
+ # You can instead use a device path, in which case,
+ # that device will be used in place of missing stripes. Using anything
+ # other than 'error' with mirrored or snapshotted volumes is likely to
+ # result in data corruption.
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # missing_stripe_filler = "error"
+
+ # Configuration option activation/use_linear_target.
+ # Use the linear target to optimize single stripe LVs.
+ # When disabled, the striped target is used. The linear target is an
+ # optimised version of the striped target that only handles a single
+ # stripe.
+ # This configuration option has an automatic default value.
+ # use_linear_target = 1
+
+ # Configuration option activation/reserved_stack.
+ # Stack size in KiB to reserve for use while devices are suspended.
+ # Insufficent reserve risks I/O deadlock during device suspension.
+ # This configuration option has an automatic default value.
+ # reserved_stack = 64
+
+ # Configuration option activation/reserved_memory.
+ # Memory size in KiB to reserve for use while devices are suspended.
+ # Insufficent reserve risks I/O deadlock during device suspension.
+ # This configuration option has an automatic default value.
+ # reserved_memory = 8192
+
+ # Configuration option activation/process_priority.
+ # Nice value used while devices are suspended.
+ # Use a high priority so that LVs are suspended
+ # for the shortest possible time.
+ # This configuration option has an automatic default value.
+ # process_priority = -18
+
+ # Configuration option activation/volume_list.
+ # Only LVs selected by this list are activated.
+ # If this list is defined, an LV is only activated if it matches an
+ # entry in this list. If this list is undefined, it imposes no limits
+ # on LV activation (all are allowed).
+ #
+ # Accepted values:
+ # vgname
+ # The VG name is matched exactly and selects all LVs in the VG.
+ # vgname/lvname
+ # The VG name and LV name are matched exactly and selects the LV.
+ # @tag
+ # Selects an LV if the specified tag matches a tag set on the LV
+ # or VG.
+ # @*
+ # Selects an LV if a tag defined on the host is also set on the LV
+ # or VG. See tags/hosttags. If any host tags exist but volume_list
+ # is not defined, a default single-entry list containing '@*'
+ # is assumed.
+ #
+ # Example
+ # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option activation/auto_activation_volume_list.
+ # A list of VGs or LVs that should be autoactivated.
+ # Autoactivation is an activation command run with -aay,
+ # i.e. vgchange -aay, lvchange -aay, or pvscan --cache -aay.
+ # When this list is defined, an autoactivation command will only
+ # activate LVs included in the list. If this list is undefined,
+ # it has no effect. If this list is defined but empty, then no
+ # LVs will be autoactivated. LVs can be included in the list by
+ # LV name, VG name (applies to all LVs in the VG), or tag name.
+ # VGs and LVs can also have an autoactivation property set in
+ # metadata, see --setautoactivation. LVs included in this list
+ # will not be autoactivated if the VG or LV autoactivation
+ # property is disabled (see vgs or lvs "-o autoactivation").
+ # The volume_list setting and the "activation skip" property
+ # also apply to autoactivation.
+ # The -aay option is meant to be used by activation commands that
+ # are run automatically by the system, e.g. from systemd services.
+ #
+ # Accepted values:
+ # vgname
+ # The VG name is matched exactly and selects all LVs in the VG.
+ # vgname/lvname
+ # The VG name and LV name are matched exactly and selects the LV.
+ # @tag
+ # Selects an LV if the specified tag matches a tag set on the LV
+ # or VG.
+ # @*
+ # Selects an LV if a tag defined on the host is also set on the LV
+ # or VG. See tags/hosttags. If any host tags exist but volume_list
+ # is not defined, a default single-entry list containing '@*'
+ # is assumed.
+ #
+ # Example
+ # auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option activation/read_only_volume_list.
+ # LVs in this list are activated in read-only mode.
+ # If this list is defined, each LV that is to be activated is checked
+ # against this list, and if it matches, it is activated in read-only
+ # mode. This overrides the permission setting stored in the metadata,
+ # e.g. from --permission rw.
+ #
+ # Accepted values:
+ # vgname
+ # The VG name is matched exactly and selects all LVs in the VG.
+ # vgname/lvname
+ # The VG name and LV name are matched exactly and selects the LV.
+ # @tag
+ # Selects an LV if the specified tag matches a tag set on the LV
+ # or VG.
+ # @*
+ # Selects an LV if a tag defined on the host is also set on the LV
+ # or VG. See tags/hosttags. If any host tags exist but volume_list
+ # is not defined, a default single-entry list containing '@*'
+ # is assumed.
+ #
+ # Example
+ # read_only_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option activation/raid_region_size.
+ # Size in KiB of each raid or mirror synchronization region.
+ # The clean/dirty state of data is tracked for each region.
+ # The value is rounded down to a power of two if necessary, and
+ # is ignored if it is not a multiple of the machine memory page size.
+ # This configuration option has an automatic default value.
+ # raid_region_size = 2048
+
+ # Configuration option activation/error_when_full.
+ # Return errors if a thin pool runs out of space.
+ # The --errorwhenfull option overrides this setting.
+ # When enabled, writes to thin LVs immediately return an error if the
+ # thin pool is out of data space. When disabled, writes to thin LVs
+ # are queued if the thin pool is out of space, and processed when the
+ # thin pool data space is extended. New thin pools are assigned the
+ # behavior defined here.
+ # This configuration option has an automatic default value.
+ # error_when_full = 0
+
+ # Configuration option activation/readahead.
+ # Setting to use when there is no readahead setting in metadata.
+ #
+ # Accepted values:
+ # none
+ # Disable readahead.
+ # auto
+ # Use default value chosen by kernel.
+ #
+ # This configuration option has an automatic default value.
+ # readahead = "auto"
+
+ # Configuration option activation/raid_fault_policy.
+ # Defines how a device failure in a RAID LV is handled.
+ # This includes LVs that have the following segment types:
+ # raid1, raid4, raid5*, and raid6*.
+ # If a device in the LV fails, the policy determines the steps
+ # performed by dmeventd automatically, and the steps perfomed by the
+ # manual command lvconvert --repair --use-policies.
+ # Automatic handling requires dmeventd to be monitoring the LV.
+ #
+ # Accepted values:
+ # warn
+ # Use the system log to warn the user that a device in the RAID LV
+ # has failed. It is left to the user to run lvconvert --repair
+ # manually to remove or replace the failed device. As long as the
+ # number of failed devices does not exceed the redundancy of the LV
+ # (1 device for raid4/5, 2 for raid6), the LV will remain usable.
+ # allocate
+ # Attempt to use any extra physical volumes in the VG as spares and
+ # replace faulty devices.
+ #
+ # This configuration option has an automatic default value.
+ # raid_fault_policy = "warn"
+
+ # Configuration option activation/mirror_image_fault_policy.
+ # Defines how a device failure in a 'mirror' LV is handled.
+ # An LV with the 'mirror' segment type is composed of mirror images
+ # (copies) and a mirror log. A disk log ensures that a mirror LV does
+ # not need to be re-synced (all copies made the same) every time a
+ # machine reboots or crashes. If a device in the LV fails, this policy
+ # determines the steps perfomed by dmeventd automatically, and the steps
+ # performed by the manual command lvconvert --repair --use-policies.
+ # Automatic handling requires dmeventd to be monitoring the LV.
+ #
+ # Accepted values:
+ # remove
+ # Simply remove the faulty device and run without it. If the log
+ # device fails, the mirror would convert to using an in-memory log.
+ # This means the mirror will not remember its sync status across
+ # crashes/reboots and the entire mirror will be re-synced. If a
+ # mirror image fails, the mirror will convert to a non-mirrored
+ # device if there is only one remaining good copy.
+ # allocate
+ # Remove the faulty device and try to allocate space on a new
+ # device to be a replacement for the failed device. Using this
+ # policy for the log is fast and maintains the ability to remember
+ # sync state through crashes/reboots. Using this policy for a
+ # mirror device is slow, as it requires the mirror to resynchronize
+ # the devices, but it will preserve the mirror characteristic of
+ # the device. This policy acts like 'remove' if no suitable device
+ # and space can be allocated for the replacement.
+ # allocate_anywhere
+ # Not yet implemented. Useful to place the log device temporarily
+ # on the same physical volume as one of the mirror images. This
+ # policy is not recommended for mirror devices since it would break
+ # the redundant nature of the mirror. This policy acts like
+ # 'remove' if no suitable device and space can be allocated for the
+ # replacement.
+ #
+ # This configuration option has an automatic default value.
+ # mirror_image_fault_policy = "remove"
+
+ # Configuration option activation/mirror_log_fault_policy.
+ # Defines how a device failure in a 'mirror' log LV is handled.
+ # The mirror_image_fault_policy description for mirrored LVs also
+ # applies to mirrored log LVs.
+ # This configuration option has an automatic default value.
+ # mirror_log_fault_policy = "allocate"
+
+ # Configuration option activation/snapshot_autoextend_threshold.
+ # Auto-extend a snapshot when its usage exceeds this percent.
+ # Setting this to 100 disables automatic extension.
+ # The minimum value is 50 (a smaller value is treated as 50.)
+ # Also see snapshot_autoextend_percent.
+ # Automatic extension requires dmeventd to be monitoring the LV.
+ #
+ # Example
+ # Using 70% autoextend threshold and 20% autoextend size, when a 1G
+ # snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds
+ # 840M, it is extended to 1.44G:
+ # snapshot_autoextend_threshold = 70
+ #
+ # This configuration option has an automatic default value.
+ # snapshot_autoextend_threshold = 100
+
+ # Configuration option activation/snapshot_autoextend_percent.
+ # Auto-extending a snapshot adds this percent extra space.
+ # The amount of additional space added to a snapshot is this
+ # percent of its current size.
+ #
+ # Example
+ # Using 70% autoextend threshold and 20% autoextend size, when a 1G
+ # snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds
+ # 840M, it is extended to 1.44G:
+ # snapshot_autoextend_percent = 20
+ #
+ # This configuration option has an automatic default value.
+ # snapshot_autoextend_percent = 20
+
+ # Configuration option activation/thin_pool_autoextend_threshold.
+ # Auto-extend a thin pool when its usage exceeds this percent.
+ # Setting this to 100 disables automatic extension.
+ # The minimum value is 50 (a smaller value is treated as 50.)
+ # Also see thin_pool_autoextend_percent.
+ # Automatic extension requires dmeventd to be monitoring the LV.
+ #
+ # Example
+ # Using 70% autoextend threshold and 20% autoextend size, when a 1G
+ # thin pool exceeds 700M, it is extended to 1.2G, and when it exceeds
+ # 840M, it is extended to 1.44G:
+ # thin_pool_autoextend_threshold = 70
+ #
+ # This configuration option has an automatic default value.
+ # thin_pool_autoextend_threshold = 100
+
+ # Configuration option activation/thin_pool_autoextend_percent.
+ # Auto-extending a thin pool adds this percent extra space.
+ # The amount of additional space added to a thin pool is this
+ # percent of its current size.
+ #
+ # Example
+ # Using 70% autoextend threshold and 20% autoextend size, when a 1G
+ # thin pool exceeds 700M, it is extended to 1.2G, and when it exceeds
+ # 840M, it is extended to 1.44G:
+ # thin_pool_autoextend_percent = 20
+ #
+ # This configuration option has an automatic default value.
+ # thin_pool_autoextend_percent = 20
+
+ # Configuration option activation/vdo_pool_autoextend_threshold.
+ # Auto-extend a VDO pool when its usage exceeds this percent.
+ # Setting this to 100 disables automatic extension.
+ # The minimum value is 50 (a smaller value is treated as 50.)
+ # Also see vdo_pool_autoextend_percent.
+ # Automatic extension requires dmeventd to be monitoring the LV.
+ #
+ # Example
+ # Using 70% autoextend threshold and 20% autoextend size, when a 10G
+ # VDO pool exceeds 7G, it is extended to 12G, and when it exceeds
+ # 8.4G, it is extended to 14.4G:
+ # vdo_pool_autoextend_threshold = 70
+ #
+ # This configuration option has an automatic default value.
+ # vdo_pool_autoextend_threshold = 100
+
+ # Configuration option activation/vdo_pool_autoextend_percent.
+ # Auto-extending a VDO pool adds this percent extra space.
+ # The amount of additional space added to a VDO pool is this
+ # percent of its current size.
+ #
+ # Example
+ # Using 70% autoextend threshold and 20% autoextend size, when a 10G
+ # VDO pool exceeds 7G, it is extended to 12G, and when it exceeds
+ # 8.4G, it is extended to 14.4G:
+ # This configuration option has an automatic default value.
+ # vdo_pool_autoextend_percent = 20
+
+ # Configuration option activation/mlock_filter.
+ # Do not mlock these memory areas.
+ # While activating devices, I/O to devices being (re)configured is
+ # suspended. As a precaution against deadlocks, LVM pins memory it is
+ # using so it is not paged out, and will not require I/O to reread.
+ # Groups of pages that are known not to be accessed during activation
+ # do not need to be pinned into memory. Each string listed in this
+ # setting is compared against each line in /proc/self/maps, and the
+ # pages corresponding to lines that match are not pinned. On some
+ # systems, locale-archive was found to make up over 80% of the memory
+ # used by the process.
+ #
+ # Example
+ # mlock_filter = [ "locale/locale-archive", "gconv/gconv-modules.cache" ]
+ #
+ # This configuration option is advanced.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option activation/use_mlockall.
+ # Use the old behavior of mlockall to pin all memory.
+ # Prior to version 2.02.62, LVM used mlockall() to pin the whole
+ # process's memory while activating devices.
+ # This configuration option has an automatic default value.
+ # use_mlockall = 0
+
+ # Configuration option activation/monitoring.
+ # Monitor LVs that are activated.
+ # The --ignoremonitoring option overrides this setting.
+ # When enabled, LVM will ask dmeventd to monitor activated LVs.
+ # This configuration option has an automatic default value.
+ # monitoring = 1
+
+ # Configuration option activation/polling_interval.
+ # Check pvmove or lvconvert progress at this interval (seconds).
+ # When pvmove or lvconvert must wait for the kernel to finish
+ # synchronising or merging data, they check and report progress at
+ # intervals of this number of seconds. If this is set to 0 and there
+ # is only one thing to wait for, there are no progress reports, but
+ # the process is awoken immediately once the operation is complete.
+ # This configuration option has an automatic default value.
+ # polling_interval = 15
+
+ # Configuration option activation/auto_set_activation_skip.
+ # Set the activation skip flag on new thin snapshot LVs.
+ # The --setactivationskip option overrides this setting.
+ # An LV can have a persistent 'activation skip' flag. The flag causes
+ # the LV to be skipped during normal activation. The lvchange/vgchange
+ # -K option is required to activate LVs that have the activation skip
+ # flag set. When this setting is enabled, the activation skip flag is
+ # set on new thin snapshot LVs.
+ # This configuration option has an automatic default value.
+ # auto_set_activation_skip = 1
+
+ # Configuration option activation/activation_mode.
+ # How LVs with missing devices are activated.
+ # The --activationmode option overrides this setting.
+ #
+ # Accepted values:
+ # complete
+ # Only allow activation of an LV if all of the Physical Volumes it
+ # uses are present. Other PVs in the Volume Group may be missing.
+ # degraded
+ # Like complete, but additionally RAID LVs of segment type raid1,
+ # raid4, raid5, radid6 and raid10 will be activated if there is no
+ # data loss, i.e. they have sufficient redundancy to present the
+ # entire addressable range of the Logical Volume.
+ # partial
+ # Allows the activation of any LV even if a missing or failed PV
+ # could cause data loss with a portion of the LV inaccessible.
+ # This setting should not normally be used, but may sometimes
+ # assist with data recovery.
+ #
+ # This configuration option has an automatic default value.
+ # activation_mode = "degraded"
+
+ # Configuration option activation/lock_start_list.
+ # Locking is started only for VGs selected by this list.
+ # The rules are the same as those for volume_list.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option activation/auto_lock_start_list.
+ # Locking is auto-started only for VGs selected by this list.
+ # The rules are the same as those for auto_activation_volume_list.
+ # This configuration option does not have a default value defined.
+}
+
+# Configuration section metadata.
+# This configuration section has an automatic default value.
+# metadata {
+
+ # Configuration option metadata/check_pv_device_sizes.
+ # Check device sizes are not smaller than corresponding PV sizes.
+ # If device size is less than corresponding PV size found in metadata,
+ # there is always a risk of data loss. If this option is set, then LVM
+ # issues a warning message each time it finds that the device size is
+ # less than corresponding PV size. You should not disable this unless
+ # you are absolutely sure about what you are doing!
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # check_pv_device_sizes = 1
+
+ # Configuration option metadata/record_lvs_history.
+ # When enabled, LVM keeps history records about removed LVs in
+ # metadata. The information that is recorded in metadata for
+ # historical LVs is reduced when compared to original
+ # information kept in metadata for live LVs. Currently, this
+ # feature is supported for thin and thin snapshot LVs only.
+ # This configuration option has an automatic default value.
+ # record_lvs_history = 0
+
+ # Configuration option metadata/lvs_history_retention_time.
+ # Retention time in seconds after which a record about individual
+ # historical logical volume is automatically destroyed.
+ # A value of 0 disables this feature.
+ # This configuration option has an automatic default value.
+ # lvs_history_retention_time = 0
+
+ # Configuration option metadata/pvmetadatacopies.
+ # Number of copies of metadata to store on each PV.
+ # The --pvmetadatacopies option overrides this setting.
+ #
+ # Accepted values:
+ # 2
+ # Two copies of the VG metadata are stored on the PV, one at the
+ # front of the PV, and one at the end.
+ # 1
+ # One copy of VG metadata is stored at the front of the PV.
+ # 0
+ # No copies of VG metadata are stored on the PV. This may be
+ # useful for VGs containing large numbers of PVs.
+ #
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # pvmetadatacopies = 1
+
+ # Configuration option metadata/vgmetadatacopies.
+ # Number of copies of metadata to maintain for each VG.
+ # The --vgmetadatacopies option overrides this setting.
+ # If set to a non-zero value, LVM automatically chooses which of the
+ # available metadata areas to use to achieve the requested number of
+ # copies of the VG metadata. If you set a value larger than the the
+ # total number of metadata areas available, then metadata is stored in
+ # them all. The value 0 (unmanaged) disables this automatic management
+ # and allows you to control which metadata areas are used at the
+ # individual PV level using pvchange --metadataignore y|n.
+ # This configuration option has an automatic default value.
+ # vgmetadatacopies = 0
+
+ # Configuration option metadata/pvmetadatasize.
+ # The default size of the metadata area in units of 512 byte sectors.
+ # The metadata area begins at an offset of the page size from the start
+ # of the device. The first PE is by default at 1 MiB from the start of
+ # the device. The space between these is the default metadata area size.
+ # The actual size of the metadata area may be larger than what is set
+ # here due to default_data_alignment making the first PE a MiB multiple.
+ # The metadata area begins with a 512 byte header and is followed by a
+ # circular buffer used for VG metadata text. The maximum size of the VG
+ # metadata is about half the size of the metadata buffer. VGs with large
+ # numbers of PVs or LVs, or VGs containing complex LV structures, may need
+ # additional space for VG metadata. The --metadatasize option overrides
+ # this setting.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option metadata/pvmetadataignore.
+ # Ignore metadata areas on a new PV.
+ # The --metadataignore option overrides this setting.
+ # If metadata areas on a PV are ignored, LVM will not store metadata
+ # in them.
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # pvmetadataignore = 0
+
+ # Configuration option metadata/stripesize.
+ # This configuration option is advanced.
+ # This configuration option has an automatic default value.
+ # stripesize = 64
+# }
+
+# Configuration section report.
+# LVM report command output formatting.
+# This configuration section has an automatic default value.
+# report {
+
+ # Configuration option report/output_format.
+ # Format of LVM command's report output.
+ # If there is more than one report per command, then the format
+ # is applied for all reports. You can also change output format
+ # directly on command line using --reportformat option which
+ # has precedence over log/output_format setting.
+ # Accepted values:
+ # basic
+ # Original format with columns and rows. If there is more than
+ # one report per command, each report is prefixed with report's
+ # name for identification.
+ # json
+ # JSON format.
+ # This configuration option has an automatic default value.
+ # output_format = "basic"
+
+ # Configuration option report/compact_output.
+ # Do not print empty values for all report fields.
+ # If enabled, all fields that don't have a value set for any of the
+ # rows reported are skipped and not printed. Compact output is
+ # applicable only if report/buffered is enabled. If you need to
+ # compact only specified fields, use compact_output=0 and define
+ # report/compact_output_cols configuration setting instead.
+ # This configuration option has an automatic default value.
+ # compact_output = 0
+
+ # Configuration option report/compact_output_cols.
+ # Do not print empty values for specified report fields.
+ # If defined, specified fields that don't have a value set for any
+ # of the rows reported are skipped and not printed. Compact output
+ # is applicable only if report/buffered is enabled. If you need to
+ # compact all fields, use compact_output=1 instead in which case
+ # the compact_output_cols setting is then ignored.
+ # This configuration option has an automatic default value.
+ # compact_output_cols = ""
+
+ # Configuration option report/aligned.
+ # Align columns in report output.
+ # This configuration option has an automatic default value.
+ # aligned = 1
+
+ # Configuration option report/buffered.
+ # Buffer report output.
+ # When buffered reporting is used, the report's content is appended
+ # incrementally to include each object being reported until the report
+ # is flushed to output which normally happens at the end of command
+ # execution. Otherwise, if buffering is not used, each object is
+ # reported as soon as its processing is finished.
+ # This configuration option has an automatic default value.
+ # buffered = 1
+
+ # Configuration option report/headings.
+ # Show headings for columns on report.
+ # This configuration option has an automatic default value.
+ # headings = 1
+
+ # Configuration option report/separator.
+ # A separator to use on report after each field.
+ # This configuration option has an automatic default value.
+ # separator = " "
+
+ # Configuration option report/list_item_separator.
+ # A separator to use for list items when reported.
+ # This configuration option has an automatic default value.
+ # list_item_separator = ","
+
+ # Configuration option report/prefixes.
+ # Use a field name prefix for each field reported.
+ # This configuration option has an automatic default value.
+ # prefixes = 0
+
+ # Configuration option report/quoted.
+ # Quote field values when using field name prefixes.
+ # This configuration option has an automatic default value.
+ # quoted = 1
+
+ # Configuration option report/columns_as_rows.
+ # Output each column as a row.
+ # If set, this also implies report/prefixes=1.
+ # This configuration option has an automatic default value.
+ # columns_as_rows = 0
+
+ # Configuration option report/binary_values_as_numeric.
+ # Use binary values 0 or 1 instead of descriptive literal values.
+ # For columns that have exactly two valid values to report
+ # (not counting the 'unknown' value which denotes that the
+ # value could not be determined).
+ # This configuration option has an automatic default value.
+ # binary_values_as_numeric = 0
+
+ # Configuration option report/time_format.
+ # Set time format for fields reporting time values.
+ # Format specification is a string which may contain special character
+ # sequences and ordinary character sequences. Ordinary character
+ # sequences are copied verbatim. Each special character sequence is
+ # introduced by the '%' character and such sequence is then
+ # substituted with a value as described below.
+ #
+ # Accepted values:
+ # %a
+ # The abbreviated name of the day of the week according to the
+ # current locale.
+ # %A
+ # The full name of the day of the week according to the current
+ # locale.
+ # %b
+ # The abbreviated month name according to the current locale.
+ # %B
+ # The full month name according to the current locale.
+ # %c
+ # The preferred date and time representation for the current
+ # locale (alt E)
+ # %C
+ # The century number (year/100) as a 2-digit integer. (alt E)
+ # %d
+ # The day of the month as a decimal number (range 01 to 31).
+ # (alt O)
+ # %D
+ # Equivalent to %m/%d/%y. (For Americans only. Americans should
+ # note that in other countries%d/%m/%y is rather common. This
+ # means that in international context this format is ambiguous and
+ # should not be used.
+ # %e
+ # Like %d, the day of the month as a decimal number, but a leading
+ # zero is replaced by a space. (alt O)
+ # %E
+ # Modifier: use alternative local-dependent representation if
+ # available.
+ # %F
+ # Equivalent to %Y-%m-%d (the ISO 8601 date format).
+ # %G
+ # The ISO 8601 week-based year with century as adecimal number.
+ # The 4-digit year corresponding to the ISO week number (see %V).
+ # This has the same format and value as %Y, except that if the
+ # ISO week number belongs to the previous or next year, that year
+ # is used instead.
+ # %g
+ # Like %G, but without century, that is, with a 2-digit year
+ # (00-99).
+ # %h
+ # Equivalent to %b.
+ # %H
+ # The hour as a decimal number using a 24-hour clock
+ # (range 00 to 23). (alt O)
+ # %I
+ # The hour as a decimal number using a 12-hour clock
+ # (range 01 to 12). (alt O)
+ # %j
+ # The day of the year as a decimal number (range 001 to 366).
+ # %k
+ # The hour (24-hour clock) as a decimal number (range 0 to 23);
+ # single digits are preceded by a blank. (See also %H.)
+ # %l
+ # The hour (12-hour clock) as a decimal number (range 1 to 12);
+ # single digits are preceded by a blank. (See also %I.)
+ # %m
+ # The month as a decimal number (range 01 to 12). (alt O)
+ # %M
+ # The minute as a decimal number (range 00 to 59). (alt O)
+ # %O
+ # Modifier: use alternative numeric symbols.
+ # %p
+ # Either "AM" or "PM" according to the given time value,
+ # or the corresponding strings for the current locale. Noon is
+ # treated as "PM" and midnight as "AM".
+ # %P
+ # Like %p but in lowercase: "am" or "pm" or a corresponding
+ # string for the current locale.
+ # %r
+ # The time in a.m. or p.m. notation. In the POSIX locale this is
+ # equivalent to %I:%M:%S %p.
+ # %R
+ # The time in 24-hour notation (%H:%M). For a version including
+ # the seconds, see %T below.
+ # %s
+ # The number of seconds since the Epoch,
+ # 1970-01-01 00:00:00 +0000 (UTC)
+ # %S
+ # The second as a decimal number (range 00 to 60). (The range is
+ # up to 60 to allow for occasional leap seconds.) (alt O)
+ # %t
+ # A tab character.
+ # %T
+ # The time in 24-hour notation (%H:%M:%S).
+ # %u
+ # The day of the week as a decimal, range 1 to 7, Monday being 1.
+ # See also %w. (alt O)
+ # %U
+ # The week number of the current year as a decimal number,
+ # range 00 to 53, starting with the first Sunday as the first
+ # day of week 01. See also %V and %W. (alt O)
+ # %V
+ # The ISO 8601 week number of the current year as a decimal number,
+ # range 01 to 53, where week 1 is the first week that has at least
+ # 4 days in the new year. See also %U and %W. (alt O)
+ # %w
+ # The day of the week as a decimal, range 0 to 6, Sunday being 0.
+ # See also %u. (alt O)
+ # %W
+ # The week number of the current year as a decimal number,
+ # range 00 to 53, starting with the first Monday as the first day
+ # of week 01. (alt O)
+ # %x
+ # The preferred date representation for the current locale without
+ # the time. (alt E)
+ # %X
+ # The preferred time representation for the current locale without
+ # the date. (alt E)
+ # %y
+ # The year as a decimal number without a century (range 00 to 99).
+ # (alt E, alt O)
+ # %Y
+ # The year as a decimal number including the century. (alt E)
+ # %z
+ # The +hhmm or -hhmm numeric timezone (that is, the hour and minute
+ # offset from UTC).
+ # %Z
+ # The timezone name or abbreviation.
+ # %%
+ # A literal '%' character.
+ #
+ # This configuration option has an automatic default value.
+ # time_format = "%Y-%m-%d %T %z"
+
+ # Configuration option report/devtypes_sort.
+ # List of columns to sort by when reporting 'lvm devtypes' command.
+ # See 'lvm devtypes -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # devtypes_sort = "devtype_name"
+
+ # Configuration option report/devtypes_cols.
+ # List of columns to report for 'lvm devtypes' command.
+ # See 'lvm devtypes -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # devtypes_cols = "devtype_name,devtype_max_partitions,devtype_description"
+
+ # Configuration option report/devtypes_cols_verbose.
+ # List of columns to report for 'lvm devtypes' command in verbose mode.
+ # See 'lvm devtypes -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # devtypes_cols_verbose = "devtype_name,devtype_max_partitions,devtype_description"
+
+ # Configuration option report/lvs_sort.
+ # List of columns to sort by when reporting 'lvs' command.
+ # See 'lvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # lvs_sort = "vg_name,lv_name"
+
+ # Configuration option report/lvs_cols.
+ # List of columns to report for 'lvs' command.
+ # See 'lvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # lvs_cols = "lv_name,vg_name,lv_attr,lv_size,pool_lv,origin,data_percent,metadata_percent,move_pv,mirror_log,copy_percent,convert_lv"
+
+ # Configuration option report/lvs_cols_verbose.
+ # List of columns to report for 'lvs' command in verbose mode.
+ # See 'lvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # lvs_cols_verbose = "lv_name,vg_name,seg_count,lv_attr,lv_size,lv_major,lv_minor,lv_kernel_major,lv_kernel_minor,pool_lv,origin,data_percent,metadata_percent,move_pv,copy_percent,mirror_log,convert_lv,lv_uuid,lv_profile"
+
+ # Configuration option report/vgs_sort.
+ # List of columns to sort by when reporting 'vgs' command.
+ # See 'vgs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # vgs_sort = "vg_name"
+
+ # Configuration option report/vgs_cols.
+ # List of columns to report for 'vgs' command.
+ # See 'vgs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # vgs_cols = "vg_name,pv_count,lv_count,snap_count,vg_attr,vg_size,vg_free"
+
+ # Configuration option report/vgs_cols_verbose.
+ # List of columns to report for 'vgs' command in verbose mode.
+ # See 'vgs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # vgs_cols_verbose = "vg_name,vg_attr,vg_extent_size,pv_count,lv_count,snap_count,vg_size,vg_free,vg_uuid,vg_profile"
+
+ # Configuration option report/pvs_sort.
+ # List of columns to sort by when reporting 'pvs' command.
+ # See 'pvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvs_sort = "pv_name"
+
+ # Configuration option report/pvs_cols.
+ # List of columns to report for 'pvs' command.
+ # See 'pvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvs_cols = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free"
+
+ # Configuration option report/pvs_cols_verbose.
+ # List of columns to report for 'pvs' command in verbose mode.
+ # See 'pvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvs_cols_verbose = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,dev_size,pv_uuid"
+
+ # Configuration option report/segs_sort.
+ # List of columns to sort by when reporting 'lvs --segments' command.
+ # See 'lvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # segs_sort = "vg_name,lv_name,seg_start"
+
+ # Configuration option report/segs_cols.
+ # List of columns to report for 'lvs --segments' command.
+ # See 'lvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # segs_cols = "lv_name,vg_name,lv_attr,stripes,segtype,seg_size"
+
+ # Configuration option report/segs_cols_verbose.
+ # List of columns to report for 'lvs --segments' command in verbose mode.
+ # See 'lvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # segs_cols_verbose = "lv_name,vg_name,lv_attr,seg_start,seg_size,stripes,segtype,stripesize,chunksize"
+
+ # Configuration option report/pvsegs_sort.
+ # List of columns to sort by when reporting 'pvs --segments' command.
+ # See 'pvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvsegs_sort = "pv_name,pvseg_start"
+
+ # Configuration option report/pvsegs_cols.
+ # List of columns to sort by when reporting 'pvs --segments' command.
+ # See 'pvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvsegs_cols = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size"
+
+ # Configuration option report/pvsegs_cols_verbose.
+ # List of columns to sort by when reporting 'pvs --segments' command in verbose mode.
+ # See 'pvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvsegs_cols_verbose = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size,lv_name,seg_start_pe,segtype,seg_pe_ranges"
+
+ # Configuration option report/vgs_cols_full.
+ # List of columns to report for lvm fullreport's 'vgs' subreport.
+ # See 'vgs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # vgs_cols_full = "vg_all"
+
+ # Configuration option report/pvs_cols_full.
+ # List of columns to report for lvm fullreport's 'vgs' subreport.
+ # See 'pvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvs_cols_full = "pv_all"
+
+ # Configuration option report/lvs_cols_full.
+ # List of columns to report for lvm fullreport's 'lvs' subreport.
+ # See 'lvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # lvs_cols_full = "lv_all"
+
+ # Configuration option report/pvsegs_cols_full.
+ # List of columns to report for lvm fullreport's 'pvseg' subreport.
+ # See 'pvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvsegs_cols_full = "pvseg_all,pv_uuid,lv_uuid"
+
+ # Configuration option report/segs_cols_full.
+ # List of columns to report for lvm fullreport's 'seg' subreport.
+ # See 'lvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # segs_cols_full = "seg_all,lv_uuid"
+
+ # Configuration option report/vgs_sort_full.
+ # List of columns to sort by when reporting lvm fullreport's 'vgs' subreport.
+ # See 'vgs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # vgs_sort_full = "vg_name"
+
+ # Configuration option report/pvs_sort_full.
+ # List of columns to sort by when reporting lvm fullreport's 'vgs' subreport.
+ # See 'pvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvs_sort_full = "pv_name"
+
+ # Configuration option report/lvs_sort_full.
+ # List of columns to sort by when reporting lvm fullreport's 'lvs' subreport.
+ # See 'lvs -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # lvs_sort_full = "vg_name,lv_name"
+
+ # Configuration option report/pvsegs_sort_full.
+ # List of columns to sort by when reporting for lvm fullreport's 'pvseg' subreport.
+ # See 'pvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # pvsegs_sort_full = "pv_uuid,pvseg_start"
+
+ # Configuration option report/segs_sort_full.
+ # List of columns to sort by when reporting lvm fullreport's 'seg' subreport.
+ # See 'lvs --segments -o help' for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # segs_sort_full = "lv_uuid,seg_start"
+
+ # Configuration option report/mark_hidden_devices.
+ # Use brackets [] to mark hidden devices.
+ # This configuration option has an automatic default value.
+ # mark_hidden_devices = 1
+
+ # Configuration option report/two_word_unknown_device.
+ # Use the two words 'unknown device' in place of '[unknown]'.
+ # This is displayed when the device for a PV is not known.
+ # This configuration option has an automatic default value.
+ # two_word_unknown_device = 0
+# }
+
+# Configuration section dmeventd.
+# Settings for the LVM event daemon.
+dmeventd {
+
+ # Configuration option dmeventd/mirror_library.
+ # The library dmeventd uses when monitoring a mirror device.
+ # libdevmapper-event-lvm2mirror.so attempts to recover from
+ # failures. It removes failed devices from a volume group and
+ # reconfigures a mirror as necessary. If no mirror library is
+ # provided, mirrors are not monitored through dmeventd.
+ # This configuration option has an automatic default value.
+ # mirror_library = "libdevmapper-event-lvm2mirror.so"
+
+ # Configuration option dmeventd/raid_library.
+ # This configuration option has an automatic default value.
+ # raid_library = "libdevmapper-event-lvm2raid.so"
+
+ # Configuration option dmeventd/snapshot_library.
+ # The library dmeventd uses when monitoring a snapshot device.
+ # libdevmapper-event-lvm2snapshot.so monitors the filling of snapshots
+ # and emits a warning through syslog when the usage exceeds 80%. The
+ # warning is repeated when 85%, 90% and 95% of the snapshot is filled.
+ # This configuration option has an automatic default value.
+ # snapshot_library = "libdevmapper-event-lvm2snapshot.so"
+
+ # Configuration option dmeventd/thin_library.
+ # The library dmeventd uses when monitoring a thin device.
+ # libdevmapper-event-lvm2thin.so monitors the filling of a pool
+ # and emits a warning through syslog when the usage exceeds 80%. The
+ # warning is repeated when 85%, 90% and 95% of the pool is filled.
+ # This configuration option has an automatic default value.
+ # thin_library = "libdevmapper-event-lvm2thin.so"
+
+ # Configuration option dmeventd/thin_command.
+ # The plugin runs command with each 5% increment when thin-pool data volume
+ # or metadata volume gets above 50%.
+ # Command which starts with 'lvm ' prefix is internal lvm command.
+ # You can write your own handler to customise behaviour in more details.
+ # User handler is specified with the full path starting with '/'.
+ # This configuration option has an automatic default value.
+ # thin_command = "lvm lvextend --use-policies"
+
+ # Configuration option dmeventd/vdo_library.
+ # The library dmeventd uses when monitoring a VDO pool device.
+ # libdevmapper-event-lvm2vdo.so monitors the filling of a pool
+ # and emits a warning through syslog when the usage exceeds 80%. The
+ # warning is repeated when 85%, 90% and 95% of the pool is filled.
+ # This configuration option has an automatic default value.
+ # vdo_library = "libdevmapper-event-lvm2vdo.so"
+
+ # Configuration option dmeventd/vdo_command.
+ # The plugin runs command with each 5% increment when VDO pool volume
+ # gets above 50%.
+ # Command which starts with 'lvm ' prefix is internal lvm command.
+ # You can write your own handler to customise behaviour in more details.
+ # User handler is specified with the full path starting with '/'.
+ # This configuration option has an automatic default value.
+ # vdo_command = "lvm lvextend --use-policies"
+
+ # Configuration option dmeventd/executable.
+ # The full path to the dmeventd binary.
+ # This configuration option has an automatic default value.
+ # executable = "/usr/sbin/dmeventd"
+}
+
+# Configuration section tags.
+# Host tag settings.
+# This configuration section has an automatic default value.
+# tags {
+
+ # Configuration option tags/hosttags.
+ # Create a host tag using the machine name.
+ # The machine name is nodename returned by uname(2).
+ # This configuration option has an automatic default value.
+ # hosttags = 0
+
+ # Configuration section tags/.
+ # Replace this subsection name with a custom tag name.
+ # Multiple subsections like this can be created. The '@' prefix for
+ # tags is optional. This subsection can contain host_list, which is a
+ # list of machine names. If the name of the local machine is found in
+ # host_list, then the name of this subsection is used as a tag and is
+ # applied to the local machine as a 'host tag'. If this subsection is
+ # empty (has no host_list), then the subsection name is always applied
+ # as a 'host tag'.
+ #
+ # Example
+ # The host tag foo is given to all hosts, and the host tag
+ # bar is given to the hosts named machine1 and machine2.
+ # tags { foo { } bar { host_list = [ "machine1", "machine2" ] } }
+ #
+ # This configuration section has variable name.
+ # This configuration section has an automatic default value.
+ # tag {
+
+ # Configuration option tags//host_list.
+ # A list of machine names.
+ # These machine names are compared to the nodename returned
+ # by uname(2). If the local machine name matches an entry in
+ # this list, the name of the subsection is applied to the
+ # machine as a 'host tag'.
+ # This configuration option does not have a default value defined.
+ # }
+# }
diff --git a/etc/lvm/lvmlocal.conf b/etc/lvm/lvmlocal.conf
new file mode 100644
index 0000000000..bb5d86b6a6
--- /dev/null
+++ b/etc/lvm/lvmlocal.conf
@@ -0,0 +1,57 @@
+# This is a local configuration file template for the LVM2 system
+# which should be installed as /etc/lvm/lvmlocal.conf .
+#
+# Refer to 'man lvm.conf' for information about the file layout.
+#
+# To put this file in a different directory and override
+# /etc/lvm set the environment variable LVM_SYSTEM_DIR before
+# running the tools.
+#
+# The lvmlocal.conf file is normally expected to contain only the
+# "local" section which contains settings that should not be shared or
+# repeated among different hosts. (But if other sections are present,
+# they *will* get processed. Settings in this file override equivalent
+# ones in lvm.conf and are in turn overridden by ones in any enabled
+# lvm_.conf files.)
+#
+# Please take care that each setting only appears once if uncommenting
+# example settings in this file and never copy this file between hosts.
+
+
+# Configuration section local.
+# LVM settings that are specific to the local host.
+local {
+
+ # Configuration option local/system_id.
+ # Defines the local system ID for lvmlocal mode.
+ # This is used when global/system_id_source is set to 'lvmlocal' in the
+ # main configuration file, e.g. lvm.conf. When used, it must be set to
+ # a unique value among all hosts sharing access to the storage,
+ # e.g. a host name.
+ #
+ # Example
+ # Set no system ID:
+ # system_id = ""
+ # Set the system_id to a specific name:
+ # system_id = "host1"
+ #
+ # This configuration option has an automatic default value.
+ # system_id = ""
+
+ # Configuration option local/extra_system_ids.
+ # A list of extra VG system IDs the local host can access.
+ # VGs with the system IDs listed here (in addition to the host's own
+ # system ID) can be fully accessed by the local host. (These are
+ # system IDs that the host sees in VGs, not system IDs that identify
+ # the local host, which is determined by system_id_source.)
+ # Use this only after consulting 'man lvmsystemid' to be certain of
+ # correct usage and possible dangers.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option local/host_id.
+ # The lvmlockd sanlock host_id.
+ # This must be unique among all hosts, and must be between 1 and 2000.
+ # Applicable only if LVM is compiled with lockd support
+ # This configuration option has an automatic default value.
+ # host_id = 0
+}
diff --git a/etc/lvm/profile/cache-mq.profile b/etc/lvm/profile/cache-mq.profile
new file mode 100644
index 0000000000..3c90331d1c
--- /dev/null
+++ b/etc/lvm/profile/cache-mq.profile
@@ -0,0 +1,20 @@
+# Demo configuration 'mq' cache policy
+#
+# Note: This policy has been deprecated in favor of the smq policy
+# keyword "default" means, setting is left with kernel defaults.
+#
+
+allocation {
+ cache_pool_chunk_size = 64
+ cache_mode = "writethrough"
+ cache_policy = "mq"
+ cache_settings {
+ mq {
+ sequential_threshold = "default" # #nr_sequential_ios
+ random_threshold = "default" # #nr_random_ios
+ read_promote_adjustment = "default"
+ write_promote_adjustment = "default"
+ discard_promote_adjustment = "default"
+ }
+ }
+}
diff --git a/etc/lvm/profile/cache-smq.profile b/etc/lvm/profile/cache-smq.profile
new file mode 100644
index 0000000000..c457481e9e
--- /dev/null
+++ b/etc/lvm/profile/cache-smq.profile
@@ -0,0 +1,14 @@
+# Demo configuration 'smq' cache policy
+#
+# The stochastic multi-queue (smq) policy addresses some of the problems
+# with the multiqueue (mq) policy and uses less memory.
+#
+
+allocation {
+ cache_pool_chunk_size = 64
+ cache_mode = "writethrough"
+ cache_policy = "smq"
+ cache_settings {
+ # currently no settings for "smq" policy
+ }
+}
diff --git a/etc/lvm/profile/command_profile_template.profile b/etc/lvm/profile/command_profile_template.profile
new file mode 100644
index 0000000000..bf56799320
--- /dev/null
+++ b/etc/lvm/profile/command_profile_template.profile
@@ -0,0 +1,74 @@
+# This is a command profile template for the LVM2 system.
+#
+# It contains all configuration settings that are customizable by command
+# profiles. To create a new command profile, select the settings you want
+# to customize and add them in a new file named .profile.
+# Then install the new profile in a directory as defined by config/profile_dir
+# setting found in /etc/lvm/lvm.conf file.
+#
+# Command profiles can be referenced by using the --commandprofile option then.
+#
+# Refer to 'man lvm.conf' for further information about profiles and
+# general configuration file layout.
+#
+allocation {
+ cache_mode="writethrough"
+ cache_settings {
+ }
+}
+log {
+ report_command_log=0
+ command_log_sort="log_seq_num"
+ command_log_cols="log_seq_num,log_type,log_context,log_object_type,log_object_name,log_object_id,log_object_group,log_object_group_id,log_message,log_errno,log_ret_code"
+ command_log_selection="!(log_type=status && message=success)"
+}
+global {
+ units="h"
+ si_unit_consistency=1
+ suffix=1
+ lvdisplay_shows_full_device_path=0
+}
+report {
+ output_format="basic"
+ compact_output=0
+ compact_output_cols=""
+ aligned=1
+ buffered=1
+ headings=1
+ separator=" "
+ list_item_separator=","
+ prefixes=0
+ quoted=1
+ columns_as_rows=0
+ binary_values_as_numeric=0
+ time_format="%Y-%m-%d %T %z"
+ devtypes_sort="devtype_name"
+ devtypes_cols="devtype_name,devtype_max_partitions,devtype_description"
+ devtypes_cols_verbose="devtype_name,devtype_max_partitions,devtype_description"
+ lvs_sort="vg_name,lv_name"
+ lvs_cols="lv_name,vg_name,lv_attr,lv_size,pool_lv,origin,data_percent,metadata_percent,move_pv,mirror_log,copy_percent,convert_lv"
+ lvs_cols_verbose="lv_name,vg_name,seg_count,lv_attr,lv_size,lv_major,lv_minor,lv_kernel_major,lv_kernel_minor,pool_lv,origin,data_percent,metadata_percent,move_pv,copy_percent,mirror_log,convert_lv,lv_uuid,lv_profile"
+ vgs_sort="vg_name"
+ vgs_cols="vg_name,pv_count,lv_count,snap_count,vg_attr,vg_size,vg_free"
+ vgs_cols_verbose="vg_name,vg_attr,vg_extent_size,pv_count,lv_count,snap_count,vg_size,vg_free,vg_uuid,vg_profile"
+ pvs_sort="pv_name"
+ pvs_cols="pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free"
+ pvs_cols_verbose="pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,dev_size,pv_uuid"
+ segs_sort="vg_name,lv_name,seg_start"
+ segs_cols="lv_name,vg_name,lv_attr,stripes,segtype,seg_size"
+ segs_cols_verbose="lv_name,vg_name,lv_attr,seg_start,seg_size,stripes,segtype,stripesize,chunksize"
+ pvsegs_sort="pv_name,pvseg_start"
+ pvsegs_cols="pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size"
+ pvsegs_cols_verbose="pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size,lv_name,seg_start_pe,segtype,seg_pe_ranges"
+ vgs_cols_full="vg_all"
+ pvs_cols_full="pv_all"
+ lvs_cols_full="lv_all"
+ pvsegs_cols_full="pvseg_all,pv_uuid,lv_uuid"
+ segs_cols_full="seg_all,lv_uuid"
+ vgs_sort_full="vg_name"
+ pvs_sort_full="pv_name"
+ lvs_sort_full="vg_name,lv_name"
+ pvsegs_sort_full="pv_uuid,pvseg_start"
+ segs_sort_full="lv_uuid,seg_start"
+ mark_hidden_devices=1
+}
diff --git a/etc/lvm/profile/lvmdbusd.profile b/etc/lvm/profile/lvmdbusd.profile
new file mode 100644
index 0000000000..2cdc6da5e5
--- /dev/null
+++ b/etc/lvm/profile/lvmdbusd.profile
@@ -0,0 +1,50 @@
+#
+# DO NOT EDIT THIS FILE!
+#
+# LVM configuration profile used by lvmdbusd daemon.
+#
+# This sets up LVM to produce output in the most suitable format for processing
+# by lvmdbusd daemon which utilizes LVM shell to execute LVM commands.
+#
+# Do not edit this file in any way. This profile is distributed together with
+# lvmdbusd and it contains configuration that is important for lvmdbusd to
+# cooperate and interface with LVM correctly.
+#
+
+global {
+ # use bytes for expected and deterministic output
+ units=b
+ # no need for suffix if we have units set
+ suffix=0
+}
+
+report {
+ compact_output=0
+ compact_output_cols=""
+ binary_values_as_numeric=0
+ # time in number of seconds since the Epoch
+ time_format="%s"
+ mark_hidden_devices=1
+ # lvmdbusd expects JSON output
+ output_format=json
+ # *_cols_full for lvm fullreport's fields which lvmdbusd relies on to update its state
+ vgs_cols_full="vg_name,vg_uuid,vg_fmt,vg_size,vg_free,vg_sysid,vg_extent_size,vg_extent_count,vg_free_count,vg_profile,max_lv,max_pv,pv_count,lv_count,snap_count,vg_seqno,vg_mda_count,vg_mda_free,vg_mda_size,vg_mda_used_count,vg_attr,vg_tags"
+ pvs_cols_full="pv_name,pv_uuid,pv_fmt,pv_size,pv_free,pv_used,dev_size,pv_mda_size,pv_mda_free,pv_ba_start,pv_ba_size,pe_start,pv_pe_count,pv_pe_alloc_count,pv_attr,pv_tags,vg_name,vg_uuid"
+ lvs_cols_full="lv_uuid,lv_name,lv_path,lv_size,vg_name,pool_lv_uuid,pool_lv,origin_uuid,origin,data_percent,lv_attr,lv_tags,vg_uuid,lv_active,data_lv,metadata_lv,lv_parent,lv_role,lv_layout"
+ pvsegs_cols_full="pvseg_start,pvseg_size,segtype,pv_uuid,lv_uuid,pv_name"
+ segs_cols_full="seg_pe_ranges,segtype,lv_uuid"
+ vgs_sort_full="vg_name"
+ pvs_sort_full="pv_name"
+ lvs_sort_full="vg_name,lv_name"
+ pvsegs_sort_full="pv_uuid,pvseg_start"
+ segs_sort_full="lv_uuid,seg_start"
+}
+
+log {
+ # lvmdbusd relies on command log report to inspect LVM command's execution status
+ report_command_log=1
+ # display only outermost LVM shell-related log that lvmdbusd inspects first after LVM command execution (it calls 'lastlog' for more detailed log afterwards if needed)
+ command_log_selection="log_context=shell"
+ command_log_cols="log_seq_num,log_type,log_context,log_object_type,log_object_name,log_object_id,log_object_group,log_object_group_id,log_message,log_errno,log_ret_code"
+ command_log_sort="log_seq_num"
+}
diff --git a/etc/lvm/profile/metadata_profile_template.profile b/etc/lvm/profile/metadata_profile_template.profile
new file mode 100644
index 0000000000..5836a63290
--- /dev/null
+++ b/etc/lvm/profile/metadata_profile_template.profile
@@ -0,0 +1,24 @@
+# This is a metadata profile template for the LVM2 system.
+#
+# It contains all configuration settings that are customizable by metadata
+# profiles. To create a new metadata profile, select the settings you want
+# to customize and add them in a new file named .profile.
+# Then install the new profile in a directory as defined by config/profile_dir
+# setting found in /etc/lvm/lvm.conf file.
+#
+# Metadata profiles can be referenced by using the --metadataprofile LVM2
+# command line option.
+#
+# Refer to 'man lvm.conf' for further information about profiles and
+# general configuration file layout.
+#
+allocation {
+ thin_pool_zero=1
+ thin_pool_discards="passdown"
+ thin_pool_chunk_size_policy="generic"
+# thin_pool_chunk_size=128
+}
+activation {
+ thin_pool_autoextend_threshold=100
+ thin_pool_autoextend_percent=20
+}
diff --git a/etc/lvm/profile/thin-generic.profile b/etc/lvm/profile/thin-generic.profile
new file mode 100644
index 0000000000..229a7fc8e5
--- /dev/null
+++ b/etc/lvm/profile/thin-generic.profile
@@ -0,0 +1,4 @@
+allocation {
+ thin_pool_chunk_size_policy = "generic"
+ thin_pool_zero = 1
+}
diff --git a/etc/lvm/profile/thin-performance.profile b/etc/lvm/profile/thin-performance.profile
new file mode 100644
index 0000000000..2914de2559
--- /dev/null
+++ b/etc/lvm/profile/thin-performance.profile
@@ -0,0 +1,4 @@
+allocation {
+ thin_pool_chunk_size_policy = "performance"
+ thin_pool_zero = 0
+}
diff --git a/etc/lvm/profile/vdo-small.profile b/etc/lvm/profile/vdo-small.profile
new file mode 100644
index 0000000000..2044fc27f9
--- /dev/null
+++ b/etc/lvm/profile/vdo-small.profile
@@ -0,0 +1,24 @@
+# Demo configuration for 'VDO' using less memory.
+# ~lvmconfig --type full | grep vdo
+
+allocation {
+ vdo_use_compression=1
+ vdo_use_deduplication=1
+ vdo_use_metadata_hints=1
+ vdo_minimum_io_size=4096
+ vdo_block_map_cache_size_mb=128
+ vdo_block_map_period=16380
+ vdo_check_point_frequency=0
+ vdo_use_sparse_index=0
+ vdo_index_memory_size_mb=256
+ vdo_slab_size_mb=2048
+ vdo_ack_threads=1
+ vdo_bio_threads=1
+ vdo_bio_rotation=64
+ vdo_cpu_threads=2
+ vdo_hash_zone_threads=1
+ vdo_logical_threads=1
+ vdo_physical_threads=1
+ vdo_write_policy="auto"
+ vdo_max_discard=1
+}
diff --git a/etc/machine-id b/etc/machine-id
new file mode 100644
index 0000000000..e5bf361a16
--- /dev/null
+++ b/etc/machine-id
@@ -0,0 +1 @@
+a0a5be148f1943ef86dbad9011a75039
diff --git a/etc/magic b/etc/magic
new file mode 100644
index 0000000000..283a86394a
--- /dev/null
+++ b/etc/magic
@@ -0,0 +1,3 @@
+# Magic local data for file(1) command.
+# Insert here your local magic data. Format is described in magic(5).
+
diff --git a/etc/magic.mime b/etc/magic.mime
new file mode 100644
index 0000000000..283a86394a
--- /dev/null
+++ b/etc/magic.mime
@@ -0,0 +1,3 @@
+# Magic local data for file(1) command.
+# Insert here your local magic data. Format is described in magic(5).
+
diff --git a/etc/mail/spamassassin b/etc/mail/spamassassin
new file mode 120000
index 0000000000..8e60f1109f
--- /dev/null
+++ b/etc/mail/spamassassin
@@ -0,0 +1 @@
+../spamassassin
\ No newline at end of file
diff --git a/etc/manpath.config b/etc/manpath.config
new file mode 100644
index 0000000000..091bb25861
--- /dev/null
+++ b/etc/manpath.config
@@ -0,0 +1,132 @@
+# manpath.config
+#
+# This file is used by the man-db package to configure the man and cat paths.
+# It is also used to provide a manpath for those without one by examining
+# their PATH environment variable. For details see the manpath(5) man page.
+#
+# Lines beginning with `#' are comments and are ignored. Any combination of
+# tabs or spaces may be used as `whitespace' separators.
+#
+# There are three mappings allowed in this file:
+# --------------------------------------------------------
+# MANDATORY_MANPATH manpath_element
+# MANPATH_MAP path_element manpath_element
+# MANDB_MAP global_manpath [relative_catpath]
+#---------------------------------------------------------
+# every automatically generated MANPATH includes these fields
+#
+#MANDATORY_MANPATH /usr/src/pvm3/man
+#
+MANDATORY_MANPATH /usr/man
+MANDATORY_MANPATH /usr/share/man
+MANDATORY_MANPATH /usr/local/share/man
+#---------------------------------------------------------
+# set up PATH to MANPATH mapping
+# ie. what man tree holds man pages for what binary directory.
+#
+# *PATH* -> *MANPATH*
+#
+MANPATH_MAP /bin /usr/share/man
+MANPATH_MAP /usr/bin /usr/share/man
+MANPATH_MAP /sbin /usr/share/man
+MANPATH_MAP /usr/sbin /usr/share/man
+MANPATH_MAP /usr/local/bin /usr/local/man
+MANPATH_MAP /usr/local/bin /usr/local/share/man
+MANPATH_MAP /usr/local/sbin /usr/local/man
+MANPATH_MAP /usr/local/sbin /usr/local/share/man
+MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man
+MANPATH_MAP /usr/bin/X11 /usr/X11R6/man
+MANPATH_MAP /usr/games /usr/share/man
+MANPATH_MAP /opt/bin /opt/man
+MANPATH_MAP /opt/sbin /opt/man
+#---------------------------------------------------------
+# For a manpath element to be treated as a system manpath (as most of those
+# above should normally be), it must be mentioned below. Each line may have
+# an optional extra string indicating the catpath associated with the
+# manpath. If no catpath string is used, the catpath will default to the
+# given manpath.
+#
+# You *must* provide all system manpaths, including manpaths for alternate
+# operating systems, locale specific manpaths, and combinations of both, if
+# they exist, otherwise the permissions of the user running man/mandb will
+# be used to manipulate the manual pages. Also, mandb will not initialise
+# the database cache for any manpaths not mentioned below unless explicitly
+# requested to do so.
+#
+# In a per-user configuration file, this directive only controls the
+# location of catpaths and the creation of database caches; it has no effect
+# on privileges.
+#
+# Any manpaths that are subdirectories of other manpaths must be mentioned
+# *before* the containing manpath. E.g. /usr/man/preformat must be listed
+# before /usr/man.
+#
+# *MANPATH* -> *CATPATH*
+#
+MANDB_MAP /usr/man /var/cache/man/fsstnd
+MANDB_MAP /usr/share/man /var/cache/man
+MANDB_MAP /usr/local/man /var/cache/man/oldlocal
+MANDB_MAP /usr/local/share/man /var/cache/man/local
+MANDB_MAP /usr/X11R6/man /var/cache/man/X11R6
+MANDB_MAP /opt/man /var/cache/man/opt
+MANDB_MAP /snap/man /var/cache/man/snap
+#
+#---------------------------------------------------------
+# Program definitions. These are commented out by default as the value
+# of the definition is already the default. To change: uncomment a
+# definition and modify it.
+#
+#DEFINE pager pager
+#DEFINE cat cat
+#DEFINE tr tr '\255\267\264\327' '\055\157\047\170'
+#DEFINE grep grep
+#DEFINE troff groff -mandoc
+#DEFINE nroff nroff -mandoc
+#DEFINE eqn eqn
+#DEFINE neqn neqn
+#DEFINE tbl tbl
+#DEFINE col col
+#DEFINE vgrind vgrind
+#DEFINE refer refer
+#DEFINE grap grap
+#DEFINE pic pic -S
+#
+#DEFINE compressor gzip -c7
+#---------------------------------------------------------
+# Misc definitions: same as program definitions above.
+#
+#DEFINE whatis_grep_flags -i
+#DEFINE apropos_grep_flags -iEw
+#DEFINE apropos_regex_grep_flags -iE
+#---------------------------------------------------------
+# Section names. Manual sections will be searched in the order listed here;
+# the default is 1, n, l, 8, 3, 0, 2, 3type, 5, 4, 9, 6, 7. Multiple SECTION
+# directives may be given for clarity, and will be concatenated together in
+# the expected way.
+# If a particular extension is not in this list (say, 1mh), it will be
+# displayed with the rest of the section it belongs to. The effect of this
+# is that you only need to explicitly list extensions if you want to force a
+# particular order. Sections with extensions should usually be adjacent to
+# their main section (e.g. "1 1mh 8 ...").
+#
+SECTION 1 n l 8 3 0 2 3type 3posix 3pm 3perl 3am 5 4 9 6 7
+#
+#---------------------------------------------------------
+# Range of terminal widths permitted when displaying cat pages. If the
+# terminal falls outside this range, cat pages will not be created (if
+# missing) or displayed.
+#
+#MINCATWIDTH 80
+#MAXCATWIDTH 80
+#
+# If CATWIDTH is set to a non-zero number, cat pages will always be
+# formatted for a terminal of the given width, regardless of the width of
+# the terminal actually being used. This should generally be within the
+# range set by MINCATWIDTH and MAXCATWIDTH.
+#
+#CATWIDTH 0
+#
+#---------------------------------------------------------
+# Flags.
+# NOCACHE keeps man from creating cat pages.
+#NOCACHE
diff --git a/etc/mdadm/mdadm.conf b/etc/mdadm/mdadm.conf
new file mode 100644
index 0000000000..558be86283
--- /dev/null
+++ b/etc/mdadm/mdadm.conf
@@ -0,0 +1,22 @@
+# mdadm.conf
+#
+# !NB! Run update-initramfs -u after updating this file.
+# !NB! This will ensure that initramfs has an uptodate copy.
+#
+# Please refer to mdadm.conf(5) for information about this file.
+#
+
+# by default (built-in), scan all partitions (/proc/partitions) and all
+# containers for MD superblocks. alternatively, specify devices to scan, using
+# wildcards if desired.
+#DEVICE partitions containers
+
+# automatically tag new arrays as belonging to the local system
+HOMEHOST
+
+# instruct the monitoring daemon where to send mail alerts
+MAILADDR root
+
+# definitions of existing MD arrays
+
+# This configuration was auto-generated on Tue, 05 Aug 2025 12:59:02 +0000 by mkconf
diff --git a/etc/mime.types b/etc/mime.types
new file mode 100644
index 0000000000..b6a8be048a
--- /dev/null
+++ b/etc/mime.types
@@ -0,0 +1,2323 @@
+###############################################################################
+#
+# Media (MIME) types and the extensions that represent them.
+#
+# The format of this file is a media type on the left and zero or more
+# filename extensions on the right. Programs using this file will map
+# files ending with those extensions to the associated type.
+#
+# This file is part of the "media-types" package. Please report a bug using
+# the "reportbug" command of the "reportbug" package if you would like new
+# types or extensions to be added.
+#
+# The reason that all types are managed by the media-types package instead
+# allowing individual packages to install types in much the same way as they
+# add entries in to the mailcap file is so these types can be referenced by
+# other programs (such as a web server) even if the specific support package
+# for that type is not installed.
+#
+# Users can add their own types if they wish by creating a ".mime.types"
+# file in their home directory. Definitions included there will take
+# precedence over those listed here.
+#
+###############################################################################
+
+application/1d-interleaved-parityfec
+application/3gpdash-qoe-report+xml
+application/3gpp-ims+xml
+application/3gppHal+json
+application/3gppHalForms+json
+application/A2L a2l
+application/ace+cbor
+application/ace+json
+application/activemessage
+application/activity+json
+application/aif+cbor
+application/aif+json
+application/alto-cdni+json
+application/alto-cdnifilter+json
+application/alto-costmap+json
+application/alto-costmapfilter+json
+application/alto-directory+json
+application/alto-endpointcost+json
+application/alto-endpointcostparams+json
+application/alto-endpointprop+json
+application/alto-endpointpropparams+json
+application/alto-error+json
+application/alto-networkmap+json
+application/alto-networkmapfilter+json
+application/alto-propmap+json
+application/alto-propmapparams+json
+application/alto-updatestreamcontrol+json
+application/alto-updatestreamparams+json
+application/AML aml
+application/andrew-inset ez
+application/annodex anx
+application/applefile
+application/at+jwt
+application/ATF atf
+application/ATFX atfx
+application/atom+xml atom
+application/atomcat+xml atomcat
+application/atomdeleted+xml atomdeleted
+application/atomicmail
+application/atomserv+xml atomsrv
+application/atomsvc+xml atomsvc
+application/atsc-dwd+xml dwd
+application/atsc-dynamic-event-message
+application/atsc-held+xml held
+application/atsc-rdt+json
+application/atsc-rsat+xml rsat
+application/ATXML atxml
+application/auth-policy+xml apxml
+application/automationml-aml+xml
+application/automationml-amlx+zip amlx
+application/bacnet-xdd+zip xdd
+application/batch-SMTP
+application/bbolin lin
+application/beep+xml
+application/calendar+json
+application/calendar+xml xcs
+application/call-completion
+application/CALS-1840
+application/captive+json
+application/cbor cbor
+application/cbor-seq
+application/cccex c3ex
+application/ccmp+xml ccmp
+application/ccxml+xml ccxml
+application/cda+xml
+application/CDFX+XML cdfx
+application/cdmi-capability cdmia
+application/cdmi-container cdmic
+application/cdmi-domain cdmid
+application/cdmi-object cdmio
+application/cdmi-queue cdmiq
+application/cdni
+application/CEA cea
+application/cea-2018+xml
+application/cellml+xml cellml cml
+application/cfw
+application/city+json
+application/clr 1clr
+application/clue+xml
+application/clue_info+xml clue
+application/cms cmsc
+application/cnrp+xml
+application/coap-group+json
+application/coap-payload
+application/commonground
+application/concise-problem-details+cbor
+application/conference-info+xml
+application/cose
+application/cose-key
+application/cose-key-set
+application/cose-x509
+application/cpl+xml cpl
+application/csrattrs csrattrs
+application/csta+xml
+application/CSTAdata+xml
+application/csvm+json
+application/cu-seeme cu
+application/cwl cwl
+application/cwl+json cwl.json
+application/cwt
+application/cybercash
+application/dash+xml mpd
+application/dash-patch+xml
+application/dashdelta mpdd
+application/davmount+xml davmount
+application/dca-rft
+application/DCD dcd
+application/dec-dx
+application/dialog-info+xml
+application/dicom dcm
+application/dicom+json
+application/dicom+xml
+application/DII dii
+application/DIT dit
+application/dns
+application/dns+json
+application/dns-message
+application/dots+cbor
+application/dpop+jwt
+application/dskpp+xml xmls
+application/dsptype tsp
+application/dssc+der dssc
+application/dssc+xml xdssc
+application/dvcs dvc
+application/EDI-consent
+application/EDI-X12
+application/EDIFACT
+application/efi efi
+application/elm+json
+application/elm+xml
+application/EmergencyCallData.cap+xml
+application/EmergencyCallData.Comment+xml
+application/EmergencyCallData.Control+xml
+application/EmergencyCallData.DeviceInfo+xml
+application/EmergencyCallData.eCall.MSD
+application/EmergencyCallData.LegacyESN+json
+application/EmergencyCallData.ProviderInfo+xml
+application/EmergencyCallData.ServiceInfo+xml
+application/EmergencyCallData.SubscriberInfo+xml
+application/EmergencyCallData.VEDS+xml
+application/emma+xml emma
+application/emotionml+xml emotionml
+application/encaprtp
+application/epp+xml
+application/epub+zip epub
+application/eshop
+application/example
+application/exi exi
+application/expect-ct-report+json
+application/express exp
+application/fastinfoset finf
+application/fastsoap
+application/fdf fdf
+application/fdt+xml fdt
+application/fhir+json
+application/fhir+xml
+application/fits
+application/flexfec
+application/font-tdpfr pfr
+application/framework-attributes+xml
+application/futuresplash spl
+application/geo+json geojson
+application/geo+json-seq
+application/geopackage+sqlite3 gpkg
+application/geoxacml+xml
+application/gltf-buffer glbin glbuf
+application/gml+xml gml
+application/gzip gz
+application/H224
+application/held+xml
+application/hl7v2+xml
+application/hta hta
+application/http
+application/hyperstudio stk
+application/ibe-key-request+xml
+application/ibe-pkg-reply+xml
+application/ibe-pp-data
+application/iges
+application/im-iscomposing+xml
+application/index
+application/index.cmd
+application/index.obj
+application/index.response
+application/index.vnd
+application/inkml+xml ink inkml
+application/IOTP
+application/ipfix ipfix
+application/ipp
+application/ISUP
+application/its+xml its
+application/java-archive jar
+application/java-serialized-object ser
+application/java-vm class
+application/jf2feed+json
+application/jose
+application/jose+json
+application/jrd+json jrd
+application/jscalendar+json
+application/json json
+application/json-patch+json json-patch
+application/json-seq
+application/jwk+json
+application/jwk-set+json
+application/jwt
+application/kpml-request+xml
+application/kpml-response+xml
+application/ld+json jsonld
+application/lgr+xml lgr
+application/link-format wlnk
+application/linkset
+application/linkset+json
+application/load-control+xml
+application/logout+jwt
+application/lost+xml lostxml
+application/lostsync+xml lostsyncxml
+application/lpf+zip lpf
+application/LXF lxf
+application/m3g m3g
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+application/macwriteii
+application/mads+xml mads
+application/manifest+json webmanifest
+application/marc mrc
+application/marcxml+xml mrcx
+application/mathematica ma mb
+application/mathml+xml mml
+application/mathml-content+xml
+application/mathml-presentation+xml
+application/mbms-associated-procedure-description+xml
+application/mbms-deregister+xml
+application/mbms-envelope+xml
+application/mbms-msk+xml
+application/mbms-msk-response+xml
+application/mbms-protection-description+xml
+application/mbms-reception-report+xml
+application/mbms-register+xml
+application/mbms-register-response+xml
+application/mbms-schedule+xml
+application/mbms-user-service-description+xml
+application/mbox mbox
+application/media-policy-dataset+xml
+application/mediaservercontrol+xml
+application/media_control+xml
+application/merge-patch+json
+application/metalink4+xml meta4
+application/mets+xml mets
+application/MF4 mf4
+application/mikey
+application/mipc
+application/missing-blocks+cbor-seq
+application/mmt-aei+xml maei
+application/mmt-usd+xml musd
+application/mods+xml mods
+application/moss-keys
+application/moss-signature
+application/mosskey-data
+application/mosskey-request
+application/mp21 m21 mp21
+application/mp4
+application/mpeg4-generic
+application/mpeg4-iod
+application/mpeg4-iod-xmt
+application/mrb-consumer+xml
+application/mrb-publish+xml
+application/msaccess mdb
+application/msc-ivr+xml
+application/msc-mixer+xml
+application/msword doc
+application/mud+json
+application/multipart-core
+application/mxf mxf
+application/n-quads nq
+application/n-triples nt
+application/nasdata
+application/news-checkgroups
+application/news-groupinfo
+application/news-transmission
+application/nlsml+xml
+application/node
+application/nss
+application/oauth-authz-req+jwt
+application/oblivious-dns-message
+application/ocsp-request orq
+application/ocsp-response ors
+application/octet-stream bin deploy msu msp
+application/ODA oda
+application/odm+xml
+application/ODX odx
+application/oebps-package+xml opf
+application/ogg ogx
+application/ohttp-keys
+application/onenote one onetoc2 onetmp onepkg
+application/opc-nodeset+xml
+application/oscore
+application/oxps oxps
+application/p21 p21 stpnc 210 ifc
+application/p21+zip
+application/p2p-overlay+xml relo
+application/parityfec
+application/passport
+application/patch-ops-error+xml
+application/pdf pdf
+application/PDX pdx
+application/pem-certificate-chain pem
+application/pgp-encrypted pgp
+application/pgp-keys asc key
+application/pgp-signature sig
+application/pics-rules prf
+application/pidf+xml
+application/pidf-diff+xml
+application/pkcs10 p10
+application/pkcs12 p12 pfx
+application/pkcs7-mime p7m p7c p7z
+application/pkcs7-signature p7s
+application/pkcs8 p8
+application/pkcs8-encrypted p8e
+application/pkix-attr-cert ac
+application/pkix-cert cer
+application/pkix-crl crl
+application/pkix-pkipath pkipath
+application/pkixcmp pki
+application/pls+xml
+application/poc-settings+xml
+application/postscript ps ai eps epsi epsf eps2 eps3
+application/ppsp-tracker+json
+application/problem+json
+application/problem+xml
+application/provenance+xml provx
+application/prs.alvestrand.titrax-sheet
+application/prs.cww cw cww
+application/prs.cyn
+application/prs.hpub+zip hpub
+application/prs.implied-document+xml
+application/prs.implied-executable
+application/prs.implied-structure
+application/prs.nprend rnd rct
+application/prs.plucker
+application/prs.rdf-xml-crypt rdf-crypt
+application/prs.xsf+xml xsf
+application/pskc+xml pskcxml
+application/pvd+json
+application/QSIG
+application/raptorfec
+application/rdap+json
+application/rdf+xml rdf
+application/reginfo+xml rif
+application/relax-ng-compact-syntax rnc
+application/reputon+json
+application/resource-lists+xml rl
+application/resource-lists-diff+xml rld
+application/rfc+xml rfcxml
+application/riscos
+application/rlmi+xml
+application/rls-services+xml rs
+application/route-apd+xml rapd
+application/route-s-tsid+xml sls
+application/route-usd+xml rusd
+application/rpki-checklist
+application/rpki-ghostbusters gbr
+application/rpki-manifest mft
+application/rpki-publication
+application/rpki-roa roa
+application/rpki-updown
+application/rtf rtf
+application/rtploopback
+application/rtx
+application/samlassertion+xml
+application/samlmetadata+xml
+application/sarif+json sarif sarif.json
+application/sarif-external-properties+json sarif-external-properties sarif-external-properties.json
+application/sbe
+application/sbml+xml
+application/scaip+xml
+application/scim+json scim
+application/scvp-cv-request scq
+application/scvp-cv-response scs
+application/scvp-vp-request spq
+application/scvp-vp-response spp
+application/sdp sdp
+application/secevent+jwt
+application/senml+cbor senmlc
+application/senml+json senml
+application/senml+xml senmlx
+application/senml-etch+cbor senml-etchc
+application/senml-etch+json senml-etchj
+application/senml-exi senmle
+application/sensml+cbor sensmlc
+application/sensml+json sensml
+application/sensml+xml sensmlx
+application/sensml-exi sensmle
+application/sep+xml
+application/sep-exi
+application/session-info
+application/set-payment
+application/set-payment-initiation
+application/set-registration
+application/set-registration-initiation
+application/SGML
+application/sgml-open-catalog soc
+application/shf+xml shf
+application/sieve siv sieve
+application/simple-filter+xml cl
+application/simple-message-summary
+application/simpleSymbolContainer
+application/sipc
+application/slate
+application/smil+xml smil smi sml
+application/smpte336m
+application/soap+fastinfoset
+application/soap+xml
+application/sparql-query rq
+application/sparql-results+xml srx
+application/spdx+json spdx.json
+application/spirits-event+xml
+application/sql sql
+application/srgs gram
+application/srgs+xml grxml
+application/sru+xml sru
+application/ssml+xml ssml
+application/stix+json stix
+application/swid+cbor coswid
+application/swid+xml swidtag
+application/tamp-apex-update tau
+application/tamp-apex-update-confirm auc
+application/tamp-community-update tcu
+application/tamp-community-update-confirm cuc
+application/tamp-error ter
+application/tamp-sequence-adjust tsa
+application/tamp-sequence-adjust-confirm sac
+application/tamp-status-query
+application/tamp-status-response
+application/tamp-update tur
+application/tamp-update-confirm tuc
+application/taxii+json
+application/td+json jsontd
+application/tei+xml tei teiCorpus odd
+application/TETRA_ISI
+application/thraud+xml tfi
+application/timestamp-query tsq
+application/timestamp-reply tsr
+application/timestamped-data tsd
+application/tlsrpt+gzip
+application/tlsrpt+json
+application/tm+json tm.jsonld tm.json jsontm
+application/tnauthlist
+application/token-introspection+jwt
+application/trickle-ice-sdpfrag
+application/trig trig
+application/ttml+xml ttml
+application/tve-trigger
+application/tzif
+application/tzif-leap
+application/ulpfec
+application/urc-grpsheet+xml gsheet
+application/urc-ressheet+xml rsheet
+application/urc-targetdesc+xml td
+application/urc-uisocketdesc+xml uis
+application/vcard+json
+application/vcard+xml
+application/vemmi
+application/vnd.1000minds.decision-model+xml 1km
+application/vnd.1ob ob
+application/vnd.3gpp-prose+xml
+application/vnd.3gpp-prose-pc3a+xml
+application/vnd.3gpp-prose-pc3ach+xml
+application/vnd.3gpp-prose-pc3ch+xml
+application/vnd.3gpp-prose-pc8+xml
+application/vnd.3gpp-v2x-local-service-information
+application/vnd.3gpp.5gnas
+application/vnd.3gpp.access-transfer-events+xml
+application/vnd.3gpp.bsf+xml
+application/vnd.3gpp.crs+xml
+application/vnd.3gpp.current-location-discovery+xml
+application/vnd.3gpp.GMOP+xml
+application/vnd.3gpp.gtpc
+application/vnd.3gpp.interworking-data
+application/vnd.3gpp.lpp
+application/vnd.3gpp.mc-signalling-ear
+application/vnd.3gpp.mcdata-affiliation-command+xml
+application/vnd.3gpp.mcdata-info+xml
+application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml
+application/vnd.3gpp.mcdata-payload
+application/vnd.3gpp.mcdata-regroup+xml
+application/vnd.3gpp.mcdata-service-config+xml
+application/vnd.3gpp.mcdata-signalling
+application/vnd.3gpp.mcdata-ue-config+xml
+application/vnd.3gpp.mcdata-user-profile+xml
+application/vnd.3gpp.mcptt-affiliation-command+xml
+application/vnd.3gpp.mcptt-floor-request+xml
+application/vnd.3gpp.mcptt-info+xml
+application/vnd.3gpp.mcptt-location-info+xml
+application/vnd.3gpp.mcptt-mbms-usage-info+xml
+application/vnd.3gpp.mcptt-regroup+xml
+application/vnd.3gpp.mcptt-service-config+xml
+application/vnd.3gpp.mcptt-signed+xml
+application/vnd.3gpp.mcptt-ue-config+xml
+application/vnd.3gpp.mcptt-ue-init-config+xml
+application/vnd.3gpp.mcptt-user-profile+xml
+application/vnd.3gpp.mcvideo-affiliation-command+xml
+application/vnd.3gpp.mcvideo-info+xml
+application/vnd.3gpp.mcvideo-location-info+xml
+application/vnd.3gpp.mcvideo-mbms-usage-info+xml
+application/vnd.3gpp.mcvideo-regroup+xml
+application/vnd.3gpp.mcvideo-service-config+xml
+application/vnd.3gpp.mcvideo-transmission-request+xml
+application/vnd.3gpp.mcvideo-ue-config+xml
+application/vnd.3gpp.mcvideo-user-profile+xml
+application/vnd.3gpp.mid-call+xml
+application/vnd.3gpp.ngap
+application/vnd.3gpp.pfcp
+application/vnd.3gpp.pic-bw-large plb
+application/vnd.3gpp.pic-bw-small psb
+application/vnd.3gpp.pic-bw-var pvb
+application/vnd.3gpp.s1ap
+application/vnd.3gpp.seal-group-doc+xml
+application/vnd.3gpp.seal-info+xml
+application/vnd.3gpp.seal-location-info+xml
+application/vnd.3gpp.seal-mbms-usage-info+xml
+application/vnd.3gpp.seal-network-QoS-management-info+xml
+application/vnd.3gpp.seal-ue-config-info+xml
+application/vnd.3gpp.seal-unicast-info+xml
+application/vnd.3gpp.seal-user-profile-info+xml
+application/vnd.3gpp.sms
+application/vnd.3gpp.sms+xml
+application/vnd.3gpp.srvcc-ext+xml
+application/vnd.3gpp.SRVCC-info+xml
+application/vnd.3gpp.state-and-event-info+xml
+application/vnd.3gpp.ussd+xml
+application/vnd.3gpp.v2x
+application/vnd.3gpp.vae-info+xml
+application/vnd.3gpp2.bcmcsinfo+xml
+application/vnd.3gpp2.sms sms
+application/vnd.3gpp2.tcap tcap
+application/vnd.3lightssoftware.imagescal imgcal
+application/vnd.3M.Post-it-Notes pwn
+application/vnd.accpac.simply.aso aso
+application/vnd.accpac.simply.imp imp
+application/vnd.acm.addressxfer+json
+application/vnd.acucobol acu
+application/vnd.acucorp atc acutc
+application/vnd.adobe.flash.movie swf
+application/vnd.adobe.formscentral.fcdt fcdt
+application/vnd.adobe.fxp fxp fxpl
+application/vnd.adobe.partial-upload
+application/vnd.adobe.xdp+xml xdp
+application/vnd.aether.imp
+application/vnd.afpc.afplinedata
+application/vnd.afpc.afplinedata-pagedef
+application/vnd.afpc.cmoca-cmresource
+application/vnd.afpc.foca-charset
+application/vnd.afpc.foca-codedfont
+application/vnd.afpc.foca-codepage
+application/vnd.afpc.modca list3820 listafp afp pseg3820
+application/vnd.afpc.modca-formdef
+application/vnd.afpc.modca-mediummap
+application/vnd.afpc.modca-objectcontainer
+application/vnd.afpc.modca-overlay ovl
+application/vnd.afpc.modca-pagesegment psg
+application/vnd.age age
+application/vnd.ah-barcode
+application/vnd.ahead.space ahead
+application/vnd.airzip.filesecure.azf azf
+application/vnd.airzip.filesecure.azs azs
+application/vnd.amadeus+json
+application/vnd.amazon.mobi8-ebook azw3
+application/vnd.americandynamics.acc acc
+application/vnd.amiga.ami ami
+application/vnd.amundsen.maze+xml
+application/vnd.android.ota ota
+application/vnd.android.package-archive apk
+application/vnd.anki apkg
+application/vnd.anser-web-certificate-issue-initiation cii
+application/vnd.anser-web-funds-transfer-initiation fti
+application/vnd.antix.game-component
+application/vnd.apache.arrow.file arrow
+application/vnd.apache.arrow.stream arrows
+application/vnd.apache.thrift.binary
+application/vnd.apache.thrift.compact
+application/vnd.apache.thrift.json
+application/vnd.apexlang apexlang apex
+application/vnd.api+json
+application/vnd.aplextor.warrp+json
+application/vnd.apothekende.reservation+json
+application/vnd.apple.installer+xml dist distz pkg mpkg
+application/vnd.apple.keynote keynote
+application/vnd.apple.mpegurl m3u8
+application/vnd.apple.numbers numbers
+application/vnd.apple.pages pages
+application/vnd.aristanetworks.swi swi
+application/vnd.artisan+json artisan
+application/vnd.artsquare
+application/vnd.astraea-software.iota iota
+application/vnd.audiograph aep
+application/vnd.autopackage package
+application/vnd.avalon+json
+application/vnd.avistar+xml
+application/vnd.balsamiq.bmml+xml bmml
+application/vnd.balsamiq.bmpr bmpr
+application/vnd.banana-accounting ac2
+application/vnd.bbf.usp.error
+application/vnd.bbf.usp.msg
+application/vnd.bbf.usp.msg+json
+application/vnd.bekitzur-stech+json
+application/vnd.belightsoft.lhzd+zip lhzd
+application/vnd.belightsoft.lhzl+zip lhzl
+application/vnd.bint.med-content
+application/vnd.biopax.rdf+xml
+application/vnd.blink-idb-value-wrapper
+application/vnd.blueice.multipass mpm
+application/vnd.bluetooth.ep.oob ep
+application/vnd.bluetooth.le.oob le
+application/vnd.bmi bmi
+application/vnd.bpf
+application/vnd.bpf3
+application/vnd.businessobjects rep
+application/vnd.byu.uapi+json
+application/vnd.cab-jscript
+application/vnd.canon-cpdl
+application/vnd.canon-lips
+application/vnd.capasystems-pg+json
+application/vnd.cendio.thinlinc.clientconf tlclient
+application/vnd.century-systems.tcp_stream
+application/vnd.chemdraw+xml cdxml
+application/vnd.chess-pgn pgn
+application/vnd.chipnuts.karaoke-mmd mmd
+application/vnd.ciedi
+application/vnd.cinderella cdy
+application/vnd.cirpack.isdn-ext
+application/vnd.citationstyles.style+xml csl
+application/vnd.claymore cla
+application/vnd.cloanto.rp9 rp9
+application/vnd.clonk.c4group c4g c4d c4f c4p c4u
+application/vnd.cluetrust.cartomobile-config c11amc
+application/vnd.cluetrust.cartomobile-config-pkg c11amz
+application/vnd.cncf.helm.chart.content.v1.tar+gzip
+application/vnd.cncf.helm.chart.provenance.v1.prov
+application/vnd.cncf.helm.config.v1+json
+application/vnd.coffeescript coffee
+application/vnd.collabio.xodocuments.document xodt
+application/vnd.collabio.xodocuments.document-template xott
+application/vnd.collabio.xodocuments.presentation xodp
+application/vnd.collabio.xodocuments.presentation-template xotp
+application/vnd.collabio.xodocuments.spreadsheet xods
+application/vnd.collabio.xodocuments.spreadsheet-template xots
+application/vnd.collection+json
+application/vnd.collection.doc+json
+application/vnd.collection.next+json
+application/vnd.comicbook+zip cbz
+application/vnd.comicbook-rar cbr
+application/vnd.commerce-battelle icf icd ic0 ic1 ic2 ic3 ic4 ic5 ic6 ic7 ic8
+application/vnd.commonspace csp cst
+application/vnd.contact.cmsg cdbcmsg
+application/vnd.coreos.ignition+json ign ignition
+application/vnd.cosmocaller cmc
+application/vnd.crick.clicker clkx
+application/vnd.crick.clicker.keyboard clkk
+application/vnd.crick.clicker.palette clkp
+application/vnd.crick.clicker.template clkt
+application/vnd.crick.clicker.wordbank clkw
+application/vnd.criticaltools.wbs+xml wbs
+application/vnd.cryptii.pipe+json
+application/vnd.crypto-shade-file ssvc
+application/vnd.cryptomator.encrypted c9r c9s
+application/vnd.cryptomator.vault cryptomator
+application/vnd.ctc-posml pml
+application/vnd.ctct.ws+xml
+application/vnd.cups-pdf
+application/vnd.cups-postscript
+application/vnd.cups-ppd ppd
+application/vnd.cups-raster
+application/vnd.cups-raw
+application/vnd.curl
+application/vnd.cyan.dean.root+xml
+application/vnd.cybank
+application/vnd.cyclonedx+json
+application/vnd.cyclonedx+xml
+application/vnd.d2l.coursepackage1p0+zip
+application/vnd.d3m-dataset
+application/vnd.d3m-problem
+application/vnd.dart dart
+application/vnd.data-vision.rdz rdz
+application/vnd.datalog dl
+application/vnd.datapackage+json
+application/vnd.dataresource+json
+application/vnd.dbf dbf
+application/vnd.debian.binary-package deb ddeb udeb
+application/vnd.dece.data uvf uvvf uvd uvvd
+application/vnd.dece.ttml+xml uvt uvvt
+application/vnd.dece.unspecified uvx uvvx
+application/vnd.dece.zip uvz uvvz
+application/vnd.denovo.fcselayout-link fe_launch
+application/vnd.desmume.movie dsm
+application/vnd.dir-bi.plate-dl-nosuffix
+application/vnd.dm.delegation+xml
+application/vnd.dna dna
+application/vnd.document+json docjson
+application/vnd.dolby.mobile.1
+application/vnd.dolby.mobile.2
+application/vnd.doremir.scorecloud-binary-document scld
+application/vnd.dpgraph dpg mwc dpgraph
+application/vnd.dreamfactory dfac
+application/vnd.drive+json
+application/vnd.dtg.local
+application/vnd.dtg.local.flash fla
+application/vnd.dtg.local.html
+application/vnd.dvb.ait ait
+application/vnd.dvb.dvbisl+xml
+application/vnd.dvb.dvbj
+application/vnd.dvb.esgcontainer
+application/vnd.dvb.ipdcdftnotifaccess
+application/vnd.dvb.ipdcesgaccess
+application/vnd.dvb.ipdcesgaccess2
+application/vnd.dvb.ipdcesgpdd
+application/vnd.dvb.ipdcroaming
+application/vnd.dvb.iptv.alfec-base
+application/vnd.dvb.iptv.alfec-enhancement
+application/vnd.dvb.notif-aggregate-root+xml
+application/vnd.dvb.notif-container+xml
+application/vnd.dvb.notif-generic+xml
+application/vnd.dvb.notif-ia-msglist+xml
+application/vnd.dvb.notif-ia-registration-request+xml
+application/vnd.dvb.notif-ia-registration-response+xml
+application/vnd.dvb.notif-init+xml
+application/vnd.dvb.pfr
+application/vnd.dvb.service svc
+application/vnd.dxr
+application/vnd.dynageo geo
+application/vnd.dzr dzr
+application/vnd.easykaraoke.cdgdownload
+application/vnd.ecdis-update
+application/vnd.ecip.rlp
+application/vnd.eclipse.ditto+json
+application/vnd.ecowin.chart mag
+application/vnd.ecowin.filerequest
+application/vnd.ecowin.fileupdate
+application/vnd.ecowin.series
+application/vnd.ecowin.seriesrequest
+application/vnd.ecowin.seriesupdate
+application/vnd.efi.img
+application/vnd.efi.iso
+application/vnd.eln+zip ELN
+application/vnd.emclient.accessrequest+xml
+application/vnd.enliven nml
+application/vnd.enphase.envoy
+application/vnd.eprints.data+xml
+application/vnd.epson.esf esf
+application/vnd.epson.msf msf
+application/vnd.epson.quickanime qam
+application/vnd.epson.salt slt
+application/vnd.epson.ssf ssf
+application/vnd.ericsson.quickcall qcall qca
+application/vnd.espass-espass+zip espass
+application/vnd.eszigno3+xml es3 et3
+application/vnd.etsi.aoc+xml
+application/vnd.etsi.asic-e+zip asice sce
+application/vnd.etsi.asic-s+zip asics
+application/vnd.etsi.cug+xml
+application/vnd.etsi.iptvcommand+xml
+application/vnd.etsi.iptvdiscovery+xml
+application/vnd.etsi.iptvprofile+xml
+application/vnd.etsi.iptvsad-bc+xml
+application/vnd.etsi.iptvsad-cod+xml
+application/vnd.etsi.iptvsad-npvr+xml
+application/vnd.etsi.iptvservice+xml
+application/vnd.etsi.iptvsync+xml
+application/vnd.etsi.iptvueprofile+xml
+application/vnd.etsi.mcid+xml
+application/vnd.etsi.mheg5
+application/vnd.etsi.overload-control-policy-dataset+xml
+application/vnd.etsi.pstn+xml
+application/vnd.etsi.sci+xml
+application/vnd.etsi.simservs+xml
+application/vnd.etsi.timestamp-token tst
+application/vnd.etsi.tsl+xml
+application/vnd.etsi.tsl.der
+application/vnd.eu.kasparian.car+json carjson
+application/vnd.eudora.data
+application/vnd.evolv.ecig.profile ecigprofile
+application/vnd.evolv.ecig.settings ecig
+application/vnd.evolv.ecig.theme ecigtheme
+application/vnd.exstream-empower+zip mpw
+application/vnd.exstream-package pub
+application/vnd.ezpix-album ez2
+application/vnd.ezpix-package ez3
+application/vnd.f-secure.mobile
+application/vnd.familysearch.gedcom+zip gdz
+application/vnd.fastcopy-disk-image dim
+application/vnd.fdsn.mseed msd mseed
+application/vnd.fdsn.seed seed dataless
+application/vnd.ffsns
+application/vnd.ficlab.flb+zip flb
+application/vnd.filmit.zfc zfc
+application/vnd.fints
+application/vnd.firemonkeys.cloudcell
+application/vnd.FloGraphIt gph
+application/vnd.fluxtime.clip ftc
+application/vnd.font-fontforge-sfd sfd
+application/vnd.framemaker fm
+application/vnd.freelog.comic
+application/vnd.fsc.weblaunch fsc
+application/vnd.fujifilm.fb.docuworks
+application/vnd.fujifilm.fb.docuworks.binder
+application/vnd.fujifilm.fb.docuworks.container
+application/vnd.fujifilm.fb.jfi+xml
+application/vnd.fujitsu.oasys oas
+application/vnd.fujitsu.oasys2 oa2
+application/vnd.fujitsu.oasys3 oa3
+application/vnd.fujitsu.oasysgp fg5
+application/vnd.fujitsu.oasysprs bh2
+application/vnd.fujixerox.ART-EX
+application/vnd.fujixerox.ART4
+application/vnd.fujixerox.ddd ddd
+application/vnd.fujixerox.docuworks xdw
+application/vnd.fujixerox.docuworks.binder xbd
+application/vnd.fujixerox.docuworks.container xct
+application/vnd.fujixerox.HBPL
+application/vnd.fut-misnet
+application/vnd.futoin+cbor
+application/vnd.futoin+json
+application/vnd.fuzzysheet fzs
+application/vnd.genomatix.tuxedo txd
+application/vnd.genozip genozip
+application/vnd.gentics.grd+json grd
+application/vnd.gentoo.catmetadata+xml
+application/vnd.gentoo.ebuild ebuild
+application/vnd.gentoo.eclass eclass
+application/vnd.gentoo.gpkg gpkg.tar
+application/vnd.gentoo.manifest
+application/vnd.gentoo.pkgmetadata+xml
+application/vnd.gentoo.xpak xpak
+application/vnd.geogebra.file ggb
+application/vnd.geogebra.slides ggs
+application/vnd.geogebra.tool ggt
+application/vnd.geometry-explorer gex gre
+application/vnd.geonext gxt
+application/vnd.geoplan g2w
+application/vnd.geospace g3w
+application/vnd.gerber
+application/vnd.globalplatform.card-content-mgt
+application/vnd.globalplatform.card-content-mgt-response
+application/vnd.gnu.taler.exchange+json
+application/vnd.gnu.taler.merchant+json
+application/vnd.google-earth.kml+xml kml
+application/vnd.google-earth.kmz kmz
+application/vnd.gov.sk.e-form+xml
+application/vnd.gov.sk.e-form+zip
+application/vnd.gov.sk.xmldatacontainer+xml
+application/vnd.gpxsee.map+xml
+application/vnd.grafeq gqf gqs
+application/vnd.gridmp
+application/vnd.groove-account gac
+application/vnd.groove-help ghf
+application/vnd.groove-identity-message gim
+application/vnd.groove-injector grv
+application/vnd.groove-tool-message gtm
+application/vnd.groove-tool-template tpl
+application/vnd.groove-vcard vcg
+application/vnd.hal+json
+application/vnd.hal+xml hal
+application/vnd.HandHeld-Entertainment+xml zmm
+application/vnd.hbci hbci hbc kom upa pkd bpd
+application/vnd.hc+json
+application/vnd.hcl-bireports
+application/vnd.hdt hdt
+application/vnd.heroku+json
+application/vnd.hhe.lesson-player les
+application/vnd.hp-HPGL hpgl
+application/vnd.hp-hpid hpi hpid
+application/vnd.hp-hps hps
+application/vnd.hp-jlyt jlt
+application/vnd.hp-PCL pcl
+application/vnd.hp-PCLXL
+application/vnd.hsl hsl
+application/vnd.httphone
+application/vnd.hydrostatix.sof-data sfd-hdstx
+application/vnd.hyper+json
+application/vnd.hyper-item+json
+application/vnd.hyperdrive+json
+application/vnd.hzn-3d-crossword
+application/vnd.ibm.electronic-media emm
+application/vnd.ibm.MiniPay mpy
+application/vnd.ibm.rights-management irm
+application/vnd.ibm.secure-container sc
+application/vnd.iccprofile icc icm
+application/vnd.ieee.1905 1905.1
+application/vnd.igloader igl
+application/vnd.imagemeter.folder+zip imf
+application/vnd.imagemeter.image+zip imi
+application/vnd.immervision-ivp ivp
+application/vnd.immervision-ivu ivu
+application/vnd.ims.imsccv1p1 imscc
+application/vnd.ims.imsccv1p2
+application/vnd.ims.imsccv1p3
+application/vnd.ims.lis.v2.result+json
+application/vnd.ims.lti.v2.toolconsumerprofile+json
+application/vnd.ims.lti.v2.toolproxy+json
+application/vnd.ims.lti.v2.toolproxy.id+json
+application/vnd.ims.lti.v2.toolsettings+json
+application/vnd.ims.lti.v2.toolsettings.simple+json
+application/vnd.informedcontrol.rms+xml
+application/vnd.infotech.project
+application/vnd.infotech.project+xml
+application/vnd.innopath.wamp.notification
+application/vnd.insors.igm igm
+application/vnd.intercon.formnet xpw xpx
+application/vnd.intergeo i2g
+application/vnd.intertrust.digibox
+application/vnd.intertrust.nncp
+application/vnd.intu.qbo qbo
+application/vnd.intu.qfx qfx
+application/vnd.ipfs.ipns-record ipns-record
+application/vnd.ipld.car car
+application/vnd.ipld.dag-cbor
+application/vnd.ipld.dag-json
+application/vnd.ipld.raw
+application/vnd.iptc.g2.catalogitem+xml
+application/vnd.iptc.g2.conceptitem+xml
+application/vnd.iptc.g2.knowledgeitem+xml
+application/vnd.iptc.g2.newsitem+xml
+application/vnd.iptc.g2.newsmessage+xml
+application/vnd.iptc.g2.packageitem+xml
+application/vnd.iptc.g2.planningitem+xml
+application/vnd.ipunplugged.rcprofile rcprofile
+application/vnd.irepository.package+xml irp
+application/vnd.is-xpr xpr
+application/vnd.isac.fcs fcs
+application/vnd.iso11783-10+zip
+application/vnd.jam jam
+application/vnd.japannet-directory-service
+application/vnd.japannet-jpnstore-wakeup
+application/vnd.japannet-payment-wakeup
+application/vnd.japannet-registration
+application/vnd.japannet-registration-wakeup
+application/vnd.japannet-setstore-wakeup
+application/vnd.japannet-verification
+application/vnd.japannet-verification-wakeup
+application/vnd.jcp.javame.midlet-rms rms
+application/vnd.jisp jisp
+application/vnd.joost.joda-archive joda
+application/vnd.jsk.isdn-ngn
+application/vnd.kahootz ktz ktr
+application/vnd.kde.karbon karbon
+application/vnd.kde.kchart chrt
+application/vnd.kde.kformula kfo
+application/vnd.kde.kivio flw
+application/vnd.kde.kontour kon
+application/vnd.kde.kpresenter kpr kpt
+application/vnd.kde.kspread ksp
+application/vnd.kde.kword kwd kwt
+application/vnd.kenameaapp htke
+application/vnd.kidspiration kia
+application/vnd.Kinar kne knp sdf
+application/vnd.koan skp skd skm skt
+application/vnd.kodak-descriptor sse
+application/vnd.las las
+application/vnd.las.las+json lasjson
+application/vnd.las.las+xml lasxml
+application/vnd.laszip
+application/vnd.leap+json
+application/vnd.liberty-request+xml
+application/vnd.llamagraphics.life-balance.desktop lbd
+application/vnd.llamagraphics.life-balance.exchange+xml lbe
+application/vnd.logipipe.circuit+zip lcs lca
+application/vnd.loom loom
+application/vnd.lotus-1-2-3 123 wk4 wk3 wk1
+application/vnd.lotus-approach apr vew
+application/vnd.lotus-freelance prz pre
+application/vnd.lotus-notes nsf ntf ndl ns4 ns3 ns2 nsh nsg
+application/vnd.lotus-organizer or3 or2 org
+application/vnd.lotus-screencam scm
+application/vnd.lotus-wordpro lwp sam
+application/vnd.macports.portpkg portpkg
+application/vnd.mapbox-vector-tile mvt
+application/vnd.marlin.drm.actiontoken+xml
+application/vnd.marlin.drm.conftoken+xml
+application/vnd.marlin.drm.license+xml
+application/vnd.marlin.drm.mdcf mdc
+application/vnd.mason+json
+application/vnd.maxar.archive.3tz+zip 3tz
+application/vnd.maxmind.maxmind-db mmdb
+application/vnd.mcd mcd
+application/vnd.mdl mdl
+application/vnd.mdl-mbsdf mbsdf
+application/vnd.medcalcdata mc1
+application/vnd.mediastation.cdkey cdkey
+application/vnd.medicalholodeck.recordxr rxt
+application/vnd.meridian-slingshot
+application/vnd.MFER mwf
+application/vnd.mfmp mfm
+application/vnd.micro+json
+application/vnd.micrografx.flo flo
+application/vnd.micrografx.igx igx
+application/vnd.microsoft.portable-executable
+application/vnd.microsoft.windows.thumbnail-cache
+application/vnd.miele+json
+application/vnd.mif mif
+application/vnd.minisoft-hp3000-save
+application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.Mobius.DAF daf
+application/vnd.Mobius.DIS dis
+application/vnd.Mobius.MBK mbk
+application/vnd.Mobius.MQY mqy
+application/vnd.Mobius.MSL msl
+application/vnd.Mobius.PLC plc
+application/vnd.Mobius.TXF txf
+application/vnd.modl modl
+application/vnd.mophun.application mpn
+application/vnd.mophun.certificate mpc
+application/vnd.motorola.flexsuite
+application/vnd.motorola.flexsuite.adsi
+application/vnd.motorola.flexsuite.fis
+application/vnd.motorola.flexsuite.gotap
+application/vnd.motorola.flexsuite.kmr
+application/vnd.motorola.flexsuite.ttc
+application/vnd.motorola.flexsuite.wem
+application/vnd.motorola.iprm
+application/vnd.mozilla.xul+xml xul
+application/vnd.ms-3mfdocument 3mf
+application/vnd.ms-artgalry cil
+application/vnd.ms-asf asf
+application/vnd.ms-cab-compressed cab
+application/vnd.ms-excel xls xlm xla xlc xlt xlw
+application/vnd.ms-excel.addin.macroEnabled.12 xlam
+application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb
+application/vnd.ms-excel.sheet.macroEnabled.12 xlsm
+application/vnd.ms-excel.template.macroEnabled.12 xltm
+application/vnd.ms-fontobject eot
+application/vnd.ms-htmlhelp chm
+application/vnd.ms-ims ims
+application/vnd.ms-lrm lrm
+application/vnd.ms-office.activeX+xml
+application/vnd.ms-officetheme thmx
+application/vnd.ms-pki.seccat cat
+application/vnd.ms-playready.initiator+xml
+application/vnd.ms-powerpoint ppt pps
+application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam
+application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm
+application/vnd.ms-powerpoint.slide.macroEnabled.12 sldm
+application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm
+application/vnd.ms-powerpoint.template.macroEnabled.12 potm
+application/vnd.ms-PrintDeviceCapabilities+xml
+application/vnd.ms-PrintSchemaTicket+xml
+application/vnd.ms-project mpp mpt
+application/vnd.ms-tnef tnef tnf
+application/vnd.ms-windows.devicepairing
+application/vnd.ms-windows.nwprinting.oob
+application/vnd.ms-windows.printerpairing
+application/vnd.ms-windows.wsd.oob
+application/vnd.ms-wmdrm.lic-chlg-req
+application/vnd.ms-wmdrm.lic-resp
+application/vnd.ms-wmdrm.meter-chlg-req
+application/vnd.ms-wmdrm.meter-resp
+application/vnd.ms-word.document.macroEnabled.12 docm
+application/vnd.ms-word.template.macroEnabled.12 dotm
+application/vnd.ms-works wcm wdb wks wps
+application/vnd.ms-wpl wpl
+application/vnd.ms-xpsdocument xps
+application/vnd.msa-disk-image msa
+application/vnd.mseq mseq
+application/vnd.msign
+application/vnd.multiad.creator crtr
+application/vnd.multiad.creator.cif cif
+application/vnd.music-niff
+application/vnd.musician mus
+application/vnd.muvee.style msty
+application/vnd.mynfc taglet
+application/vnd.nacamar.ybrid+json
+application/vnd.ncd.control
+application/vnd.ncd.reference
+application/vnd.nearst.inv+json
+application/vnd.nebumind.line nebul line
+application/vnd.nervana entity request bkm kcm
+application/vnd.netfpx
+application/vnd.neurolanguage.nlu nlu
+application/vnd.nimn nimn
+application/vnd.nintendo.nitro.rom nds
+application/vnd.nintendo.snes.rom sfc smc
+application/vnd.nitf nitf
+application/vnd.noblenet-directory nnd
+application/vnd.noblenet-sealer nns
+application/vnd.noblenet-web nnw
+application/vnd.nokia.catalogs
+application/vnd.nokia.conml+wbxml
+application/vnd.nokia.conml+xml
+application/vnd.nokia.iptv.config+xml
+application/vnd.nokia.iSDS-radio-presets
+application/vnd.nokia.landmark+wbxml
+application/vnd.nokia.landmark+xml
+application/vnd.nokia.landmarkcollection+xml
+application/vnd.nokia.n-gage.ac+xml
+application/vnd.nokia.n-gage.data ngdat
+application/vnd.nokia.ncd
+application/vnd.nokia.pcd+wbxml
+application/vnd.nokia.pcd+xml
+application/vnd.nokia.radio-preset rpst
+application/vnd.nokia.radio-presets rpss
+application/vnd.novadigm.EDM edm
+application/vnd.novadigm.EDX edx
+application/vnd.novadigm.EXT ext
+application/vnd.ntt-local.content-share
+application/vnd.ntt-local.file-transfer
+application/vnd.ntt-local.ogw_remote-access
+application/vnd.ntt-local.sip-ta_remote
+application/vnd.ntt-local.sip-ta_tcp_stream
+application/vnd.oasis.opendocument.base odb
+application/vnd.oasis.opendocument.chart odc
+application/vnd.oasis.opendocument.chart-template otc
+application/vnd.oasis.opendocument.formula odf
+application/vnd.oasis.opendocument.formula-template
+application/vnd.oasis.opendocument.graphics odg
+application/vnd.oasis.opendocument.graphics-template otg
+application/vnd.oasis.opendocument.image odi
+application/vnd.oasis.opendocument.image-template oti
+application/vnd.oasis.opendocument.presentation odp
+application/vnd.oasis.opendocument.presentation-template otp
+application/vnd.oasis.opendocument.spreadsheet ods
+application/vnd.oasis.opendocument.spreadsheet-template ots
+application/vnd.oasis.opendocument.text odt
+application/vnd.oasis.opendocument.text-master odm
+application/vnd.oasis.opendocument.text-master-template otm
+application/vnd.oasis.opendocument.text-template ott
+application/vnd.oasis.opendocument.text-web oth
+application/vnd.obn
+application/vnd.ocf+cbor
+application/vnd.oci.image.manifest.v1+json
+application/vnd.oftn.l10n+json
+application/vnd.oipf.contentaccessdownload+xml
+application/vnd.oipf.contentaccessstreaming+xml
+application/vnd.oipf.cspg-hexbinary
+application/vnd.oipf.dae.svg+xml
+application/vnd.oipf.dae.xhtml+xml
+application/vnd.oipf.mippvcontrolmessage+xml
+application/vnd.oipf.pae.gem
+application/vnd.oipf.spdiscovery+xml
+application/vnd.oipf.spdlist+xml
+application/vnd.oipf.ueprofile+xml
+application/vnd.oipf.userprofile+xml
+application/vnd.olpc-sugar xo
+application/vnd.oma-scws-config
+application/vnd.oma-scws-http-request
+application/vnd.oma-scws-http-response
+application/vnd.oma.bcast.associated-procedure-parameter+xml
+application/vnd.oma.bcast.drm-trigger+xml
+application/vnd.oma.bcast.imd+xml
+application/vnd.oma.bcast.ltkm
+application/vnd.oma.bcast.notification+xml
+application/vnd.oma.bcast.provisioningtrigger
+application/vnd.oma.bcast.sgboot
+application/vnd.oma.bcast.sgdd+xml
+application/vnd.oma.bcast.sgdu
+application/vnd.oma.bcast.simple-symbol-container
+application/vnd.oma.bcast.smartcard-trigger+xml
+application/vnd.oma.bcast.sprov+xml
+application/vnd.oma.bcast.stkm
+application/vnd.oma.cab-address-book+xml
+application/vnd.oma.cab-feature-handler+xml
+application/vnd.oma.cab-pcc+xml
+application/vnd.oma.cab-subs-invite+xml
+application/vnd.oma.cab-user-prefs+xml
+application/vnd.oma.dcd
+application/vnd.oma.dcdc
+application/vnd.oma.dd2+xml dd2
+application/vnd.oma.drm.risd+xml
+application/vnd.oma.group-usage-list+xml
+application/vnd.oma.lwm2m+cbor
+application/vnd.oma.lwm2m+json
+application/vnd.oma.lwm2m+tlv
+application/vnd.oma.pal+xml
+application/vnd.oma.poc.detailed-progress-report+xml
+application/vnd.oma.poc.final-report+xml
+application/vnd.oma.poc.groups+xml
+application/vnd.oma.poc.invocation-descriptor+xml
+application/vnd.oma.poc.optimized-progress-report+xml
+application/vnd.oma.push
+application/vnd.oma.scidm.messages+xml
+application/vnd.oma.xcap-directory+xml
+application/vnd.omads-email+xml
+application/vnd.omads-file+xml
+application/vnd.omads-folder+xml
+application/vnd.omaloc-supl-init
+application/vnd.onepager tam
+application/vnd.onepagertamp tamp
+application/vnd.onepagertamx tamx
+application/vnd.onepagertat tat
+application/vnd.onepagertatp tatp
+application/vnd.onepagertatx tatx
+application/vnd.onvif.metadata
+application/vnd.openblox.game+xml obgx
+application/vnd.openblox.game-binary obg
+application/vnd.openeye.oeb oeb
+application/vnd.openofficeorg.extension oxt
+application/vnd.openstreetmap.data+xml osm
+application/vnd.opentimestamps.ots
+application/vnd.openxmlformats-officedocument.custom-properties+xml
+application/vnd.openxmlformats-officedocument.customXmlProperties+xml
+application/vnd.openxmlformats-officedocument.drawing+xml
+application/vnd.openxmlformats-officedocument.drawingml.chart+xml
+application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml
+application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml
+application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml
+application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml
+application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml
+application/vnd.openxmlformats-officedocument.extended-properties+xml
+application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml
+application/vnd.openxmlformats-officedocument.presentationml.comments+xml
+application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml
+application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml
+application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml
+application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
+application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml
+application/vnd.openxmlformats-officedocument.presentationml.presProps+xml
+application/vnd.openxmlformats-officedocument.presentationml.slide sldx
+application/vnd.openxmlformats-officedocument.presentationml.slide+xml
+application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml
+application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml
+application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
+application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml
+application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml
+application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml
+application/vnd.openxmlformats-officedocument.presentationml.tags+xml
+application/vnd.openxmlformats-officedocument.presentationml.template potx
+application/vnd.openxmlformats-officedocument.presentationml.template.main+xml
+application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
+application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml
+application/vnd.openxmlformats-officedocument.theme+xml
+application/vnd.openxmlformats-officedocument.themeOverride+xml
+application/vnd.openxmlformats-officedocument.vmlDrawing
+application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
+application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
+application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml
+application/vnd.openxmlformats-package.core-properties+xml
+application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml
+application/vnd.openxmlformats-package.relationships+xml
+application/vnd.oracle.resource+json
+application/vnd.orange.indata
+application/vnd.osa.netdeploy ndc
+application/vnd.osgeo.mapguide.package mgp
+application/vnd.osgi.bundle
+application/vnd.osgi.dp dp
+application/vnd.osgi.subsystem esa
+application/vnd.otps.ct-kip+xml
+application/vnd.oxli.countgraph oxlicg
+application/vnd.pagerduty+json
+application/vnd.palm pdb pqa oprc
+application/vnd.panoply plp
+application/vnd.paos.xml
+application/vnd.patentdive dive
+application/vnd.patientecommsdoc
+application/vnd.pawaafile paw
+application/vnd.pcos
+application/vnd.pg.format str
+application/vnd.pg.osasli ei6
+application/vnd.piaccess.application-licence pil
+application/vnd.picsel efif
+application/vnd.pmi.widget wg
+application/vnd.poc.group-advertisement+xml
+application/vnd.pocketlearn plf
+application/vnd.powerbuilder6 pbd
+application/vnd.powerbuilder6-s
+application/vnd.powerbuilder7
+application/vnd.powerbuilder7-s
+application/vnd.powerbuilder75
+application/vnd.powerbuilder75-s
+application/vnd.preminet preminet
+application/vnd.previewsystems.box box vbox
+application/vnd.proteus.magazine mgz
+application/vnd.psfs psfs
+application/vnd.pt.mundusmundi
+application/vnd.publishare-delta-tree qps
+application/vnd.pvi.ptid1 ptid
+application/vnd.pwg-multiplexed
+application/vnd.pwg-xhtml-print+xml
+application/vnd.qualcomm.brew-app-res bar
+application/vnd.quarantainenet
+application/vnd.Quark.QuarkXPress qxd qxt qwd qwt qxl qxb
+application/vnd.quobject-quoxdocument quox quiz
+application/vnd.radisys.moml+xml
+application/vnd.radisys.msml+xml
+application/vnd.radisys.msml-audit+xml
+application/vnd.radisys.msml-audit-conf+xml
+application/vnd.radisys.msml-audit-conn+xml
+application/vnd.radisys.msml-audit-dialog+xml
+application/vnd.radisys.msml-audit-stream+xml
+application/vnd.radisys.msml-conf+xml
+application/vnd.radisys.msml-dialog+xml
+application/vnd.radisys.msml-dialog-base+xml
+application/vnd.radisys.msml-dialog-fax-detect+xml
+application/vnd.radisys.msml-dialog-fax-sendrecv+xml
+application/vnd.radisys.msml-dialog-group+xml
+application/vnd.radisys.msml-dialog-speech+xml
+application/vnd.radisys.msml-dialog-transform+xml
+application/vnd.rainstor.data tree
+application/vnd.rapid
+application/vnd.rar rar
+application/vnd.realvnc.bed bed
+application/vnd.recordare.musicxml mxl
+application/vnd.recordare.musicxml+xml
+application/vnd.RenLearn.rlprint
+application/vnd.resilient.logic rlm reload
+application/vnd.restful+json
+application/vnd.rig.cryptonote cryptonote
+application/vnd.rim.cod cod
+application/vnd.route66.link66+xml link66
+application/vnd.rs-274x
+application/vnd.ruckus.download
+application/vnd.s3sms
+application/vnd.sailingtracker.track st
+application/vnd.sar SAR
+application/vnd.sbm.cid
+application/vnd.sbm.mid2
+application/vnd.scribus scd sla slaz
+application/vnd.sealed.3df s3df
+application/vnd.sealed.csf scsf
+application/vnd.sealed.doc sdoc sdo s1w
+application/vnd.sealed.eml seml sem
+application/vnd.sealed.mht smht smh
+application/vnd.sealed.net
+application/vnd.sealed.ppt sppt s1p
+application/vnd.sealed.tiff stif
+application/vnd.sealed.xls sxls sxl s1e
+application/vnd.sealedmedia.softseal.html stml s1h
+application/vnd.sealedmedia.softseal.pdf spdf spd s1a
+application/vnd.seemail see
+application/vnd.seis+json
+application/vnd.sema sema
+application/vnd.semd semd
+application/vnd.semf semf
+application/vnd.shade-save-file ssv
+application/vnd.shana.informed.formdata ifm
+application/vnd.shana.informed.formtemplate itp
+application/vnd.shana.informed.interchange iif
+application/vnd.shana.informed.package ipk
+application/vnd.shootproof+json
+application/vnd.shopkick+json
+application/vnd.shp shp
+application/vnd.shx shx
+application/vnd.sigrok.session sr
+application/vnd.SimTech-MindMapper twd twds
+application/vnd.siren+json
+application/vnd.smaf mmf
+application/vnd.smart.notebook notebook
+application/vnd.smart.teacher teacher
+application/vnd.smintio.portals.archive sipa
+application/vnd.snesdev-page-table ptrom pt
+application/vnd.software602.filler.form+xml fo
+application/vnd.software602.filler.form-xml-zip zfo
+application/vnd.solent.sdkm+xml sdkm sdkd
+application/vnd.spotfire.dxp dxp
+application/vnd.spotfire.sfs sfs
+application/vnd.sqlite3 sqlite sqlite3
+application/vnd.sss-cod
+application/vnd.sss-dtf
+application/vnd.sss-ntf
+application/vnd.stardivision.calc sdc
+application/vnd.stardivision.chart sds
+application/vnd.stardivision.draw sda
+application/vnd.stardivision.impress sdd
+application/vnd.stardivision.math smf
+application/vnd.stardivision.writer sdw
+application/vnd.stardivision.writer-global sgl
+application/vnd.stepmania.package smzip
+application/vnd.stepmania.stepchart sm
+application/vnd.street-stream
+application/vnd.sun.wadl+xml wadl
+application/vnd.sun.xml.calc sxc
+application/vnd.sun.xml.calc.template stc
+application/vnd.sun.xml.draw sxd
+application/vnd.sun.xml.draw.template std
+application/vnd.sun.xml.impress sxi
+application/vnd.sun.xml.impress.template sti
+application/vnd.sun.xml.math sxm
+application/vnd.sun.xml.writer sxw
+application/vnd.sun.xml.writer.global sxg
+application/vnd.sun.xml.writer.template stw
+application/vnd.sus-calendar sus susp
+application/vnd.svd
+application/vnd.swiftview-ics
+application/vnd.sybyl.mol2 ml2 mol2 sy2
+application/vnd.sycle+xml scl
+application/vnd.syft+json syft.json
+application/vnd.symbian.install sis
+application/vnd.syncml+xml xsm
+application/vnd.syncml.dm+wbxml bdm
+application/vnd.syncml.dm+xml xdm
+application/vnd.syncml.dm.notification
+application/vnd.syncml.dmddf+wbxml
+application/vnd.syncml.dmddf+xml ddf
+application/vnd.syncml.dmtnds+wbxml
+application/vnd.syncml.dmtnds+xml
+application/vnd.syncml.ds.notification
+application/vnd.tableschema+json
+application/vnd.tao.intent-module-archive tao
+application/vnd.tcpdump.pcap pcap cap dmp
+application/vnd.theqvd qvd
+application/vnd.think-cell.ppttc+json ppttc
+application/vnd.tmd.mediaflex.api+xml
+application/vnd.tml vfr viaframe
+application/vnd.tmobile-livetv tmo
+application/vnd.tri.onesource
+application/vnd.trid.tpt tpt
+application/vnd.triscape.mxs mxs
+application/vnd.trueapp tra
+application/vnd.truedoc
+application/vnd.ubisoft.webplayer
+application/vnd.ufdl ufdl ufd frm
+application/vnd.uiq.theme utz
+application/vnd.umajin umj
+application/vnd.unity unityweb
+application/vnd.uoml+xml uoml uo
+application/vnd.uplanet.alert
+application/vnd.uplanet.alert-wbxml
+application/vnd.uplanet.bearer-choice
+application/vnd.uplanet.bearer-choice-wbxml
+application/vnd.uplanet.cacheop
+application/vnd.uplanet.cacheop-wbxml
+application/vnd.uplanet.channel
+application/vnd.uplanet.channel-wbxml
+application/vnd.uplanet.list
+application/vnd.uplanet.list-wbxml
+application/vnd.uplanet.listcmd
+application/vnd.uplanet.listcmd-wbxml
+application/vnd.uplanet.signal
+application/vnd.uri-map urim urimap
+application/vnd.valve.source.material vmt
+application/vnd.vcx vcx
+application/vnd.vd-study mxi study-inter model-inter
+application/vnd.vectorworks vwx
+application/vnd.vel+json
+application/vnd.verimatrix.vcas
+application/vnd.veritone.aion+json aion vtnstd
+application/vnd.veryant.thin istc isws
+application/vnd.ves.encrypted VES
+application/vnd.vidsoft.vidconference vsc
+application/vnd.visio vsd vst vsw vss
+application/vnd.visionary vis
+application/vnd.vividence.scriptfile
+application/vnd.vsf vsf
+application/vnd.wap.sic sic
+application/vnd.wap.slc slc
+application/vnd.wap.wbxml wbxml
+application/vnd.wap.wmlc wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/vnd.wasmflow.wafl wafl
+application/vnd.webturbo wtb
+application/vnd.wfa.dpp
+application/vnd.wfa.p2p p2p
+application/vnd.wfa.wsc wsc
+application/vnd.windows.devicepairing
+application/vnd.wmc wmc
+application/vnd.wmf.bootstrap
+application/vnd.wolfram.mathematica nb
+application/vnd.wolfram.mathematica.package m
+application/vnd.wolfram.player nbp
+application/vnd.wordlift
+application/vnd.wordperfect wpd
+application/vnd.wqd wqd
+application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf stf
+application/vnd.wv.csp+wbxml wv
+application/vnd.wv.csp+xml
+application/vnd.wv.ssp+xml
+application/vnd.xacml+json
+application/vnd.xara xar
+application/vnd.xfdl xfdl xfd
+application/vnd.xfdl.webform
+application/vnd.xmi+xml
+application/vnd.xmpie.cpkg cpkg
+application/vnd.xmpie.dpkg dpkg
+application/vnd.xmpie.plan
+application/vnd.xmpie.ppkg ppkg
+application/vnd.xmpie.xlim xlim
+application/vnd.yamaha.hv-dic hvd
+application/vnd.yamaha.hv-script hvs
+application/vnd.yamaha.hv-voice hvp
+application/vnd.yamaha.openscoreformat osf
+application/vnd.yamaha.openscoreformat.osfpvg+xml
+application/vnd.yamaha.remote-setup
+application/vnd.yamaha.smaf-audio saf
+application/vnd.yamaha.smaf-phrase spf
+application/vnd.yamaha.through-ngn
+application/vnd.yamaha.tunnel-udpencap
+application/vnd.yaoweme yme
+application/vnd.yellowriver-custom-menu cmp
+application/vnd.zul zir zirz
+application/vnd.zzazz.deck+xml zaz
+application/voicexml+xml vxml
+application/voucher-cms+json vcj
+application/vq-rtcpxr
+application/wasm wasm
+application/watcherinfo+xml wif
+application/webpush-options+json
+application/whoispp-query
+application/whoispp-response
+application/widget wgt
+application/wita
+application/wordperfect5.1
+application/wsdl+xml wsdl
+application/wspolicy+xml wspolicy
+application/x-123 wk
+application/x-7z-compressed 7z
+application/x-abiword abw
+application/x-apple-diskimage dmg
+application/x-bcpio bcpio
+application/x-bittorrent torrent
+application/x-cdf cdf cda
+application/x-cdlink vcd
+application/x-comsol mph
+application/x-cpio cpio
+application/x-csh csh
+application/x-director dcr dir dxr
+application/x-doom wad
+application/x-dvi dvi
+application/x-font pfa pfb gsf
+application/x-font-pcf pcf pcf.Z
+application/x-freemind mm
+application/x-ganttproject gan
+application/x-gnumeric gnumeric
+application/x-go-sgf sgf
+application/x-graphing-calculator gcf
+application/x-gtar gtar
+application/x-gtar-compressed tgz taz
+application/x-hdf hdf
+application/x-hwp hwp
+application/x-ica ica
+application/x-info info
+application/x-internet-signup ins isp
+application/x-iphone iii
+application/x-iso9660-image iso
+application/x-java-jnlp-file jnlp
+application/x-jmol jmz
+application/x-killustrator kil
+application/x-latex latex
+application/x-lha lha
+application/x-lyx lyx
+application/x-lzh lzh
+application/x-lzx lzx
+application/x-maker frm maker frame fm fb book fbdoc
+application/x-ms-wmd wmd
+application/x-ms-wmz wmz
+application/x-msdos-program com exe bat dll
+application/x-msi msi
+application/x-netcdf nc
+application/x-ns-proxy-autoconfig pac
+application/x-nwc nwc
+application/x-object o
+application/x-oz-application oza
+application/x-pkcs7-certreqresp p7r
+application/x-pki-message
+application/x-python-code pyc pyo
+application/x-qgis qgs shp shx
+application/x-quicktimeplayer qtl
+application/x-rdp rdp
+application/x-redhat-package-manager rpm
+application/x-rss+xml rss
+application/x-ruby rb
+application/x-scilab sci sce
+application/x-scilab-xcos xcos
+application/x-sh sh
+application/x-shar shar
+application/x-silverlight scr
+application/x-stuffit sit sitx
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex-gf gf
+application/x-tex-pk pk
+application/x-texinfo texinfo texi
+application/x-trash ~ % bak old sik
+application/x-troff-man man
+application/x-troff-me me
+application/x-troff-ms ms
+application/x-ustar ustar
+application/x-wais-source src
+application/x-wingz wz
+application/x-www-form-urlencoded
+application/x-x509-ca-cert crt
+application/x-x509-ca-ra-cert
+application/x-x509-next-ca-cert
+application/x-xfig fig
+application/x-xpinstall xpi
+application/x-xz xz
+application/x400-bp
+application/xacml+xml
+application/xcap-att+xml xav
+application/xcap-caps+xml xca
+application/xcap-diff+xml xdf
+application/xcap-el+xml xel
+application/xcap-error+xml xer
+application/xcap-ns+xml xns
+application/xcon-conference-info+xml
+application/xcon-conference-info-diff+xml
+application/xenc+xml
+application/xfdf xfdf
+application/xhtml+xml xhtml xhtm xht
+application/xliff+xml xlf
+application/xml xml
+application/xml-dtd dtd mod
+application/xml-external-parsed-entity ent
+application/xml-patch+xml
+application/xmpp+xml
+application/xop+xml xop
+application/xslt+xml xsl xslt
+application/xspf+xml xspf
+application/xv+xml mxml xhvml xvml xvm
+application/yaml yaml yml
+application/yang yang
+application/yang-data+cbor
+application/yang-data+json
+application/yang-data+xml
+application/yang-patch+json
+application/yang-patch+xml
+application/yin+xml yin
+application/zip zip
+application/zlib
+application/zstd zst
+
+audio/1d-interleaved-parityfec
+audio/32kadpcm 726
+audio/3gpp
+audio/3gpp2
+audio/aac adts aac ass
+audio/ac3 ac3
+audio/AMR amr AMR
+audio/AMR-WB awb AWB
+audio/amr-wb+
+audio/annodex axa
+audio/aptx
+audio/asc acn
+audio/ATRAC-ADVANCED-LOSSLESS aal
+audio/ATRAC-X atx
+audio/ATRAC3 at3 aa3 omg
+audio/basic au snd
+audio/BV16
+audio/BV32
+audio/clearmode
+audio/CN
+audio/csound csd orc sco
+audio/DAT12
+audio/dls dls
+audio/dsr-es201108
+audio/dsr-es202050
+audio/dsr-es202211
+audio/dsr-es202212
+audio/DV
+audio/DVI4
+audio/eac3
+audio/encaprtp
+audio/EVRC evc
+audio/EVRC-QCP qcp QCP
+audio/EVRC0
+audio/EVRC1
+audio/EVRCB evb
+audio/EVRCB0
+audio/EVRCB1
+audio/EVRCNW enw
+audio/EVRCNW0
+audio/EVRCNW1
+audio/EVRCWB evw
+audio/EVRCWB0
+audio/EVRCWB1
+audio/EVS
+audio/example
+audio/flac flac
+audio/flexfec
+audio/fwdred
+audio/G711-0
+audio/G719
+audio/G722
+audio/G7221
+audio/G723
+audio/G726-16
+audio/G726-24
+audio/G726-32
+audio/G726-40
+audio/G728
+audio/G729
+audio/G7291
+audio/G729D
+audio/G729E
+audio/GSM
+audio/GSM-EFR
+audio/GSM-HR-08
+audio/iLBC lbc
+audio/ip-mr_v2.5
+audio/L16 l16
+audio/L20
+audio/L24
+audio/L8
+audio/LPC
+audio/MELP
+audio/MELP1200
+audio/MELP2400
+audio/MELP600
+audio/mhas mhas
+audio/mobile-xmf mxmf
+audio/mp4 m4a
+audio/MP4A-LATM
+audio/MPA
+audio/mpa-robust
+audio/mpeg mpga mpega mp1 mp2 mp3
+audio/mpeg4-generic
+audio/mpegurl m3u
+audio/ogg oga ogg opus spx
+audio/opus
+audio/parityfec
+audio/PCMA
+audio/PCMA-WB
+audio/PCMU
+audio/PCMU-WB
+audio/prs.sid sid psid
+audio/QCELP
+audio/raptorfec
+audio/RED
+audio/rtp-enc-aescm128
+audio/rtp-midi
+audio/rtploopback
+audio/rtx
+audio/scip
+audio/SMV smv
+audio/SMV-QCP
+audio/SMV0
+audio/sofa sofa
+audio/sp-midi mid
+audio/speex
+audio/t140c
+audio/t38
+audio/telephone-event
+audio/TETRA_ACELP
+audio/TETRA_ACELP_BB
+audio/tone
+audio/TSVCIS
+audio/UEMCLIP
+audio/ulpfec
+audio/usac loas xhe
+audio/VDVI
+audio/VMR-WB
+audio/vnd.3gpp.iufp
+audio/vnd.4SB
+audio/vnd.audiokoz koz
+audio/vnd.CELP
+audio/vnd.cisco.nse
+audio/vnd.cmles.radio-events
+audio/vnd.cns.anp1
+audio/vnd.cns.inf1
+audio/vnd.dece.audio uva uvva
+audio/vnd.digital-winds eol
+audio/vnd.dlna.adts
+audio/vnd.dolby.heaac.1
+audio/vnd.dolby.heaac.2
+audio/vnd.dolby.mlp mlp
+audio/vnd.dolby.mps
+audio/vnd.dolby.pl2
+audio/vnd.dolby.pl2x
+audio/vnd.dolby.pl2z
+audio/vnd.dolby.pulse.1
+audio/vnd.dra
+audio/vnd.dts dts
+audio/vnd.dts.hd dtshd
+audio/vnd.dts.uhd
+audio/vnd.dvb.file
+audio/vnd.everad.plj plj
+audio/vnd.hns.audio
+audio/vnd.lucent.voice lvp
+audio/vnd.ms-playready.media.pya pya
+audio/vnd.nokia.mobile-xmf
+audio/vnd.nortel.vbk vbk
+audio/vnd.nuera.ecelp4800 ecelp4800
+audio/vnd.nuera.ecelp7470 ecelp7470
+audio/vnd.nuera.ecelp9600 ecelp9600
+audio/vnd.octel.sbc
+audio/vnd.presonus.multitrack multitrack
+audio/vnd.rhetorex.32kadpcm
+audio/vnd.rip rip
+audio/vnd.sealedmedia.softseal.mpeg smp3 smp s1m
+audio/vnd.vmx.cvsd
+audio/vorbis
+audio/vorbis-config
+audio/x-aiff aif aiff aifc
+audio/x-gsm gsm
+audio/x-ms-wax wax
+audio/x-ms-wma wma
+audio/x-pn-realaudio ra rm ram
+audio/x-scpls pls
+audio/x-sd2 sd2
+audio/x-wav wav
+
+chemical/x-alchemy alc
+chemical/x-cache cac cache
+chemical/x-cache-csf csf
+chemical/x-cactvs-binary cbin cascii ctab
+chemical/x-cdx cdx
+chemical/x-cerius
+chemical/x-chem3d c3d
+chemical/x-chemdraw chm
+chemical/x-cif cif
+chemical/x-cmdf cmdf
+chemical/x-cml cml
+chemical/x-compass cpa
+chemical/x-crossfire bsd
+chemical/x-csml csml csm
+chemical/x-ctx ctx
+chemical/x-cxf cxf cef
+#chemical/x-daylight-smiles smi
+chemical/x-embl-dl-nucleotide emb embl
+chemical/x-galactic-spc spc
+chemical/x-gamess-input inp gam gamin
+chemical/x-gaussian-checkpoint fch fchk
+chemical/x-gaussian-cube cub
+chemical/x-gaussian-input gau gjc gjf
+chemical/x-gaussian-log gal
+chemical/x-gcg8-sequence gcg
+chemical/x-genbank gen
+chemical/x-hin hin
+chemical/x-isostar istr ist
+chemical/x-jcamp-dx jdx dx
+chemical/x-kinemage kin
+chemical/x-macmolecule mcm
+chemical/x-macromodel-input mmod
+chemical/x-mdl-molfile mol
+chemical/x-mdl-rdfile rd
+chemical/x-mdl-rxnfile rxn
+chemical/x-mdl-sdfile sd sdf
+chemical/x-mdl-tgf tgf
+#chemical/x-mif mif
+chemical/x-mmcif mcif
+chemical/x-molconn-Z b
+chemical/x-mopac-graph gpt
+chemical/x-mopac-input mop mopcrt mpc zmt
+chemical/x-mopac-out moo
+chemical/x-mopac-vib mvb
+chemical/x-ncbi-asn1 asn
+chemical/x-ncbi-asn1-ascii prt
+chemical/x-ncbi-asn1-binary val aso
+chemical/x-ncbi-asn1-spec asn
+chemical/x-pdb pdb
+chemical/x-rosdal ros
+chemical/x-swissprot sw
+chemical/x-vamas-iso14976 vms
+chemical/x-vmd vmd
+chemical/x-xtel xtel
+chemical/x-xyz xyz
+
+font/collection ttc
+font/otf otf
+font/sfnt
+font/ttf ttf
+font/woff woff
+font/woff2 woff2
+
+image/aces exr
+image/apng apng
+image/avci avci
+image/avcs avcs
+image/avif avif hif
+image/bmp bmp
+image/cgm cgm
+image/dicom-rle drle
+image/dpx dpx
+image/emf emf
+image/example
+image/fits fits fit fts
+image/g3fax
+image/gif gif
+image/heic heic
+image/heic-sequence heics
+image/heif heif
+image/heif-sequence heifs
+image/hej2k hej2
+image/hsj2 hsj2
+image/ief ief
+image/j2c j2c J2C j2k J2K
+image/jls jls
+image/jp2 jp2 jpg2
+image/jpeg jpeg jpg jpe jfif
+image/jph jph
+image/jphc jhc jphc
+image/jpm jpm jpgm
+image/jpx jpx jpf
+image/jxl jxl
+image/jxr jxr
+image/jxrA jxra
+image/jxrS jxrs
+image/jxs jxs
+image/jxsc jxsc
+image/jxsi jxsi
+image/jxss jxss
+image/ktx ktx
+image/ktx2 ktx2
+image/naplps
+image/png png
+image/prs.btif btif btf
+image/prs.pti pti
+image/pwg-raster
+image/svg+xml svg svgz
+image/t38
+image/tiff tiff tif
+image/tiff-fx tfx
+image/vnd.adobe.photoshop psd
+image/vnd.airzip.accelerator.azv azv
+image/vnd.cns.inf2
+image/vnd.dece.graphic uvi uvvi uvg uvvg
+image/vnd.djvu djvu djv
+image/vnd.dvb.subtitle
+image/vnd.dwg dwg
+image/vnd.dxf dxf
+image/vnd.fastbidsheet fbs
+image/vnd.fpx fpx
+image/vnd.fst fst
+image/vnd.fujixerox.edmics-mmr mmr
+image/vnd.fujixerox.edmics-rlc rlc
+image/vnd.globalgraphics.pgb PGB pgb
+image/vnd.microsoft.icon ico
+image/vnd.mix
+image/vnd.ms-modi mdi
+image/vnd.net-fpx
+image/vnd.pco.b16 b16
+image/vnd.radiance hdr rgbe xyze
+image/vnd.sealed.png spng spn s1n
+image/vnd.sealedmedia.softseal.gif sgif sgi s1g
+image/vnd.sealedmedia.softseal.jpg sjpg sjp s1j
+image/vnd.svf
+image/vnd.tencent.tap tap
+image/vnd.valve.source.texture vtf
+image/vnd.wap.wbmp wbmp
+image/vnd.xiff xif
+image/vnd.zbrush.pcx pcx
+image/webp webp
+image/wmf wmf
+image/x-canon-cr2 cr2
+image/x-canon-crw crw
+image/x-cmu-raster ras
+image/x-coreldraw cdr
+image/x-coreldrawpattern pat
+image/x-coreldrawtemplate cdt
+image/x-corelphotopaint cpt
+image/x-epson-erf erf
+image/x-jg art
+image/x-jng jng
+image/x-nikon-nef nef
+image/x-olympus-orf orf
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-xbitmap xbm
+image/x-xcf xcf
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+
+inode/blockdevice
+inode/chardevice
+inode/directory
+inode/directory-locked
+inode/fifo
+inode/socket
+
+message/bhttp
+message/CPIM
+message/delivery-status
+message/disposition-notification
+message/example
+message/external-body
+message/feedback-report
+message/global u8msg
+message/global-delivery-status u8dsn
+message/global-disposition-notification u8mdn
+message/global-headers u8hdr
+message/http
+message/imdn+xml
+message/mls
+message/ohttp-req
+message/ohttp-res
+message/partial
+message/rfc822 eml mail art
+message/s-http
+message/sip
+message/sipfrag
+message/tracking-status
+message/vnd.wfa.wsc
+
+model/3mf
+model/e57
+model/example
+model/gltf+json gltf
+model/gltf-binary glb
+model/iges igs iges
+model/JT jt
+model/mesh msh mesh silo
+model/mtl mtl
+model/obj obj
+model/prc prc
+model/step stp step
+model/step+xml stpx
+model/step+zip stpz
+model/step-xml+zip stpxz
+model/stl stl
+model/u3d u3d
+model/vnd.bary bary
+model/vnd.cld cld
+model/vnd.collada+xml dae
+model/vnd.dwf dwf
+model/vnd.flatland.3dml
+model/vnd.gdl gdl gsm win dor lmp rsm msm ism
+model/vnd.gs-gdl
+model/vnd.gtw gtw
+model/vnd.moml+xml moml
+model/vnd.mts mts
+model/vnd.opengex ogex
+model/vnd.parasolid.transmit.binary x_b xmt_bin
+model/vnd.parasolid.transmit.text x_t xmt_txt
+model/vnd.pytha.pyox pyox
+model/vnd.rosette.annotated-data-model
+model/vnd.sap.vds vds
+model/vnd.usda usda
+model/vnd.usdz+zip usdz
+model/vnd.valve.source.compiled-map bsp
+model/vnd.vtu vtu
+model/vrml wrl vrm vrml
+model/x3d+fastinfoset x3db
+model/x3d+xml x3d x3dz
+model/x3d-vrml x3dv x3dvz
+
+multipart/alternative
+multipart/appledouble
+multipart/byteranges
+multipart/digest
+multipart/encrypted
+multipart/example
+multipart/form-data
+multipart/header-set
+multipart/mixed
+multipart/multilingual
+multipart/parallel
+multipart/related
+multipart/report
+multipart/signed
+multipart/vnd.bint.med-plus bmed
+multipart/voice-message vpm
+multipart/x-mixed-replace
+
+text/1d-interleaved-parityfec
+text/cache-manifest appcache manifest
+text/calendar ics ifb
+text/cql CQL
+text/cql-extension
+text/cql-identifier
+text/css css
+text/csv csv
+text/csv-schema csvs
+text/dns soa zone
+text/encaprtp
+text/enriched
+text/example
+text/fhirpath
+text/flexfec
+text/fwdred
+text/gff3 gff3
+text/grammar-ref-list
+text/hl7v2
+text/html html htm shtml
+text/javascript es js mjs
+text/jcr-cnd cnd
+text/markdown md markdown
+text/mizar miz
+text/n3 n3
+text/parameters
+text/parityfec
+text/plain txt text pot brf srt
+text/provenance-notation provn
+text/prs.fallenstein.rst rst
+text/prs.lines.tag tag dsc
+text/prs.prop.logic
+text/raptorfec
+text/RED
+text/rfc822-headers
+text/rtf
+text/rtp-enc-aescm128
+text/rtploopback
+text/rtx
+text/SGML sgml sgm
+text/shaclc shaclc shc
+text/shex shex
+text/spdx spdx
+text/strings
+text/t140
+text/tab-separated-values tsv
+text/texmacs tm
+text/troff t tr roff
+text/turtle ttl
+text/ulpfec
+text/uri-list uris uri
+text/vcard vcf vcard
+text/vnd.a a
+text/vnd.abc abc
+text/vnd.ascii-art ascii
+text/vnd.curl curl
+text/vnd.debian.copyright copyright
+text/vnd.DMClientScript dms
+text/vnd.dvb.subtitle
+text/vnd.esmertec.theme-descriptor jtd
+text/vnd.exchangeable VFK
+text/vnd.familysearch.gedcom ged
+text/vnd.ficlab.flt flt
+text/vnd.fly fly
+text/vnd.fmi.flexstor flx
+text/vnd.gml
+text/vnd.graphviz gv dot
+text/vnd.hans hans
+text/vnd.hgl hgl
+text/vnd.in3d.3dml 3dml 3dm
+text/vnd.in3d.spot spot spo
+text/vnd.IPTC.NewsML
+text/vnd.IPTC.NITF
+text/vnd.latex-z
+text/vnd.motorola.reflex
+text/vnd.ms-mediapackage mpf
+text/vnd.net2phone.commcenter.command ccc
+text/vnd.radisys.msml-basic-layout
+text/vnd.senx.warpscript mc2
+text/vnd.sosi sos
+text/vnd.sun.j2me.app-descriptor jad
+text/vnd.trolltech.linguist ts
+text/vnd.wap.si si
+text/vnd.wap.sl sl
+text/vnd.wap.wml wml
+text/vnd.wap.wmlscript wmls
+text/vtt vtt
+text/wgsl wgsl
+text/x-bibtex bib
+text/x-boo boo
+text/x-c++hdr h++ hpp hxx hh
+text/x-c++src c++ cpp cxx cc
+text/x-chdr h
+text/x-component htc
+text/x-csh csh
+text/x-csrc c
+text/x-diff diff patch
+text/x-dsrc d
+text/x-haskell hs
+text/x-java java
+text/x-lilypond ly
+text/x-literate-haskell lhs
+text/x-moc moc
+text/x-pascal p pas
+text/x-pcs-gcd gcd
+text/x-perl pl pm
+text/x-python py
+text/x-scala scala
+text/x-setext etx
+text/x-sfv sfv
+text/x-sh sh
+text/x-tcl tcl tk
+text/x-tex tex ltx sty cls
+text/x-vcalendar vcs
+text/xml
+text/xml-dtd
+text/xml-external-parsed-entity
+
+video/1d-interleaved-parityfec
+video/3gpp
+video/3gpp-tt
+video/3gpp2
+video/annodex axv
+video/AV1
+video/BMPEG
+video/BT656
+video/CelB
+video/DV
+video/dv dif dv
+video/encaprtp
+video/example
+video/FFV1
+video/flexfec
+video/fli fli
+video/gl gl
+video/H261
+video/H263
+video/H263-1998
+video/H263-2000
+video/H264
+video/H264-RCDO
+video/H264-SVC
+video/H265
+video/H266
+video/iso.segment m4s
+video/JPEG
+video/jpeg2000
+video/jxsv
+video/mj2 mj2 mjp2
+video/MP1S
+video/MP2P
+video/MP2T
+video/mp4 mp4 mpg4 m4v
+video/MP4V-ES
+video/mpeg mpeg mpg mpe m1v m2v
+video/mpeg4-generic
+video/MPV
+video/nv
+video/ogg ogv
+video/parityfec
+video/pointer
+video/quicktime qt mov
+video/raptorfec
+video/raw
+video/rtp-enc-aescm128
+video/rtploopback
+video/rtx
+video/scip
+video/smpte291
+video/SMPTE292M
+video/ulpfec
+video/vc1
+video/vc2
+video/vnd.CCTV
+video/vnd.dece.hd uvh uvvh
+video/vnd.dece.mobile uvm uvvm
+video/vnd.dece.mp4 uvu uvvu
+video/vnd.dece.pd uvp uvvp
+video/vnd.dece.sd uvs uvvs
+video/vnd.dece.video uvv uvvv
+video/vnd.directv.mpeg
+video/vnd.directv.mpeg-tts
+video/vnd.dlna.mpeg-tts
+video/vnd.dvb.file dvb
+video/vnd.fvt fvt
+video/vnd.hns.video
+video/vnd.iptvforum.1dparityfec-1010
+video/vnd.iptvforum.1dparityfec-2005
+video/vnd.iptvforum.2dparityfec-1010
+video/vnd.iptvforum.2dparityfec-2005
+video/vnd.iptvforum.ttsavc
+video/vnd.iptvforum.ttsmpeg2
+video/vnd.motorola.video
+video/vnd.motorola.videop
+video/vnd.mpegurl mxu m4u
+video/vnd.ms-playready.media.pyv pyv
+video/vnd.nokia.interleaved-multimedia nim
+video/vnd.nokia.mp4vr
+video/vnd.nokia.videovoip
+video/vnd.objectvideo
+video/vnd.radgamettools.bink bik bk2
+video/vnd.radgamettools.smacker smk
+video/vnd.sealed.mpeg1 smpg s11
+video/vnd.sealed.mpeg4 s14
+video/vnd.sealed.swf sswf ssw
+video/vnd.sealedmedia.softseal.mov smov smo s1q
+video/vnd.uvvu.mp4
+video/vnd.vivo viv
+video/vnd.youtube.yt yt
+video/VP8
+video/VP9
+video/webm webm
+video/x-flv flv
+video/x-la-asf lsf lsx
+video/x-matroska mpv mkv
+video/x-mng mng
+video/x-ms-wm wm
+video/x-ms-wmv wmv
+video/x-ms-wmx wmx
+video/x-ms-wvx wvx
+video/x-msvideo avi
+video/x-sgi-movie movie
diff --git a/etc/mke2fs.conf b/etc/mke2fs.conf
new file mode 100644
index 0000000000..5d57bc7799
--- /dev/null
+++ b/etc/mke2fs.conf
@@ -0,0 +1,43 @@
+[defaults]
+ base_features = sparse_super,large_file,filetype,resize_inode,dir_index,ext_attr
+ default_mntopts = acl,user_xattr
+ enable_periodic_fsck = 0
+ blocksize = 4096
+ inode_size = 256
+ inode_ratio = 16384
+
+[fs_types]
+ ext3 = {
+ features = has_journal
+ }
+ ext4 = {
+ features = has_journal,extent,huge_file,flex_bg,metadata_csum,64bit,dir_nlink,extra_isize
+ }
+ small = {
+ inode_ratio = 4096
+ }
+ floppy = {
+ inode_ratio = 8192
+ }
+ big = {
+ inode_ratio = 32768
+ }
+ huge = {
+ inode_ratio = 65536
+ }
+ news = {
+ inode_ratio = 4096
+ }
+ largefile = {
+ inode_ratio = 1048576
+ blocksize = -1
+ }
+ largefile4 = {
+ inode_ratio = 4194304
+ blocksize = -1
+ }
+ hurd = {
+ blocksize = 4096
+ inode_size = 128
+ warn_y2038_dates = 0
+ }
diff --git a/etc/modprobe.d/blacklist-ath_pci.conf b/etc/modprobe.d/blacklist-ath_pci.conf
new file mode 100644
index 0000000000..bb1a85b39a
--- /dev/null
+++ b/etc/modprobe.d/blacklist-ath_pci.conf
@@ -0,0 +1,7 @@
+# For some Atheros 5K RF MACs, the madwifi driver loads buts fails to
+# correctly initialize the hardware, leaving it in a state from
+# which ath5k cannot recover. To prevent this condition, stop
+# madwifi from loading by default. Use Jockey to select one driver
+# or the other. (Ubuntu: #315056, #323830)
+blacklist ath_pci
+
diff --git a/etc/modprobe.d/blacklist-firewire.conf b/etc/modprobe.d/blacklist-firewire.conf
new file mode 100644
index 0000000000..ae591b3eaa
--- /dev/null
+++ b/etc/modprobe.d/blacklist-firewire.conf
@@ -0,0 +1,10 @@
+# Select the legacy firewire stack over the new CONFIG_FIREWIRE one.
+
+blacklist ohci1394
+blacklist sbp2
+blacklist dv1394
+blacklist raw1394
+blacklist video1394
+
+#blacklist firewire-ohci
+#blacklist firewire-sbp2
diff --git a/etc/modprobe.d/blacklist-framebuffer.conf b/etc/modprobe.d/blacklist-framebuffer.conf
new file mode 100644
index 0000000000..9fd5eca9d6
--- /dev/null
+++ b/etc/modprobe.d/blacklist-framebuffer.conf
@@ -0,0 +1,31 @@
+# Framebuffer drivers are generally buggy and poorly-supported, and cause
+# suspend failures, kernel panics and general mayhem. For this reason we
+# never load them automatically.
+blacklist aty128fb
+blacklist atyfb
+blacklist radeonfb
+blacklist cirrusfb
+blacklist cyber2000fb
+blacklist cyblafb
+blacklist gx1fb
+blacklist hgafb
+blacklist i810fb
+blacklist intelfb
+blacklist kyrofb
+blacklist lxfb
+blacklist matroxfb_base
+blacklist neofb
+blacklist nvidiafb
+blacklist pm2fb
+blacklist rivafb
+blacklist s1d13xxxfb
+blacklist savagefb
+blacklist sisfb
+blacklist sstfb
+blacklist tdfxfb
+blacklist tridentfb
+#blacklist vesafb
+blacklist vfb
+blacklist viafb
+blacklist vt8623fb
+blacklist udlfb
diff --git a/etc/modprobe.d/blacklist-rare-network.conf b/etc/modprobe.d/blacklist-rare-network.conf
new file mode 100644
index 0000000000..6c30188810
--- /dev/null
+++ b/etc/modprobe.d/blacklist-rare-network.conf
@@ -0,0 +1,22 @@
+# Many less commonly used network protocols have recently had various
+# security flaws discovered. In an effort to reduce the scope of future
+# vulnerability exploitations, they are being blacklisted here so that
+# unprivileged users cannot use them by default. System owners can still
+# either modify this file, or specifically modprobe any needed protocols.
+
+# ax25
+alias net-pf-3 off
+# netrom
+alias net-pf-6 off
+# x25
+alias net-pf-9 off
+# rose
+alias net-pf-11 off
+# decnet
+alias net-pf-12 off
+# econet
+alias net-pf-19 off
+# rds
+alias net-pf-21 off
+# af_802154
+alias net-pf-36 off
diff --git a/etc/modprobe.d/blacklist.conf b/etc/modprobe.d/blacklist.conf
new file mode 100644
index 0000000000..eecdf12865
--- /dev/null
+++ b/etc/modprobe.d/blacklist.conf
@@ -0,0 +1,52 @@
+# This file lists those modules which we don't want to be loaded by
+# alias expansion, usually so some other driver will be loaded for the
+# device instead.
+
+# evbug is a debug tool that should be loaded explicitly
+blacklist evbug
+
+# these drivers are very simple, the HID drivers are usually preferred
+blacklist usbmouse
+blacklist usbkbd
+
+# replaced by e100
+blacklist eepro100
+
+# replaced by tulip
+blacklist de4x5
+
+# causes no end of confusion by creating unexpected network interfaces
+blacklist eth1394
+
+# snd_intel8x0m can interfere with snd_intel8x0, doesn't seem to support much
+# hardware on its own (Ubuntu bug #2011, #6810)
+blacklist snd_intel8x0m
+
+# Conflicts with dvb driver (which is better for handling this device)
+blacklist snd_aw2
+
+# replaced by p54pci
+blacklist prism54
+
+# replaced by b43 and ssb.
+blacklist bcm43xx
+
+# most apps now use garmin usb driver directly (Ubuntu: #114565)
+blacklist garmin_gps
+
+# replaced by asus-laptop (Ubuntu: #184721)
+blacklist asus_acpi
+
+# low-quality, just noise when being used for sound playback, causes
+# hangs at desktop session start (Ubuntu: #246969)
+blacklist snd_pcsp
+
+# ugly and loud noise, getting on everyone's nerves; this should be done by a
+# nice pulseaudio bing (Ubuntu: #77010)
+blacklist pcspkr
+
+# EDAC driver for amd76x clashes with the agp driver preventing the aperture
+# from being initialised (Ubuntu: #297750). Blacklist so that the driver
+# continues to build and is installable for the few cases where its
+# really needed.
+blacklist amd76x_edac
diff --git a/etc/modprobe.d/iwlwifi.conf b/etc/modprobe.d/iwlwifi.conf
new file mode 100644
index 0000000000..5a83edd082
--- /dev/null
+++ b/etc/modprobe.d/iwlwifi.conf
@@ -0,0 +1,7 @@
+# /etc/modprobe.d/iwlwifi.conf
+# iwlwifi will dyamically load either iwldvm or iwlmvm depending on the
+# microcode file installed on the system. When removing iwlwifi, first
+# remove the iwl?vm module and then iwlwifi.
+remove iwlwifi \
+(/sbin/lsmod | grep -o -e ^iwlmvm -e ^iwldvm -e ^iwlwifi | xargs /sbin/rmmod) \
+&& /sbin/modprobe -r mac80211
diff --git a/etc/modprobe.d/mdadm.conf b/etc/modprobe.d/mdadm.conf
new file mode 100644
index 0000000000..5ad1249978
--- /dev/null
+++ b/etc/modprobe.d/mdadm.conf
@@ -0,0 +1,8 @@
+# mdadm module configuration file
+# set start_ro=1 to make newly assembled arrays read-only initially,
+# to prevent metadata writes. This is needed in order to allow
+# resume-from-disk to work - new boot should not perform writes
+# because it will be done behind the back of the system being
+# resumed. See http://bugs.debian.org/415441 for details.
+
+options md_mod start_ro=1
diff --git a/etc/modules b/etc/modules
new file mode 100644
index 0000000000..6edd44a147
--- /dev/null
+++ b/etc/modules
@@ -0,0 +1,4 @@
+# /etc/modules is obsolete and has been replaced by /etc/modules-load.d/.
+# Please see modules-load.d(5) and modprobe.d(5) for details.
+#
+# Updating this file still works, but it is undocumented and unsupported.
diff --git a/etc/modules-load.d/modules.conf b/etc/modules-load.d/modules.conf
new file mode 120000
index 0000000000..464b823aca
--- /dev/null
+++ b/etc/modules-load.d/modules.conf
@@ -0,0 +1 @@
+../modules
\ No newline at end of file
diff --git a/etc/monit/conf-available/acpid b/etc/monit/conf-available/acpid
new file mode 100644
index 0000000000..1c678a90ab
--- /dev/null
+++ b/etc/monit/conf-available/acpid
@@ -0,0 +1,16 @@
+ check process acpid with pidfile "/var/run/acpid.pid"
+ group system
+ group acpid
+ start program = "/etc/init.d/acpid start"
+ stop program = "/etc/init.d/acpid stop"
+ if 5 restarts within 5 cycles then timeout
+ depends on acpid_bin
+ depends on acpid_rc
+
+ check file acpid_bin with path "/usr/sbin/acpid"
+ group acpid
+ include /etc/monit/templates/rootbin
+
+ check file acpid_rc with path "/etc/init.d/acpid"
+ group acpid
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/apache2 b/etc/monit/conf-available/apache2
new file mode 100644
index 0000000000..c0c2df727a
--- /dev/null
+++ b/etc/monit/conf-available/apache2
@@ -0,0 +1,17 @@
+ check process apache with pidfile /var/run/apache2/apache2.pid
+ group www
+ group apache
+ start program = "/etc/init.d/apache2 start"
+ stop program = "/etc/init.d/apache2 stop"
+ if 4 restarts within 20 cycles then timeout
+ if failed host localhost port 80 with protocol http and request "/server-status" with timeout 25 seconds for 4 times within 5 cycles then restart
+ depend apache_bin
+ depend apache_rc
+
+ check file apache_bin with path /usr/sbin/apache2
+ group apache
+ include /etc/monit/templates/rootbin
+
+ check file apache_rc with path /etc/init.d/apache2
+ group apache
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/at b/etc/monit/conf-available/at
new file mode 100644
index 0000000000..e41545d949
--- /dev/null
+++ b/etc/monit/conf-available/at
@@ -0,0 +1,16 @@
+ check process atd with pidfile "/var/run/atd.pid"
+ group system
+ group atd
+ start program = "/etc/init.d/atd start"
+ stop program = "/etc/init.d/atd stop"
+ if 5 restarts within 5 cycles then timeout
+ depends on atd_bin
+ depends on atd_rc
+
+ check file atd_bin with path "/usr/sbin/atd"
+ group atd
+ include /etc/monit/templates/rootbin
+
+ check file atd_rc with path "/etc/init.d/atd"
+ group atd
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/cron b/etc/monit/conf-available/cron
new file mode 100644
index 0000000000..83654b9e9a
--- /dev/null
+++ b/etc/monit/conf-available/cron
@@ -0,0 +1,23 @@
+ check process crond with pidfile /var/run/crond.pid
+ group system
+ group crond
+ start program = "/etc/init.d/cron start"
+ stop program = "/etc/init.d/cron stop"
+ if 5 restarts with 5 cycles then timeout
+ depend cron_bin
+ depend cron_rc
+ depend cron_spool
+
+ check file cron_bin with path /usr/sbin/cron
+ group crond
+ include /etc/monit/templates/rootbin
+
+ check file cron_rc with path "/etc/init.d/cron"
+ group crond
+ include /etc/monit/templates/rootbin
+
+ check directory cron_spool with path /var/spool/cron/crontabs
+ group crond
+ if failed permission 1730 then unmonitor
+ if failed uid root then unmonitor
+ if failed gid crontab then unmonitor
diff --git a/etc/monit/conf-available/mdadm b/etc/monit/conf-available/mdadm
new file mode 100644
index 0000000000..e6d4c344e9
--- /dev/null
+++ b/etc/monit/conf-available/mdadm
@@ -0,0 +1,21 @@
+ check process mdadm with pidfile /var/run/mdadm/monitor.pid
+ group system
+ group mdadm
+ start program = "/etc/init.d/mdadm start"
+ stop program = "/etc/init.d/mdadm stop"
+ if 5 restarts with 5 cycles then timeout
+ depend mdadm_bin
+ depend mdadm_rc
+ depend mdadm_conf
+
+ check file mdadm_bin with path /sbin/mdadm
+ group mdadm
+ include /etc/monit/templates/rootbin
+
+ check file mdadm_conf with path /etc/mdadm/mdadm.conf
+ group mdadm
+ include /etc/monit/templates/rootrc
+
+ check file mdadm_rc with path "/etc/init.d/mdadm"
+ group mdadm
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/memcached b/etc/monit/conf-available/memcached
new file mode 100644
index 0000000000..e5fc12f38e
--- /dev/null
+++ b/etc/monit/conf-available/memcached
@@ -0,0 +1,19 @@
+ check process memcache with pidfile /var/run/memcached.pid
+ group cache
+ group memcached
+ start program = "/etc/init.d/memcached start"
+ stop program = "/etc/init.d/memcached stop"
+ if failed host 127.0.0.1 port 11211 and protocol memcache then restart
+ if cpu > 60% for 2 cycles then alert
+ if cpu > 98% for 5 cycles then restart
+ if 5 restarts within 20 cycles then timeout
+ depend memcache_bin
+ depend memcache_rc
+
+ check file memcache_bin with path /usr/bin/memcached
+ group memcached
+ include /etc/monit/templates/rootbin
+
+ check file memcache_rc with path /etc/init.d/memcached
+ group memcached
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/mysql b/etc/monit/conf-available/mysql
new file mode 100644
index 0000000000..4b552dddd1
--- /dev/null
+++ b/etc/monit/conf-available/mysql
@@ -0,0 +1,18 @@
+ check process mysqld with pidfile /var/run/mysqld/mysqld.pid
+ group database
+ group mysql
+ start program = "/etc/init.d/mysql start"
+ stop program = "/etc/init.d/mysql stop"
+ if failed host localhost port 3306 protocol mysql with timeout 15 seconds for 3 times within 4 cycles then restart
+ if failed unixsocket /var/run/mysqld/mysqld.sock protocol mysql for 3 times within 4 cycles then restart
+ if 5 restarts with 5 cycles then timeout
+ depend mysql_bin
+ depend mysql_rc
+
+ check file mysql_bin with path /usr/sbin/mysqld
+ group mysql
+ include /etc/monit/templates/rootbin
+
+ check file mysql_rc with path /etc/init.d/mysql
+ group mysql
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/nginx b/etc/monit/conf-available/nginx
new file mode 100644
index 0000000000..d1994a81e1
--- /dev/null
+++ b/etc/monit/conf-available/nginx
@@ -0,0 +1,17 @@
+ check process nginx with pidfile /var/run/nginx.pid
+ group www
+ group nginx
+ start program = "/etc/init.d/nginx start"
+ stop program = "/etc/init.d/nginx stop"
+# if failed port 80 protocol http request "/" then restart
+ if 5 restarts with 5 cycles then timeout
+ depend nginx_bin
+ depend nginx_rc
+
+ check file nginx_bin with path /usr/sbin/nginx
+ group nginx
+ include /etc/monit/templates/rootbin
+
+ check file nginx_rc with path /etc/init.d/nginx
+ group nginx
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/openntpd b/etc/monit/conf-available/openntpd
new file mode 100644
index 0000000000..d6c64e3c83
--- /dev/null
+++ b/etc/monit/conf-available/openntpd
@@ -0,0 +1,16 @@
+ check process ntpd with pidfile /var/run/openntpd.pid
+ group system
+ group ntpd
+ start program = "/etc/init.d/openntpd start"
+ stop program = "/etc/init.d/openntpd stop"
+ if 4 restarts within 12 cycles then timeout
+ depend ntpd_bin
+ depend ntpd_rc
+
+ check file ntpd_bin with path /usr/sbin/ntpd
+ group ntpd
+ include /etc/monit/templates/rootbin
+
+ check file ntpd_rc with path /etc/init.d/openntpd
+ group ntpd
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/openssh-server b/etc/monit/conf-available/openssh-server
new file mode 100644
index 0000000000..42e80afa10
--- /dev/null
+++ b/etc/monit/conf-available/openssh-server
@@ -0,0 +1,35 @@
+ check process sshd matching /usr/sbin/sshd
+ group system
+ group sshd
+ start program = "/usr/bin/systemctl start ssh"
+ stop program = "/usr/bin/systemctl stop ssh"
+ if failed host localhost port 22 with proto ssh then restart
+ if 5 restarts with 5 cycles then timeout
+ depend on sshd_bin
+ depend on sftp_bin
+ depend on sshd_rc
+ depend on sshd_rsa_key
+
+ check file sshd_bin with path /usr/sbin/sshd
+ group sshd
+ include /etc/monit/templates/rootbin
+
+ check file sftp_bin with path /usr/lib/openssh/sftp-server
+ group sshd
+ include /etc/monit/templates/rootbin
+
+ check file sshd_rsa_key with path /etc/ssh/ssh_host_rsa_key
+ group sshd
+ include /etc/monit/templates/rootstrict
+
+ check file sshd_ecdsa_key with path /etc/ssh/ssh_host_ecdsa_key
+ group sshd
+ include /etc/monit/templates/rootstrict
+
+ check file sshd_ed25519_key with path /etc/ssh/ssh_host_ed25519_key
+ group sshd
+ include /etc/monit/templates/rootstrict
+
+ check file sshd_rc with path /etc/ssh/sshd_config
+ group sshd
+ include /etc/monit/templates/rootrc
diff --git a/etc/monit/conf-available/pdns-recursor b/etc/monit/conf-available/pdns-recursor
new file mode 100644
index 0000000000..75c20b559a
--- /dev/null
+++ b/etc/monit/conf-available/pdns-recursor
@@ -0,0 +1,18 @@
+ check process pdns-recursor with pidfile /var/run/pdns_recursor.pid
+ group system
+ group dns
+ group pdns-recursor
+ start program = "/etc/init.d/pdns-recursor start"
+ stop program = "/etc/init.d/pdns-recursor stop"
+ if failed host 127.0.0.1 port 53 type udp protocol dns for 3 times within 4 cycles then restart
+ if 5 restarts within 20 cycles then timeout
+ depend pdns-recursor_bin
+ depend pdns-recursor_rc
+
+ check file pdns-recursor_bin with path /usr/sbin/pdns_recursor
+ group pdns-recursor
+ include /etc/monit/templates/rootbin
+
+ check file pdns-recursor_rc with path /etc/init.d/pdns-recursor
+ group pnds-recursor
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/postfix b/etc/monit/conf-available/postfix
new file mode 100644
index 0000000000..af440067ad
--- /dev/null
+++ b/etc/monit/conf-available/postfix
@@ -0,0 +1,44 @@
+ check process postfix with pidfile /var/spool/postfix/pid/master.pid
+ group system
+ group mail
+ group postfix
+ start program = "/etc/init.d/postfix start"
+ stop program = "/etc/init.d/postfix stop"
+ if failed host localhost port 25 with protocol smtp for 2 times within 3 cycles then restart
+ if 5 restarts with 5 cycles then timeout
+ depend master_bin
+ depend postfix_rc
+ depend postdrop_bin
+ depend postqueue_bin
+ depend master_cf
+ depend main_cf
+
+ check file master_bin with path /usr/lib/postfix/sbin/master
+ group postfix
+ include /etc/monit/templates/rootbin
+
+ check file postdrop_bin with path /usr/sbin/postdrop
+ group postfix
+ if failed checksum then unmonitor
+ if failed permission 2555 then unmonitor
+ if failed uid root then unmonitor
+ if failed gid postdrop then unmonitor
+
+ check file postqueue_bin with path /usr/sbin/postqueue
+ group postfix
+ if failed checksum then unmonitor
+ if failed permission 2555 then unmonitor
+ if failed uid root then unmonitor
+ if failed gid postdrop then unmonitor
+
+ check file master_cf with path /etc/postfix/master.cf
+ group postfix
+ include /etc/monit/templates/rootrc
+
+ check file main_cf with path /etc/postfix/main.cf
+ group postfix
+ include /etc/monit/templates/rootrc
+
+ check file postfix_rc with path /etc/init.d/postfix
+ group postfix
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/rsyslog b/etc/monit/conf-available/rsyslog
new file mode 100644
index 0000000000..73d1cb8cc6
--- /dev/null
+++ b/etc/monit/conf-available/rsyslog
@@ -0,0 +1,21 @@
+ check process rsyslogd matching /usr/sbin/rsyslogd
+ group system
+ group rsyslogd
+ start program = "/usr/bin/systemctl start rsyslog"
+ stop program = "/usr/bin/systemctl stop rsyslog"
+ if 5 restarts with 5 cycles then timeout
+ depend on rsyslogd_bin
+ depend on rsyslog_file
+
+ check file rsyslogd_bin with path /usr/sbin/rsyslogd
+ group rsyslogd
+ include /etc/monit/templates/rootbin
+
+ check file rsyslog_file with path /var/log/syslog
+ group rsyslogd
+ # Note: activate the immark plugin for rsyslog if
+ # your system is too low on events.
+ if timestamp > 65 minutes then alert
+ if failed permission 640 then unmonitor
+ if failed uid root then unmonitor
+ if failed gid adm then unmonitor
diff --git a/etc/monit/conf-available/smartmontools b/etc/monit/conf-available/smartmontools
new file mode 100644
index 0000000000..0990edcce9
--- /dev/null
+++ b/etc/monit/conf-available/smartmontools
@@ -0,0 +1,16 @@
+ check process smartd with pidfile /var/run/smartd.pid
+ group system
+ group smartd
+ start program = "/etc/init.d/smartmontools start"
+ stop program = "/etc/init.d/smartmontools stop"
+ if 5 restarts with 5 cycles then timeout
+ depend smartd_bin
+ depend smartd_rc
+
+ check file smartd_bin with path /usr/sbin/smartd
+ group smartd
+ include /etc/monit/templates/rootbin
+
+ check file smartd_rc with path "/etc/init.d/smartmontools"
+ group smartd
+ include /etc/monit/templates/rootbin
diff --git a/etc/monit/conf-available/snmpd b/etc/monit/conf-available/snmpd
new file mode 100644
index 0000000000..07b8d0e0ca
--- /dev/null
+++ b/etc/monit/conf-available/snmpd
@@ -0,0 +1,6 @@
+ check process snmpd with pidfile /var/run/snmpd.pid
+ start program = "/etc/init.d/snmpd start"
+ stop program = "/etc/init.d/snmpd stop"
+ if failed host localhost port 161 type udp then restart
+ if failed host localhost port 199 type tcp then restart
+ if 5 restarts within 5 cycles then timeout
diff --git a/etc/monit/monitrc b/etc/monit/monitrc
new file mode 100755
index 0000000000..b8c47ddbdf
--- /dev/null
+++ b/etc/monit/monitrc
@@ -0,0 +1,49 @@
+#ATTENTION!
+#
+#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
+#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
+# Copyright 1999-2024. WebPros International GmbH. All rights reserved.
+set daemon 300
+
+set logfile /var/log/plesk/modules/monit.log
+set statefile /run/monit.state
+
+set httpd port 2911 and use address 127.0.0.1
+ allow 127.0.0.1
+ allow monit:f3d327caff89327c844fdf6406121ee9
+
+set mmonit https://monit:f3d327caff89327c844fdf6406121ee9@127.0.0.1:2912/
+
+# Plesk apache
+check process plesk_apache
+ with pidfile "/run/sw-cp-server.pid"
+ start = "/bin/systemctl start sw-cp-server.service"
+ stop = "/bin/systemctl stop sw-cp-server.service"
+ if failed host localhost port 8443 type tcpssl send "GET /favicon.ico HTTP/1.1\r\n\r\n" expect "HTTP/1\.[01x] [1-4][0-9]{2} .*\r\n" with timeout 5 seconds then restart
+ if 5 restarts within 5 cycles then timeout
+ every 1 cycles
+ mode manual
+
+# sw-engine
+check process sw_engine
+ with pidfile "/run/sw-engine.pid"
+ start = "/opt/psa/admin/sbin/pleskrc sw-engine start"
+ stop = "/opt/psa/admin/sbin/pleskrc sw-engine stop"
+ if failed unixsocket /run/sw-engine.sock with timeout 5 seconds then restart
+ if 5 restarts within 5 cycles then timeout
+ every 1 cycles
+ mode manual
+
+# Apache
+check process apache
+ with pidfile "/run/apache2/apache2.pid"
+ start = "/opt/psa/admin/bin/websrvmng --start"
+ stop = "/opt/psa/admin/bin/websrvmng --stop"
+ if failed host 127.0.0.1 port 80 send "GET / HTTP/1.1\r\nHost: plesk-service.localdomain\r\n\r\n" expect "HTTP/1\.[01x] [1-4][0-9]{2} .*\r\n" with timeout 5 seconds then restart
+ if 5 restarts within 5 cycles then timeout
+ every 1 cycles
+ mode manual
+
+
+
+INCLUDE "/opt/psa/var/modules/watchdog/etc/service.d/*"
diff --git a/etc/monit/templates/rootbin b/etc/monit/templates/rootbin
new file mode 100644
index 0000000000..7b13c041cb
--- /dev/null
+++ b/etc/monit/templates/rootbin
@@ -0,0 +1,4 @@
+ if failed checksum then unmonitor
+ if failed permission 755 then unmonitor
+ if failed uid root then unmonitor
+ if failed gid root then unmonitor
diff --git a/etc/monit/templates/rootrc b/etc/monit/templates/rootrc
new file mode 100644
index 0000000000..fdfd1e1877
--- /dev/null
+++ b/etc/monit/templates/rootrc
@@ -0,0 +1,4 @@
+ if changed checksum then alert
+ if failed permission 644 then unmonitor
+ if failed uid root then unmonitor
+ if failed gid root then unmonitor
diff --git a/etc/monit/templates/rootstrict b/etc/monit/templates/rootstrict
new file mode 100644
index 0000000000..2fa61171d1
--- /dev/null
+++ b/etc/monit/templates/rootstrict
@@ -0,0 +1,4 @@
+ if failed checksum then unmonitor
+ if failed permission 600 then unmonitor
+ if failed uid root then unmonitor
+ if failed gid root then unmonitor
diff --git a/etc/mtab b/etc/mtab
new file mode 120000
index 0000000000..5c4677a608
--- /dev/null
+++ b/etc/mtab
@@ -0,0 +1 @@
+../proc/self/mounts
\ No newline at end of file
diff --git a/etc/multipath.conf b/etc/multipath.conf
new file mode 100644
index 0000000000..d19039f3bf
--- /dev/null
+++ b/etc/multipath.conf
@@ -0,0 +1,3 @@
+defaults {
+ user_friendly_names yes
+}
diff --git a/etc/multipath/bindings b/etc/multipath/bindings
new file mode 100644
index 0000000000..3b54ee962c
--- /dev/null
+++ b/etc/multipath/bindings
@@ -0,0 +1,7 @@
+# Multipath bindings, Version : 1.0
+# NOTE: this file is automatically maintained by the multipath program.
+# You should not need to edit this file in normal circumstances.
+#
+# Format:
+# alias wwid
+#
diff --git a/etc/multipath/wwids b/etc/multipath/wwids
new file mode 100644
index 0000000000..9a427a6b6d
--- /dev/null
+++ b/etc/multipath/wwids
@@ -0,0 +1,5 @@
+# Multipath wwids, Version : 1.0
+# NOTE: This file is automatically maintained by multipath and multipathd.
+# You should not need to edit this file in normal circumstances.
+#
+# Valid WWIDs:
diff --git a/etc/mysql/conf.d/mysql.cnf b/etc/mysql/conf.d/mysql.cnf
new file mode 100644
index 0000000000..22b052d9fb
--- /dev/null
+++ b/etc/mysql/conf.d/mysql.cnf
@@ -0,0 +1 @@
+[mysql]
diff --git a/etc/mysql/conf.d/mysqldump.cnf b/etc/mysql/conf.d/mysqldump.cnf
new file mode 100644
index 0000000000..38310a9b73
--- /dev/null
+++ b/etc/mysql/conf.d/mysqldump.cnf
@@ -0,0 +1,4 @@
+[mysqldump]
+quick
+quote-names
+max_allowed_packet = 16M
diff --git a/etc/mysql/debian-start b/etc/mysql/debian-start
new file mode 100755
index 0000000000..d9b004f811
--- /dev/null
+++ b/etc/mysql/debian-start
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# This script is executed by both SysV init /etc/init.d/mariadb and
+# systemd mariadb.service on every (re)start.
+#
+# Changes to this file will be preserved when updating the Debian package.
+#
+
+# shellcheck source=debian/additions/debian-start.inc.sh
+source /usr/share/mysql/debian-start.inc.sh
+
+# Read default/mysql first and then default/mariadb just like the init.d file does
+if [ -f /etc/default/mysql ]
+then
+ # shellcheck source=/dev/null
+ . /etc/default/mysql
+fi
+
+if [ -f /etc/default/mariadb ]
+then
+ # shellcheck source=/dev/null
+ . /etc/default/mariadb
+fi
+
+MARIADB="/usr/bin/mariadb --defaults-extra-file=/etc/mysql/debian.cnf"
+MYADMIN="/usr/bin/mariadb-admin --defaults-extra-file=/etc/mysql/debian.cnf"
+# Don't run full mariadb-upgrade on every server restart, use --version-check to do it only once
+MYUPGRADE="/usr/bin/mariadb-upgrade --defaults-extra-file=/etc/mysql/debian.cnf --version-check --silent"
+MYCHECK_SUBJECT="WARNING: mariadb-check has found corrupt tables"
+MYCHECK_RCPT="${MYCHECK_RCPT:-root}"
+
+## Checking for corrupt, not cleanly closed (only for MyISAM and Aria engines) and upgrade needing tables.
+
+# The following commands should be run when the server is up but in background
+# where they do not block the server start and in one shell instance so that
+# they run sequentially. They are supposed not to echo anything to stdout.
+# If you want to disable the check for crashed tables comment
+# "check_for_crashed_tables" out.
+# (There may be no output to stdout inside the background process!)
+
+# Need to ignore SIGHUP, as otherwise a SIGHUP can sometimes abort the upgrade
+# process in the middle.
+trap "" SIGHUP
+(
+ upgrade_system_tables_if_necessary;
+ check_root_accounts;
+ check_for_crashed_tables;
+) >&2 &
+
+exit 0
diff --git a/etc/mysql/debian.cnf b/etc/mysql/debian.cnf
new file mode 100644
index 0000000000..951f87e3ba
--- /dev/null
+++ b/etc/mysql/debian.cnf
@@ -0,0 +1,14 @@
+# THIS FILE IS OBSOLETE. STOP USING IT IF POSSIBLE.
+# This file exists only for backwards compatibility for
+# tools that run '--defaults-file=/etc/mysql/debian.cnf'
+# and have root level access to the local filesystem.
+# With those permissions one can run 'mariadb' directly
+# anyway thanks to unix socket authentication and hence
+# this file is useless. See package README for more info.
+[client]
+host = localhost
+user = root
+[mysql_upgrade]
+host = localhost
+user = root
+# THIS FILE WILL BE REMOVED IN A FUTURE DEBIAN RELEASE.
diff --git a/etc/mysql/mariadb.cnf b/etc/mysql/mariadb.cnf
new file mode 100644
index 0000000000..325c9afb6e
--- /dev/null
+++ b/etc/mysql/mariadb.cnf
@@ -0,0 +1,31 @@
+# The MariaDB configuration file
+#
+# The MariaDB/MySQL tools read configuration files in the following order:
+# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
+# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
+# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
+# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
+# 4. "~/.my.cnf" to set user-specific options.
+#
+# If the same option is defined multiple times, the last one will apply.
+#
+# One can use all long options that the program supports.
+# Run program with --help to get a list of available options and with
+# --print-defaults to see which it would actually understand and use.
+#
+# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/
+
+#
+# This group is read both by the client and the server
+# use it for options that affect everything
+#
+[client-server]
+# Port or socket location where to connect
+# port = 3306
+socket = /run/mysqld/mysqld.sock
+
+# Import all .cnf files from configuration directory
+!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mariadb.conf.d/
+[mysqld]
+local-infile=0
diff --git a/etc/mysql/mariadb.conf.d/50-client.cnf b/etc/mysql/mariadb.conf.d/50-client.cnf
new file mode 100644
index 0000000000..1fd4685df2
--- /dev/null
+++ b/etc/mysql/mariadb.conf.d/50-client.cnf
@@ -0,0 +1,19 @@
+#
+# This group is read by the client library
+# Use it for options that affect all clients, but not the server
+#
+
+[client]
+# Example of client certificate usage
+#ssl-cert = /etc/mysql/client-cert.pem
+#ssl-key = /etc/mysql/client-key.pem
+#
+# Allow only TLS encrypted connections
+#ssl-verify-server-cert = on
+
+# This group is *never* read by mysql client library, though this
+# /etc/mysql/mariadb.cnf.d/client.cnf file is not read by Oracle MySQL
+# client anyway.
+# If you use the same .cnf file for MySQL and MariaDB,
+# use it for MariaDB-only client options
+[client-mariadb]
diff --git a/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf b/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
new file mode 100644
index 0000000000..2f5a360540
--- /dev/null
+++ b/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
@@ -0,0 +1,22 @@
+#
+# These groups are read by MariaDB command-line tools
+# Use it for options that affect only one utility
+#
+
+[mysql]
+
+[mysql_upgrade]
+
+[mysqladmin]
+
+[mysqlbinlog]
+
+[mysqlcheck]
+
+[mysqldump]
+
+[mysqlimport]
+
+[mysqlshow]
+
+[mysqlslap]
diff --git a/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf b/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
new file mode 100644
index 0000000000..e24f96a9e6
--- /dev/null
+++ b/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
@@ -0,0 +1,28 @@
+# NOTE: THIS FILE IS READ ONLY BY THE TRADITIONAL SYSV INIT SCRIPT, NOT SYSTEMD.
+# MARIADB SYSTEMD DOES _NOT_ UTILIZE MYSQLD_SAFE NOR READ THIS FILE.
+#
+# For similar behavior, systemd users should create the following file:
+# /etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf
+#
+# To achieve the same result as the default 50-mysqld_safe.cnf, please create
+# /etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf
+# with the following contents:
+#
+# [Service]
+# User = mysql
+# StandardOutput = syslog
+# StandardError = syslog
+# SyslogFacility = daemon
+# SyslogLevel = err
+# SyslogIdentifier = mysqld
+#
+# For more information, please read https://mariadb.com/kb/en/mariadb/systemd/
+
+[mysqld_safe]
+# This will be passed to all mysql clients
+# It has been reported that passwords should be enclosed with ticks/quotes
+# especially if they contain "#" chars...
+
+nice = 0
+skip_log_error
+syslog
diff --git a/etc/mysql/mariadb.conf.d/50-server.cnf b/etc/mysql/mariadb.conf.d/50-server.cnf
new file mode 100644
index 0000000000..4805c55064
--- /dev/null
+++ b/etc/mysql/mariadb.conf.d/50-server.cnf
@@ -0,0 +1,119 @@
+#
+# These groups are read by MariaDB server.
+# Use it for options that only the server (but not clients) should see
+
+# this is read by the standalone daemon and embedded servers
+[server]
+
+# this is only for the mysqld standalone daemon
+[mysqld]
+
+#
+# * Basic Settings
+#
+
+#user = mysql
+pid-file = /run/mysqld/mysqld.pid
+basedir = /usr
+#datadir = /var/lib/mysql
+#tmpdir = /tmp
+
+# Broken reverse DNS slows down connections considerably and name resolve is
+# safe to skip if there are no "host by domain name" access grants
+#skip-name-resolve
+
+# Instead of skip-networking the default is now to listen only on
+# localhost which is more compatible and is not less secure.
+bind-address = 127.0.0.1
+
+#
+# * Fine Tuning
+#
+
+#key_buffer_size = 128M
+#max_allowed_packet = 1G
+#thread_stack = 192K
+#thread_cache_size = 8
+# This replaces the startup script and checks MyISAM tables if needed
+# the first time they are touched
+#myisam_recover_options = BACKUP
+#max_connections = 100
+#table_cache = 64
+
+#
+# * Logging and Replication
+#
+
+# Note: The configured log file or its directory need to be created
+# and be writable by the mysql user, e.g.:
+# $ sudo mkdir -m 2750 /var/log/mysql
+# $ sudo chown mysql /var/log/mysql
+
+# Both location gets rotated by the cronjob.
+# Be aware that this log type is a performance killer.
+# Recommend only changing this at runtime for short testing periods if needed!
+#general_log_file = /var/log/mysql/mysql.log
+#general_log = 1
+
+# When running under systemd, error logging goes via stdout/stderr to journald
+# and when running legacy init error logging goes to syslog due to
+# /etc/mysql/conf.d/mariadb.conf.d/50-mysqld_safe.cnf
+# Enable this if you want to have error logging into a separate file
+#log_error = /var/log/mysql/error.log
+# Enable the slow query log to see queries with especially long duration
+#log_slow_query_file = /var/log/mysql/mariadb-slow.log
+#log_slow_query_time = 10
+#log_slow_verbosity = query_plan,explain
+#log-queries-not-using-indexes
+#log_slow_min_examined_row_limit = 1000
+
+# The following can be used as easy to replay backup logs or for replication.
+# note: if you are setting up a replica, see README.Debian about other
+# settings you may need to change.
+#server-id = 1
+#log_bin = /var/log/mysql/mysql-bin.log
+expire_logs_days = 10
+#max_binlog_size = 100M
+
+#
+# * SSL/TLS
+#
+
+# For documentation, please read
+# https://mariadb.com/kb/en/securing-connections-for-client-and-server/
+#ssl-ca = /etc/mysql/cacert.pem
+#ssl-cert = /etc/mysql/server-cert.pem
+#ssl-key = /etc/mysql/server-key.pem
+#require-secure-transport = on
+
+#
+# * Character sets
+#
+
+# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full
+# utf8 4-byte character set. See also client.cnf
+character-set-server = utf8mb4
+collation-server = utf8mb4_general_ci
+
+#
+# * InnoDB
+#
+
+# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
+# Read the manual for more InnoDB related options. There are many!
+# Most important is to give InnoDB 80 % of the system RAM for buffer use:
+# https://mariadb.com/kb/en/innodb-system-variables/#innodb_buffer_pool_size
+#innodb_buffer_pool_size = 8G
+
+# this is only for embedded server
+[embedded]
+
+# This group is only read by MariaDB servers, not by MySQL.
+# If you use the same .cnf file for MySQL and MariaDB,
+# you can put MariaDB-only options here
+[mariadb]
+
+# This group is only read by MariaDB-10.11 servers.
+# If you use the same .cnf file for MariaDB of different versions,
+# use this group for options that older servers don't understand
+[mariadb-10.11]
diff --git a/etc/mysql/mariadb.conf.d/60-galera.cnf b/etc/mysql/mariadb.conf.d/60-galera.cnf
new file mode 100644
index 0000000000..274891b131
--- /dev/null
+++ b/etc/mysql/mariadb.conf.d/60-galera.cnf
@@ -0,0 +1,21 @@
+#
+# * Galera-related settings
+#
+# See the examples of server wsrep.cnf files in /usr/share/mysql
+# and read more at https://mariadb.com/kb/en/galera-cluster/
+
+[galera]
+# Mandatory settings
+#wsrep_on = ON
+#wsrep_cluster_name = "MariaDB Galera Cluster"
+#wsrep_cluster_address = gcomm://
+#binlog_format = row
+#default_storage_engine = InnoDB
+#innodb_autoinc_lock_mode = 2
+
+# Allow server to accept connections on all interfaces.
+#bind-address = 0.0.0.0
+
+# Optional settings
+#wsrep_slave_threads = 1
+#innodb_flush_log_at_trx_commit = 0
diff --git a/etc/mysql/my.cnf b/etc/mysql/my.cnf
new file mode 100644
index 0000000000..307a9ba44e
--- /dev/null
+++ b/etc/mysql/my.cnf
@@ -0,0 +1,33 @@
+# The MariaDB configuration file
+#
+# The MariaDB/MySQL tools read configuration files in the following order:
+# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
+# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
+# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
+# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
+# 4. "~/.my.cnf" to set user-specific options.
+#
+# If the same option is defined multiple times, the last one will apply.
+#
+# One can use all long options that the program supports.
+# Run program with --help to get a list of available options and with
+# --print-defaults to see which it would actually understand and use.
+#
+# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/
+
+#
+# This group is read both by the client and the server
+# use it for options that affect everything
+#
+[client-server]
+# Port or socket location where to connect
+# port = 3306
+socket = /run/mysqld/mysqld.sock
+
+# Import all .cnf files from configuration directory
+!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mariadb.conf.d/
+[mysqld]
+sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
+bind-address = 127.0.0.1
+local-infile=0
diff --git a/etc/mysql/my.cnf.fallback b/etc/mysql/my.cnf.fallback
new file mode 100644
index 0000000000..92747d88d8
--- /dev/null
+++ b/etc/mysql/my.cnf.fallback
@@ -0,0 +1,23 @@
+#
+# The MySQL database server configuration file.
+#
+# You can copy this to one of:
+# - "/etc/mysql/my.cnf" to set global options,
+# - "~/.my.cnf" to set user-specific options.
+#
+# One can use all long options that the program supports.
+# Run program with --help to get a list of available options and with
+# --print-defaults to see which it would actually understand and use.
+#
+# For explanations see
+# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
+
+# This will be passed to all mysql clients
+# It has been reported that passwords should be enclosed with ticks/quotes
+# escpecially if they contain "#" chars...
+# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
+
+# Here is entries for some specific programs
+# The following values assume you have at least 32M ram
+
+!includedir /etc/mysql/conf.d/
diff --git a/etc/nanorc b/etc/nanorc
new file mode 100644
index 0000000000..67d2365fa8
--- /dev/null
+++ b/etc/nanorc
@@ -0,0 +1,331 @@
+## Sample initialization file for GNU nano.
+##
+## For the options that take parameters, the default value is shown.
+## Other options are unset by default. To make sure that an option
+## is disabled, you can use "unset