grub installer
이전 linux 와 windows 운영체제의 swap 이 필요한 환경이 있었다.
그때 작성한 부트로더 변경 스크립트이다.
이 것도 어디 고이 짱박혀 있던걸 가져온건데.. 예전에 난 뭐하던 사람이지?? 왜 하나도 모르겠지??
분명 주석 스타일, 네이밍 스타일, 인덴트 억지로 맞추는 부분까지 내 스타일이 맞는데..
날이 갈수록 멍청해지고 있는게 명백한 사실인듯 하다..
혹시 쓸 일이 생길지 몰라 기록을 남겨둔다.
grub config 파일
스크립트 파일 첨부
스크립트 내용
#!/bin/bash
echo "Install grub boot loader"
sudo -k /usr/bin/zenity --info \
--width=300 --height=50 --no-wrap \
--timeout=5 \
--title="알림" \
--text="부트로더 패치를 시작합니다.\n확인 버튼을 눌러주세요."
# grub.cfg 파일은 스크립트와 동일한 위치에 둘것
cfg_path=`dirname "$0"`
# Windows 및 Linux 의 partition 이름 지정
# part_windows : windows partion
# part_linux : linux partion
part_linux=`ls -l /dev/disk/by-uuid \
| awk '{print $9 " " $11}' \
| grep '^.\{8\}-' \
| awk '{sub("../../","",$2); print}' \
| awk '{print $2}' \
| sort -r \
| tail -1`
echo " - Linux partion : [$part_linux]"
part_windows=`ls -l /dev/disk/by-uuid \
| awk '{print $9 " " $11}' \
| grep '^.\{16\} ' \
| awk '{sub("../../","",$2); print}' \
| awk '{print $2}' \
| sort \
| tail -1`
echo " - Windows partion : [$part_windows]"
device_list=("$part_windows" "$part_linux")
os_list=("WINDOWS" "LINUX");
# device_list의 드라이버명에 해당하는 UUID 저장
uuid_list=()
# 갱신이 필요한 boot image file 지정
linux_boot_list=("vmlinuz" "initrd")
echo " - Partition uuid acquiring."
for dev in "${device_list[@]}"; do
uuid_list+=(`ls -l /dev/disk/by-uuid | grep $dev | awk {'print $9'}`)
done
if mountpoint -q /mnt; then
echo " - Already grub device mounted."
else
sudo -k mount /dev/$part_linux /mnt
fi
# grub.cfg UUID 변경
echo " - Change partition UUID."
sudo -k cp $cfg_path/grub.cfg /tmp/.
for idx in ${!device_list[*]}; do
echo " -- Partition[${device_list[$idx]}] UUID[${uuid_list[$idx]}]"
sudo -k sed -i "s/UUID_DEV_${os_list[$idx]}/${uuid_list[$idx]}/gi" /tmp/grub.cfg
done
# Linux boot image 변경
for idx in ${!linux_boot_list[*]}; do
target_file=`ls -tr /mnt/boot | grep ${linux_boot_list[$idx]} | tail -1`
echo " -- update boot image : [$target_file]"
sudo -k sed -i "s/BOOT_${linux_boot_list[$idx]}/$target_file/gi" /tmp/grub.cfg
done
sudo -k cp /tmp/grub.cfg /mnt/boot/grub/.
echo " - Install grub boot directory."
sudo -k grub-install --boot-directory=/mnt/boot /dev/${part_windows%[0-9]} 2> /dev/null
echo " - Unmount grub partition."
sudo -k umount /mnt 2> /dev/null
echo "Finished. Will reboot."
sudo -k /usr/bin/zenity --info \
--width=300 --height=50 --no-wrap \
--timeout=5 \
--title="알림" \
--text="부트로더 패치가 완료되었습니다.\n확인 버튼을 누르면 재부팅됩니다."
sudo -k reboot
끝.
'IT > linux' 카테고리의 다른 글
linux aplay PCM 파일 재생 예제 (0) | 2022.01.15 |
---|---|
linux serial 사용, 포트 설정, 상태 확인 (0) | 2022.01.15 |
linux TensorFlow 설치 방법 (0) | 2022.01.15 |
리눅스 텔넷 특정 사용자 사용 금지, telnet (0) | 2022.01.13 |
What is LINUX, 리눅스란 무엇인가 (0) | 2022.01.13 |
댓글