core: 不重要的优化

This commit is contained in:
bin456789 2023-12-16 16:41:34 +08:00
parent 3c6550c86a
commit d3518a7502
No known key found for this signature in database
GPG Key ID: EE301B386DE6C11B
6 changed files with 245 additions and 34 deletions

207
README.en.md Normal file
View File

@ -0,0 +1,207 @@
# reinstall
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/dc679a17751448628fe6d8ac35e26eed)](https://app.codacy.com/gh/bin456789/reinstall/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
[![CodeFactor](https://www.codefactor.io/repository/github/bin456789/reinstall/badge)](https://www.codefactor.io/repository/github/bin456789/reinstall)
[![Lines of Code](https://tokei.rs/b1/github/bin456789/reinstall?category=code)](#reinstall)
One-click Reinstallation Script
[中文](README.md) | [English](README.en.md)
## Highlights
- Default usage of official installation programs. In cases where the memory requirements of the installation program are not met, the official cloud image will be used.
- Excludes third-party links and self-made packages; all resources are fetched in real-time from the source site.
- Adapted for 512M + 5G small VPS, and supports installing Alpine on 256M VPS.
- Supports installing Windows using the official ISO (does not support ARM).
- Supports reinstalling Windows as Linux and vice versa.
- Supports BIOS, EFI, ARM (Windows installation not supported on ARM).
- Supports original system partition with LVM, Btrfs.
- Supports installing Alpine, Arch, openSUSE, Gentoo, and installing from these systems.
- Progress of DD and cloud image installation can be viewed through SSH, a browser, serial console, or background VNC.
- Contains extensive comments.
## Usage on Linux
### Download
```bash
curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh
```
### Download (from within China)
```bash
curl -O https://raw.fgit.cf/bin456789/reinstall/main/reinstall.sh
```
### Usage 1: Install Linux
Note: For machines with static IP, installing centos, alma, rocky, fedora, debian, ubuntu, requires adding the --ci parameter to force the use of the cloud mirror.
```bash
bash reinstall.sh centos 7|8|9 (8|9 for stream versions)
alma 8|9
rocky 8|9
fedora 38|39
debian 10|11|12
ubuntu 20.04|22.04
alpine 3.16|3.17|3.18|3.19
opensuse 15.4|15.5|tumbleweed (supports cloud mirror only)
arch (supports only amd64 cloud mirror)
gentoo (supports only amd64 cloud mirror)
If no version number is entered, it installs the latest version.
Optional parameters: --ci Force the use of the cloud mirror.
```
### Usage 2: DD
Supports gzip, xz formats.
Supports automatic configuration of static IP, system disk expansion.
```bash
bash reinstall.sh dd --img=https://example.com/xxx.xz
```
### Usage 3: Restart to Alpine Rescue System (Live OS)
Can be connected via SSH to perform manual DD, modify partitions, manually install Arch Linux, and other operations.
```bash
bash reinstall.sh alpine --hold=1
```
### Usage 4: Restart to netboot.xyz
```bash
bash reinstall.sh netboot.xyz
```
### Usage 5: Install Windows ISO
```bash
bash reinstall.sh windows \
--iso='https://example.com/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso' \
--image-name='Windows 10 Enterprise LTSC 2021'
```
#### Parameter Description
`--iso` Original image link without integrating VirtIO, Xen, AWS, GCP drivers.
`--image-name` Specifies the image to install, case insensitive, enclosed in quotes, for example:
```text
'Windows 7 Ultimate'
'Windows 10 Enterprise LTSC 2021'
'Windows 11 Pro'
'Windows Server 2022 SERVERDATACENTER'
```
Use `Dism++` File menu > Open image file, select the iso to get the image name.
![image-name](https://github.com/bin456789/reinstall/assets/7548515/5aae0a9b-61e2-4f66-bb98-d470a6beaac2)
#### Other Notes
1. Successfully tested systems: 7, 10, 11, 2022. Tested platforms: vultr (bios), oracle (efi), aws t2 (xen), aws t3 (nitro).
2. Supports 32/64-bit systems; UEFI machines only support 64-bit.
3. Can bypass Windows 11 hardware restrictions.
4. Tested not to support ARM.
5. `zh-cn_windows_10_enterprise_ltsc_2021_x64_dvd_033b7312.iso`: After installing this image, the `wsappx` process may occupy CPU for an extended period.
This is an issue with the image, and the solution is to install the `VCLibs` library.
<https://www.google.com/search?q=ltsc+wsappx>
6. The following websites contain iso links:
<https://archive.org>
<https://massgrave.dev/genuine-installation-media.html>
## Usage on Windows
Run `cmd` with administrator privileges.
If running `powershell`, switch to `cmd` first.
### Download
```batch
certutil -urlcache -f -split https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.bat
```
### Download (from within China)
```batch
certutil -urlcache -f -split https://raw.fgit.cf/bin456789/reinstall/main/reinstall.bat
```
### If unable to download
- Disable Windows Defender real-time protection.
- Update SSL root certificate.
```batch
certutil -generateSSTFromWU root.sst
certutil -addstore Root root.sst
```
- Save the following two files via 'Save link as' or use 'Remote Desktop' to copy:
<https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.bat>
<https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh>
### Usage
All functionalities available in Linux can be used on Windows, using parameters similar to those in Linux.
For example, to install centos 7:
```batch
reinstall.bat centos-7
```
## Memory Requirements
| System | Traditional Install | Cloud Image |
| -------------------------------- | ------------------- | ------------|
| Debian | 384M | 512M |
| Ubuntu | 1G | 512M |
| CentOS / Alma / Rocky / Fedora | 1G | 512M |
| Alpine | 256M | - |
| openSUSE | - | 512M |
| Arch | - | 512M |
| Gentoo | - | 512M |
| Windows | 1G | - |
## Network Requirements
For 'Installation Mode' installing Linux, DHCPv4 is required.
Other cases support static IP, IPv6 (including installing Alpine, cloud mirror, Windows iso, dd).
No need to fill in the static IP address when running the script.
## Virtualization Requirements
Does not support OpenVZ, LXC virtual machines.
Please use <https://github.com/LloydAsp/OsMutation>.
## Default Passwords
| System | Username | Password |
| -------------------- | -------------- | -------- |
| Linux | root | 123@@@ |
| Windows (ISO install) | administrator | 123@@@ |
## TODO
- Installation modes: Static IP, IPv6, multiple NICs.

View File

@ -2,8 +2,11 @@
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/dc679a17751448628fe6d8ac35e26eed)](https://app.codacy.com/gh/bin456789/reinstall/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/dc679a17751448628fe6d8ac35e26eed)](https://app.codacy.com/gh/bin456789/reinstall/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
[![CodeFactor](https://www.codefactor.io/repository/github/bin456789/reinstall/badge)](https://www.codefactor.io/repository/github/bin456789/reinstall) [![CodeFactor](https://www.codefactor.io/repository/github/bin456789/reinstall/badge)](https://www.codefactor.io/repository/github/bin456789/reinstall)
[![Lines of Code](https://tokei.rs/b1/github/bin456789/reinstall?category=code)](#reinstall)
又一个重装脚本 一键重装脚本
[中文](README.md) | [English](README.en.md)
## 亮点 ## 亮点
@ -40,7 +43,7 @@ curl -O https://raw.fgit.cf/bin456789/reinstall/main/reinstall.sh
bash reinstall.sh centos 7|8|9 (8|9 为 stream 版本) bash reinstall.sh centos 7|8|9 (8|9 为 stream 版本)
alma 8|9 alma 8|9
rocky 8|9 rocky 8|9
fedora 37|38 fedora 38|39
debian 10|11|12 debian 10|11|12
ubuntu 20.04|22.04 ubuntu 20.04|22.04
alpine 3.16|3.17|3.18|3.19 alpine 3.16|3.17|3.18|3.19

View File

@ -21,7 +21,7 @@ usage_and_exit() {
Usage: reinstall.sh centos 7|8|9 Usage: reinstall.sh centos 7|8|9
alma 8|9 alma 8|9
rocky 8|9 rocky 8|9
fedora 37|38 fedora 38|39
debian 10|11|12 debian 10|11|12
ubuntu 20.04|22.04 ubuntu 20.04|22.04
alpine 3.16|3.17|3.18|3.19 alpine 3.16|3.17|3.18|3.19
@ -31,6 +31,8 @@ Usage: reinstall.sh centos 7|8|9
dd --img=http://xxx dd --img=http://xxx
windows --iso=http://xxx --image-name='windows xxx' windows --iso=http://xxx --image-name='windows xxx'
netboot.xyz netboot.xyz
Homepage: https://github.com/bin456789/reinstall
EOF EOF
exit 1 exit 1
} }
@ -311,15 +313,12 @@ setos() {
} }
setos_alpine() { setos_alpine() {
flavour=lts is_virt && flavour=virt || flavour=lts
if is_virt; then
# alpine aarch64 3.18 才有 virt 直连链接 # alpine aarch64 3.16/3.17 lts 才有直连链接
if [ "$basearch" = aarch64 ]; then if [ "$basearch" = aarch64 ] &&
install_pkg bc { [ "$releasever" = 3.16 ] || [ "$releasever" = 3.17 ]; }; then
(($(echo "$releasever >= 3.18" | bc))) && flavour=virt flavour=lts
else
flavour=virt
fi
fi fi
# 不要用https 因为甲骨文云arm initramfs阶段不会从硬件同步时钟导致访问https出错 # 不要用https 因为甲骨文云arm initramfs阶段不会从硬件同步时钟导致访问https出错
@ -616,7 +615,7 @@ verify_os_name() {
'centos 7|8|9' \ 'centos 7|8|9' \
'alma 8|9' \ 'alma 8|9' \
'rocky 8|9' \ 'rocky 8|9' \
'fedora 37|38' \ 'fedora 38|39' \
'debian 10|11|12' \ 'debian 10|11|12' \
'ubuntu 20.04|22.04' \ 'ubuntu 20.04|22.04' \
'alpine 3.16|3.17|3.18|3.19' \ 'alpine 3.16|3.17|3.18|3.19' \

View File

@ -1887,9 +1887,9 @@ install_windows() {
case "$sys" in case "$sys" in
# https://github.com/virtio-win/virtio-win-pkg-scripts/issues/40 # https://github.com/virtio-win/virtio-win-pkg-scripts/issues/40
w7) dir=archive-virtio/virtio-win-0.1.173-9 ;; w7 | 2k8*) dir=archive-virtio/virtio-win-0.1.173-9 ;;
# https://github.com/virtio-win/virtio-win-pkg-scripts/issues/61 # https://github.com/virtio-win/virtio-win-pkg-scripts/issues/61
2k12*) dir=archive-virtio/virtio-win-0.1.215-1 ;; w8* | 2k12*) dir=archive-virtio/virtio-win-0.1.215-1 ;;
*) dir=stable-virtio ;; *) dir=stable-virtio ;;
esac esac
@ -1929,9 +1929,9 @@ install_windows() {
fi fi
# 修改应答文件 # 修改应答文件
download $confhome/windows.xml /tmp/Autounattend.xml download $confhome/windows.xml /tmp/autounattend.xml
locale=$(wiminfo $install_wim | grep 'Default Language' | head -1 | awk '{print $NF}') locale=$(wiminfo $install_wim | grep 'Default Language' | head -1 | awk '{print $NF}')
sed -i "s|%arch%|$arch|; s|%image_name%|$image_name|; s|%locale%|$locale|" /tmp/Autounattend.xml sed -i "s|%arch%|$arch|; s|%image_name%|$image_name|; s|%locale%|$locale|" /tmp/autounattend.xml
# 修改 disk_id # 修改 disk_id
if false; then if false; then
@ -1943,13 +1943,13 @@ install_windows() {
else else
disk_id=0 disk_id=0
fi fi
sed -i "s|%disk_id%|$disk_id|" /tmp/Autounattend.xml sed -i "s|%disk_id%|$disk_id|" /tmp/autounattend.xml
fi fi
# 修改应答文件,分区配置 # 修改应答文件,分区配置
if is_efi; then if is_efi; then
sed -i "s|%installto_partitionid%|3|" /tmp/Autounattend.xml sed -i "s|%installto_partitionid%|3|" /tmp/autounattend.xml
insert_into_file /tmp/Autounattend.xml after '<ModifyPartitions>' <<EOF insert_into_file /tmp/autounattend.xml after '<ModifyPartitions>' <<EOF
<ModifyPartition wcm:action="add"> <ModifyPartition wcm:action="add">
<Order>1</Order> <Order>1</Order>
<PartitionID>1</PartitionID> <PartitionID>1</PartitionID>
@ -1966,8 +1966,8 @@ install_windows() {
</ModifyPartition> </ModifyPartition>
EOF EOF
else else
sed -i "s|%installto_partitionid%|1|" /tmp/Autounattend.xml sed -i "s|%installto_partitionid%|1|" /tmp/autounattend.xml
insert_into_file /tmp/Autounattend.xml after '<ModifyPartitions>' <<EOF insert_into_file /tmp/autounattend.xml after '<ModifyPartitions>' <<EOF
<ModifyPartition wcm:action="add"> <ModifyPartition wcm:action="add">
<Order>1</Order> <Order>1</Order>
<PartitionID>1</PartitionID> <PartitionID>1</PartitionID>
@ -1976,12 +1976,14 @@ EOF
EOF EOF
fi fi
# # ei.cfg # ei.cfg
# cat <<EOF >/os/installer/sources/ei.cfg if false; then
# [Channel] cat <<EOF >/os/installer/sources/EI.CFG
# OEM [Channel]
# EOF _Default
# unix2dos /os/installer/sources/ei.cfg EOF
unix2dos /os/installer/sources/EI.CFG
fi
# 挂载 boot.wim # 挂载 boot.wim
mkdir -p /wim mkdir -p /wim
@ -2021,10 +2023,10 @@ EOF
fi fi
# 复制应答文件 # 复制应答文件
# 移除注释,否则 windows-setup.bat 重新生成的 Autounattend.xml 有问题 # 移除注释,否则 windows-setup.bat 重新生成的 autounattend.xml 有问题
apk add xmlstarlet apk add xmlstarlet
xmlstarlet ed -d '//comment()' /tmp/Autounattend.xml >/wim/Autounattend.xml xmlstarlet ed -d '//comment()' /tmp/autounattend.xml >/wim/autounattend.xml
unix2dos /wim/Autounattend.xml unix2dos /wim/autounattend.xml
# 复制安装脚本 # 复制安装脚本
# https://slightlyovercomplicated.com/2016/11/07/windows-pe-startup-sequence-explained/ # https://slightlyovercomplicated.com/2016/11/07/windows-pe-startup-sequence-explained/
@ -2046,7 +2048,7 @@ EOF
if [[ "$install_wim" = '*.wim' ]]; then if [[ "$install_wim" = '*.wim' ]]; then
wimmountrw $install_wim "$image_name" /wim/ wimmountrw $install_wim "$image_name" /wim/
if false; then if false; then
# 使用 Autounattend.xml # 使用 autounattend.xml
# win7 在此阶段找不到网卡 # win7 在此阶段找不到网卡
download $confhome/windows-resize.bat /wim/windows-resize.bat download $confhome/windows-resize.bat /wim/windows-resize.bat
create_win_set_netconf_script /wim/windows-set-netconf.bat create_win_set_netconf_script /wim/windows-set-netconf.bat

View File

@ -20,8 +20,8 @@ for /F "tokens=2 delims==" %%A in ('wmic logicaldisk where "VolumeName='installe
set "DiskIndex=%%A" set "DiskIndex=%%A"
) )
:: 设置 Autounattend.xml 的主硬盘 id :: 设置 autounattend.xml 的主硬盘 id
set "file=X:\Autounattend.xml" set "file=X:\autounattend.xml"
set "tempFile=X:\tmp.xml" set "tempFile=X:\tmp.xml"
set "search=%%disk_id%%" set "search=%%disk_id%%"