├── alpine_recovery_update ├── beadm ├── build_kernel.sh ├── chroot_start ├── chroot_stop ├── config-base ├── elog_check.sh ├── emerge_log ├── init.tpl ├── install-grub ├── integrate_zfs ├── make_initramfs ├── remote_backup.sh └── whatsnew /alpine_recovery_update: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # settings 4 | RELEASE="3.17" 5 | MINOR="0" 6 | 7 | # vars 8 | ISO="alpine-extended-$RELEASE.$MINOR-x86_64.iso" 9 | URL="http://dl-cdn.alpinelinux.org/alpine/v$RELEASE/releases/x86_64/$ISO" 10 | TMP="/var/tmp/alpine" 11 | BOOT="/boot" 12 | 13 | 14 | ### main 15 | 16 | ## extract iso 17 | mkdir $TMP 18 | cd $TMP 19 | wget $URL || exit 1 20 | 7z x $ISO || exit 1 21 | rm -r '[BOOT]' efi boot/grub boot/syslinux $ISO || exit 1 22 | 23 | ## clean old alpine 24 | rm -r $BOOT/boot/*-lts* 25 | rm -r $BOOT/apks 26 | 27 | ## install new alpine 28 | cp -vr $TMP/* $BOOT 29 | 30 | ## clean 31 | rm -r $TMP 32 | -------------------------------------------------------------------------------- /beadm: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | # Copyright (c) 2012-2013 Slawomir Wojciech Wojtczak (vermaden) 4 | # Copyright (c) 2012-2013 Bryan Drewery (bdrewery) 5 | # Copyright (c) 2012-2013 Mike Clarke (rawthey) 6 | # Copyright (c) 2013 Dancho Penev (dpslavov) 7 | # All rights reserved. 8 | # 9 | # Redistribution and use in source and binary forms, with or without 10 | # modification, are permitted provided that following conditions are met: 11 | # 1. Redistributions of source code must retain the above copyright 12 | # notice, this list of conditions and the following disclaimer. 13 | # 2. Redistributions in binary form must reproduce the above copyright 14 | # notice, this list of conditions and the following disclaimer in the 15 | # documentation and/or other materials provided with the distribution. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS 'AS IS' AND ANY 18 | # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY 21 | # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 | # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | 28 | # 2014/12/04 - Ported to Linux - Andrew Barnes (b333z) 29 | 30 | unset LC_ALL 31 | unset LANG 32 | PATH=${PATH}:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin 33 | 34 | #if [ $( uname -r | cut -d '-' -f1 | cut -d '.' -f1 ) -lt 8 ] 35 | #then 36 | # echo "ERROR: beadm works on FreeBSD 8.0 or later" 37 | # exit 1 38 | #fi 39 | 40 | if [ "${1}" = "--version" ] || [ "${1}" = "version" ] 41 | then 42 | echo "beadm 1.2.5 (2016-06-22)" 43 | exit 0 44 | fi 45 | 46 | __usage() { 47 | local NAME=${0##*/} 48 | echo "usage:" 49 | echo " ${NAME} activate " 50 | echo " ${NAME} create [-e nonActiveBe | -e beName@snapshot] " 51 | echo " ${NAME} create " 52 | echo " ${NAME} destroy [-F] " 53 | echo " ${NAME} list [-a] [-s] [-D] [-H]" 54 | echo " ${NAME} rename " 55 | echo " ${NAME} mount [mountpoint]" 56 | echo " ${NAME} { umount | unmount } [-f] " 57 | echo " ${NAME} chroot " 58 | exit 1 59 | } 60 | 61 | # check if system has a grub.cfg file and update it 62 | __update_grub() { 63 | if [ -e /boot/grub/grub.cfg ] 64 | then 65 | if grub-mkconfig -o /boot/grub/grub.cfg &>/dev/null 66 | then 67 | echo "GRUB configuration updated successfully" 68 | else 69 | echo "WARNING: Failed to update GRUB configuration" 70 | fi 71 | fi 72 | } 73 | 74 | # check if boot environment exists 75 | __be_exist() { # 1=DATASET 76 | if ! zfs list -H -o name "${1}" &>/dev/null 77 | then 78 | echo "ERROR: Boot environment '${1##*/}' does not exist" 79 | exit 1 80 | fi 81 | } 82 | 83 | # check if argument is a snapshot 84 | __be_snapshot() { # 1=DATASET/SNAPSHOT 85 | echo "${1}" | grep -q "@" 2> /dev/null 86 | } 87 | 88 | # check if boot environment is mounted 89 | __be_mounted() { # 1=BE 90 | findmnt --first-only --source "${1}" > /dev/null 91 | } 92 | 93 | # find mount point of boot environment 94 | __be_findmnt() { # 1=BE 95 | echo declare "$(findmnt -fPS "${1}")"\; echo \$TARGET | sh 96 | } 97 | 98 | # check if boot environment is a clone 99 | __be_clone() { # 1=DATASET 100 | if zfs list "${1}" &>/dev/null 101 | then 102 | local ORIGIN 103 | ORIGIN="$( zfs list -H -o origin "${1}" )" 104 | if [ "${ORIGIN}" = "-" ] 105 | then 106 | # boot environment is not a clone 107 | return 1 108 | else 109 | # boot environment is a clone 110 | return 0 111 | fi 112 | else 113 | # boot environment does not exist 114 | return 2 115 | fi 116 | } 117 | 118 | # create new boot environment 119 | __be_new() { # 1=SOURCE 2=TARGET 120 | local SOURCE 121 | SOURCE=$( echo "${1}" | cut -d '@' -f 1 ) 122 | if __be_snapshot "${1}" 123 | then 124 | # create boot environment from snapshot 125 | local SNAPSHOT 126 | SNAPSHOT=$( echo "${1}" | cut -d '@' -f 2 ) 127 | zfs list -r -H -t filesystem -o name "${SOURCE}" \ 128 | | while read -r FS 129 | do 130 | if ! zfs list -H -o name "${FS}@${SNAPSHOT}" &>/dev/null 131 | then 132 | echo "ERROR: Child snapshot '${FS}@${SNAPSHOT}' does not exist" 133 | exit 1 134 | fi 135 | done 136 | else 137 | # create boot environment from other boot environment 138 | if zfs list -H -o name "${1}@${2##*/}" &>/dev/null 139 | then 140 | echo "ERROR: Snapshot '${1}@${2##*/}' already exists" 141 | exit 1 142 | fi 143 | # snapshot format 144 | FMT=$( date "+%Y-%m-%d-%H:%M:%S" ) 145 | if ! zfs snapshot -r "${1}@${FMT}" &>/dev/null 146 | then 147 | echo "ERROR: Cannot create snapshot '${1}@${FMT}'" 148 | exit 1 149 | fi 150 | fi 151 | # clone properties of source boot environment 152 | zfs list -H -o name -r "${SOURCE}" \ 153 | | grep -v '@' \ 154 | | while read -r FS 155 | do 156 | local OPTS="" 157 | while read -r NAME PROPERTY VALUE 158 | do 159 | if [ "${PROPERTY}" = "sharenfs" ] 160 | then 161 | local OPTS="-o ${PROPERTY}=\"${VALUE}\" ${OPTS}" 162 | else 163 | local OPTS="-o ${PROPERTY}=${VALUE} ${OPTS}" 164 | fi 165 | done << EOF 166 | $( zfs get -o name,property,value -s local,received -H all "${FS}" | awk '!/[\t ]canmount[\t ]/' ) 167 | EOF 168 | #shellcheck disable=SC2140 169 | DATASET=$( echo "${FS}" | awk '{print $1}' | sed -E s#"^${POOL}\/${BEDS}\/${SOURCE##*/}"#"${POOL}\/${BEDS}\/${2##*/}"#g ) 170 | if [ "${OPTS}" = "-o = " ] 171 | then 172 | local OPTS="" 173 | fi 174 | if __be_snapshot "${1}" 175 | then 176 | eval "zfs clone -o canmount=off ${OPTS} ${FS}@${1##*@} ${DATASET}" 177 | else 178 | eval "zfs clone -o canmount=off ${OPTS} ${FS}@${FMT} ${DATASET}" 179 | fi 180 | done 181 | # check if we need to update grub 182 | if [ "${GRUB}" = YES ] 183 | then 184 | __update_grub 185 | fi 186 | } 187 | 188 | ROOTFS=$( mount | awk '/ \/ / {print $1}' ) 189 | 190 | if echo "${ROOTFS}" | grep -q -m 1 -E "^/dev/" 191 | then 192 | echo "ERROR: This system does not boot from ZFS pool" 193 | exit 1 194 | fi 195 | 196 | POOL=$( echo "${ROOTFS}" | awk -F '/' '{print $1}' ) 197 | 198 | if [ "$( echo "${ROOTFS}" | awk -F '/' '{print NF}' )" -lt 3 ] 199 | then 200 | echo "ERROR: This system is not configured for boot environments" 201 | exit 1 202 | fi 203 | 204 | BOOTFS=$( zpool list -H -o bootfs "${POOL}" ) 205 | 206 | if [ -z "${BOOTFS}" ] || [ "${BOOTFS}" = "-" ] 207 | then 208 | echo "ERROR: ZFS boot pool '${POOL}' has unset 'bootfs' property" 209 | exit 1 210 | fi 211 | 212 | if [ -f /etc/conf.d/beadm ] 213 | then 214 | #shellcheck disable=SC1091 215 | . /etc/conf.d/beadm 216 | fi 217 | 218 | if [ -f /etc/beadm.conf ] 219 | then 220 | #shellcheck disable=SC1091 221 | . /etc/beadm.conf 222 | fi 223 | 224 | # update GRUB bootloader instead of FreeBSD's loader(8) 225 | #shellcheck disable=SC2086 226 | : ${GRUB="NO"} 227 | 228 | # use other prefix then the 'pool/ROOT/bename' default 229 | #shellcheck disable=SC2086 230 | : ${BEDS="$( echo "${ROOTFS}" | awk -F '/' '{print $2}' )"} 231 | 232 | case ${1} in 233 | 234 | (list) # -------------------------------------------------------------------- 235 | OPTION_a=0 236 | OPTION_D=0 237 | OPTION_s=0 238 | shift 239 | while getopts "aDHs" OPT 240 | do 241 | case ${OPT} in 242 | (a) OPTION_a=1 ;; 243 | (D) OPTION_D=1 ;; 244 | (H) OPTION_H=1 ;; 245 | (s) OPTION_s=1 246 | OPTION_a=1 ;; 247 | (*) __usage ;; 248 | esac 249 | done 250 | awk -v POOL="${POOL}" \ 251 | -v BEDS="${BEDS}" \ 252 | -v ROOTFS="${ROOTFS}" \ 253 | -v BOOTFS="${BOOTFS}" \ 254 | -v OPTION_a="${OPTION_a}" \ 255 | -v OPTION_D="${OPTION_D}" \ 256 | -v OPTION_H="${OPTION_H}" \ 257 | -v OPTION_s="${OPTION_s}" \ 258 | 'function __normalize(VALUE) { 259 | if(VALUE == "-" || VALUE == 0) 260 | return 0 261 | else 262 | return substr(VALUE, 1, length(VALUE) - 1) * MULTIPLIER[substr(VALUE, length(VALUE))] 263 | } 264 | function __show_units(VALUE) { 265 | if(VALUE < 1024) { UNIT = "K"; } 266 | else if(VALUE < 1048576) { VALUE /= 1024; UNIT = "M"; } 267 | else if(VALUE < 1073741824) { VALUE /= 1048576; UNIT = "G"; } 268 | else if(VALUE < 1099511627776) { VALUE /= 1073741824; UNIT = "T"; } 269 | else if(VALUE < 1125899906842624) { VALUE /= 1099511627776; UNIT = "P"; } 270 | else if(VALUE < 1152921504606846976) { VALUE /= 1125899906842624; UNIT = "E"; } 271 | else { VALUE /= 1152921504606846976; UNIT = "Z"; } 272 | return sprintf("%.1f%s", VALUE, UNIT) 273 | } 274 | function __get_bename(BENAME) { 275 | sub(BENAME_BEGINS_WITH "/", "", BENAME) 276 | sub("/.*", "", BENAME) 277 | return BENAME 278 | } 279 | function __convert_date(DATE) { 280 | CMD_DATE = "date --date=\"" DATE "\" +\"%Y-%m-%d %H:%M\"" 281 | CMD_DATE | getline NEW 282 | close(CMD_DATE) 283 | return NEW 284 | } 285 | BEGIN { 286 | BENAME_BEGINS_WITH = POOL "/" BEDS 287 | MULTIPLIER["K"] = 1 288 | MULTIPLIER["M"] = 1024 289 | MULTIPLIER["G"] = 1048576 290 | MULTIPLIER["T"] = 1073741824 291 | MULTIPLIER["P"] = 1099511627776 292 | MULTIPLIER["E"] = 1125899906842624 293 | MULTIPLIER["Z"] = 1152921504606846976 294 | MOUNTPOINT_LENGTH = 10 295 | FSNAME_LENGTH = 2 296 | if(OPTION_a == 1) 297 | FSNAME_LENGTH = 19 298 | CMD_MOUNT="mount" 299 | while(CMD_MOUNT | getline) 300 | if($1 ~ "^" BENAME_BEGINS_WITH) { 301 | if (!($1 in MOUNTS)) 302 | MOUNTS[$1] = $3 303 | } 304 | close(CMD_MOUNT) 305 | FS = "\\t" 306 | FSNAMESC = 0 307 | CMD_ZFS_LIST = "zfs list -H -t all -s creation -o name,used,usedds,usedbysnapshots,usedrefreserv,refer,creation,origin -r " 308 | while(CMD_ZFS_LIST BENAME_BEGINS_WITH | getline) { 309 | if($1 != BENAME_BEGINS_WITH) { 310 | FSNAME = $1 311 | FSNAMES[FSNAMESC++] = FSNAME 312 | USED = __normalize($2) 313 | USEDBYDATASET = __normalize($3) 314 | USEDBYSNAPSHOTS = __normalize($4) 315 | USEDREFRESERV = __normalize($5) 316 | REFER[FSNAME] = __normalize($6) 317 | CREATIONS[FSNAME] = $7 318 | ORIGINS[FSNAME] = $8 319 | if(FSNAME ~ /@/) 320 | SPACES[FSNAME] = USED 321 | else { 322 | SPACES[FSNAME] = USEDBYDATASET + USEDREFRESERV 323 | if(OPTION_D != 1) 324 | SPACES[FSNAME] += USEDBYSNAPSHOTS 325 | BE = " " __get_bename(FSNAME) " " 326 | if(index(BELIST, BE) == 0) 327 | BELIST = BELIST " " BE 328 | MOUNTPOINT = MOUNTS[FSNAME] 329 | if(MOUNTPOINT) { 330 | if((OPTION_a == 0 && FSNAME == (BENAME_BEGINS_WITH "/" __get_bename(FSNAME))) || (OPTION_a == 1)) { 331 | LM = length(MOUNTPOINT) 332 | if(LM > MOUNTPOINT_LENGTH) 333 | MOUNTPOINT_LENGTH = LM 334 | } 335 | } 336 | else 337 | MOUNTPOINT = "-" 338 | } 339 | if(OPTION_a == 1) 340 | LF = length(FSNAME) 341 | else if(FSNAME !~ /@/) 342 | LF = length(__get_bename(FSNAME)) 343 | if(LF > FSNAME_LENGTH) 344 | FSNAME_LENGTH = LF 345 | } 346 | } 347 | close(CMD_ZFS_LIST) 348 | split(BELIST, BENAMES, " ") 349 | if(OPTION_a == 1) { 350 | BE_HEAD = "BE/Dataset/Snapshot" 351 | printf "%-" FSNAME_LENGTH + 2 "s %-6s %-" MOUNTPOINT_LENGTH "s %6s %s\n", BE_HEAD, "Active", "Mountpoint", "Space", "Created" 352 | } 353 | else if(OPTION_H == 1) 354 | BE_HEAD = "" 355 | else { 356 | BE_HEAD = "BE" 357 | printf "%-" FSNAME_LENGTH "s %-6s %-" MOUNTPOINT_LENGTH "s %6s %s\n", BE_HEAD, "Active", "Mountpoint", "Space", "Created" 358 | } 359 | if(OPTION_s != 1) 360 | SNAPSHOT_FILTER = "(/[^@]*)?$" 361 | BENAMESC = length(BENAMES) 362 | for(I = 1; I <= BENAMESC; I++) { 363 | BENAME = BENAMES[I] 364 | if(OPTION_a == 1) { 365 | printf "\n" 366 | print BENAME 367 | FSNAMESC = length(FSNAMES) 368 | for(J = 1; J <= FSNAMESC; J++) { 369 | FSNAME = FSNAMES[J] 370 | if(FSNAME ~ "^" BENAME_BEGINS_WITH "/" BENAME SNAPSHOT_FILTER) { 371 | ACTIVE = "" 372 | if(FSNAME == ROOTFS) 373 | ACTIVE = ACTIVE "N" 374 | if(FSNAME == BOOTFS) 375 | ACTIVE = ACTIVE "R" 376 | if(! ACTIVE) 377 | ACTIVE = "-" 378 | MOUNTPOINT = MOUNTS[FSNAME] 379 | if(! MOUNTPOINT) 380 | MOUNTPOINT = "-" 381 | printf " %-" FSNAME_LENGTH "s %-6s %-" MOUNTPOINT_LENGTH "s %6s %s\n", FSNAME, ACTIVE, MOUNTPOINT, __show_units(SPACES[FSNAME]), __convert_date(CREATIONS[FSNAME]) 382 | ORIGIN = ORIGINS[FSNAME] 383 | ORIGIN_DISPLAY = ORIGIN 384 | sub(BENAME_BEGINS_WITH "/", "", ORIGIN_DISPLAY) 385 | if(ORIGIN != "-") { 386 | if(OPTION_D == 1) 387 | SPACE = REFER[ORIGIN] 388 | else 389 | SPACE = SPACES[ORIGIN] 390 | printf " %-" FSNAME_LENGTH "s %-6s %-" MOUNTPOINT_LENGTH "s %6s %s\n", " " ORIGIN_DISPLAY, "-", "-", __show_units(SPACE), __convert_date(CREATIONS[ORIGIN]) 391 | } 392 | } 393 | } 394 | } 395 | else { 396 | SPACE = 0 397 | ACTIVE = "" 398 | NAME = BENAME_BEGINS_WITH "/" BENAME 399 | if(NAME == ROOTFS) 400 | ACTIVE = ACTIVE "N" 401 | if(NAME == BOOTFS) 402 | ACTIVE = ACTIVE "R" 403 | if(! ACTIVE) 404 | ACTIVE = "-" 405 | FNAMESC = length(FSNAMES) 406 | for(J = 1; J <= FSNAMESC; J++) { 407 | FSNAME = FSNAMES[J] 408 | if(FSNAME ~ "^" BENAME_BEGINS_WITH "/" BENAME "(/[^@]*)?$") { 409 | if((BENAME_BEGINS_WITH "/" BENAME) == FSNAME) { 410 | MOUNTPOINT = MOUNTS[FSNAME] 411 | if(! MOUNTPOINT) 412 | MOUNTPOINT = "-" 413 | CREATION = __convert_date(CREATIONS[FSNAME]) 414 | } 415 | ORIGIN = ORIGINS[FSNAME] 416 | if(ORIGIN == "-") 417 | SPACE += SPACES[FSNAME] 418 | else { 419 | if(OPTION_D == 1) 420 | SPACE += REFER[FSNAME] 421 | else 422 | SPACE += SPACES[FSNAME] + SPACES[ORIGIN] 423 | } 424 | } 425 | } 426 | if(OPTION_H == 1) 427 | printf "%s\t%s\t%s\t%s\t%s\n", BENAME, ACTIVE, MOUNTPOINT, __show_units(SPACE), CREATION 428 | else 429 | printf "%-" FSNAME_LENGTH "s %-6s %-" MOUNTPOINT_LENGTH "s %6s %s\n", BENAME, ACTIVE, MOUNTPOINT, __show_units(SPACE), CREATION 430 | } 431 | } 432 | }' 433 | ;; 434 | 435 | (create) # ------------------------------------------------------------------ 436 | case ${#} in 437 | (4) 438 | if ! [ "${2}" = "-e" ] 439 | then 440 | __usage 441 | fi 442 | # check if argument for -e option is full path dataset 443 | # argument for -e option must be 'beName' or 'beName@snapshot' 444 | if echo "${3}" | grep -q "/" 2> /dev/null 445 | then 446 | __usage 447 | fi 448 | __be_exist "${POOL}/${BEDS}/${3}" 449 | if zfs list -H -o name "${POOL}/${BEDS}/${4}" &>/dev/null 450 | then 451 | echo "ERROR: Boot environment '${4}' already exists" 452 | exit 1 453 | fi 454 | __be_new "${POOL}/${BEDS}/${3}" "${POOL}/${BEDS}/${4}" 455 | ;; 456 | (2) 457 | if __be_snapshot "${2}" 458 | then 459 | if ! zfs snapshot -r "${POOL}/${BEDS}/${2}" &>/dev/null 460 | then 461 | echo "ERROR: Cannot create '${2}' recursive snapshot" 462 | exit 1 463 | fi 464 | else 465 | __be_new "${ROOTFS}" "${POOL}/${BEDS}/${2}" 466 | fi 467 | ;; 468 | (*) 469 | __usage 470 | ;; 471 | esac 472 | echo "Created successfully" 473 | ;; 474 | 475 | (activate) # ---------------------------------------------------------------- 476 | if [ ${#} -ne 2 ] 477 | then 478 | __usage 479 | fi 480 | __be_exist "${POOL}/${BEDS}/${2}" 481 | if [ "${BOOTFS}" = "${POOL}/${BEDS}/${2}" ] 482 | then 483 | echo "Already activated" 484 | exit 0 485 | else 486 | if __be_mounted "${POOL}/${BEDS}/${2}" 487 | then 488 | MNT=$(__be_findmnt "${POOL}/${BEDS}/${2}") 489 | if [ "${MNT}" != "/" ] 490 | then 491 | # boot environment is not current root and its mounted 492 | echo "Attempt to unmount boot environment '${2}' mounted at '${MNT}'" 493 | if ! umount "${MNT}" &>/dev/null 494 | then 495 | echo "ERROR: Unable to unmount boot environment '${2}' mounted at '${MNT}'" 496 | echo "ERROR: Cannot activate manually mounted boot environment '${2}'" 497 | exit 1 498 | fi 499 | echo "Gracefully unmounted boot environment '${2}' from '${MNT}' mount point" 500 | fi 501 | fi 502 | # do not change root (/) mounted boot environment mountpoint 503 | if [ "${ROOTFS}" != "${POOL}/${BEDS}/${2}" ] 504 | then 505 | TMPMNT=$( mktemp -d -p /tmp "BE-${2}.XXX" ) 506 | if ! mkdir -p "${TMPMNT}" 2> /dev/null 507 | then 508 | echo "ERROR: Cannot create '${TMPMNT}' directory" 509 | exit 1 510 | fi 511 | MOUNT=0 512 | #shellcheck disable=SC2034 513 | while read -r FS MNT TYPE OPTS DUMP FSCK; 514 | do 515 | if [ "${FS}" = "${POOL}/${BEDS}/${2}" ] 516 | then 517 | MOUNT="${MNT}" 518 | break 519 | fi 520 | done << EOF 521 | $( cat /proc/mounts ) 522 | EOF 523 | if [ "${MOUNT}" -eq 0 ] 524 | then 525 | zfs set canmount=noauto "${POOL}/${BEDS}/${2}" 526 | zfs set "mountpoint=${TMPMNT}" "${POOL}/${BEDS}/${2}" 527 | zfs mount "${POOL}/${BEDS}/${2}" 528 | else 529 | TMPMNT=${MOUNT} 530 | fi 531 | if [ -f /etc/zfs/zpool.cache ] 532 | then 533 | cp /etc/zfs/zpool.cache "${TMPMNT}/etc/zfs/zpool.cache" 534 | else 535 | rm -f "${TMPMNT}/etc/zfs/zpool.cache" 536 | fi 537 | #LOADER_CONFIGS=${TMPMNT}/boot/loader.conf 538 | #if [ -f ${TMPMNT}/boot/loader.conf.local ] 539 | #then 540 | # LOADER_CONFIGS="${LOADER_CONFIGS} ${TMPMNT}/boot/loader.conf.local" 541 | #fi 542 | #sed -i '' -E s/"^vfs.root.mountfrom=.*$"/"vfs.root.mountfrom=\"zfs:${POOL}\/${BEDS}\/${2##*/}\""/g ${LOADER_CONFIGS} 543 | if [ "${MOUNT}" -eq 0 ] 544 | then 545 | zfs umount "${POOL}/${BEDS}/${2}" 546 | zfs set mountpoint=legacy "${POOL}/${BEDS}/${2}" 547 | fi 548 | fi 549 | if ! zpool set "bootfs=${POOL}/${BEDS}/${2}" "${POOL}" &>/dev/null 550 | then 551 | echo "ERROR: Failed to activate '${2}' boot environment" 552 | exit 1 553 | fi 554 | fi 555 | # execute ZFS LIST only once 556 | ZFS_LIST=$( zfs list -H -o name -t filesystem -r "${POOL}/${BEDS}" ) 557 | # disable automatic mount on all inactive boot environments 558 | echo "${ZFS_LIST}" \ 559 | | grep -v "^${POOL}/${BEDS}$" \ 560 | | grep -v "^${POOL}/${BEDS}/${2}$" \ 561 | | grep -v "^${POOL}/${BEDS}/${2}/" \ 562 | | while read -r NAME 563 | do 564 | zfs set canmount=noauto "${NAME}" 565 | done 566 | # enable automatic mount for active boot environment and promote it 567 | echo "${ZFS_LIST}" \ 568 | | grep -E "^${POOL}/${BEDS}/${2}(/|$)" \ 569 | | while read -r NAME 570 | do 571 | #zfs set canmount=on ${NAME} 572 | while __be_clone "${NAME}" 573 | do 574 | zfs promote "${NAME}" 575 | done 576 | done 577 | # check if we need to update grub 578 | if [ "${GRUB}" = YES ] 579 | then 580 | __update_grub 581 | fi 582 | echo "Activated successfully" 583 | ;; 584 | 585 | (destroy) # ----------------------------------------------------------------- 586 | if [ "${2}" != "-F" ] 587 | then 588 | DESTROY=${2} 589 | else 590 | DESTROY=${3} 591 | fi 592 | __be_exist "${POOL}/${BEDS}/${DESTROY}" 593 | case ${#} in 594 | (2) 595 | echo "Are you sure you want to destroy '${2}'?" 596 | echo -n "This action cannot be undone (y/[n]): " 597 | read -r CHOICE 598 | ;; 599 | (3) 600 | if [ "${2}" != "-F" ] 601 | then 602 | __usage 603 | fi 604 | CHOICE=Y 605 | ;; 606 | (*) 607 | __usage 608 | ;; 609 | esac 610 | if [ "${BOOTFS}" = "${POOL}/${BEDS}/${DESTROY}" ] 611 | then 612 | echo "ERROR: Cannot destroy active boot environment" 613 | exit 1 614 | fi 615 | case ${CHOICE} in 616 | (Y|y|[Yy][Ee][Ss]) 617 | # destroy snapshot or boot environment 618 | if __be_snapshot "${POOL}/${BEDS}/${DESTROY}" 619 | then 620 | # destroy desired snapshot 621 | if ! zfs destroy -r "${POOL}/${BEDS}/${DESTROY}" &>/dev/null 622 | then 623 | echo "ERROR: Snapshot '${2}' is origin for other boot environment" 624 | exit 1 625 | fi 626 | else 627 | if __be_clone "${POOL}/${BEDS}/${DESTROY}" 628 | then 629 | # promote clones dependent on snapshots used by destroyed boot environment 630 | zfs list -H -t all -o name,origin -r "${POOL}" \ 631 | | while read -r NAME ORIGIN 632 | do 633 | if echo "${ORIGIN}" | grep -q -E "${POOL}/${BEDS}/${DESTROY}(/.*@|@)" 2> /dev/null 634 | then 635 | zfs promote "${NAME}" 636 | fi 637 | done 638 | # get origins used by destroyed boot environment 639 | ORIGIN_SNAPSHOTS=$( zfs list -H -t all -o origin -r "${POOL}/${BEDS}/${DESTROY}" | grep -v '^-$' | awk -F "@" '{print $2}' | sort -u ) 640 | fi 641 | # check if boot environment was created from existing snapshot 642 | ORIGIN=$( zfs list -H -o origin "${POOL}/${BEDS}/${DESTROY}" ) 643 | CREATION=$( zfs list -H -o creation "${POOL}/${BEDS}/${DESTROY}" ) 644 | CREATION=$( date --date="${CREATION}" +"%Y-%m-%d-%H:%M" ) 645 | SNAPSHOT_NAME=$( echo "${ORIGIN}" | cut -d '@' -f 2 | sed -E 's/:[0-9]{2}$//g' ) 646 | if [ "${2}" = "-F" ] 647 | then 648 | CHOICE=1 649 | elif [ "${SNAPSHOT_NAME}" != "${CREATION}" ] 650 | then 651 | ORIGIN=$( basename "${ORIGIN}" ) 652 | echo "Boot environment '${DESTROY}' was created from existing snapshot" 653 | echo -n "Destroy '${ORIGIN}' snapshot? (y/[n]): " 654 | read -r CHOICE 655 | case ${CHOICE} in 656 | (Y|y|[Yy][Ee][Ss]) 657 | CHOICE=1 658 | ;; 659 | (*) 660 | CHOICE=0 661 | echo "Origin snapshot '${ORIGIN}' will be preserved" 662 | ;; 663 | esac 664 | else 665 | CHOICE=1 666 | fi 667 | # destroy boot environment 668 | zfs destroy -r "${POOL}/${BEDS}/${DESTROY}" 669 | # check if boot environment is a clone 670 | if __be_clone "${POOL}/${BEDS}/${DESTROY}" 671 | then 672 | # promote datasets dependent on origins used by destroyed boot environment 673 | ALL_ORIGINS=$( zfs list -H -t all -o name,origin -r "${POOL}" ) 674 | echo "${ORIGIN_SNAPSHOTS}" \ 675 | | while read -r S 676 | do 677 | echo "${ALL_ORIGINS}" \ 678 | | grep "${S}" \ 679 | | awk '{print $1}' \ 680 | | while read -r I 681 | do 682 | zfs promote "${I}" 683 | done 684 | done 685 | fi 686 | # destroy origins used by destroyed boot environment 687 | SNAPSHOTS=$( zfs list -H -t snapshot -o name -r "${POOL}" ) 688 | echo "${ORIGIN_SNAPSHOTS}" \ 689 | | while read -r S 690 | do 691 | echo "${SNAPSHOTS}" \ 692 | | grep "@${S}$" \ 693 | | while read -r I 694 | do 695 | if [ ${CHOICE} -eq 1 ] 696 | then 697 | zfs destroy "${I}" 698 | fi 699 | done 700 | done 701 | fi 702 | # check if we need to update grub 703 | if [ "${GRUB}" = YES ] 704 | then 705 | __update_grub 706 | fi 707 | echo "Destroyed successfully" 708 | ;; 709 | (*) 710 | echo "Boot environment '${DESTROY}' has not been destroyed" 711 | ;; 712 | esac 713 | ;; 714 | 715 | (rename) # ------------------------------------------------------------------ 716 | if [ ${#} -ne 3 ] 717 | then 718 | __usage 719 | fi 720 | __be_exist "${POOL}/${BEDS}/${2}" 721 | if [ "${BOOTFS}" = "${POOL}/${BEDS}/${2}" ] 722 | then 723 | echo "ERROR: Renaming active boot environment is not supported" 724 | exit 1 725 | fi 726 | if zfs list -H -o name "${POOL}/${BEDS}/${3}" 2> /dev/null 727 | then 728 | echo "ERROR: Boot environment '${3}' already exists" 729 | exit 1 730 | fi 731 | zfs rename "${POOL}/${BEDS}/${2}" "${POOL}/${BEDS}/${3}" 732 | # check if we need to update grub 733 | if [ "${GRUB}" = YES ] 734 | then 735 | __update_grub 736 | fi 737 | echo "Renamed successfully" 738 | ;; 739 | 740 | (mount) # ------------------------------------------------------------ 741 | if [ ${#} -eq 2 ] 742 | then 743 | TARGET=$( mktemp -d -p /tmp "BE-${2}.XXX" ) 744 | elif [ ${#} -eq 3 ] 745 | then 746 | TARGET=${3} 747 | else 748 | __usage 749 | fi 750 | __be_exist "${POOL}/${BEDS}/${2}" 751 | if __be_mounted "${POOL}/${BEDS}/${2}" 752 | then 753 | MNT=$(__be_findmnt "${POOL}/${BEDS}/${2}") 754 | echo "${MNT}" 755 | exit 1 756 | fi 757 | if ! mkdir -p "${TARGET}" 2> /dev/null 758 | then 759 | echo "ERROR: Cannot create '${TARGET}' mountpoint" 760 | exit 1 761 | fi 762 | if ! mount -t zfs "${POOL}/${BEDS}/${2}" "${TARGET}" 763 | then 764 | echo "ERROR: Cannot mount '${2}' at '${TARGET}' mountpoint" 765 | exit 1 766 | fi 767 | zfs list -H -o name,mountpoint -r "${POOL}/${BEDS}/${2}" \ 768 | | grep -v -E "[[:space:]](legacy|none)$" \ 769 | | sort -n \ 770 | | grep -E "^${POOL}/${BEDS}/${2}/" \ 771 | | while read -r FS MOUNTPOINT 772 | do 773 | if [ "{FS}" != "${POOL}/${BEDS}/${2}" ] 774 | then 775 | INHERIT=$( zfs get -H -o source mountpoint "${FS}" ) 776 | if [ "${INHERIT}" = "local" ] 777 | then 778 | case ${MOUNTPOINT} in 779 | (legacy|none) 780 | continue 781 | ;; 782 | (*) 783 | #shellcheck disable=SC2001 784 | MOUNTPOINT="/$( echo "${FS}" | sed s^"${POOL}/${BEDS}/${2}/"^^g )" 785 | ;; 786 | esac 787 | fi 788 | fi 789 | if ! mkdir -p "${TARGET}${MOUNTPOINT}" &>/dev/null 790 | then 791 | echo "ERROR: Cannot create '${TARGET}${MOUNTPOINT}' mountpoint" 792 | exit 1 793 | fi 794 | if ! mount -t zfs "${FS}" "${TARGET}${MOUNTPOINT}" &>/dev/null 795 | then 796 | echo "ERROR: Cannot mount '${FS}' at '${TARGET}${MOUNTPOINT}' mountpoint" 797 | exit 1 798 | fi 799 | done 800 | echo "${TARGET}" 801 | ;; 802 | 803 | (chroot) # ------------------------------------------------------------------- 804 | if [ ${#} -eq 2 ] 805 | then 806 | TARGET=${2} 807 | elif [ ${#} -eq 3 ] 808 | then 809 | TARGET=${2} 810 | CMD=${3} 811 | else 812 | __usage 813 | fi 814 | USER_SHELL=`getent passwd $USER | cut -d ":" -f7` 815 | PROPERTIES="--property=CPUQuota=400% --property=MemoryHigh=4G" 816 | __be_exist "${POOL}/${BEDS}/${2}" 817 | if __be_mounted "${POOL}/${BEDS}/${2}" 818 | then 819 | MNT=$(__be_findmnt "${POOL}/${BEDS}/${TARGET}") 820 | BINDS="" 821 | for BIND in $BEADM_BINDS 822 | do 823 | BINDS="--bind=$BIND $BINDS" 824 | done 825 | # hack: nspawn do not support loop mounts 826 | PORTAGE_DIR="$MNT/var/lib/portage/gentoo" 827 | PORTAGE_FILE="$PORTAGE_DIR.xz.sqfs" 828 | if [[ -e $PORTAGE_FILE ]] 829 | then 830 | mount -t squashfs $PORTAGE_FILE $PORTAGE_DIR 831 | fi 832 | if [ -z "$CMD" ] 833 | then 834 | systemd-nspawn -D $MNT $PROPERTIES $BINDS $USER_SHELL 835 | else 836 | systemd-nspawn -D $MNT $PROPERTIES $BINDS $USER_SHELL -c "$CMD" 837 | fi 838 | if [[ -e $PORTAGE_FILE ]] 839 | then 840 | umount $PORTAGE_DIR 841 | fi 842 | else 843 | echo "ERROR: '${TARGET}' is not mounted" 844 | exit 1 845 | fi 846 | ;; 847 | 848 | (umount|unmount) # ---------------------------------------------------------- 849 | if [ ${#} -eq 2 ] 850 | then 851 | # we need this empty section for argument checking 852 | : 853 | elif [ ${#} -eq 3 ] && [ "${2}" = "-f" ] 854 | then 855 | OPTS="-f" 856 | shift 857 | else 858 | __usage 859 | fi 860 | __be_exist "${POOL}/${BEDS}/${2}" 861 | if ! __be_mounted "${POOL}/${BEDS}/${2}" 862 | then 863 | echo "Boot environment '${2}' is not mounted" 864 | exit 1 865 | fi 866 | MOUNT=$( mount ) 867 | MOUNTPOINT=$( echo "${MOUNT}" | grep -m 1 "^${POOL}/${BEDS}/${2} on " | awk '{print $3}' ) 868 | echo "${MOUNT}" \ 869 | | awk '{print $1}' \ 870 | | grep -E "^${POOL}/${BEDS}/${2}(/|$)" \ 871 | | sort -n -r \ 872 | | while read -r FS 873 | do 874 | #shellcheck disable=SC2086 875 | if ! umount ${OPTS} ${FS} &>/dev/null 876 | then 877 | echo "ERROR: Cannot umount '${FS}' dataset" 878 | exit 1 879 | fi 880 | done 881 | echo "Unmounted successfully" 882 | # only delete the temporary mountpoint directory 883 | if echo "${MOUNTPOINT}" | grep -q -E "/BE-${2}\.[a-zA-Z0-9]{8}" &>/dev/null 884 | then 885 | # delete only when it is an empty directory 886 | if [ "$( find "${MOUNTPOINT}" | head | wc -l | bc )" -eq 1 ] 887 | then 888 | rm -r "${MOUNTPOINT}" 889 | fi 890 | fi 891 | ;; 892 | 893 | (*) # ----------------------------------------------------------------------- 894 | __usage 895 | ;; 896 | 897 | esac 898 | -------------------------------------------------------------------------------- /build_kernel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | KERNEL_BASE="6.1" 4 | #KERNEL_VER="6.1.2" 5 | KERNEL_VER=`curl https://cdn.kernel.org/pub/linux/kernel/v6.x/ 2>/dev/null | grep 'patch-6.1.[0-9]' | sed 's/.*\(6.1.[0-9]\+\).*/\1/' | tail -1` 6 | ZFS_VER="2.1.9" 7 | 8 | BUILD_PATH="/var/tmp/portage/kernel" 9 | CONFIG_TPL="/root/bin/config-base" 10 | DISTFILES="/var/lib/portage/distfiles" 11 | 12 | KERNEL_SRC_TAR="linux-$KERNEL_BASE.tar.xz" 13 | KERNEL_PATCH="patch-$KERNEL_VER.xz" 14 | KERNEL_SRC_URL="https://cdn.kernel.org/pub/linux/kernel/v6.x" 15 | ZFS_SRC_TAR="zfs-$ZFS_VER.tar.gz" 16 | ZFS_SRC_URL="https://github.com/openzfs/zfs/releases/download/zfs-$ZFS_VER" 17 | 18 | LINUX=$BUILD_PATH/linux-$KERNEL_BASE 19 | ZFS=$BUILD_PATH/zfs-$ZFS_VER 20 | 21 | BASE_INITRAMFS=/boot/initramfs 22 | INITRAMFS=/boot/initramfs-${KERNEL_VER} 23 | 24 | download() { 25 | [ -f $DISTFILES/$2 ] || wget $1/$2 -O $DISTFILES/$2 26 | 27 | cp $DISTFILES/$2 $BUILD_PATH 28 | } 29 | 30 | fetch_linux() { 31 | echo "Fetch Linux" 32 | cd $BUILD_PATH 33 | download $KERNEL_SRC_URL $KERNEL_SRC_TAR 34 | download $KERNEL_SRC_URL $KERNEL_PATCH 35 | 36 | echo "Unpack Linux" 37 | tar -xf $KERNEL_SRC_TAR || exit 1 38 | 39 | echo "Patch Linux" 40 | cd $LINUX 41 | xzcat $BUILD_PATH/$KERNEL_PATCH | patch -p1 42 | 43 | echo "Prepare Linux" 44 | cd $LINUX 45 | cp $CONFIG_TPL .config 46 | make olddefconfig 47 | make prepare 48 | } 49 | 50 | fetch_zfs() { 51 | echo "Fetch ZFS" 52 | cd $BUILD_PATH 53 | download $ZFS_SRC_URL $ZFS_SRC_TAR 54 | echo "Unpack ZFS" 55 | tar -xf $ZFS_SRC_TAR || exit 1 56 | } 57 | 58 | patch_zfs() { 59 | echo "Patch ZFS" 60 | cd $ZFS 61 | ./autogen.sh 62 | ./configure --with-linux=$LINUX --with-linux-obj=$LINUX --enable-linux-builtin 63 | ./copy-builtin $LINUX 64 | } 65 | 66 | make_linux() { 67 | echo "Build kernel" 68 | cd $LINUX 69 | cp $CONFIG_TPL .config 70 | make olddefconfig || exit 1 71 | make -j4 || exit 1 72 | 73 | echo "Install modules" 74 | make modules_install 75 | 76 | echo "Install kernel" 77 | cp -f System.map /boot/System.map-$KERNEL_VER 78 | cp -f arch/x86/boot/bzImage /boot/vmlinuz-$KERNEL_VER 79 | } 80 | 81 | 82 | mkdir $BUILD_PATH 83 | echo "Created building path in $BUILD_PATH" 84 | 85 | fetch_linux 86 | 87 | fetch_zfs 88 | patch_zfs 89 | 90 | make_linux 91 | 92 | # link initramfs 93 | [ -f $INITRAMFS ] || ln $BASE_INITRAMFS $INITRAMFS 94 | 95 | rm -r $BUILD_PATH 96 | -------------------------------------------------------------------------------- /chroot_start: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | BASE_DIR="." 4 | [ -z $1 ] || BASE_DIR=$1 5 | 6 | PORTAGE_DIR="$BASE_DIR/var/lib/portage/gentoo" 7 | PORTAGE_FILE="$PORTAGE_DIR.xz.sqfs" 8 | DISTFILES_DIR="/var/lib/portage/distfiles" 9 | PORTAGE_TMP="/var/tmp/portage" 10 | SRC_DIR="/usr/src" 11 | 12 | SYSTEMD_NSPAWN="/usr/bin/systemd-nspawn" 13 | 14 | [ -d $BASE_DIR/proc ] || { echo "probably no rootfs!!!" ; exit 1; } 15 | 16 | BINDS="" 17 | for BIND in $SRC_DIR $PORTAGE_TMP $DISTFILES_DIR 18 | do 19 | [ -d $BASE_DIR/$BIND ] && BINDS="$BINDS $BIND" 20 | done 21 | 22 | if [[ -e $PORTAGE_FILE ]] 23 | then 24 | mount -t squashfs $PORTAGE_FILE $PORTAGE_DIR 25 | fi 26 | 27 | if [ -x $SYSTEMD_NSPAWN ] 28 | then 29 | BINDS=`echo $BINDS | sed s/\ /\ --bind\ /g` 30 | 31 | $SYSTEMD_NSPAWN -D $BASE_DIR --bind $BINDS /bin/zsh 32 | 33 | if [[ -e $PORTAGE_FILE ]] 34 | then 35 | umount $PORTAGE_DIR 36 | fi 37 | else 38 | mount -t proc /proc $BASE_DIR/proc 39 | 40 | for BIND in $BINDS /dev /dev/pts /dev/shm /sys 41 | do 42 | mount --bind $BIND $BASE_DIR/$BIND 43 | done 44 | 45 | echo "run:" 46 | echo "chroot $BASE_DIR /bin/zsh --login" 47 | fi 48 | -------------------------------------------------------------------------------- /chroot_stop: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | BASE_DIR="." 4 | [ -z $1 ] || BASE_DIR=$1 5 | 6 | PORTAGE_DIR="/var/lib/portage/gentoo" 7 | PORTAGE_TMP="/var/tmp/portage" 8 | DISTFILES_DIR="/var/lib/portage/distfiles" 9 | SRC_DIR="/usr/src" 10 | 11 | [ -d $BASE_DIR/proc ] || { echo "probably no rootfs!!!" ; exit 1; } 12 | 13 | umount $BASE_DIR/proc 14 | umount $BASE_DIR/dev/pts 15 | umount $BASE_DIR/dev/shm 16 | umount $BASE_DIR/dev 17 | umount $BASE_DIR/sys 18 | umount $BASE_DIR/$PORTAGE_DIR 19 | umount $BASE_DIR/$DISTFILES_DIR 20 | umount $BASE_DIR/$PORTAGE_TMP 21 | -------------------------------------------------------------------------------- /config-base: -------------------------------------------------------------------------------- 1 | # 2 | # general configs 3 | # 4 | 5 | # disable BRK 6 | # CONFIG_COMPAT_BRK is not set 7 | 8 | # TEO cpuidle 9 | CONFIG_CPU_IDLE_GOV_TEO=y 10 | 11 | # skipsync 12 | CONFIG_SUSPEND_SKIP_SYNC=y 13 | 14 | # devtmpfs 15 | CONFIG_DEVTMPFS=y 16 | CONFIG_DEVTMPFS_MOUNT=y 17 | 18 | # scrollback 19 | CONFIG_VGACON_SOFT_SCROLLBACK=y 20 | CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 21 | 22 | # localversion 23 | # CONFIG_LOCALVERSION_AUTO is not set 24 | 25 | # sysvipc 26 | CONFIG_SYSVIPC=y 27 | CONFIG_POSIX_MQUEUE=y 28 | 29 | # account 30 | CONFIG_BSD_PROCESS_ACCT=y 31 | 32 | # log size 33 | CONFIG_LOG_BUF_SHIFT=18 34 | 35 | # namespace 36 | CONFIG_IPC_NS=y 37 | CONFIG_USER_NS=y 38 | 39 | # bpf 40 | CONFIG_BPF_SYSCALL=y 41 | 42 | # lz4 compress 43 | CONFIG_KERNEL_LZ4=y 44 | 45 | # dyntick 46 | CONFIG_TICK_ONESHOT=y 47 | CONFIG_NO_HZ_COMMON=y 48 | CONFIG_NO_HZ_FULL=y 49 | CONFIG_HIGH_RES_TIMERS=y 50 | CONFIG_HZ_1000=y 51 | CONFIG_HZ=1000 52 | CONFIG_SCHED_HRTICK=y 53 | 54 | # low latency desktop 55 | CONFIG_PREEMPT=y 56 | CONFIG_PREEMPT_COUNT=y 57 | CONFIG_PREEMPT_RCU=y 58 | CONFIG_TREE_SRCU=y 59 | CONFIG_TASKS_RCU=y 60 | 61 | # cgroups 62 | CONFIG_CGROUPS=y 63 | CONFIG_MEMCG=y 64 | CONFIG_CGROUP_SCHED=y 65 | CONFIG_FAIR_GROUP_SCHED=y 66 | CONFIG_CGROUP_FREEZER=y 67 | CONFIG_SCHED_AUTOGROUP=y 68 | CONFIG_BLK_CGROUP=y 69 | CONFIG_CGROUP_WRITEBACK=y 70 | CONFIG_CPUSETS=y 71 | CONFIG_PROC_PID_CPUSET=y 72 | CONFIG_CGROUP_DEVICE=y 73 | CONFIG_CGROUP_BPF=y 74 | CONFIG_SOCK_CGROUP_DATA=y 75 | CONFIG_CHECKPOINT_RESTORE=y 76 | CONFIG_CGROUP_PIDS=y 77 | 78 | # initrd support 79 | CONFIG_BLK_DEV_INITRD=y 80 | 81 | # modules support 82 | CONFIG_MODULES=y 83 | CONFIG_MODULE_UNLOAD=y 84 | 85 | # smp 86 | CONFIG_X86_64_SMP=y 87 | CONFIG_SMP=y 88 | CONFIG_MCORE2=y 89 | CONFIG_SCHED_SMT=y 90 | CONFIG_SCHED_MC=y 91 | CONFIG_SCHED_MC_PRIO=y 92 | CONFIG_SCHED_CORE=y 93 | 94 | # efi 95 | CONFIG_EFI=y 96 | 97 | # branch optimisation 98 | CONFIG_JUMP_LABEL=y 99 | 100 | # partitions 101 | CONFIG_PARTITION_ADVANCED=y 102 | CONFIG_BSD_DISKLABEL=y 103 | 104 | # hugepage 105 | CONFIG_TRANSPARENT_HUGEPAGE=y 106 | CONFIG_TRANSPARENT_HUGE_PAGECACHE=y 107 | CONFIG_CLEANCACHE=y 108 | 109 | # misc 110 | CONFIG_HW_RANDOM=y 111 | CONFIG_NVRAM=y 112 | CONFIG_HPET=y 113 | CONFIG_DEVPORT=y 114 | CONFIG_X86_MSR=m 115 | CONFIG_X86_CPUID=m 116 | CONFIG_X86_CPU_RESCTRL=y 117 | CONFIG_PROC_CPU_RESCTRL=y 118 | 119 | # x2apic (kexec) 120 | CONFIG_X86_X2APIC=y 121 | CONFIG_KEXEC=y 122 | CONFIG_CRASH_DUMP=y 123 | 124 | # 125 | # Power management and ACPI options 126 | # 127 | CONFIG_SUSPEND=y 128 | CONFIG_SUSPEND_FREEZER=y 129 | CONFIG_PM_SLEEP=y 130 | CONFIG_PM_SLEEP_SMP=y 131 | CONFIG_PM_AUTOSLEEP=y 132 | CONFIG_PM=y 133 | CONFIG_ACPI=y 134 | CONFIG_ACPI_AC=y 135 | CONFIG_ACPI_BATTERY=y 136 | CONFIG_ACPI_BUTTON=y 137 | CONFIG_ACPI_VIDEO=y 138 | CONFIG_ACPI_FAN=y 139 | CONFIG_ACPI_DOCK=y 140 | CONFIG_ACPI_CPU_FREQ_PSS=y 141 | CONFIG_ACPI_PROCESSOR_CSTATE=y 142 | CONFIG_ACPI_PROCESSOR_IDLE=y 143 | CONFIG_ACPI_CPPC_LIB=y 144 | CONFIG_ACPI_PROCESSOR=y 145 | CONFIG_ACPI_HOTPLUG_CPU=y 146 | CONFIG_ACPI_THERMAL=y 147 | CONFIG_ACPI_NUMA=y 148 | CONFIG_ACPI_TABLE_UPGRADE=y 149 | CONFIG_ACPI_HOTPLUG_IOAPIC=y 150 | CONFIG_X86_PM_TIMER=y 151 | 152 | # 153 | # CPU 154 | # 155 | 156 | # scaling 157 | CONFIG_CPU_FREQ=y 158 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y 159 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y 160 | CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y 161 | CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y 162 | CONFIG_ENERGY_MODEL=y 163 | CONFIG_CPU_FREQ_STAT=y 164 | 165 | # driver 166 | CONFIG_X86_INTEL_PSTATE=y 167 | CONFIG_X86_ACPI_CPUFREQ=y 168 | 169 | 170 | # idle 171 | CONFIG_CPU_IDLE=y 172 | CONFIG_CPU_IDLE_GOV_MENU=y 173 | CONFIG_INTEL_IDLE=y 174 | 175 | # 176 | # Bus options (PCI etc.) 177 | # 178 | CONFIG_PCI=y 179 | CONFIG_PCI_DIRECT=y 180 | CONFIG_PCI_MMCONFIG=y 181 | CONFIG_PCI_DOMAINS=y 182 | CONFIG_PCIEPORTBUS=y 183 | CONFIG_HOTPLUG_PCI_PCIE=y 184 | CONFIG_PCIEAER=y 185 | CONFIG_PCIEASPM=y 186 | CONFIG_PCIEASPM_POWER_SUPERSAVE=y 187 | CONFIG_PCIE_PME=y 188 | CONFIG_PCI_MSI=y 189 | CONFIG_PCI_MSI_IRQ_DOMAIN=y 190 | CONFIG_PCI_QUIRKS=y 191 | CONFIG_PCI_ATS=y 192 | CONFIG_PCI_LOCKLESS_CONFIG=y 193 | CONFIG_PCI_PRI=y 194 | CONFIG_PCI_PASID=y 195 | CONFIG_PCI_LABEL=y 196 | CONFIG_HOTPLUG_PCI=y 197 | CONFIG_RAS=y 198 | 199 | # 200 | # Binary Emulations 201 | # 202 | CONFIG_IA32_EMULATION=y 203 | CONFIG_COMPAT_32=y 204 | CONFIG_COMPAT=y 205 | CONFIG_COMPAT_FOR_U64_ALIGNMENT=y 206 | 207 | # 208 | # EFI (Extensible Firmware Interface) Support 209 | # 210 | CONFIG_EFI_VARS=y 211 | CONFIG_EFI_ESRT=y 212 | CONFIG_EFI_BOOTLOADER_CONTROL=m 213 | 214 | # 215 | # KVM 216 | # 217 | CONFIG_VIRTUALIZATION=y 218 | CONFIG_KVM=m 219 | CONFIG_KVM_INTEL=m 220 | CONFIG_VHOST_NET=m 221 | CONFIG_VHOST=m 222 | 223 | # 224 | # Executable file formats 225 | # 226 | CONFIG_BINFMT_ELF=y 227 | CONFIG_COMPAT_BINFMT_ELF=y 228 | CONFIG_ELFCORE=y 229 | CONFIG_BINFMT_SCRIPT=y 230 | CONFIG_BINFMT_MISC=y 231 | CONFIG_COREDUMP=y 232 | 233 | 234 | # 235 | # Networking options 236 | # 237 | 238 | # generic 239 | CONFIG_NET=y 240 | CONFIG_PACKET=y 241 | CONFIG_UNIX=y 242 | CONFIG_INET=y 243 | CONFIG_WIREGUARD=y 244 | CONFIG_IP_PNP=y 245 | CONFIG_NET_IPIP=m 246 | CONFIG_NET_IP_TUNNEL=y 247 | CONFIG_IP_MROUTE_COMMON=y 248 | CONFIG_IP_MROUTE=y 249 | CONFIG_NET_UDP_TUNNEL=y 250 | CONFIG_INET_TUNNEL=y 251 | CONFIG_IPV6=y 252 | CONFIG_IPV6_SIT=y 253 | CONFIG_IPV6_NDISC_NODETYPE=y 254 | CONFIG_NETLABEL=y 255 | CONFIG_NETDEVICES=y 256 | CONFIG_MII=m 257 | CONFIG_NET_CORE=y 258 | CONFIG_TUN=y 259 | CONFIG_IP_ADVANCED_ROUTER=y 260 | CONFIG_IP_MULTIPLE_TABLES=y 261 | CONFIG_IPV6_MULTIPLE_TABLES=y 262 | CONFIG_BPFILTER=y 263 | CONFIG_BPFILTER_UMH=m 264 | CONFIG_L2TP=y 265 | CONFIG_HAVE_NET_DSA=y 266 | CONFIG_NET_SCHED=y 267 | 268 | # Netfilter Configuration 269 | CONFIG_NETFILTER=y 270 | CONFIG_NETFILTER_INGRESS=y 271 | CONFIG_NETFILTER_NETLINK=y 272 | CONFIG_NETFILTER_NETLINK_LOG=y 273 | CONFIG_NF_CONNTRACK=y 274 | CONFIG_NF_LOG_COMMON=m 275 | CONFIG_NF_CONNTRACK_SECMARK=y 276 | CONFIG_NF_CONNTRACK_PROCFS=y 277 | CONFIG_NF_CONNTRACK_FTP=y 278 | CONFIG_NF_CONNTRACK_IRC=y 279 | CONFIG_NF_CONNTRACK_SIP=y 280 | CONFIG_NF_CT_NETLINK=y 281 | CONFIG_NF_NAT=m 282 | CONFIG_NF_NAT_NEEDED=y 283 | CONFIG_NF_NAT_FTP=m 284 | CONFIG_NF_NAT_IRC=m 285 | CONFIG_NF_NAT_SIP=m 286 | CONFIG_NETFILTER_XTABLES=y 287 | CONFIG_NETFILTER_XT_MARK=m 288 | CONFIG_NETFILTER_XT_NAT=m 289 | CONFIG_NETFILTER_XT_CONNMARK=m 290 | CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y 291 | CONFIG_NETFILTER_XT_TARGET_LOG=m 292 | CONFIG_NETFILTER_XT_TARGET_NFLOG=y 293 | CONFIG_NETFILTER_XT_TARGET_SECMARK=y 294 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=y 295 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m 296 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y 297 | CONFIG_NETFILTER_XT_MATCH_POLICY=y 298 | CONFIG_NETFILTER_XT_MATCH_STATE=y 299 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m 300 | 301 | # IP: Netfilter Configuration 302 | CONFIG_NF_DEFRAG_IPV4=y 303 | CONFIG_NF_LOG_ARP=m 304 | CONFIG_NF_LOG_IPV4=m 305 | CONFIG_NF_REJECT_IPV4=y 306 | CONFIG_NF_NAT_IPV4=m 307 | CONFIG_NF_NAT_MASQUERADE_IPV4=y 308 | CONFIG_IP_NF_IPTABLES=y 309 | CONFIG_IP_NF_FILTER=y 310 | CONFIG_IP_NF_TARGET_REJECT=y 311 | CONFIG_IP_NF_NAT=m 312 | CONFIG_IP_NF_TARGET_MASQUERADE=m 313 | CONFIG_IP_NF_MANGLE=y 314 | CONFIG_IP_NF_RAW=m 315 | 316 | # IPv6: Netfilter Configuration 317 | CONFIG_NF_REJECT_IPV6=y 318 | CONFIG_NF_DEFRAG_IPV6=y 319 | CONFIG_NF_LOG_IPV6=m 320 | CONFIG_IP6_NF_IPTABLES=y 321 | CONFIG_IP6_NF_MATCH_IPV6HEADER=y 322 | CONFIG_IP6_NF_FILTER=y 323 | CONFIG_IP6_NF_TARGET_REJECT=y 324 | CONFIG_IP6_NF_MANGLE=y 325 | CONFIG_IP6_NF_RAW=m 326 | 327 | # wireless 328 | CONFIG_BT=m 329 | CONFIG_BT_BREDR=y 330 | CONFIG_BT_BNEP=m 331 | CONFIG_BT_HIDP=m 332 | CONFIG_BT_HS=y 333 | CONFIG_BT_INTEL=m 334 | CONFIG_BT_BCM=m 335 | CONFIG_BT_RTL=m 336 | CONFIG_BT_HCIBTUSB=m 337 | CONFIG_BT_HCIBTUSB_BCM=y 338 | CONFIG_BT_HCIBTUSB_RTL=y 339 | CONFIG_BT_HCIBTSDIO=m 340 | CONFIG_BT_HCIUART=m 341 | CONFIG_BT_HCIUART_H4=y 342 | CONFIG_BT_HCIUART_BCSP=y 343 | CONFIG_BT_HCIUART_ATH3K=y 344 | CONFIG_BT_HCIUART_AG6XX=y 345 | CONFIG_BT_HCIUART_INTEL=y 346 | CONFIG_BT_RFCOMM=m 347 | CONFIG_BT_RFCOMM_TTY=y 348 | CONFIG_BT_LEDS=y 349 | CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y 350 | CONFIG_STREAM_PARSER=y 351 | CONFIG_FIB_RULES=y 352 | CONFIG_WIRELESS=y 353 | CONFIG_CFG80211=y 354 | CONFIG_MAC80211=y 355 | CONFIG_MAC80211_HAS_RC=y 356 | CONFIG_MAC80211_LEDS=y 357 | CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 358 | CONFIG_RFKILL=y 359 | CONFIG_RFKILL_LEDS=y 360 | CONFIG_DST_CACHE=y 361 | CONFIG_GRO_CELLS=y 362 | CONFIG_MAY_USE_DEVLINK=y 363 | CONFIG_HAVE_EBPF_JIT=y 364 | 365 | # USB net 366 | CONFIG_USB_NET_DRIVERS=m 367 | CONFIG_USB_CATC=m 368 | CONFIG_USB_KAWETH=m 369 | CONFIG_USB_PEGASUS=m 370 | CONFIG_USB_RTL8150=m 371 | CONFIG_USB_RTL8152=m 372 | CONFIG_USB_LAN78XX=m 373 | CONFIG_USB_USBNET=m 374 | CONFIG_USB_NET_AX8817X=m 375 | CONFIG_USB_NET_AX88179_178A=m 376 | CONFIG_USB_NET_CDCETHER=m 377 | CONFIG_USB_NET_CDC_EEM=m 378 | CONFIG_USB_NET_CDC_NCM=m 379 | CONFIG_USB_NET_CDC_MBIM=m 380 | CONFIG_USB_NET_DM9601=m 381 | CONFIG_USB_NET_SR9700=m 382 | CONFIG_USB_NET_SR9800=m 383 | CONFIG_USB_NET_SMSC75XX=m 384 | CONFIG_USB_NET_SMSC95XX=m 385 | CONFIG_USB_NET_GL620A=m 386 | CONFIG_USB_NET_NET1080=m 387 | CONFIG_USB_NET_PLUSB=m 388 | CONFIG_USB_NET_MCS7830=m 389 | CONFIG_USB_NET_RNDIS_HOST=m 390 | CONFIG_USB_NET_CDC_SUBSET_ENABLE=m 391 | CONFIG_USB_NET_CDC_SUBSET=m 392 | 393 | # wireless drivers 394 | CONFIG_WLAN=y 395 | CONFIG_WLAN_VENDOR_INTEL=y 396 | CONFIG_IWLWIFI=m 397 | CONFIG_IWLWIFI_LEDS=y 398 | CONFIG_IWLDVM=m 399 | CONFIG_IWLMVM=m 400 | CONFIG_IWLWIFI_BCAST_FILTERING=y 401 | CONFIG_IWLWIFI_PCIE_RTPM=y 402 | CONFIG_IWLWIFI_OPMODE_MODULAR=y 403 | 404 | # remove wlans 405 | # CONFIG_WLAN_VENDOR_ADMTEK is not set 406 | # CONFIG_WLAN_VENDOR_ATH is not set 407 | # CONFIG_WLAN_VENDOR_ATMEL is not set 408 | # CONFIG_WLAN_VENDOR_BROADCOM is not set 409 | # CONFIG_WLAN_VENDOR_CISCO is not set 410 | # CONFIG_WLAN_VENDOR_INTERSIL is not set 411 | # CONFIG_WLAN_VENDOR_MARVELL is not set 412 | # CONFIG_WLAN_VENDOR_MEDIATEK is not set 413 | # CONFIG_WLAN_VENDOR_RALINK is not set 414 | # CONFIG_WLAN_VENDOR_REALTEK is not set 415 | # CONFIG_WLAN_VENDOR_RSI is not set 416 | # CONFIG_WLAN_VENDOR_ST is not set 417 | # CONFIG_WLAN_VENDOR_TI is not set 418 | # CONFIG_WLAN_VENDOR_ZYDAS is not set 419 | # CONFIG_WLAN_VENDOR_QUANTENNA is not set 420 | 421 | 422 | 423 | # 424 | # Device Drivers 425 | # 426 | 427 | # nvme 428 | CONFIG_NVME_CORE=y 429 | CONFIG_BLK_DEV_NVME=y 430 | 431 | # tpm 432 | CONFIG_TCG_TPM=m 433 | CONFIG_HW_RANDOM_TPM=y 434 | CONFIG_TCG_TIS_CORE=m 435 | CONFIG_TCG_TIS=m 436 | CONFIG_TCG_CRB=m 437 | 438 | # pinctrl 439 | CONFIG_PINCTRL=y 440 | CONFIG_PINMUX=y 441 | CONFIG_PINCONF=y 442 | CONFIG_GENERIC_PINCONF=y 443 | CONFIG_PINCTRL_BAYTRAIL=y 444 | CONFIG_PINCTRL_CHERRYVIEW=m 445 | CONFIG_PINCTRL_INTEL=m 446 | CONFIG_PINCTRL_BROXTON=m 447 | CONFIG_PINCTRL_CANNONLAKE=m 448 | CONFIG_PINCTRL_CEDARFORK=m 449 | CONFIG_PINCTRL_DENVERTON=m 450 | CONFIG_PINCTRL_GEMINILAKE=m 451 | CONFIG_PINCTRL_ICELAKE=m 452 | CONFIG_PINCTRL_LEWISBURG=m 453 | CONFIG_PINCTRL_SUNRISEPOINT=m 454 | CONFIG_GPIOLIB=y 455 | CONFIG_GPIOLIB_FASTPATH_LIMIT=512 456 | CONFIG_GPIO_ACPI=y 457 | CONFIG_GPIOLIB_IRQCHIP=y 458 | 459 | # rtc 460 | CONFIG_RTC_CLASS=y 461 | CONFIG_RTC_HCTOSYS=y 462 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" 463 | CONFIG_RTC_SYSTOHC=y 464 | CONFIG_RTC_SYSTOHC_DEVICE="rtc0" 465 | CONFIG_RTC_NVMEM=y 466 | CONFIG_RTC_INTF_SYSFS=y 467 | CONFIG_RTC_INTF_PROC=y 468 | CONFIG_RTC_INTF_DEV=y 469 | CONFIG_RTC_DRV_CMOS=y 470 | 471 | # RTSX card reader 472 | CONFIG_MISC_RTSX=y 473 | CONFIG_MISC_RTSX_PCI=y 474 | 475 | # Firmware loader 476 | CONFIG_FW_LOADER=y 477 | CONFIG_EXTRA_FIRMWARE="i915/skl_dmc_ver1_27.bin iwlwifi-8000C-22.ucode intel/ibt-11-5.sfi intel/ibt-11-5.ddc" 478 | CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware" 479 | 480 | # Protocols 481 | CONFIG_PNPACPI=y 482 | CONFIG_BLK_DEV=y 483 | CONFIG_CDROM=y 484 | CONFIG_BLK_DEV_LOOP=y 485 | 486 | # SCSI device support 487 | CONFIG_SCSI_MOD=y 488 | CONFIG_SCSI=y 489 | CONFIG_SCSI_DMA=y 490 | CONFIG_BLK_DEV_SD=y 491 | CONFIG_BLK_DEV_SR=y 492 | CONFIG_CHR_DEV_SG=y 493 | CONFIG_ATA=y 494 | CONFIG_ATA_VERBOSE_ERROR=y 495 | CONFIG_ATA_ACPI=y 496 | CONFIG_SATA_AHCI=y 497 | CONFIG_SATA_MOBILE_LPM_POLICY=0 498 | CONFIG_ATA_SFF=y 499 | CONFIG_ATA_BMDMA=y 500 | CONFIG_ATA_PIIX=y 501 | 502 | # Input device support 503 | CONFIG_INPUT=y 504 | CONFIG_INPUT_LEDS=y 505 | CONFIG_INPUT_EVDEV=y 506 | CONFIG_INPUT_KEYBOARD=y 507 | CONFIG_INPUT_MOUSE=y 508 | CONFIG_MOUSE_PS2=y 509 | CONFIG_MOUSE_PS2_SYNAPTICS=y 510 | CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y 511 | CONFIG_MOUSE_PS2_TRACKPOINT=y 512 | CONFIG_MOUSE_SYNAPTICS_I2C=y 513 | CONFIG_MOUSE_SYNAPTICS_USB=y 514 | CONFIG_RMI4_CORE=y 515 | CONFIG_RMI4_I2C=y 516 | CONFIG_RMI4_SMB=y 517 | CONFIG_RMI4_F03=y 518 | CONFIG_RMI4_F03_SERIO=y 519 | CONFIG_RMI4_2D_SENSOR=y 520 | CONFIG_RMI4_F11=y 521 | CONFIG_RMI4_F12=y 522 | CONFIG_RMI4_F30=y 523 | CONFIG_RMI4_F34=y 524 | CONFIG_RMI4_F55=y 525 | CONFIG_HID_RMI=y 526 | CONFIG_I2C_HID=y 527 | CONFIG_HID_MULTITOUCH=m 528 | CONFIG_HID_WACOM=m 529 | 530 | # Character devices 531 | CONFIG_TTY=y 532 | CONFIG_VT=y 533 | CONFIG_CONSOLE_TRANSLATIONS=y 534 | CONFIG_VT_CONSOLE=y 535 | CONFIG_VT_CONSOLE_SLEEP=y 536 | CONFIG_HW_CONSOLE=y 537 | CONFIG_VT_HW_CONSOLE_BINDING=y 538 | CONFIG_UNIX98_PTYS=y 539 | CONFIG_SERIAL_NONSTANDARD=y 540 | CONFIG_LDISC_AUTOLOAD=y 541 | CONFIG_DEVMEM=y 542 | 543 | # Serial drivers 544 | CONFIG_SERIAL_EARLYCON=y 545 | CONFIG_SERIAL_8250=y 546 | CONFIG_SERIAL_8250_PNP=y 547 | CONFIG_SERIAL_8250_CONSOLE=y 548 | CONFIG_SERIAL_8250_DMA=y 549 | CONFIG_SERIAL_8250_PCI=y 550 | CONFIG_SERIAL_8250_EXAR=y 551 | CONFIG_SERIAL_8250_EXTENDED=y 552 | CONFIG_SERIAL_8250_MANY_PORTS=y 553 | CONFIG_SERIAL_8250_SHARE_IRQ=y 554 | CONFIG_SERIAL_8250_DETECT_IRQ=y 555 | CONFIG_SERIAL_8250_RSA=y 556 | CONFIG_SERIAL_8250_LPSS=y 557 | CONFIG_SERIAL_8250_MID=y 558 | CONFIG_SERIAL_CORE=y 559 | CONFIG_SERIAL_CORE_CONSOLE=y 560 | 561 | # power supply 562 | CONFIG_POWER_SUPPLY=y 563 | CONFIG_HWMON=y 564 | 565 | # ACPI drivers 566 | CONFIG_THERMAL=y 567 | CONFIG_THERMAL_HWMON=y 568 | CONFIG_THERMAL_WRITABLE_TRIPS=y 569 | CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y 570 | CONFIG_THERMAL_GOV_STEP_WISE=y 571 | CONFIG_THERMAL_GOV_USER_SPACE=y 572 | CONFIG_X86_PKG_TEMP_THERMAL=y 573 | CONFIG_INTEL_PCH_THERMAL=y 574 | CONFIG_ACPI_DPTF=y 575 | CONFIG_DPTF_POWER=m 576 | CONFIG_DPTF_PCH_FIVR=m 577 | 578 | # Multifunction device drivers 579 | CONFIG_MFD_CORE=y 580 | CONFIG_LPC_ICH=y 581 | CONFIG_LPC_SCH=y 582 | 583 | # thermal 584 | CONFIG_INTEL_SOC_DTS_IOSF_CORE=m 585 | CONFIG_INTEL_SOC_DTS_THERMAL=m 586 | CONFIG_INT340X_THERMAL=m 587 | CONFIG_ACPI_THERMAL_REL=m 588 | CONFIG_INT3406_THERMAL=m 589 | CONFIG_INTEL_TCC_COOLING=m 590 | CONFIG_INTEL_POWERCLAMP=m 591 | 592 | # lpss 593 | CONFIG_X86_INTEL_LPSS=y 594 | CONFIG_MFD_INTEL_LPSS=y 595 | CONFIG_MFD_INTEL_LPSS_ACPI=y 596 | CONFIG_MFD_INTEL_LPSS_PCI=y 597 | 598 | # media 599 | CONFIG_MEDIA_SUPPORT=m 600 | CONFIG_MEDIA_USB_SUPPORT=y 601 | CONFIG_MEDIA_CAMERA_SUPPORT=y 602 | CONFIG_USB_VIDEO_CLASS=m 603 | CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y 604 | CONFIG_VIDEO_DEV=m 605 | CONFIG_VIDEO_V4L2=m 606 | CONFIG_V4L_PLATFORM_DRIVERS=y 607 | CONFIG_VIDEOBUF2_CORE=m 608 | CONFIG_VIDEOBUF2_V4L2=m 609 | CONFIG_VIDEOBUF2_MEMOPS=m 610 | CONFIG_VIDEOBUF2_VMALLOC=m 611 | CONFIG_MEDIA_SUBDRV_AUTOSELECT=y 612 | 613 | # iio 614 | CONFIG_IIO=m 615 | CONFIG_IIO_BUFFER=y 616 | CONFIG_IIO_BUFFER_CB=m 617 | CONFIG_IIO_BUFFER_HW_CONSUMER=m 618 | CONFIG_IIO_KFIFO_BUF=m 619 | CONFIG_IIO_CONFIGFS=m 620 | CONFIG_IIO_SW_DEVICE=m 621 | CONFIG_IIO_SW_TRIGGER=m 622 | 623 | # mei 624 | CONFIG_INTEL_MEI=m 625 | CONFIG_INTEL_MEI_ME=m 626 | CONFIG_INTEL_MEI_WDT=m 627 | CONFIG_INTEL_MEI_PXP=m 628 | CONFIG_INTEL_MEI_HDCP=m 629 | 630 | # watchdog 631 | CONFIG_WATCHDOG=y 632 | CONFIG_ITCO_WDT=m 633 | 634 | # i2c 635 | CONFIG_I2C_SMBUS=m 636 | CONFIG_I2C_I801=m 637 | 638 | # spi 639 | CONFIG_SPI=y 640 | CONFIG_SPI_MASTER=y 641 | CONFIG_REGMAP_SPI=y 642 | CONFIG_SND_SPI=y 643 | 644 | # iommu 645 | CONFIG_INTEL_IOMMU=y 646 | CONFIG_IRQ_REMAP=y 647 | 648 | # 649 | # Graphics support 650 | # 651 | CONFIG_INTEL_GTT=y 652 | CONFIG_VGA_ARB=y 653 | CONFIG_DRM=y 654 | CONFIG_DRM_KMS_HELPER=y 655 | CONFIG_DRM_KMS_FB_HELPER=y 656 | CONFIG_DRM_FBDEV_EMULATION=y 657 | CONFIG_DRM_FBDEV_OVERALLOC=100 658 | CONFIG_DRM_PANEL=y 659 | CONFIG_DRM_BRIDGE=y 660 | CONFIG_DRM_PANEL_BRIDGE=y 661 | CONFIG_DRM_SIMPLEDRM=y 662 | 663 | # intel driver 664 | CONFIG_DRM_I915=y 665 | CONFIG_DRM_I915_CAPTURE_ERROR=y 666 | CONFIG_DRM_I915_COMPRESS_ERROR=y 667 | CONFIG_DRM_I915_USERPTR=y 668 | CONFIG_DRM_I915_PXP=y 669 | 670 | # Frame buffer Devices 671 | CONFIG_FB=y 672 | CONFIG_FB_CMDLINE=y 673 | CONFIG_FB_NOTIFY=y 674 | CONFIG_FB_CFB_FILLRECT=y 675 | CONFIG_FB_CFB_COPYAREA=y 676 | CONFIG_FB_CFB_IMAGEBLIT=y 677 | CONFIG_FB_SYS_FILLRECT=y 678 | CONFIG_FB_SYS_COPYAREA=y 679 | CONFIG_FB_SYS_IMAGEBLIT=y 680 | CONFIG_FB_SYS_FOPS=y 681 | CONFIG_FB_DEFERRED_IO=y 682 | CONFIG_FB_MODE_HELPERS=y 683 | CONFIG_FB_TILEBLITTING=y 684 | CONFIG_SYSFB_SIMPLEFB=y 685 | 686 | # Frame buffer hardware drivers 687 | CONFIG_FB_EFI=y 688 | CONFIG_FB_VESA=y 689 | CONFIG_BACKLIGHT_LCD_SUPPORT=y 690 | CONFIG_BACKLIGHT_CLASS_DEVICE=y 691 | CONFIG_HDMI=y 692 | 693 | # Console display driver support 694 | CONFIG_VGA_CONSOLE=y 695 | CONFIG_FRAMEBUFFER_CONSOLE=y 696 | # CONFIG_LOGO=y 697 | # CONFIG_LOGO_LINUX_CLUT224=y 698 | 699 | # intel RAPL 700 | CONFIG_POWERCAP=y 701 | CONFIG_INTEL_RAPL=m 702 | 703 | # 704 | # Sound 705 | # 706 | CONFIG_SOUND=y 707 | CONFIG_SND=y 708 | CONFIG_SND_TIMER=y 709 | CONFIG_SND_PCM=y 710 | CONFIG_SND_HWDEP=y 711 | CONFIG_SND_SEQ_DEVICE=y 712 | CONFIG_SND_JACK=y 713 | CONFIG_SND_JACK_INPUT_DEV=y 714 | CONFIG_SND_PCM_TIMER=y 715 | CONFIG_SND_HRTIMER=y 716 | CONFIG_SND_DYNAMIC_MINORS=y 717 | CONFIG_SND_PROC_FS=y 718 | CONFIG_SND_VERBOSE_PROCFS=y 719 | CONFIG_SND_VMASTER=y 720 | CONFIG_SND_SEQUENCER=y 721 | CONFIG_SND_SEQ_HRTIMER_DEFAULT=y 722 | CONFIG_SND_DRIVERS=y 723 | CONFIG_SND_PCI=y 724 | 725 | # HD-Audio 726 | CONFIG_SND_HDA=m 727 | CONFIG_SND_HDA_INTEL=m 728 | CONFIG_SND_HDA_HWDEP=y 729 | CONFIG_SND_HDA_RECONFIG=y 730 | CONFIG_SND_HDA_INPUT_BEEP=y 731 | CONFIG_SND_HDA_INPUT_BEEP_MODE=1 732 | CONFIG_SND_HDA_PATCH_LOADER=y 733 | CONFIG_SND_HDA_CODEC_REALTEK=m 734 | CONFIG_SND_HDA_CODEC_ANALOG=m 735 | CONFIG_SND_HDA_CODEC_SIGMATEL=m 736 | CONFIG_SND_HDA_CODEC_VIA=m 737 | CONFIG_SND_HDA_CODEC_HDMI=m 738 | CONFIG_SND_HDA_CODEC_CIRRUS=m 739 | CONFIG_SND_HDA_CODEC_CONEXANT=m 740 | CONFIG_SND_HDA_CODEC_CA0110=m 741 | CONFIG_SND_HDA_CODEC_CMEDIA=m 742 | CONFIG_SND_HDA_CODEC_SI3054=m 743 | CONFIG_SND_HDA_GENERIC=m 744 | CONFIG_SND_HDA_POWER_SAVE_DEFAULT=1 745 | CONFIG_SND_HDA_CORE=m 746 | CONFIG_SND_HDA_COMPONENT=y 747 | CONFIG_SND_HDA_I915=y 748 | CONFIG_SND_USB=y 749 | CONFIG_SND_X86=y 750 | CONFIG_SND_RAWMIDI=m 751 | CONFIG_SND_SEQ_MIDI_EVENT=m 752 | CONFIG_SND_SEQ_MIDI=m 753 | CONFIG_SND_USB_AUDIO=m 754 | 755 | # soc 756 | CONFIG_SND_COMPRESS_OFFLOAD=m 757 | CONFIG_SND_HDA_DSP_LOADER=y 758 | CONFIG_SND_HDA_EXT_CORE=m 759 | CONFIG_SND_SOC=m 760 | CONFIG_SND_SOC_COMPRESS=y 761 | CONFIG_SND_SOC_TOPOLOGY=y 762 | CONFIG_SND_SOC_ACPI=m 763 | CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y 764 | CONFIG_SND_SST_IPC=m 765 | CONFIG_SND_SST_IPC_PCI=m 766 | CONFIG_SND_SST_IPC_ACPI=m 767 | CONFIG_SND_SOC_INTEL_SST=m 768 | CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m 769 | CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI=m 770 | CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_ACPI=m 771 | CONFIG_SND_SOC_INTEL_SKYLAKE=m 772 | CONFIG_SND_SOC_ACPI_INTEL_MATCH=m 773 | CONFIG_SND_SOC_INTEL_MACH=y 774 | # CONFIG_SND_SOC_INTEL_SKL_RT286_MACH is not set 775 | # CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH is not set 776 | # CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH is not set 777 | # CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH is not set 778 | # CONFIG_SND_SOC_INTEL_BXT_RT298_MACH is not set 779 | # CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH is not set 780 | # CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98357A_MACH is not set 781 | # CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH is not set 782 | 783 | 784 | # 785 | # HID support 786 | # 787 | CONFIG_HID=y 788 | CONFIG_HID_BATTERY_STRENGTH=y 789 | CONFIG_HIDRAW=y 790 | CONFIG_HID_GENERIC=y 791 | 792 | # USB HID support 793 | CONFIG_USB_HID=y 794 | CONFIG_HID_PID=y 795 | CONFIG_USB_HIDDEV=y 796 | 797 | # Intel ISH HID support 798 | #CONFIG_INTEL_ISH_HID=y 799 | 800 | # misc 801 | CONFIG_HID_LENOVO=m 802 | 803 | # sensors 804 | CONFIG_HID_SENSOR_HUB=m 805 | CONFIG_IIO_TRIGGERED_BUFFER=m 806 | CONFIG_IIO_TRIGGER=y 807 | CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 808 | CONFIG_HID_SENSOR_ACCEL_3D=m 809 | CONFIG_IIO_ST_ACCEL_3AXIS=m 810 | CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m 811 | CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m 812 | CONFIG_HID_SENSOR_IIO_COMMON=m 813 | CONFIG_HID_SENSOR_IIO_TRIGGER=m 814 | CONFIG_IIO_ST_SENSORS_I2C=m 815 | CONFIG_IIO_ST_SENSORS_SPI=m 816 | CONFIG_IIO_ST_SENSORS_CORE=m 817 | CONFIG_HID_SENSOR_GYRO_3D=m 818 | CONFIG_IIO_ST_GYRO_3AXIS=m 819 | CONFIG_IIO_ST_GYRO_I2C_3AXIS=m 820 | CONFIG_IIO_ST_GYRO_SPI_3AXIS=m 821 | CONFIG_HID_SENSOR_HUMIDITY=m 822 | CONFIG_HID_SENSOR_ALS=m 823 | CONFIG_HID_SENSOR_PROX=m 824 | CONFIG_HID_SENSOR_MAGNETOMETER_3D=m 825 | CONFIG_HID_SENSOR_INCLINOMETER_3D=m 826 | CONFIG_HID_SENSOR_DEVICE_ROTATION=m 827 | CONFIG_IIO_SYSFS_TRIGGER=m 828 | CONFIG_HID_SENSOR_PRESS=m 829 | CONFIG_HID_SENSOR_TEMP=m 830 | 831 | # 832 | # Ethernet 833 | # 834 | CONFIG_ETHERNET=y 835 | CONFIG_NET_VENDOR_INTEL=y 836 | CONFIG_E1000E=m 837 | CONFIG_IGB=m 838 | CONFIG_IGB_HWMON=y 839 | CONFIG_IGC=m 840 | # CONFIG_NET_VENDOR_3COM is not set 841 | # CONFIG_NET_VENDOR_ADAPTEC is not set 842 | # CONFIG_NET_VENDOR_AGERE is not set 843 | # CONFIG_NET_VENDOR_ALACRITECH is not set 844 | # CONFIG_NET_VENDOR_ALTEON is not set 845 | # CONFIG_NET_VENDOR_AMAZON is not set 846 | # CONFIG_NET_VENDOR_AMD is not set 847 | # CONFIG_NET_VENDOR_AQUANTIA is not set 848 | # CONFIG_NET_VENDOR_ARC is not set 849 | # CONFIG_NET_VENDOR_ATHEROS is not set 850 | # CONFIG_NET_VENDOR_AURORA is not set 851 | # CONFIG_NET_VENDOR_BROADCOM is not set 852 | # CONFIG_NET_VENDOR_BROCADE is not set 853 | # CONFIG_NET_VENDOR_CADENCE is not set 854 | # CONFIG_NET_VENDOR_CAVIUM is not set 855 | # CONFIG_NET_VENDOR_CHELSIO is not set 856 | # CONFIG_NET_VENDOR_CISCO is not set 857 | # CONFIG_NET_VENDOR_CORTINA is not set 858 | # CONFIG_NET_VENDOR_DEC is not set 859 | # CONFIG_NET_VENDOR_DLINK is not set 860 | # CONFIG_NET_VENDOR_EMULEX is not set 861 | # CONFIG_NET_VENDOR_EZCHIP is not set 862 | # CONFIG_NET_VENDOR_GOOGLE is not set 863 | # CONFIG_NET_VENDOR_HP is not set 864 | # CONFIG_NET_VENDOR_HUAWEI is not set 865 | # CONFIG_NET_VENDOR_MARVELL is not set 866 | # CONFIG_NET_VENDOR_MELLANOX is not set 867 | # CONFIG_NET_VENDOR_MICREL is not set 868 | # CONFIG_NET_VENDOR_MICROCHIP is not set 869 | # CONFIG_NET_VENDOR_MICROSEMI is not set 870 | # CONFIG_NET_VENDOR_MYRI is not set 871 | # CONFIG_NET_VENDOR_NATSEMI is not set 872 | # CONFIG_NET_VENDOR_NETERION is not set 873 | # CONFIG_NET_VENDOR_NETRONOME is not set 874 | # CONFIG_NET_VENDOR_NI is not set 875 | # CONFIG_NET_VENDOR_NVIDIA is not set 876 | # CONFIG_NET_VENDOR_OKI is not set 877 | # CONFIG_NET_VENDOR_PACKET_ENGINES is not set 878 | # CONFIG_NET_VENDOR_PENSANDO is not set 879 | # CONFIG_NET_VENDOR_QLOGIC is not set 880 | # CONFIG_NET_VENDOR_QUALCOMM is not set 881 | # CONFIG_NET_VENDOR_RDC is not set 882 | # CONFIG_NET_VENDOR_REALTEK is not set 883 | # CONFIG_NET_VENDOR_RENESAS is not set 884 | # CONFIG_NET_VENDOR_ROCKER is not set 885 | # CONFIG_NET_VENDOR_SAMSUNG is not set 886 | # CONFIG_NET_VENDOR_SEEQ is not set 887 | # CONFIG_NET_VENDOR_SOLARFLARE is not set 888 | # CONFIG_NET_VENDOR_SILAN is not set 889 | # CONFIG_NET_VENDOR_SIS is not set 890 | # CONFIG_NET_VENDOR_SMSC is not set 891 | # CONFIG_NET_VENDOR_SOCIONEXT is not set 892 | # CONFIG_NET_VENDOR_STMICRO is not set 893 | # CONFIG_NET_VENDOR_SUN is not set 894 | # CONFIG_NET_VENDOR_SYNOPSYS is not set 895 | # CONFIG_NET_VENDOR_TEHUTI is not set 896 | # CONFIG_NET_VENDOR_TI is not set 897 | # CONFIG_NET_VENDOR_VIA is not set 898 | # CONFIG_NET_VENDOR_WIZNET is not set 899 | # CONFIG_NET_VENDOR_XILINX is not set 900 | 901 | 902 | # 903 | # USB 904 | # 905 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y 906 | CONFIG_USB_SUPPORT=y 907 | CONFIG_USB_COMMON=y 908 | CONFIG_USB_ARCH_HAS_HCD=y 909 | CONFIG_USB=y 910 | CONFIG_USB_PCI=y 911 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y 912 | 913 | # Miscellaneous USB options 914 | CONFIG_USB_DEFAULT_PERSIST=y 915 | CONFIG_USB_MON=y 916 | 917 | # USB Host Controller Drivers 918 | CONFIG_USB_XHCI_HCD=y 919 | CONFIG_USB_XHCI_PCI=y 920 | CONFIG_USB_XHCI_PLATFORM=y 921 | CONFIG_USB_EHCI_HCD=y 922 | CONFIG_USB_EHCI_TT_NEWSCHED=y 923 | CONFIG_USB_EHCI_PCI=y 924 | CONFIG_USB_OHCI_HCD=m 925 | CONFIG_USB_OHCI_HCD_PCI=m 926 | CONFIG_USB_UHCI_HCD=m 927 | 928 | # USB Device Class drivers 929 | CONFIG_USB_PRINTER=m 930 | CONFIG_USB_WDM=m 931 | CONFIG_USB_STORAGE=y 932 | CONFIG_USB_UAS=m 933 | 934 | # USB port drivers 935 | CONFIG_USB_SERIAL=m 936 | CONFIG_USB_SERIAL_GENERIC=y 937 | CONFIG_USB_SERIAL_SIMPLE=m 938 | CONFIG_USB_SERIAL_CH341=m 939 | CONFIG_USB_SERIAL_CP210X=m 940 | CONFIG_USB_SERIAL_FTDI_SIO=m 941 | CONFIG_USB_SERIAL_PL2303=m 942 | 943 | # gadget 944 | CONFIG_USB_ACM=m 945 | CONFIG_USB_GADGET=m 946 | CONFIG_USB_GADGET_VBUS_DRAW=2 947 | CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 948 | CONFIG_U_SERIAL_CONSOLE=y 949 | CONFIG_USB_LIBCOMPOSITE=m 950 | CONFIG_USB_F_ACM=m 951 | CONFIG_USB_U_SERIAL=m 952 | CONFIG_USB_U_ETHER=m 953 | CONFIG_USB_U_AUDIO=m 954 | CONFIG_USB_F_SERIAL=m 955 | CONFIG_USB_F_OBEX=m 956 | CONFIG_USB_F_NCM=m 957 | CONFIG_USB_F_ECM=m 958 | CONFIG_USB_F_EEM=m 959 | CONFIG_USB_F_SUBSET=m 960 | CONFIG_USB_F_MASS_STORAGE=m 961 | CONFIG_USB_F_FS=m 962 | CONFIG_USB_F_UAC1=m 963 | CONFIG_USB_F_UAC1_LEGACY=m 964 | CONFIG_USB_F_UAC2=m 965 | CONFIG_USB_F_UVC=m 966 | CONFIG_USB_F_HID=m 967 | CONFIG_USB_F_PRINTER=m 968 | CONFIG_USB_CONFIGFS=m 969 | CONFIG_USB_CONFIGFS_SERIAL=y 970 | CONFIG_USB_CONFIGFS_ACM=y 971 | CONFIG_USB_CONFIGFS_OBEX=y 972 | CONFIG_USB_CONFIGFS_NCM=y 973 | CONFIG_USB_CONFIGFS_ECM=y 974 | CONFIG_USB_CONFIGFS_ECM_SUBSET=y 975 | CONFIG_USB_CONFIGFS_EEM=y 976 | CONFIG_USB_CONFIGFS_MASS_STORAGE=y 977 | CONFIG_USB_CONFIGFS_F_FS=y 978 | CONFIG_USB_CONFIGFS_F_UAC1=y 979 | CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y 980 | CONFIG_USB_CONFIGFS_F_UAC2=y 981 | CONFIG_USB_CONFIGFS_F_HID=y 982 | CONFIG_USB_CONFIGFS_F_UVC=y 983 | CONFIG_USB_CONFIGFS_F_PRINTER=y 984 | 985 | # usb-c 986 | CONFIG_TYPEC=m 987 | CONFIG_TYPEC_TCPM=m 988 | CONFIG_TYPEC_TCPCI=m 989 | CONFIG_TYPEC_UCSI=m 990 | CONFIG_UCSI_ACPI=m 991 | CONFIG_TYPEC_MUX_PI3USB30532=m 992 | CONFIG_TYPEC_DP_ALTMODE=m 993 | CONFIG_USB_ROLE_SWITCH=m 994 | CONFIG_USB_ROLES_INTEL_XHCI=m 995 | 996 | 997 | # 998 | # MMC/SD/SDIO Host Controller Drivers 999 | # 1000 | CONFIG_MMC=y 1001 | CONFIG_MMC_BLOCK=m 1002 | CONFIG_MMC_BLOCK_MINORS=8 1003 | CONFIG_MMC_USHC=m 1004 | CONFIG_MMC_SDHCI=m 1005 | CONFIG_MMC_SDHCI_IO_ACCESSORS=y 1006 | CONFIG_MMC_SDHCI_PCI=m 1007 | CONFIG_MMC_RICOH_MMC=y 1008 | CONFIG_MMC_REALTEK_PCI=m 1009 | CONFIG_MMC_CQHCI=m 1010 | CONFIG_CHECK_SIGNATURE=y 1011 | 1012 | 1013 | # 1014 | # Thinkpad acpi 1015 | # 1016 | CONFIG_THINKPAD_ACPI=y 1017 | CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y 1018 | CONFIG_THINKPAD_ACPI_UNSAFE_LEDS=y 1019 | CONFIG_THINKPAD_ACPI_VIDEO=y 1020 | CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y 1021 | CONFIG_INTEL_PMC_CORE=y 1022 | CONFIG_INTEL_PMC_IPC=y 1023 | 1024 | 1025 | # 1026 | # File systems 1027 | # 1028 | 1029 | # general 1030 | CONFIG_FS_POSIX_ACL=y 1031 | CONFIG_EXPORTFS=y 1032 | CONFIG_FILE_LOCKING=y 1033 | CONFIG_FSNOTIFY=y 1034 | CONFIG_DNOTIFY=y 1035 | CONFIG_INOTIFY_USER=y 1036 | CONFIG_FANOTIFY=y 1037 | CONFIG_QUOTA=y 1038 | 1039 | # zfs 1040 | CONFIG_ZFS=y 1041 | 1042 | # ext4 1043 | CONFIG_EXT4_FS=m 1044 | 1045 | # autofs 1046 | CONFIG_AUTOFS4_FS=y 1047 | CONFIG_AUTOFS_FS=y 1048 | 1049 | # fuse 1050 | CONFIG_FUSE_FS=y 1051 | 1052 | # cdrom 1053 | CONFIG_ISO9660_FS=y 1054 | CONFIG_JOLIET=y 1055 | CONFIG_ZISOFS=y 1056 | 1057 | # DOS/FAT/NT Filesystems 1058 | CONFIG_FAT_FS=y 1059 | CONFIG_MSDOS_FS=y 1060 | CONFIG_VFAT_FS=y 1061 | CONFIG_FAT_DEFAULT_CODEPAGE=437 1062 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" 1063 | CONFIG_EXFAT_FS=m 1064 | CONFIG_NTFS_FS=m 1065 | CONFIG_NTFS_RW=y 1066 | 1067 | 1068 | # Pseudo filesystems 1069 | CONFIG_PROC_FS=y 1070 | CONFIG_PROC_KCORE=y 1071 | CONFIG_PROC_VMCORE=y 1072 | CONFIG_PROC_SYSCTL=y 1073 | CONFIG_PROC_PAGE_MONITOR=y 1074 | CONFIG_PROC_CHILDREN=y 1075 | CONFIG_KERNFS=y 1076 | CONFIG_SYSFS=y 1077 | CONFIG_TMPFS=y 1078 | CONFIG_TMPFS_POSIX_ACL=y 1079 | CONFIG_TMPFS_XATTR=y 1080 | CONFIG_HUGETLBFS=y 1081 | CONFIG_HUGETLB_PAGE=y 1082 | CONFIG_MEMFD_CREATE=y 1083 | CONFIG_EFIVAR_FS=m 1084 | 1085 | # squashfs 1086 | CONFIG_MISC_FILESYSTEMS=y 1087 | CONFIG_SQUASHFS=y 1088 | CONFIG_SQUASHFS_FILE_DIRECT=y 1089 | CONFIG_SQUASHFS_ZLIB=y 1090 | CONFIG_SQUASHFS_LZ4=y 1091 | CONFIG_SQUASHFS_LZO=y 1092 | CONFIG_SQUASHFS_XZ=y 1093 | CONFIG_SQUASHFS_ZSTD=y 1094 | CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y 1095 | CONFIG_SQUASHFS_XATTR=y 1096 | 1097 | 1098 | # nfs 1099 | CONFIG_NETWORK_FILESYSTEMS=y 1100 | CONFIG_NFS_FS=y 1101 | CONFIG_NFS_V2=y 1102 | CONFIG_NFS_V3=y 1103 | CONFIG_NFS_V3_ACL=y 1104 | CONFIG_NFS_V4=y 1105 | CONFIG_NFS_USE_KERNEL_DNS=y 1106 | CONFIG_GRACE_PERIOD=y 1107 | CONFIG_LOCKD=y 1108 | CONFIG_LOCKD_V4=y 1109 | CONFIG_NFS_ACL_SUPPORT=y 1110 | CONFIG_NFS_COMMON=y 1111 | CONFIG_SUNRPC=y 1112 | CONFIG_SUNRPC_GSS=y 1113 | CONFIG_NLS=y 1114 | CONFIG_NLS_DEFAULT="utf8" 1115 | CONFIG_NLS_CODEPAGE_437=y 1116 | CONFIG_NLS_ASCII=y 1117 | CONFIG_NLS_ISO8859_1=y 1118 | CONFIG_NLS_UTF8=y 1119 | 1120 | # configfs 1121 | CONFIG_CONFIGFS_FS=m 1122 | 1123 | # securityfs 1124 | CONFIG_SECURITYFS=y 1125 | 1126 | # 1127 | # crypto 1128 | # 1129 | CONFIG_CRYPTO_USER_API=m 1130 | CONFIG_CRYPTO_USER_API_HASH=m 1131 | 1132 | # 1133 | # Kernel hacking 1134 | # 1135 | 1136 | # printk and dmesg options 1137 | CONFIG_PRINTK_TIME=y 1138 | CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 1139 | CONFIG_CONSOLE_LOGLEVEL_QUIET=4 1140 | CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 1141 | 1142 | # Lock Debugging (spinlocks, mutexes, etc...) 1143 | CONFIG_STACKTRACE=y 1144 | CONFIG_DEBUG_BUGVERBOSE=y 1145 | CONFIG_DEBUG_FS=y 1146 | 1147 | -------------------------------------------------------------------------------- /elog_check.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HIDE="Maintainer|Upstream|Repository|FEATURES|INFO|Applying|autoconf|autoheader|autoreconf|automake|libtoolize|aclocal|elibtoolize|Updating icons|desktop mime|shared mime|LOG|autopoint|/lib/systemd" 4 | ELOG_DIR="/var/log/portage/elog" 5 | 6 | for FILE in $ELOG_DIR/*.log 7 | do 8 | echo "################################################################################" 9 | echo "$FILE" 10 | echo "################################################################################" 11 | egrep -v "$HIDE" $FILE 12 | echo "################################################################################" 13 | echo -n "Delete? [y/N]: " 14 | read YES 15 | [[ $YES == "y" ]] && rm $FILE 16 | done 17 | -------------------------------------------------------------------------------- /emerge_log: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ATOM=$1 4 | 5 | [ -z $ATOM ] && { echo "Usage: $0 pkg_name"; exit 1; } 6 | 7 | source /etc/portage/make.conf 8 | 9 | [ -z $PORTAGE_LOGDIR ] && { echo "Build logs not enabled. Set PORTAGE_LOGDIR in /etc/portage/make.conf."; exit 1; } 10 | 11 | if echo $ATOM | grep "/" >/dev/null 12 | then 13 | REGEX="$ATOM-[0-9]" 14 | else 15 | REGEX="/$ATOM-[0-9]" 16 | fi 17 | 18 | PKG=`eix-installed -q all | grep $REGEX | tr '/' ':'` 19 | BUILD_FILES="$PORTAGE_LOGDIR/$PKG*" 20 | 21 | [ -z $PKG ] && { echo "No package matched."; exit 1; } 22 | [ `echo $PKG | wc -l` != "1" ] && { echo "More than one package matched, please specify.\n $PKG"; exit 1; } 23 | 24 | ls $BUILD_FILES >/dev/null 2>&1 || { echo "No build log for $PKG"; exit 1; } 25 | 26 | less $BUILD_FILES 27 | -------------------------------------------------------------------------------- /init.tpl: -------------------------------------------------------------------------------- 1 | #!/bin/busybox sh 2 | 3 | ZPOOL="/sbin/zpool" 4 | ZFS="/sbin/zfs" 5 | BUSYBOX="/bin/busybox" 6 | CAT="$BUSYBOX cat" 7 | CUT="$BUSYBOX cut" 8 | GREP="$BUSYBOX grep" 9 | TR="$BUSYBOX tr" 10 | ECHO="$BUSYBOX echo" 11 | MOUNT="$BUSYBOX mount" 12 | UMOUNT="$BUSYBOX umount" 13 | SH="$BUSYBOX sh" 14 | SWITCH_ROOT="$BUSYBOX switch_root" 15 | MKDIR="$BUSYBOX mkdir" 16 | 17 | # mount pseudo FS 18 | $MOUNT -t proc none /proc 19 | $MOUNT -t sysfs none /sys 20 | $MOUNT -t devtmpfs none /dev 21 | $MKDIR /dev/pts 22 | $MOUNT -t devpts /dev/pts /dev/pts 23 | 24 | # crashdump 25 | $GREP "kdump" /proc/cmdline >/dev/null 26 | if [[ $? -eq 0 ]] 27 | then 28 | $BUSYBOX --install -s && $SH 29 | $UMOUNT /sys 30 | $UMOUNT /proc 31 | $UMOUNT /dev 32 | exit 33 | fi 34 | 35 | # plymouth 36 | $GREP "splash" /proc/cmdline >/dev/null 37 | if [[ $? -eq 0 && -x /usr/sbin/plymouthd && -x /usr/bin/plymouth ]] 38 | then 39 | PLYMOUTH=1 40 | $MKDIR -p /run/plymouth 41 | /usr/sbin/plymouthd --attach-to-session --pid-file /run/plymouth/pid --mode=boot 42 | /usr/bin/plymouth show-splash 43 | fi 44 | 45 | # zfs 46 | ROOT=`$CAT /proc/cmdline | $TR " " "\n" | $GREP "root=zfs" | $CUT -d"=" -f3` 47 | RPOOL=`$CAT /proc/cmdline | $TR " " "\n" | $GREP "rpool=" | $CUT -d"=" -f2` 48 | 49 | [[ -z $RPOOL ]] && RPOOL=`$ECHO $ROOT | $CUT -d"/" -f1` 50 | [[ -z $RPOOL ]] && RPOOL="rpool" 51 | 52 | [[ -z $PLYMOUTH ]] && $ECHO "Importing: $RPOOL" 53 | 54 | if [[ -f /etc/$RPOOL.cache ]] 55 | then 56 | $ZPOOL import -c /etc/$RPOOL.cache -N $RPOOL 57 | else 58 | $ZPOOL import -N $RPOOL 59 | fi 60 | 61 | $ZFS get -Hr -o value encryption $RPOOL | $GREP -v off >/dev/null 62 | if [[ $? -eq 0 ]] 63 | then 64 | if [[ -z $PLYMOUTH ]] 65 | then 66 | $ZFS load-key -a 67 | else 68 | /usr/bin/plymouth ask-for-password --command="$ZFS load-key -a" --prompt="Enter $RPOOL password:" 69 | fi 70 | fi 71 | 72 | [[ -z $ROOT ]] && ROOT=`$ZPOOL get -H bootfs $RPOOL | $TR -s "\t" ":" | $CUT -d: -f3` 73 | 74 | [[ -z $PLYMOUTH ]] && $ECHO "Mounting: $ROOT" 75 | /sbin/mount.zfs $ROOT /newroot 76 | 77 | # rescue shell if mount fail 78 | [[ $? -ne 0 ]] && $BUSYBOX --install -s && $SH 79 | 80 | # plymouth newroot 81 | [[ -z $PLYMOUTH ]] || /usr/bin/plymouth --newroot=/newroot 82 | 83 | # unmount pseudo FS 84 | $UMOUNT /sys 85 | $UMOUNT /proc 86 | 87 | # root switch 88 | exec $SWITCH_ROOT /newroot /sbin/init 89 | -------------------------------------------------------------------------------- /install-grub: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | EFI_DIR=/boot/EFI/boot 3 | EFI_FILE=$EFI_DIR/bootx64.efi 4 | 5 | [[ -d $EFI_DIR ]] || echo "Mount /boot or create $EFI_DIR" 6 | 7 | [[ -e $EFI_FILE ]] && cp $EFI_FILE $EFI_FILE.bu 8 | 9 | grub-mkimage -O x86_64-efi -o $EFI_FILE -p "" part_gpt fat configfile linux gzio xzio gfxterm efi_gop linux16 10 | cp /usr/share/grub/unicode.pf2 $EFI_DIR 11 | -------------------------------------------------------------------------------- /integrate_zfs: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [[ -x copy-builtin ]] || echo "no spl/zfs directory" 4 | 5 | ./autogen.sh 6 | ./configure --with-linux=/usr/src/linux --with-linux-obj=/usr/src/linux --enable-linux-builtin 7 | ./copy-builtin ../linux 8 | -------------------------------------------------------------------------------- /make_initramfs: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ROOT=/boot 4 | INITRAMFS="$ROOT/initramfs" 5 | XZ_OPTS="--check=crc32 --lzma2=dict=512KiB" 6 | 7 | if [ -z $1 ] 8 | then 9 | CREATE=1 10 | INITRAM_DIR=`mktemp -d -t initramfs.XXX` 11 | else 12 | CREATE=0 13 | INITRAM_DIR=$1 14 | fi 15 | 16 | DIRS=" sys 17 | proc 18 | dev 19 | etc 20 | newroot 21 | usr/lib 22 | usr/bin 23 | " 24 | 25 | declare -A LINKS=( 26 | [bin]="usr/bin" 27 | [sbin]="usr/bin" 28 | [usr/sbin]="bin" 29 | [lib]="usr/lib" 30 | [lib64]="usr/lib" 31 | [usr/lib64]="lib" 32 | ) 33 | 34 | BINS=" /sbin/zpool 35 | /sbin/mount.zfs 36 | /sbin/zfs 37 | /bin/busybox 38 | /lib/libgcc_s.so.1 39 | " 40 | 41 | EXTRA=" /etc/hostid 42 | " 43 | declare -A LIBS=() 44 | 45 | resolve_libs() { 46 | for lib in `objdump -p $1 | grep NEEDED | sed 's/\s\+NEEDED\s\+//'` 47 | do 48 | if [[ ! -n "${LIBS[/lib/${lib}]}" ]] 49 | then 50 | LIBS[/lib/${lib}]=0; 51 | fi 52 | done 53 | } 54 | 55 | echo "composing initramfs in $INITRAM_DIR" 56 | 57 | if [ $CREATE == 0 ] 58 | then 59 | echo "Remove old initramfs in $INITRAM_DIR? (y/n)" 60 | read ANS 61 | if [ $ANS == "y" ] 62 | then 63 | rm -r $INITRAM_DIR 64 | fi 65 | fi 66 | 67 | for dir in $DIRS 68 | do 69 | mkdir -p $INITRAM_DIR/$dir 70 | done 71 | 72 | for link in ${!LINKS[@]} 73 | do 74 | ln -s ${LINKS[$link]} $INITRAM_DIR/${link} 75 | done 76 | 77 | for bin in ${BINS} 78 | do 79 | echo "\tresolving $bin" 80 | cp $bin ${INITRAM_DIR}/$bin 81 | resolve_libs $bin 82 | done 83 | 84 | for i in {1..10} 85 | do 86 | for lib in ${!LIBS[@]} 87 | do 88 | if [[ ${LIBS[${lib}]} == 0 ]] 89 | then 90 | echo "\tresolving $lib" 91 | cp -L $lib ${INITRAM_DIR}/$lib 92 | LIBS[${lib}]=1; 93 | resolve_libs $lib 94 | fi 95 | done 96 | done 97 | 98 | # add /dev/console 99 | mknod $INITRAM_DIR/dev/console c 5 1 2>/dev/null 100 | 101 | for bin in $EXTRA 102 | do 103 | [ -e $bin ] || continue 104 | mkdir -p $INITRAM_DIR/`dirname $bin` 105 | cp -L $bin $INITRAM_DIR/$bin 106 | done 107 | 108 | # populate plymouth if available 109 | if [ -x /usr/libexec/plymouth/plymouth-populate-initrd ] 110 | then 111 | /usr/libexec/plymouth/plymouth-populate-initrd -t $INITRAM_DIR 112 | fi 113 | 114 | # init 115 | cp /root/bin/init.tpl $INITRAM_DIR/init 116 | chmod +x $INITRAM_DIR/init 117 | 118 | cp /etc/zfs/*.cache $INITRAM_DIR/etc/ 119 | 120 | if [ $CREATE == 1 ] 121 | then 122 | # backup 123 | echo "backing up $INITRAMFS" 124 | mv $INITRAMFS $INITRAMFS.old 125 | 126 | # create 127 | echo "creating new $INITRAMFS" 128 | cd $INITRAM_DIR 129 | find . | cpio --quiet -o -H newc | xz $XZ_OPTS > $INITRAMFS 130 | cd 131 | rm -r $INITRAM_DIR 132 | fi 133 | -------------------------------------------------------------------------------- /remote_backup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ################################################################################ 4 | # example usage: 5 | # 6 | # REMOTE_IP="1.2.3.4" 7 | # PORT=8022 8 | # 9 | # . /path/to/remote_backup.sh 10 | # 11 | # SNAP_NAME="backup-done" 12 | # REMOTE_DATASET="bpool/BACKUP/home" 13 | # LOCAL_DATASET="rpool/HOME" 14 | # sync_dataset 15 | # 16 | # REMOTE_DATASET="bpool/BACKUP/machine_name" 17 | # LOCAL_DATASET="rpool/SYSTEM/root" 18 | # PREFIX="update-" 19 | # sync_dataset_extern 20 | ################################################################################ 21 | 22 | ZFS="/sbin/zfs" 23 | BEADM="/root/bin/beadm" 24 | 25 | if [ -z $PORT ] 26 | then 27 | SSH="/usr/bin/ssh" 28 | else 29 | SSH="/usr/bin/ssh -p $PORT" 30 | fi 31 | 32 | TIMEOUT="120" 33 | REMOTE_HOST="root@$REMOTE_IP" 34 | ZFSR="$SSH $REMOTE_HOST $ZFS" 35 | SNAP_NAME="backup-done" 36 | 37 | check_host() { 38 | ping -c1 $REMOTE_IP >/dev/null || exit 1 39 | } 40 | 41 | sync_dataset() { 42 | check_host 43 | 44 | LAST_BACKUP="$LOCAL_DATASET@$SNAP_NAME" 45 | NEW_BACKUP_SNAP="backup-`date +%Y%m%d_%H%M`" 46 | NEW_BACKUP="$LOCAL_DATASET@$NEW_BACKUP_SNAP" 47 | 48 | # check if exists last backup 49 | $ZFS get all $LAST_BACKUP >/dev/null 2>&1 50 | if [ $? -eq 0 ] 51 | then 52 | SEND_PARAM="-i $LAST_BACKUP $NEW_BACKUP" 53 | else 54 | SEND_PARAM="$NEW_BACKUP" 55 | fi 56 | 57 | # create new snapshot 58 | $ZFS snapshot $NEW_BACKUP || exit 1 59 | 60 | # send new snapshot 61 | $ZFS send $SEND_PARAM | $ZFSR receive -Feuv $REMOTE_DATASET 62 | 63 | # check if done 64 | $ZFSR list -t snapshot | grep $NEW_BACKUP_SNAP >/dev/null 2>&1 65 | if [ $? -eq 0 ] 66 | then 67 | $ZFS destroy $LAST_BACKUP 68 | $ZFS rename $NEW_BACKUP $LAST_BACKUP 69 | else 70 | $ZFS destroy $NEW_BACKUP 71 | fi 72 | } 73 | 74 | 75 | # sync dataset with existing snapshots 76 | # 77 | # variables: 78 | # LOCAL_DATASET 79 | # REMOTE_DATASET 80 | # PREFIX 81 | sync_dataset_extern() { 82 | [ -z ${LOCAL_DATASET} ] && exit 1 83 | [ -z ${REMOTE_DATASET} ] && exit 1 84 | [ -z ${PREFIX} ] && exit 1 85 | 86 | check_host 87 | 88 | NEW_SNAPSHOT=`${ZFS} list -o name -t snapshot ${LOCAL_DATASET} | grep "${PREFIX}" | tail -1 | cut -d@ -f2` 89 | LOCAL_DATASET_NOPOOL=`echo ${LOCAL_DATASET} | cut -d/ -f2-` 90 | 91 | # check for initail snapshot 92 | ${ZFSR} list ${REMOTE_DATASET}/${LOCAL_DATASET_NOPOOL} >/dev/null 2>&1 93 | if [ $? -eq 0 ] 94 | then 95 | OLD_SNAPSHOT=`${ZFSR} list -o name -t snapshot ${REMOTE_DATASET}/${LOCAL_DATASET_NOPOOL} | grep "${PREFIX}" | tail -1 | cut -d@ -f2` 96 | SEND_PARAM="-i ${LOCAL_DATASET}@${OLD_SNAPSHOT} ${LOCAL_DATASET}@${NEW_SNAPSHOT}" 97 | [ ${OLD_SNAPSHOT} = ${NEW_SNAPSHOT} ] && return 98 | else 99 | SEND_PARAM="${LOCAL_DATASET}@${NEW_SNAPSHOT}" 100 | fi 101 | 102 | # hold the local snapshot 103 | ${ZFS} hold backup ${LOCAL_DATASET}@${NEW_SNAPSHOT} 104 | 105 | # send the new snapshot 106 | ${ZFS} send -hw ${SEND_PARAM} | ${ZFSR} receive -Fduv ${REMOTE_DATASET} 107 | 108 | # check if done 109 | ${ZFSR} list -t snapshot ${REMOTE_DATASET}/${LOCAL_DATASET_NOPOOL}@${NEW_SNAPSHOT} >/dev/null 2>&1 110 | if [ $? -eq 0 ] 111 | then 112 | if [ ! -z ${OLD_SNAPSHOT} ] 113 | then 114 | ${ZFS} release backup ${LOCAL_DATASET}@${OLD_SNAPSHOT} 115 | ${ZFSR} release backup ${REMOTE_DATASET}/${LOCAL_DATASET_NOPOOL}@${OLD_SNAPSHOT} 116 | fi 117 | else 118 | ${ZFS} release backup ${LOCAL_DATASET}@${NEW_SNAPSHOT} 119 | fi 120 | } 121 | -------------------------------------------------------------------------------- /whatsnew: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | MIRROR="http://ftp.fi.muni.cz/pub/linux/gentoo" 4 | URL="$MIRROR/snapshots/squashfs/gentoo-current.xz.sqfs" 5 | SQFS_PATH="/var/lib/portage/gentoo.xz.sqfs" 6 | 7 | [[ $1 == "-n" ]] && ONLY_MOUNT=1 8 | 9 | beadm create root-tmp 10 | BEDIR=`beadm mount root-tmp` 11 | wget $URL -O $BEDIR/$SQFS_PATH 12 | if [[ -z $ONLY_MOUNT ]] 13 | then 14 | beadm chroot root-tmp "eix-sync -uq ; EIX_LIMIT_COMPACT=0 eix -uc" 15 | beadm umount root-tmp 16 | beadm destroy -F root-tmp 17 | fi 18 | --------------------------------------------------------------------------------