এই উত্তরে নিম্নলিখিত সেটআপগুলির জন্য বিশদ পদক্ষেপ রয়েছে:
- মেঘ চিত্র amd64 এবং আর্ম 64
- ডিবুটস্ট্র্যাপ amd64 এবং আর্ম 64
- ডেস্কটপ ইমেজ amd64
সবগুলি একটি উবুন্টু 18.04 হোস্টে 18.04 অতিথিকে লক্ষ্য করে পরীক্ষা করা হয়েছিল।
মেঘ চিত্র amd64
উবুন্টু ক্লাউড চিত্রগুলি প্রাক-ইনস্টল করা চিত্র যা সাধারণ ডেস্কটপ সিস্টেম ইনস্টলেশন না করে সরাসরি বুট করার অনুমতি দেয়। আরও দেখুন: /server/438611/ কি-are-ubuntu-cloud-images
#!/usr/bin/env bash
sudo apt-get install cloud-image-utils qemu
# This is already in qcow2 format.
img=ubuntu-18.04-server-cloudimg-amd64.img
if [ ! -f "$img" ]; then
wget "https://cloud-images.ubuntu.com/releases/18.04/release/${img}"
# sparse resize: does not use any extra space, just allows the resize to happen later on.
# /superuser/1022019/how-to-increase-size-of-an-ubuntu-cloud-image
qemu-img resize "$img" +128G
fi
user_data=user-data.img
if [ ! -f "$user_data" ]; then
# For the password.
# /programming/29137679/login-credentials-of-ubuntu-cloud-server-image/53373376#53373376
# /server/920117/how-do-i-set-a-password-on-an-ubuntu-cloud-image/940686#940686
# /ubuntu/507345/how-to-set-a-password-for-ubuntu-cloud-images-ie-not-use-ssh/1094189#1094189
cat >user-data <<EOF
#cloud-config
password: asdfqwer
chpasswd: { expire: False }
ssh_pwauth: True
EOF
cloud-localds "$user_data" user-data
fi
qemu-system-x86_64 \
-drive "file=${img},format=qcow2" \
-drive "file=${user_data},format=raw" \
-device rtl8139,netdev=net0 \
-enable-kvm \
-m 2G \
-netdev user,id=net0 \
-serial mon:stdio \
-smp 2 \
-vga virtio \
;
গিটহাব উজানের দিকে ।
কিউইএমইউ শুরু হওয়ার পরে বুট মেনুটি প্রদর্শনের জন্য আপনাকে এন্টার চাপতে হতে পারে। Ubuntu
সেখান থেকে নির্বাচন করুন ।
তারপরে, বুটের শুরুটি বলে:
error: no such device: root.
Press any key to continue...
তবে আপনি যদি কোনও কী টিপেন না, বুটটি অল্প সময়ের বাইরে চলে যাওয়ার পরে অব্যাহত থাকে। এই বাগের প্রতিবেদনটি আপভোট করুন: https://bugs.launchpad.net/cloud-images/+bug/1726476
বুট শেষ হয়ে গেলে লগইন করুন:
- ব্যবহারকারীর নাম:
ubuntu
- পাসওয়ার্ড:
asdfqwer
ইন্টারনেট সাধারণত কাজ করে।
মেঘ ইমেজ আর্ম 64
টোডো: আমি লক্ষ্য করেছি যে এটি ব্যবহার করার সময় মাঝে মাঝে একটি ত্রুটি ঘটে থাকে: https://bugs.launchpad.net/cloud-images/+bug/1818197
Amd64 এর মতো খুব অনুরূপ, তবে এটি বুট করার জন্য আমাদের কিছু UEFI কালো জাদু দরকার।
sudo apt-get install cloud-image-utils qemu-system-arm qemu-efi
# Get the image.
img=ubuntu-18.04-server-cloudimg-arm64.img
if [ ! -f "$img" ]; then
wget "https://cloud-images.ubuntu.com/releases/18.04/release/${img}"
qemu-img resize "$img" +128G
fi
# For the password.
user_data=user-data.img
if [ ! -f "$user_data" ]; then
cat >user-data <<EOF
#cloud-config
password: asdfqwer
chpasswd: { expire: False }
ssh_pwauth: True
EOF
cloud-localds "$user_data" user-data
# Use the EFI magic. Picked up from:
# https://wiki.ubuntu.com/ARM64/QEMU
dd if=/dev/zero of=flash0.img bs=1M count=64
dd if=/usr/share/qemu-efi/QEMU_EFI.fd of=flash0.img conv=notrunc
dd if=/dev/zero of=flash1.img bs=1M count=64
fi
qemu-system-aarch64 \
-M virt \
-cpu cortex-a57 \
-device rtl8139,netdev=net0 \
-m 4096 \
-netdev user,id=net0 \
-nographic \
-smp 4 \
-drive "if=none,file=${img},id=hd0" \
-device virtio-blk-device,drive=hd0 \
-drive "file=${user_data},format=raw" \
-pflash flash0.img \
-pflash flash1.img \
;
গিটহাব উজানের দিকে ।
debootstrap
AMD64
কোনও প্রাক-তৈরি চিত্র নয়, তবে এটি সমস্ত প্রাক-বিল্ট প্যাকেজগুলি ডাউনলোড করে, তাই এটিও দ্রুত, তবে আরও অনেকটা কনফিগারযোগ্য এবং দরকারী।
#!/usr/bin/env bash
set -eux
debootstrap_dir=debootstrap
root_filesystem=debootstrap.ext2.qcow2
sudo apt-get install \
debootstrap \
libguestfs-tools \
qemu-system-x86 \
;
if [ ! -d "$debootstrap_dir" ]; then
# Create debootstrap directory.
# - linux-image-generic: downloads the kernel image we will use under /boot
# - network-manager: automatically starts the network at boot for us
sudo debootstrap \
--include linux-image-generic \
bionic \
"$debootstrap_dir" \
http://archive.ubuntu.com/ubuntu \
;
sudo rm -f "$root_filesystem"
fi
linux_image="$(printf "${debootstrap_dir}/boot/vmlinuz-"*)"
if [ ! -f "$root_filesystem" ]; then
# Set root password.
echo 'root:root' | sudo chroot "$debootstrap_dir" chpasswd
# Remount root filesystem as rw.
cat << EOF | sudo tee "${debootstrap_dir}/etc/fstab"
/dev/sda / ext4 errors=remount-ro,acl 0 1
EOF
# Automaticaly start networking.
# Otherwise network commands fail with:
# Temporary failure in name resolution
# /ubuntu/1045278/ubuntu-server-18-04-temporary-failure-in-name-resolution/1080902#1080902
cat << EOF | sudo tee "$debootstrap_dir/etc/systemd/system/dhclient.service"
[Unit]
Description=DHCP Client
Documentation=man:dhclient(8)
Wants=network.target
Before=network.target
[Service]
Type=forking
PIDFile=/var/run/dhclient.pid
ExecStart=/sbin/dhclient -4 -q
[Install]
WantedBy=multi-user.target
EOF
sudo ln -sf "$debootstrap_dir/etc/systemd/system/dhclient.service" \
"${debootstrap_dir}/etc/systemd/system/multi-user.target.wants/dhclient.service"
# Why Ubuntu, why.
# https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
sudo chmod +r "${linux_image}"
# Generate image file from debootstrap directory.
# Leave 1Gb extra empty space in the image.
sudo virt-make-fs \
--format qcow2 \
--size +1G \
--type ext2 \
"$debootstrap_dir" \
"$root_filesystem" \
;
sudo chmod 666 "$root_filesystem"
fi
qemu-system-x86_64 \
-append 'console=ttyS0 root=/dev/sda' \
-drive "file=${root_filesystem},format=qcow2" \
-enable-kvm \
-serial mon:stdio \
-m 2G \
-kernel "${linux_image}" \
-device rtl8139,netdev=net0 \
-netdev user,id=net0 \
;
গিটহাব উজানের দিকে ।
কোনও সিস্টেমড ত্রুটি বা সতর্কতা ছাড়াই এই বুটগুলি।
এখন টার্মিনাল থেকে root
/ দিয়ে লগইন করুন root
এবং তারপরে নীচের কমান্ডগুলির সাথে ইন্টারনেট কাজ করে তা পরীক্ষা করুন:
printf 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80
apt-get update
apt-get install hello
hello
আমরা /programming/32341518/how-to-make-an-http-get-request-manally-with-netcat/52662497#52662497nc
তে বর্ণিত হিসাবে ব্যবহার করেছি কারণ:
অ্যানালগাস ডেবিয়ান সংস্করণ: /unix/275429/creating-bootable-debian-image-with-debootstrap/473256#473256
আপনার নিজস্ব কার্নেল তৈরি করুন
যেহেতু আমরা এখানে আছি:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git
cd ubuntu-bionic
# Tag matches the working kernel that debootstrap downloaded for us.
git checkout Ubuntu-4.15.0-20.21
fakeroot debian/rules clean
debian/rules updateconfigs
fakeroot debian/rules build-generic
linux_image="$(pwd)/debian/build/build-generic/arch/x86_64/boot/bzImage"
এটি ঠিক একই কনফিগারেশন তৈরি করেছে এবং আমি বিশ্বাস করি যে প্যাকেজড উবুন্টু হিসাবে ঠিক একই উত্স কোডটি ব্যবহার করা হয়েছে যা এখানে বর্ণিত হিসাবে debootstrap
ডাউনলোড করা হয়েছে: আমি 11.04 কার্নেল। কনফিগ ফাইলটি কোথায় পাব?
তারপরে আমি এটি দিয়ে প্যাচ করলাম:
diff --git a/init/main.c b/init/main.c
index b8b121c17ff1..542229349efc 100644
--- a/init/main.c
+++ b/init/main.c
@@ -516,6 +516,8 @@ asmlinkage __visible void __init start_kernel(void)
char *command_line;
char *after_dashes;
+ pr_info("I'VE HACKED THE LINUX KERNEL!!!");
+
set_task_stack_end_magic(&init_task);
smp_setup_processor_id();
debug_objects_early_init();
এবং পুনর্নির্মাণ:
fakeroot debian/rules build-generic
এবং এটি বুট করার সময় আমার বার্তাটি মুদ্রণ করেছিল:
I'VE HACKED THE LINUX KERNEL!!!
পুনর্নির্মাণ যদিও খুব দ্রুত ছিল না, তাই সম্ভবত আরও ভাল আদেশ আছে? আমি এটি বলার অপেক্ষা রেখেছিলাম:
Kernel: arch/x86/boot/bzImage is ready (#3)
এবং রান দিয়ে এগিয়ে গেছে।
ডিবুটস্ট্র্যাপ আর্ম 64
পদ্ধতিটি amd64 এর মতো ছিল তবে নিম্নলিখিত পার্থক্যগুলির সাথে:
1)
আমাদের অবশ্যই একটি দুটি পর্যায় করা উচিত debootstrap
:
- প্রথম
--foreign
প্যাকেজগুলি ডাউনলোড করার সাথে প্রথমে
- তারপরে আমরা কিউএমইউ স্ট্যাটিকটি ইনস্টল করি
chroot
- তারপরে আমরা
--second-stage
কিউএমইউ ব্যবহারকারী মোড এমুলেশন + ব্যবহার করে প্যাকেজ ইনস্টলেশন করিbinfmt_misc
আরও দেখুন: ডিবিউটস্ট্র্যাপ কী - সেকেন্ড-স্টেজের জন্য
2) এর সাথে ডিফল্ট কার্নেল বুটটি ব্যর্থ হয়:
[ 0.773665] Please append a correct "root=" boot option; here are the available partitions:
[ 0.774033] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
খালি পার্টিশন তালিকাটি নির্দেশ করে যে ডিস্ক ড্রাইভারের সাথে একটি গুরুতর ত্রুটি রয়েছে, কিছুটা চেষ্টা করার পরে অনুপস্থিত বিকল্পটি হ'ল:
CONFIG_VIRTIO_BLK=y
আমার মনে হয় আমি যখন আইএসও ব্যবহার করি তখন এটি কাজ করে কারণ মডিউলগুলি অবশ্যই আরআরআরডি থেকে লোড হওয়া উচিত।
আমি অন্য ডিস্ক ধরনের ব্যবহার করতে চেষ্টা করেছি, কিন্তু অর্থাৎ virtio জন্য কেবল বৈধ মান -drive if=
যখন -M virt
, saner মেশিন টাইপ আজকাল যা।
সুতরাং এখানে আমাদের বর্ণিত হিসাবে অপশনটি সক্ষম করে আমাদের নিজস্ব কার্নেলটি পুনরায় কম্পাইল করতে হবে: কার্নেলটি যখন ক্রস-সংকলন করা হচ্ছে তখন আমি যখনই কেবল একটি ফাইল পরিবর্তন করতে চাই তখন প্রতিবার এটি পরিষ্কার থেকে কীভাবে তৈরি করা বন্ধ করব?
উবুন্টু দেবগণের y
ডিফল্টরূপে এই কনফিগ চালু করা উচিত ! এটা খুবই কাজের!
টোডো: নেটওয়ার্কটি কাজ করছে না, ত্রুটি বার্তাটি হ'ল:
root@ciro-p51:~# systemctl status dhclient.service
root@ciro-p51:~# cat f
● dhclient.service - DHCP Client
Loaded: loaded (/etc/systemd/system/dhclient.service; enabled; vendor preset: enabled)
Active: failed (Result: protocol) since Sun 2018-01-28 15:58:42 UTC; 2min 2s ago
Docs: man:dhclient(8)
Process: 171 ExecStart=/sbin/dhclient -4 -q (code=exited, status=0/SUCCESS)
Jan 28 15:58:40 ciro-p51 systemd[1]: Starting DHCP Client...
Jan 28 15:58:42 ciro-p51 dhclient[171]: No broadcast interfaces found - exiting.
Jan 28 15:58:42 ciro-p51 systemd[1]: dhclient.service: Can't open PID file /var/run/dhclient.pid (yet?) after start: No such file or directory
Jan 28 15:58:42 ciro-p51 systemd[1]: dhclient.service: Failed with result 'protocol'.
Jan 28 15:58:42 ciro-p51 systemd[1]: Failed to start DHCP Client.
এখানে সম্পূর্ণ স্বয়ংক্রিয় স্ক্রিপ্ট:
#!/usr/bin/env bash
# /ubuntu/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171
set -eux
debootstrap_dir=debootstrap
root_filesystem=debootstrap.ext2.qcow2
sudo apt-get install \
gcc-aarch64-linux-gnu \
debootstrap \
libguestfs-tools \
qemu-system-aarch64 \
qemu-user-static \
;
if [ ! -d "$debootstrap_dir" ]; then
sudo debootstrap \
--arch arm64 \
--foreign \
bionic \
"$debootstrap_dir" \
http://ports.ubuntu.com/ubuntu-ports \
;
sudo mkdir -p "${debootstrap_dir}/usr/bin"
sudo cp "$(which qemu-aarch64-static)" "${debootstrap_dir}/usr/bin"
sudo chroot "$debootstrap_dir" /debootstrap/debootstrap --second-stage
sudo rm -f "$root_filesystem"
fi
linux_image="$(printf "${debootstrap_dir}/boot/vmlinuz-"*)"
if [ ! -f "$root_filesystem" ]; then
# Set root password.
echo 'root:root' | sudo chroot "$debootstrap_dir" chpasswd
# Remount root filesystem as rw.
cat << EOF | sudo tee "${debootstrap_dir}/etc/fstab"
/dev/sda / ext4 errors=remount-ro,acl 0 1
EOF
# Automaticaly start networking.
# Otherwise network commands fail with:
# Temporary failure in name resolution
# /ubuntu/1045278/ubuntu-server-18-04-temporary-failure-in-name-resolution/1080902#1080902
cat << EOF | sudo tee "${debootstrap_dir}/etc/systemd/system/dhclient.service"
[Unit]
Description=DHCP Client
Documentation=man:dhclient(8)
Wants=network.target
Before=network.target
[Service]
Type=forking
PIDFile=/var/run/dhclient.pid
ExecStart=/sbin/dhclient -4 -q
[Install]
WantedBy=multi-user.target
EOF
sudo ln -sf "${debootstrap_dir}/etc/systemd/system/dhclient.service" \
"${debootstrap_dir}/etc/systemd/system/multi-user.target.wants/dhclient.service"
# Why Ubuntu, why.
# https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
sudo chmod +r "${linux_image}"
# Generate image file from debootstrap directory.
# Leave 1Gb extra empty space in the image.
sudo virt-make-fs \
--format qcow2 \
--size +1G \
--type ext2 \
"$debootstrap_dir" \
"$root_filesystem" \
;
sudo chmod 666 "$root_filesystem"
fi
# Build the Linux kernel.
linux_image="$(pwd)/linux/debian/build/build-generic/arch/arm64/boot/Image"
if [ ! -f "$linux_image" ]; then
git clone --branch Ubuntu-4.15.0-20.21 --depth 1 git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git linux
cd linux
patch -p1 << EOF
diff --git a/debian.master/config/config.common.ubuntu b/debian.master/config/config.common.ubuntu
index 5ff32cb997e9..8a190d3a0299 100644
--- a/debian.master/config/config.common.ubuntu
+++ b/debian.master/config/config.common.ubuntu
@@ -10153,7 +10153,7 @@ CONFIG_VIDEO_ZORAN_ZR36060=m
CONFIG_VIPERBOARD_ADC=m
CONFIG_VIRTIO=y
CONFIG_VIRTIO_BALLOON=y
-CONFIG_VIRTIO_BLK=m
+CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_BLK_SCSI=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_VIRTIO_INPUT=m
EOF
export ARCH=arm64
export $(dpkg-architecture -aarm64)
export CROSS_COMPILE=aarch64-linux-gnu-
fakeroot debian/rules clean
debian/rules updateconfigs
fakeroot debian/rules DEB_BUILD_OPTIONS=parallel=`nproc` build-generic
cd -
fi
qemu-system-aarch64 \
-append 'console=ttyAMA0 root=/dev/vda rootfstype=ext2' \
-device rtl8139,netdev=net0 \
-drive "file=${root_filesystem},format=qcow2" \
-kernel "${linux_image}" \
-m 2G \
-netdev user,id=net0 \
-serial mon:stdio \
-M virt,highmem=off \
-cpu cortex-a57 \
-nographic \
;
গিটহাব আপস্ট্রিম ।
ডেস্কটপ ইমেজ
দেখুন: কিউইএমইউতে উবুন্টু ডেস্কটপ কীভাবে চালানো যায়?
এটি ম্যানুয়ালি ইনস্টলারের মধ্য দিয়ে যাওয়া প্রয়োজন, তবে আপনি সম্ভবত এটি করতে পারেন এটি সবচেয়ে স্থিতিশীল জিনিস এবং আপনি যদি ঠিক সময়ে সময়ে ইন্টারেক্টিভ ব্যবহারের জন্য কোনও ভিএম পেতে চান তবে এটি সম্পূর্ণ সূক্ষ্ম।
আর্চ 64৪ এর জন্য, আমি ডেস্কটপটি এখনও কাজ করতে পারিনি তবে সম্ভবত নজর রাখবেন: কিউইইউইউতে উবুন্টু 16.04 এআরএম কীভাবে চালানো যায়?