包含标签 debian articles

通过debootstrap在btrfs raid1上安装debian

最近想试试将 debian 安装在 btrfs raid1 上.
用安装盘安装, 直接安装在 btrfs raid1上, 会在安装 grub 的时候出错.
使用单盘 btrfs 安装完后, 再加另一个盘组 raid1 倒是可以.
就是以后如果重装, 又要的拆成单盘再重装, 很麻烦.
试了下 debootstrap 安装debian, 直接就能安装在 btrfs raid1 上, 记录下安装过程.

初始化live cd 环境

启动 debian live cd
sudo su -
sed 's/deb.debian.org/mirrors.huaweicloud.com/' /etc/apt/sources.list -i
apt update
# 装openssh-server 后可以通过别的电脑连接这台跑安装, 方便复制粘贴.
# 用户名: user 密码: live
apt install -y debootstrap openssh-server

硬盘分区 建立 btrfs raid1

#新建分区表
sgdisk /dev/sda -o
#第一个分区留给bios引导用, 使用bios+gpt方式, 设置legacy_boot flag
#如果使用uefi+gpt方式, 第一个分区留512M, 分区type code用ef00
#第二个分区swap
#第三个分区btrfs

#bios
sgdisk /dev/sda -n 0:2048:+1M -t 0:ef02 -A 1:set:2
#uefi
sgdisk /dev/sda -n 0:2048:+512M -t 0:ef00
mkfs.fat -F 32 /dev/sda1

sgdisk /dev/sda -n 0:0:+8G -t 0:8200
sgdisk /dev/sda -n 0:0:0 -t 0:8300

#swap
mkswap /dev/sda2

#复制分区表
sgdisk -R /dev/sdb /dev/sda

#让分区UUID一样
dd if=/dev/sda1 of=/dev/sdb1
dd if=/dev/sda2 of=/dev/sdb2

btrfs raid1, subvolume

#建立 raid 1, 挂载到 /mnt
mkfs.btrfs -f -m raid1 -d raid1 /dev/sda3 /dev/sdb3
mount -t btrfs /dev/sda3 /mnt

#新建subvolume, 2个 subvolume 给 / 和 /home 用
btrfs sub create /mnt/@
btrfs sub create /mnt/@home

#挂载 @ 用于安装系统
umount /mnt
mount -t btrfs -o subvol=@ /dev/sda3 /mnt

debootstrap 安装基本系统

debootstrap --arch amd64 buster /mnt https://mirrors.huaweicloud.com/debian

chroot

mount -t proc /proc /mnt/proc/
mount -t sysfs /sys /mnt/sys/
mount -t devpts /dev/pts /mnt/dev/pts
mount -o bind /dev /mnt/dev/
chroot /mnt /bin/bash

fstab

UUID 可以通过 blkid 查看.

vi /etc/fstab

UUID=xxxx /      btrfs defaults,subvol=@       0 0
UUID=xxxx /home  btrfs defaults,subvol=@home   0 0
UUID=xxxx /rpool btrfs defaults,subvol=/       0 0
UUID=xxxx none   swap  rw                      0 0

配置 apt sources

vi /etc/apt/sources.list

deb https://mirrors.huaweicloud.com/debian/ buster main contrib non-free
deb https://mirrors.huaweicloud.com/debian/ buster-updates main contrib non-free
deb https://mirrors.huaweicloud.com/debian-security/ buster/updates main contrib non-free
deb https://mirrors.huaweicloud.com/debian/ buster-backports main contrib non-free

apt update

系统配置

apt install -y locales
dpkg-reconfigure locales tzdata

apt install -y fonts-wqy-microhei btrfs-progs openssh-server sudo

#新建用户
useradd -m -G sudo user
#修改密码
passwd user

#安装kernel, 驱动
apt install -y linux-image-amd64 firmware-linux

#网卡驱动
#firmware-realtek

#network
vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

vi /etc/resolv.conf
nameserver 114.114.114.114

#安装标准工具
tasksel install standard

GRUB

#bios
apt install -y grub2
update-grub
grub-install /dev/sda
grub-install /dev/sdb

#uefi
apt install -y grub-efi
update-grub
mkdir /boot/efi
mount -t vfat /dev/sda1 /boot/efi
grub-install --efi-dir=/boot/efi
dd if=/dev/sda1 of=/dev/sdb1

#rootflags 加上 degraded, 在丢盘的时候也能正常开机
vi /etc/grub.d/10_linux
rootflags=degraded,subvol=...

#grub 安装失败问题:
# grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet..
# grub-install: error: filesystem `btrfs' does not support blocklists.
用 wipefs -o 0x10040 /dev/sdx 命令来擦掉 BTRFS superblock
……

Continue reading

Debian 9 修改GRUB默认启动内核

debian testing 更新掉进systemd-240的坑里了
重启开机Missing modules (cat /proc/modules; ls /dev), 找不到硬盘.
只能降到systemd-239或者降内核.
想想还是降内核方便, 记录下修改步骤.

1. 查看当前内核的启动顺序

$ cat /boot/grub/grub.cfg

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default=0
fi

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
	set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
	load_video
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
	else
	  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
	fi
	echo	'Loading Linux 4.19.0-1-amd64 ...'
	linux	/boot/vmlinuz-4.19.0-1-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro  quiet
	echo	'Loading initial ramdisk ...'
	initrd	/boot/initrd.img-4.19.0-1-amd64
}
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
	menuentry 'Debian GNU/Linux, with Linux 4.19.0-1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-1-amd64-advanced-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
		else
		  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
		fi
		echo	'Loading Linux 4.19.0-1-amd64 ...'
		linux	/boot/vmlinuz-4.19.0-1-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro  quiet
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.19.0-1-amd64
	}
	menuentry 'Debian GNU/Linux, with Linux 4.19.0-1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-1-amd64-recovery-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
		else
		  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
		fi
		echo	'Loading Linux 4.19.0-1-amd64 ...'
		linux	/boot/vmlinuz-4.19.0-1-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro single 
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.19.0-1-amd64
	}
	menuentry 'Debian GNU/Linux, with Linux 4.18.0-3-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-3-amd64-advanced-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
		else
		  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
		fi
		echo	'Loading Linux 4.18.0-3-amd64 ...'
		linux	/boot/vmlinuz-4.18.0-3-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro  quiet
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.18.0-3-amd64
	}
	menuentry 'Debian GNU/Linux, with Linux 4.18.0-3-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-3-amd64-recovery-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
		else
		  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
		fi
		echo	'Loading Linux 4.18.0-3-amd64 ...'
		linux	/boot/vmlinuz-4.18.0-3-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro single 
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.18.0-3-amd64
	}
}

2. 修改grub文件

假设要修改为4.18.0-3内核启动, 修改文件文件/etc/default/grub

……

Continue reading

Debian 增加 add-apt-repository 命令用来添加 PPA 源

更新:
使用software-properties-common 代替脚本

sudo apt install -y apt-transport-https ca-certificates gnupg2 software-properties-common

==============================================================================

#!/bin/bash

if [ "$#" -ge "1" ]; then
    ppa_name=`echo "$1" | awk -F ':' '{print $2}'`
    app_name=`echo "$ppa_name" | cut -d '/' -f2-`

    if [ -z "$ppa_name" ]; then
        echo "PPA name not found"
        echo "Utility to add PPA repositories in your debian machine"
        echo "$0 ppa:user/ppa-name"
    else
        echo "$ppa_name" " $app_name"
        if [ "$2" != "" ]; then
            version=$2
        else
            version="xenial"
        fi  
        echo "deb http://ppa.launchpad.net/$ppa_name/ubuntu $version main" > /etc/apt/sources.list.d/$app_name.list
        apt-get update > /dev/null 2> /tmp/apt_add_key.txt    
        key=`cat /tmp/apt_add_key.txt | awk -F ":" '{print $6}'  | awk '{print $2}'`
        apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv $key
        rm -rf /tmp/apt_add_key.txt
    fi  
else
    echo "Utility to add PPA repositories in your debian machine"
    echo "$0 ppa:user/ppa-name"
fi

保存这个脚本到/usr/bin目录下,名称为add-apt-repository,然后执行下列命令即可:

……

Continue reading