mirror of https://github.com/marcosfad/mbp-ubuntu
commit
20bc664690
13 changed files with 735 additions and 0 deletions
@ -0,0 +1 @@ |
||||
build_files |
@ -0,0 +1,47 @@ |
||||
--- |
||||
language: bash |
||||
|
||||
os: |
||||
- linux |
||||
|
||||
services: |
||||
- docker |
||||
|
||||
branches: |
||||
only: |
||||
- master |
||||
|
||||
stages: |
||||
- test |
||||
- build_deploy |
||||
|
||||
jobs: |
||||
include: |
||||
- stage: test |
||||
name: "YamlLint" |
||||
script: | |
||||
docker run --rm -v $(pwd):/repo -it alpine:latest /bin/sh -c ' |
||||
cd /repo |
||||
apk add --no-cache python3 |
||||
pip3 install yamllint |
||||
yamllint . |
||||
' |
||||
- stage: test |
||||
name: "ShellCheck" |
||||
script: | |
||||
docker run --rm -v $(pwd):/repo -it alpine:latest /bin/sh -c ' |
||||
cd /repo |
||||
apk add --no-cache shellcheck bash |
||||
shellcheck ./*.sh |
||||
' |
||||
- stage: build_deploy |
||||
name: "Build Ubuntu and Deploy to GitHub Releases" |
||||
script: ./build_in_docker.sh |
||||
deploy: |
||||
provider: releases |
||||
api_key: "$GITHUB_TOKEN" |
||||
file_glob: true |
||||
file: "/build_files/output_zip/*" |
||||
skip_cleanup: true |
||||
on: |
||||
tags: true |
@ -0,0 +1,107 @@ |
||||
# mbp-ubuntu |
||||
|
||||
[](https://travis-ci.com/marcosfad/mbp-ubuntu) |
||||
|
||||
UBUNTU 20.04 ISO with Apple T2 patches built-in (Macbooks produced >= 2018). |
||||
|
||||
All available Apple T2 drivers are integrated with this iso. Most things work, besides those mentioned in [not working section](#not-working). |
||||
|
||||
Kernel - <https://github.com/marcosfad/mbp-ubuntu-kernel> |
||||
|
||||
Drivers: |
||||
|
||||
- Apple T2 (audio, keyboard, touchpad) - <https://github.com/MCMrARM/mbp2018-bridge-drv> |
||||
- Apple SMC - <https://github.com/MCMrARM/mbp2018-etc> |
||||
- Touchbar - <https://github.com/roadrunner2/macbook12-spi-driver/tree/mbp15> |
||||
|
||||
> Tested on: Macbook Pro 16,1 16" 2019 i9 TouchBar |
||||
|
||||
``` |
||||
Boot ROM Version: 220.270.99.0.0 (iBridge: 16.16.6571.0.0,0) |
||||
macOS Mojave: 10.14.6 (18G103) |
||||
``` |
||||
|
||||
## How to install |
||||
|
||||
- Turn off secure boot - <https://support.apple.com/en-us/HT208330> |
||||
- Download .iso from releases section - <https://github.com/marcosfad/mbp-ubuntu/releases/latest> |
||||
- If it's splitted into multiple zip parts, you need to join splitted files into one and then extract it via `unzip` or extract them directly via `7z x` or `7za x` |
||||
- <https://unix.stackexchange.com/questions/40480/how-to-unzip-a-multipart-spanned-zip-on-linux> |
||||
- Burn the image on USB stick >=8GB via: |
||||
- dd - `dd bs=4M if=/home/user/Downloads/ubuntu-20.04-beta-minimal-mbp.iso of=/dev/sdc conv=fdatasync status=progress` |
||||
- rufus (GPT)- <https://rufus.ie/> |
||||
- balenaEtcher- <https://www.balena.io/etcher/> |
||||
- don't use `livecd-iso-to-disk`, because it's overwriting grub settings |
||||
- Install Ubuntu |
||||
- Boot directly from macOS boot manager. (You can boot into it by pressing and holding option key after clicking the power-on button). |
||||
- There will be three boot options available, usually the third one works for me. (There are three of them, because there are three partitions in ISO: 1) ISO9660: with installer data, 2) fat32, 3) hfs+) |
||||
- I recommend to shrink (resize) macOS APFS partition and not removing macOS installation entirely from your MacBook, because it's the only way to keep your device up-to-date. macOS OS updates also contains security patches to EFI/Apple T2 |
||||
- HowTo: <https://www.anyrecover.com/hard-drive-recovery-data/resize-partition-mac/> # Steps to Resize Mac Partition |
||||
- You should use standard partition layout during partitioning your Disk in anaconda, because i haven't tested LVM scenario yet. <https://github.com/marcosfad/mbp-ubuntu/issues/2> |
||||
- /boot/efi - 1024MB fat32 |
||||
- /boot - 1024MB EXT4 |
||||
- / - xxxGB EXT4 |
||||
|
||||
- Put wifi firmware files to `/lib/firmware/brcm/` |
||||
- tutorial - <https://github.com/mikeeq/mbp-fedora-kernel/#working-with-mbp-fedora-kernel> |
||||
- You can change mappings of ctrl, fn, option keys (PC keyboard mappings) by creating `/etc/modprobe.d/hid_apple.conf` file and recreating grub config. All available modifications could be found here: <https://github.com/free5lot/hid-apple-patched> |
||||
``` |
||||
# /etc/modprobe.d/hid_apple.conf |
||||
options hid_apple swap_fn_leftctrl=1 |
||||
options hid_apple swap_opt_cmd=1 |
||||
|
||||
grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg |
||||
``` |
||||
|
||||
## Not working |
||||
|
||||
- Dynamic audio input/output change (on connecting/disconnecting headphones jack) |
||||
- TouchID - (@MCMrARM is working on it - https://github.com/Dunedan/mbp-2016-linux/issues/71#issuecomment-528545490) |
||||
- Thunderbolt (is disabled, because driver was causing kernel panics (not tested with 5.5 kernel)) |
||||
- Microphone (it's recognised with new apple t2 sound driver, but there is a low mic volume amp) |
||||
|
||||
## TODO |
||||
|
||||
|
||||
## Known issues |
||||
|
||||
- Kernel/Mac related issues are mentioned in kernel repo |
||||
|
||||
- Macbooks with Apple T2 can't boot EFI binaries from HFS+ formatted ESP - only FAT32 (FAT32 have to be labelled as msftdata). |
||||
|
||||
- `ctrl+x` is not working in GRUB, so if you are trying to change kernel parameters - start your OS by clicking `ctrl+shift+f10` on external keyboard |
||||
|
||||
## Docs |
||||
|
||||
- Discord: <https://discord.gg/Uw56rqW> |
||||
- WiFi firmware: <https://packages.aunali1.com/apple/wifi-fw/18G2022> |
||||
- Linux on a MBP Late 2016: <https://gist.github.com/gbrow004/096f845c8fe8d03ef9009fbb87b781a4> |
||||
|
||||
### Ubuntu |
||||
|
||||
- <https://help.ubuntu.com/community/LiveCDCustomization> |
||||
- <https://itnext.io/how-to-create-a-custom-ubuntu-live-from-scratch-dd3b3f213f81> |
||||
|
||||
### Github |
||||
|
||||
- GitHub issue (RE history): <https://github.com/Dunedan/mbp-2016-linux/issues/71> |
||||
- VHCI+Sound driver (Apple T2): <https://github.com/MCMrARM/mbp2018-bridge-drv/> |
||||
- hid-apple keyboard backlight patch: <https://github.com/MCMrARM/mbp2018-etc> |
||||
- alsa/pulseaudio config files: <https://gist.github.com/MCMrARM/c357291e4e5c18894bea10665dcebffb> |
||||
- TouchBar driver: <https://github.com/roadrunner2/macbook12-spi-driver/tree/mbp15> |
||||
- Kernel patches (all are mentioned in github issue above): <https://github.com/aunali1/linux-mbp-arch> |
||||
- ArchLinux kernel patches: <https://github.com/ppaulweber/linux-mba> |
||||
- ArchLinux installation guide: <https://gist.github.com/TRPB/437f663b545d23cc8a2073253c774be3> |
||||
- hid-apple-patched module for changing mappings of ctrl, fn, option keys: <https://github.com/free5lot/hid-apple-patched> |
||||
- Audio configuration: <https://gist.github.com/kevineinarsson/8e5e92664f97508277fefef1b8015fba> |
||||
|
||||
## Credits |
||||
|
||||
- @mikeeq - thanks for the amazing work in mbp-fedora |
||||
- @MCMrARM - thanks for all RE work |
||||
- @ozbenh - thanks for submitting NVME patch |
||||
- @roadrunner2 - thanks for SPI (touchbar) driver |
||||
- @aunali1 - thanks for ArchLinux Kernel CI |
||||
- @ppaulweber - thanks for keyboard and Macbook Air patches |
||||
- @kevineinarsson - thanks for the audio settings |
||||
- @roadrunner2 - thanks for the overview |
@ -0,0 +1,176 @@ |
||||
#!/bin/bash |
||||
|
||||
# https://itnext.io/how-to-create-a-custom-ubuntu-live-from-scratch-dd3b3f213f81 |
||||
|
||||
set -eu -o pipefail |
||||
|
||||
ROOT_PATH=$(pwd) |
||||
WORKING_PATH=$(pwd)/build_files |
||||
|
||||
echo >&2 "===]> Info: Build dependencies... "; |
||||
export DEBIAN_FRONTEND=noninteractive |
||||
|
||||
apt-get install -y -qq -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \ |
||||
binutils \ |
||||
debootstrap \ |
||||
squashfs-tools \ |
||||
xorriso \ |
||||
grub-pc-bin \ |
||||
grub-efi-amd64-bin \ |
||||
mtools |
||||
|
||||
if [ -d "$WORKING_PATH" ]; then |
||||
rm -rf "$WORKING_PATH" |
||||
fi |
||||
mkdir -p "$WORKING_PATH" |
||||
|
||||
echo >&2 "===]> Info: Checkout bootstrap... "; |
||||
debootstrap \ |
||||
--arch=amd64 \ |
||||
--variant=minbase \ |
||||
focal \ |
||||
"$WORKING_PATH/chroot" \ |
||||
http://de.archive.ubuntu.com/ubuntu/ |
||||
|
||||
|
||||
echo >&2 "===]> Info: Creating chroot environment... "; |
||||
mount --bind /dev "$WORKING_PATH/chroot/dev" |
||||
mount --bind /run "$WORKING_PATH/chroot/run" |
||||
|
||||
cp "$ROOT_PATH/files/chroot_build.sh" "$WORKING_PATH/chroot/chroot_build.sh" |
||||
chroot "$WORKING_PATH/chroot" ./chroot_build.sh |
||||
|
||||
|
||||
echo >&2 "===]> Info: Cleanup the chroot environment... "; |
||||
umount "$WORKING_PATH/chroot/dev" |
||||
umount "$WORKING_PATH/chroot/run" |
||||
|
||||
|
||||
echo >&2 "===]> Info: Create image directory and populate it... "; |
||||
cd "$WORKING_PATH" |
||||
if [ -d "$WORKING_PATH/image" ]; then |
||||
rm -rf "$WORKING_PATH/image" |
||||
fi |
||||
if [ -e "$WORKING_PATH/ubuntu-for-mbp.iso" ]; then |
||||
rm -f "$WORKING_PATH/ubuntu-for-mbp.iso" |
||||
fi |
||||
mkdir -p image/{casper,isolinux,install} |
||||
cp chroot/boot/vmlinuz-**-**-generic image/casper/vmlinuz |
||||
cp chroot/boot/initrd.img-**-**-generic image/casper/initrd |
||||
|
||||
cp -r "$ROOT_PATH/files/preseed" image/ |
||||
|
||||
|
||||
echo >&2 "===]> Info: Create manifest... "; |
||||
cd "$WORKING_PATH" |
||||
# shellcheck disable=SC2016 |
||||
chroot chroot dpkg-query -W --showformat='${Package} ${Version}\n' | tee image/casper/filesystem.manifest |
||||
|
||||
cp -v image/casper/filesystem.manifest image/casper/filesystem.manifest-desktop |
||||
sed -i '/ubiquity/d' image/casper/filesystem.manifest-desktop |
||||
sed -i '/casper/d' image/casper/filesystem.manifest-desktop |
||||
sed -i '/discover/d' image/casper/filesystem.manifest-desktop |
||||
sed -i '/laptop-detect/d' image/casper/filesystem.manifest-desktop |
||||
sed -i '/os-prober/d' image/casper/filesystem.manifest-desktop |
||||
|
||||
|
||||
### Workaround - travis_wait |
||||
while true |
||||
do |
||||
date |
||||
sleep 30 |
||||
done & |
||||
bgPID=$! |
||||
|
||||
echo >&2 "===]> Info: Compress the chroot... "; |
||||
cd "$WORKING_PATH" |
||||
mksquashfs chroot image/casper/filesystem.squashfs |
||||
printf "%s" "$(du -sx --block-size=1 chroot | cut -f1)" > image/casper/filesystem.size |
||||
|
||||
|
||||
echo >&2 "===]> Info: Create diskdefines... "; |
||||
cat <<EOF > image/README.diskdefines |
||||
#define DISKNAME Ubuntu 20.04 LTS "Focal Fossa" - MacBook Pro Beta amd64 |
||||
#define TYPE binary |
||||
#define TYPEbinary 1 |
||||
#define ARCH amd64 |
||||
#define ARCHamd64 1 |
||||
#define DISKNUM 1 |
||||
#define DISKNUM1 1 |
||||
#define TOTALNUM 0 |
||||
#define TOTALNUM0 1 |
||||
EOF |
||||
|
||||
|
||||
echo >&2 "===]> Info: Grub configuration... "; |
||||
touch image/ubuntu |
||||
cp "$ROOT_PATH/files/grub/grub.cfg" image/isolinux/grub.cfg |
||||
cp -r "$ROOT_PATH/files/preseed" image/pressed |
||||
|
||||
echo >&2 "===]> Info: Create ISO Image for a LiveCD... "; |
||||
cd "$WORKING_PATH/image" |
||||
|
||||
grub-mkstandalone \ |
||||
--format=x86_64-efi \ |
||||
--output=isolinux/bootx64.efi \ |
||||
--locales="" \ |
||||
--fonts="" \ |
||||
"boot/grub/grub.cfg=isolinux/grub.cfg" |
||||
|
||||
( |
||||
cd isolinux && \ |
||||
dd if=/dev/zero of=efiboot.img bs=1M count=10 && \ |
||||
sudo mkfs.vfat efiboot.img && \ |
||||
LC_CTYPE=C mmd -i efiboot.img efi efi/boot && \ |
||||
LC_CTYPE=C mcopy -i efiboot.img ./bootx64.efi ::efi/boot/ |
||||
) |
||||
|
||||
grub-mkstandalone \ |
||||
--format=i386-pc \ |
||||
--output=isolinux/core.img \ |
||||
--install-modules="linux16 linux normal iso9660 biosdisk memdisk search tar ls" \ |
||||
--modules="linux16 linux normal iso9660 biosdisk search" \ |
||||
--locales="" \ |
||||
--fonts="" \ |
||||
"boot/grub/grub.cfg=isolinux/grub.cfg" |
||||
|
||||
cat /usr/lib/grub/i386-pc/cdboot.img isolinux/core.img > isolinux/bios.img |
||||
|
||||
(find . -type f -print0 | xargs -0 md5sum | grep -v "\./md5sum.txt" > md5sum.txt) |
||||
|
||||
xorriso \ |
||||
-as mkisofs \ |
||||
-iso-level 3 \ |
||||
-full-iso9660-filenames \ |
||||
-volid "Ubuntu 20.04 beta minimal MacBook Pro" \ |
||||
-eltorito-boot boot/grub/bios.img \ |
||||
-no-emul-boot \ |
||||
-boot-load-size 4 \ |
||||
-boot-info-table \ |
||||
--eltorito-catalog boot/grub/boot.cat \ |
||||
--grub2-boot-info \ |
||||
--grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img \ |
||||
-eltorito-alt-boot \ |
||||
-e EFI/efiboot.img \ |
||||
-no-emul-boot \ |
||||
-append_partition 2 0xef isolinux/efiboot.img \ |
||||
-output "../ubuntu-20.04-beta-minimal-mbp.iso" \ |
||||
-graft-points \ |
||||
"." \ |
||||
/boot/grub/bios.img=isolinux/bios.img \ |
||||
/EFI/efiboot.img=isolinux/efiboot.img |
||||
livecd_exitcode=$? |
||||
|
||||
### Zip iso and split it into multiple parts - github max size of release attachment is 2GB, where ISO is sometimes bigger than that |
||||
cd "$WORKING_PATH" |
||||
mkdir -p ./output_zip |
||||
zip -s 1500m ./output_zip/livecd.zip ./*.iso |
||||
|
||||
### Calculate sha256 sums of built ISO |
||||
sha256sum ./*.iso > ./output_zip/sha256 |
||||
|
||||
find ./ | grep ".iso" |
||||
find ./ | grep ".zip" |
||||
kill "$bgPID" |
||||
|
||||
exit "$livecd_exitcode" |
@ -0,0 +1,14 @@ |
||||
#!/bin/bash |
||||
|
||||
set -eu -o pipefail |
||||
|
||||
DOCKER_IMAGE=ubuntu:20.04 |
||||
|
||||
docker pull ${DOCKER_IMAGE} |
||||
docker run \ |
||||
--privileged \ |
||||
--rm \ |
||||
-t \ |
||||
-v "$(pwd)":/repo \ |
||||
${DOCKER_IMAGE} \ |
||||
/bin/bash -c 'cd /repo && ./build.sh' |
@ -0,0 +1,7 @@ |
||||
SUBSYSTEM!="sound", GOTO="pulseaudio_end" |
||||
ACTION!="change", GOTO="pulseaudio_end" |
||||
KERNEL!="card*", GOTO="pulseaudio_end" |
||||
|
||||
SUBSYSTEMS=="pci", ATTRS{vendor}=="0x106b", ATTRS{device}=="0x1803", ENV{PULSE_PROFILE_SET}="apple-t2.conf" |
||||
|
||||
LABEL="pulseaudio_end" |
@ -0,0 +1,103 @@ |
||||
<confdir:pcm/front.conf> |
||||
|
||||
AppleT2.pcm.default { |
||||
@args [ CARD ] |
||||
@args.CARD { |
||||
type string |
||||
} |
||||
type asym |
||||
playback.pcm { |
||||
type plug |
||||
ttable { |
||||
0.0= 1 |
||||
1.3= 1 |
||||
2.1= 1 |
||||
3.4= 1 |
||||
4.0= 1 |
||||
5.5= 1 |
||||
} |
||||
slave { |
||||
pcm { |
||||
type hw |
||||
card $CARD |
||||
device 0 |
||||
} |
||||
channels 6 |
||||
} |
||||
} |
||||
capture.pcm { |
||||
type plug |
||||
slave.pcm { |
||||
type hw |
||||
card $CARD |
||||
device 1 |
||||
} |
||||
} |
||||
hint.device_output 0 |
||||
hint.device_input 1 |
||||
} |
||||
|
||||
AppleT2.pcm.front.0 { |
||||
@args [ CARD ] |
||||
@args.CARD { |
||||
type string |
||||
} |
||||
type asym |
||||
playback.pcm { |
||||
type plug |
||||
ttable { |
||||
0.0= 1 |
||||
1.3= 1 |
||||
2.1= 1 |
||||
3.4= 1 |
||||
4.0= 1 |
||||
5.5= 1 |
||||
} |
||||
slave { |
||||
pcm { |
||||
type hw |
||||
card $CARD |
||||
device 0 |
||||
} |
||||
channels 6 |
||||
} |
||||
} |
||||
capture.pcm { |
||||
type plug |
||||
slave.pcm { |
||||
type hw |
||||
card $CARD |
||||
device 1 |
||||
} |
||||
} |
||||
hint.device_output 0 |
||||
hint.device_input 1 |
||||
} |
||||
AppleT2.pcm.front.1 { |
||||
@args [ CARD ] |
||||
@args.CARD { |
||||
type string |
||||
} |
||||
type asym |
||||
playback.pcm { |
||||
type hw |
||||
card $CARD |
||||
device 2 |
||||
} |
||||
capture.pcm { |
||||
type hw |
||||
card $CARD |
||||
device 3 |
||||
} |
||||
hint.device_output 2 |
||||
hint.device_input 3 |
||||
} |
||||
AppleT2.pcm.front.2 { |
||||
@args [ CARD ] |
||||
@args.CARD { |
||||
type string |
||||
} |
||||
type hw |
||||
card $CARD |
||||
device 4 |
||||
} |
@ -0,0 +1,55 @@ |
||||
[General] |
||||
auto-profiles = no |
||||
|
||||
[Mapping builtin-speaker] |
||||
description = Built-in Speaker |
||||
device-strings = front:%f |
||||
paths-output = builtin-speaker-output |
||||
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe |
||||
priority = 100 |
||||
direction = output |
||||
|
||||
[Mapping builtin-mic] |
||||
description = Built-in Mic |
||||
device-strings = front:%f |
||||
paths-output = builtin-mic-input |
||||
channel-map = left,center,right |
||||
priority = 100 |
||||
direction = input |
||||
|
||||
[Mapping codec-output] |
||||
description = Headphone |
||||
device-strings = front:%f,1 |
||||
paths-output = codec-output |
||||
channel-map = left,right |
||||
priority = 100 |
||||
direction = output |
||||
|
||||
[Mapping codec-input] |
||||
description = Headphone Mic |
||||
device-strings = front:%f,1 |
||||
paths-output = codec-input |
||||
channel-map = mono |
||||
priority = 100 |
||||
direction = input |
||||
|
||||
[Profile output:builtin-speaker+input:builtin-mic] |
||||
description = Built-in Speaker + Built-in Mic |
||||
output-mappings = builtin-speaker |
||||
input-mappings = builtin-mic |
||||
skip-probe = yes |
||||
|
||||
[Profile output:codec-output+input:builtin-mic] |
||||
description = Headphones + Built-in Mic |
||||
output-mappings = codec-output |
||||
input-mappings = builtin-mic |
||||
|
||||
[Profile output:codec-output+input:codec-input] |
||||
description = Headphones + External Mic |
||||
output-mappings = codec-output |
||||
input-mappings = codec-input |
||||
|
||||
[Profile output:builtin-speaker+input:codec-input] |
||||
description = Built-in Speaker + External Mic |
||||
output-mappings = builtin-speaker |
||||
input-mappings = codec-input |
@ -0,0 +1,145 @@ |
||||
#!/bin/bash |
||||
|
||||
set -eu -o pipefail |
||||
|
||||
|
||||
echo >&2 "===]> Info: Configure environment... "; |
||||
|
||||
mount none -t proc /proc |
||||
mount none -t sysfs /sys |
||||
mount none -t devpts /dev/pts |
||||
export HOME=/root |
||||
export LC_ALL=C |
||||
|
||||
echo "ubuntu-fs-live" > /etc/hostname |
||||
|
||||
|
||||
echo >&2 "===]> Info: Configure and update apt... "; |
||||
|
||||
cat <<EOF > /etc/apt/sources.list |
||||
deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse |
||||
deb-src http://us.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse |
||||
deb http://us.archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse |
||||
deb-src http://us.archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse |
||||
deb http://us.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse |
||||
deb-src http://us.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse |
||||
EOF |
||||
|
||||
# echo "deb https://mbp-ubuntu-kernel.herokuapp.com/ /" > /etc/apt/sources.list.d/mbp-ubuntu-kernel.list |
||||
# wget -q -O - https://mbp-ubuntu-kernel.herokuapp.com/KEY.gpg | apt-key add - |
||||
|
||||
apt-get update |
||||
|
||||
|
||||
echo >&2 "===]> Info: Install systemd... "; |
||||
|
||||
apt-get install -y systemd-sysv |
||||
|
||||
|
||||
echo >&2 "===]> Info: Configure machine-id and divert... "; |
||||
|
||||
dbus-uuidgen > /etc/machine-id |
||||
ln -fs /etc/machine-id /var/lib/dbus/machine-id |
||||
dpkg-divert --local --rename --add /sbin/initctl |
||||
ln -s /bin/true /sbin/initctl |
||||
|
||||
|
||||
echo >&2 "===]> Info: Install packages needed for Live System... "; |
||||
|
||||
export DEBIAN_FRONTEND=noninteractive |
||||
apt-get install -y -qq -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \ |
||||
ubuntu-standard \ |
||||
casper \ |
||||
lupin-casper \ |
||||
discover \ |
||||
laptop-detect \ |
||||
os-prober \ |
||||
network-manager \ |
||||
resolvconf \ |
||||
net-tools \ |
||||
wireless-tools \ |
||||
wpagui \ |
||||
locales \ |
||||
linux-generic |
||||
|
||||
|
||||
echo >&2 "===]> Info: Install Graphical installer... "; |
||||
|
||||
apt-get install -y -qq -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \ |
||||
ubiquity \ |
||||
ubiquity-casper \ |
||||
ubiquity-frontend-gtk \ |
||||
ubiquity-slideshow-ubuntu \ |
||||
ubiquity-ubuntu-artwork |
||||
|
||||
|
||||
echo >&2 "===]> Info: Install window manager... "; |
||||
|
||||
apt-get install -y -qq -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \ |
||||
plymouth-theme-ubuntu-logo \ |
||||
ubuntu-desktop-minimal \ |
||||
ubuntu-gnome-wallpapers |
||||
|
||||
|
||||
echo >&2 "===]> Info: Install useful applications... "; |
||||
|
||||
apt-get install -y -qq -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \ |
||||
git \ |
||||
curl \ |
||||
nano \ |
||||
gcc \ |
||||
expect \ |
||||
make |
||||
|
||||
|
||||
echo >&2 "===]> Info: Remove unused applications ... "; |
||||
|
||||
apt-get purge -y -qq \ |
||||
transmission-gtk \ |
||||
transmission-common \ |
||||
gnome-mahjongg \ |
||||
gnome-mines \ |
||||
gnome-sudoku \ |
||||
aisleriot \ |
||||
hitori |
||||
|
||||
apt-get autoremove -y |
||||
|
||||
|
||||
echo >&2 "===]> Info: Reconfigure environment ... "; |
||||
|
||||
locale-gen --purge en_US.UTF-8 en_US |
||||
echo -e 'LANG="C.UTF-8"\nLANGUAGE="C.UTF-8"\n' > /etc/default/locale |
||||
|
||||
dpkg-reconfigure -f readline resolvconf |
||||
|
||||
# /usr/bin/expect<<EOF |
||||
# spawn dpkg-reconfigure -f readline resolvconf |
||||
# expect "updates?" { send "Yes\r" } |
||||
# expect "dynamic files?" { send "Yes\r" } |
||||
# EOF |
||||
|
||||
cat <<EOF > /etc/NetworkManager/NetworkManager.conf |
||||
[main] |
||||
rc-manager=resolvconf |
||||
plugins=ifupdown,keyfile |
||||
dns=dnsmasq |
||||
[ifupdown] |
||||
managed=false |
||||
EOF |
||||
dpkg-reconfigure network-manager |
||||
|
||||
|
||||
echo >&2 "===]> Info: Cleanup the chroot environment... "; |
||||
|
||||
truncate -s 0 /etc/machine-id |
||||
rm /sbin/initctl |
||||
dpkg-divert --rename --remove /sbin/initctl |
||||
apt-get clean |
||||
rm -rf /tmp/* ~/.bash_history |
||||
|
||||
umount -lf /dev/pts |
||||
umount -lf /sys |
||||
umount -lf /proc |
||||
|
||||
export HISTSIZE=0 |
@ -0,0 +1,55 @@ |
||||
|
||||
search --set=root --file /ubuntu |
||||
|
||||
insmod all_video |
||||
|
||||
set default="0" |
||||
set timeout=30 |
||||
|
||||
menuentry "Try Ubuntu FS without installing" { |
||||
linux /casper/vmlinuz boot=casper file=/cdrom/preseed/ubuntu.seed quiet splash --- |
||||
initrd /casper/initrd |
||||
} |
||||
menuentry "Try Ubuntu without installing (safe graphics)" { |
||||
set gfxpayload=keep |
||||
linux /casper/vmlinuz boot=casper file=/cdrom/preseed/ubuntu.seed quiet splash nomodeset --- |
||||
initrd /casper/initrd |
||||
} |
||||
|
||||
menuentry "Install Ubuntu FS" { |
||||
linux /casper/vmlinuz boot=casper file=/cdrom/preseed/ubuntu.seed only-ubiquity quiet splash --- |
||||
initrd /casper/initrd |
||||
} |
||||
|
||||
menuentry "Install Ubuntu FS (safe graphics)" { |
||||
set gfxpayload=keep |
||||
linux /casper/vmlinuz boot=casper file=/cdrom/preseed/ubuntu.seed only-ubiquity quiet splash --- |
||||
initrd /casper/initrd |
||||
} |
||||
|
||||
menuentry "Check disc for defects" { |
||||
linux /casper/vmlinuz boot=casper integrity-check quiet splash --- |
||||
initrd /casper/initrd |
||||
} |
||||
|
||||
menuentry "Test memory Memtest86+ (BIOS)" { |
||||
linux16 /install/memtest86+ |
||||
} |
||||
|
||||
menuentry "Test memory Memtest86 (UEFI, long load time)" { |
||||
insmod part_gpt |
||||
insmod search_fs_uuid |
||||
insmod chain |
||||
loopback loop /install/memtest86 |
||||
chainloader (loop,gpt1)/efi/boot/BOOTX64.efi |
||||
} |
||||
|
||||
grub_platform |
||||
if [ "$grub_platform" = "efi" ]; then |
||||
menuentry 'Boot from next volume' { |
||||
exit |
||||
} |
||||
menuentry 'UEFI Firmware Settings' { |
||||
fwsetup |
||||
} |
||||
fi |
@ -0,0 +1,5 @@ |
||||
# Only install the standard system and language packs. |
||||
tasksel tasksel/first multiselect |
||||
d-i pkgsel/language-pack-patterns string |
||||
# No language support packages. |
||||
d-i pkgsel/install-language-support boolean false |
@ -0,0 +1,11 @@ |
||||
# Build an LTSP client chroot. |
||||
d-i anna/choose_modules string ltsp-client-builder |
||||
d-i ltsp-client-builder/run boolean true |
||||
# Enable extras.ubuntu.com. |
||||
d-i apt-setup/extras boolean true |
||||
# Install the Ubuntu desktop and LTSP server. |
||||
tasksel tasksel/first multiselect ubuntu-desktop |
||||
d-i pkgsel/include/install-recommends boolean true |
||||
d-i pkgsel/include string ltsp-server-standalone openssh-server |
||||
# Build a client chroot. |
||||
d-i preseed/late_command string chroot /target /usr/sbin/ltsp-update-sshkeys |
@ -0,0 +1,9 @@ |
||||
# Enable extras.ubuntu.com. |
||||
d-i apt-setup/extras boolean true |
||||
# Install the Ubuntu desktop. |
||||
tasksel tasksel/first multiselect ubuntu-desktop |
||||
# On live DVDs, don't spend huge amounts of time removing substantial |
||||
# application packages pulled in by language packs. Given that we clearly |
||||
# have the space to include them on the DVD, they're useful and we might as |
||||
# well keep them installed. |
||||
ubiquity ubiquity/keep-installed string icedtea6-plugin openoffice.org |
Loading…
Reference in new issue