{"id":26,"date":"2022-11-30T13:17:55","date_gmt":"2022-11-30T05:17:55","guid":{"rendered":"https:\/\/vm1.go2see.me\/?p=26"},"modified":"2023-03-27T14:39:56","modified_gmt":"2023-03-27T06:39:56","slug":"%e4%b8%80%e9%94%ae%e5%ae%89%e8%a3%85-multipass-%e8%99%9a%e6%8b%9f%e6%9c%ba-shell","status":"publish","type":"post","link":"https:\/\/vm1.go2see.me\/?p=26","title":{"rendered":"\u4e00\u952e\u5b89\u88c5 multipass \u865a\u62df\u673a script"},"content":{"rendered":"<h1>\u4e00\u952e\u5b89\u88c5 multipass \u865a\u62df\u673a script<\/h1>\n<p>macOS \/ unix shell \u4e0b\uff0c\u4f7f\u7528 multipass \u547d\u4ee4\u5efa\u7acb\u865a\u62df\u673a\u5e76\u5728\u865a\u62df\u673a\u5185\u5b89\u88c5\u5957\u4ef6\u3002<br \/>\n\u5177\u4f53\u5b89\u88c5\u4e86\u4ec0\u4e48\uff0c\u8bf4\u660e\u90fd\u5728 echo \u91cc\u3002\u3002\u3002\u3002<\/p>\n<pre><code class=\"language-bash line-numbers\">#! sh\necho\necho \"====================================================================================\"\necho \"=== macOS \u4e0b\u81ea\u52a8\u5efa\u7acb multipass \u865a\u62df\u673a ===\"\necho \" \u4f1a\u4fee\u6539\u4e3austc\u6e90\u3001\u6302\u8f7d\u4e3b\u673a\u76ee\u5f55\u3001\u81ea\u52a8\u5b89\u88c5ssh\u5e76\u4e3a\u8fdc\u7aefVscode\u8bbe\u5b9a\u591a\u6587\u4ef6\u5f00\u542f\u3001\u5b89\u88c5XRDP\u670d\u52a1\u3001\u5b89\u88c5SAMBA\u670d\u52a1\u5e76\u5171\u4eab\u76ee\u5f55\u3002\"\necho\necho ### 1. \u5efa\u7acb multipass \u865a\u62df\u673a\n\necho \"useage: $0 [vm_name [ubuntu_ver [share_path]]]\"\necho \"\u53c2\u6570\u4f9d\u5e8f\u4e3a\uff1a\u865a\u62df\u673a\u540d\u7a31\u3001\u9009\u62e9ubuntu\u955c\u50cf\u7684\u7248\u6b21\u3001\u865a\u62df\u673aSAMBA\u5171\u4eab\u7684\u76ee\u5f55\"\necho\necho ### 1.1 Script \u7f3a\u7701\u7684\u53c2\u6570\u4f9d\u5e8f\u4e3a\uff1a\u865a\u62df\u673a\u540d\u7a31\u3001\u9009\u62e9ubuntu\u955c\u50cf\u7684\u7248\u6b21\u3002\nexport vm=u22 \nexport img=22.04\nexport vm_share=${vm}_work\n\necho\necho ### 1.2 \u865a\u62df\u673a\u7684 CPU\u6570\u3001\u8bb0\u5fc6\u4f53\u5bb9\u91cf\u3001\u786c\u76d8\u5bb9\u91cf\u5b9a\u4e49\u5728\u6b64\uff0c\u4f9d\u5bbf\u4e3b\u673a\u8c03\u6574\uff1a\nexport core=8\nexport mem=10G\nexport disk=300G\n\n\necho\necho ### 1.3 macOS\uff1a\u5b89\u88c5 multipass app \uff08\u4f7f\u7528\u4e07\u80fd\u7684 brew\uff09\uff1a\necho ###     brew install --cask multipass\n\necho\necho ### 1.4 \u4f9d\u636e\u524d\u9762\u7684\u53c2\u6570\u5efa\u7acb\u865a\u62df\u673a\uff1a\nif [ \"\" != \"$3\" ];then export vm_share=$3; fi\nif [ \"\" != \"$2\" ];then export img=$2; fi\nif [ \"\" != \"$1\" ];then export vm=$1; fi \necho multipass launch  -c $core -m $mem -d $disk -n $vm  $img\nmultipass launch  -c $core -m $mem -d $disk -n $vm  $img\n\necho\necho \"====================================================================================\"\necho ### 2. \u56fd\u5185\u6e90\u5904\u7406\necho\necho ### 2.1 apt \u66f4\u6362\u4e3a\u4e2d\u79d1\u5927 ustc \u6e90\nmultipass exec $vm --  sudo cp \/etc\/apt\/sources.list \/etc\/apt\/sources.list.org\nmultipass exec $vm --  sudo sed -i 's@archive.ubuntu.com@mirrors.ustc.edu.cn@g' \/etc\/apt\/sources.list\nmultipass exec $vm --  sudo sed -i 's@security.ubuntu.com@mirrors.ustc.edu.cn@g' \/etc\/apt\/sources.list\nmultipass exec $vm --  sudo apt update -y \nmultipass exec $vm --  sudo apt upgrade -y\necho\necho ### 2.2 snap \u56fd\u5185proxy\u8bbe\u5b9a(\u89c6\u9700\u8981)\necho ### multipass exec $vm --  sudo snap install snap-store-proxy\necho ### multipass exec $vm --  sudo snap install snap-store-proxy-client\n\necho\necho \"====================================================================================\"\necho ### 3.\u4f7f\u7528 sshfs \u6302\u8f7d\u4e3b\u6a5f\u5171\u4eab\u6587\u4ef6\u5939\u7ed9\u865a\u62df\u673a\necho\necho ### 3.1. \u5b89\u88c5 multipass-sshfs \u4ee5\u6302\u8f7d\u4e3b\u673a\u6587\u4ef6\u5939\nmultipass exec $vm --  sudo snap install multipass-sshfs\necho\necho ### 3.2 \u6302\u8f7d\u4e3b\u673a\u6587\u4ef6\u5939\uff08\u5230 \/mnt \u4e0b\uff09\u5982\uff1a\nmultipass mount   \/Volumes\/Work $vm:\/mnt\/work \nmultipass mount   \/Volumes $vm:\/mnt\/disks \nmultipass mount   ~  $vm:\/mnt\/host\necho\necho ### 3.3 macOS \u591a\u4e86\u4e00\u5c42\u6743\u9650\u7ba1\u7406\uff0c\u9700\u8981\u5141\u8bb8 multipassd \u7684\u78c1\u76d8\u8bbf\u95ee\u6743\u9650\uff1a\necho ###   \u6253\u5f00\u8bbe\u5b9aapp --  \u5b89\u5168\u6027\u4e0e\u9690\u79c1 -- \u9690\u79c1\u9875 -- \u5de6\u4e0b\u89d2\u89e3\u9501 -- \u5b8c\u5168\u78c1\u76d8\u8bbf\u95ee\u6743\u9650 -- \u52fe\u9009\u5141\u8bb8 multipassd\n\n\necho\necho \"====================================================================================\"\necho ### 4. \u8bbe\u7f6essh\u670d\u52a1\uff0c\u5e76\u4e3aVSCode\u8bbe\u7f6e\u6781\u9650\u6587\u4ef6\u6570\necho ### \u5bbf\u4e3b\u673a VSCode \u53ef\u900f\u8fc7 ssh \u76f4\u63a5\u7f16\u8bd1\u865a\u62df\u673a\u7684\u5de5\u7a0b\necho\necho ### 4.1 \u5bbf\u4e3b\u673a\u4f7f\u7528 `ssh-keygen` \u5efa\u7acb ssh \u516c\u94a5\uff08\u82e5\u672a\u6267\u884c\u8fc7\uff0c\u9700\u6267\u884c\u4e00\u6b21\uff09\necho ###    \u4f7f\u7528\u7f3a\u7701\u591a\u6b21 enter\u540e\uff0c\u516c\u94a5\u653e\u5728 ~\/.ssh\/id_rsa.pub\necho\necho ### 4.2 VM \u5b89\u88c5 ssh\uff0c\u5e76\u6267\u884c `ssh-keygen` \necho ###    \u4f7f\u7528\u7f3a\u7701\u591a\u6b21 enter\u540e\uff0c\u516c\u94a5\u653e\u5728 ~\/.ssh\/id_rsa.pub\nmultipass exec $vm -- sudo apt install ssh -y\nmultipass exec $vm -- ssh-keygen\necho\necho ### 4.3 sshd \u5b88\u62a4\u8fdb\u7a0b\u8bbe\u5b9a\necho ###     \u6253\u5f00\u5bc6\u7801\uff0c\u5141\u8bb8\u65e0\u5bc6\u7801\u767b\u5165\u3001\u91cd\u542f sshd \nmultipass exec $vm -- sudo sed -i 's\/PasswordAuthentication\\ no\/PasswordAuthentication yes\/g' \/etc\/ssh\/sshd_config\nmultipass exec $vm -- sudo sed -i 's\/#PermitEmptyPasswords\\ no\/PermitEmptyPasswords yes\/g' \/etc\/ssh\/sshd_config\nmultipass exec $vm -- sudo service sshd restart\necho\necho ### 4.4 \u7ed1\u5b9aVM\u7684ssh\u522b\u540d\u3001\u5e76\u4ea4\u6362\u516c\u94a5\necho ### \u7ed1\u5b9a\u865a\u62df\u673a\u540d\u79f0\u548c\u865a\u62df\u673aIP\necho \"\\nHost $vm\\n  HostName $(multipass ls | grep $vm | awk '{print $3}')\\n  User ubuntu\" &gt;&gt; ~\/.ssh\/config\necho ### \u5141\u8bb8\u4e3b\u673a\u7684\u672c\u8d26\u53f7\uff0c\u514d\u5bc6ssh\u8fdb\u865a\u62df\u673a\nmultipass exec $vm -- sed -i \"$ a\\ $(cat ~\/.ssh\/id_rsa.pub)\" .ssh\/authorized_keys\necho ### \u5141\u8bb8VM\u7684ubuntu\u8d26\u53f7\uff0c\u514d\u5bc6ssh\u8fdb\u4e3b\u673a\n#multipass exec $vm -- cat ~\/.ssh\/id_rsa.pub &gt;&gt; ~\/.ssh\/authorized_keys\necho\necho ### 4.5 \u5c06inode\u6570\u8c03\u5230\u6700\u5927\uff0c\u4ee5\u5229VSCode\u5de5\u4f5c\necho ###    Vscode \u4f1a\u540c\u65f6\u64cd\u4f5c\u591a\u4e2a\u6587\u4ef6\uff0c\u5c06inode\u6570\u7ed9\u5230\u5230\u6700\u5927\u503c\uff08524288\uff09\u5e76\u91cd\u7f6e\u6b64\u503c\u3002\nmultipass exec $vm -- sudo sed -i \"$ a\\fs.inotify.max_user_watches=524288\" \/etc\/sysctl.conf\nmultipass exec $vm -- sudo sysctl -p\necho\necho \"====================================================================================\"\necho ### 5. \u4e3b\u673a\u7aef\u5b89\u88c5 VSCode \u5e76\u8bbe\u7f6essh\u8fdc\u7a0b\u8fde\u63a5\u5230\u865a\u62df\u673a  \necho\necho ### 5.1 \u5bbf\u4e3b vscode\u5b89\u88c5\uff1a\necho ###    brew install visual-studio-code\necho\necho ### 5.2 \u6267\u884c vscode app\uff0c\u5e76\u5b89\u88c5 Remote - SSH \u6269\u5c55\uff1a\necho\necho ### 5.3 \u7528 vscode \u8fdc\u7aef\u8fde\u63a5\u865a\u62df\u673a\necho ###    vscode\u5b89\u88c5 ssh remote\u6269\u5c55\uff0c\u7136\u540e\u7528\u5de6\u4e0b\u89d2\u7684\u8fde\u63a5\u6309\u94ae\u8fde\u63a5VM\necho ###    \u7b2c\u4e00\u6b21\u8fde\u63a5\u4f1a\u53d1\u73b0\u91d1\u94a5\u9700\u6c42\u3002\u70b9\u9009 continue\uff0c\u4f1a\u628a3\u4e2a\u91d1\u94a5\u653e\u5230 ~\/ssh\/know_hosts\u4e2d\necho ###    \u4e4b\u540evscode\u4f1a\u900f\u8fc7ssh\u5728\u865a\u62df\u673a\u5b89\u88c5ssh\u4e0b\u7684\u79c1\u5bc6\u670d\u52a1\uff0c\u4ee5\u8ba9vscode\u66f4\u597d\u7684\u548cVM\u534f\u540c\u5de5\u4f5c\u3002  \n\n#\u663e\u793a\u865a\u62df\u673a\u7684\u5b89\u88c5\u4fe1\u606f\nmultipass info $vm \necho\necho \"====================================================================================\"\necho ### 6. \u865a\u62df\u673a\u5b89\u88c5 XRDP \u670d\u52a1\u4ee5\u53ca\u6700\u7b80\u684c\u9762\u73af\u5883\necho\necho ### 6.1 \u865a\u62df\u673a\u5b89\u88c5\u6700\u7b80ubuntu\u684c\u9762\u5957\u4ef6\u4e0exrdp\u670d\u52a1\necho\nif [ \"18.04\"!=\"$img\" ]; then\n    multipass exec $vm -- sudo apt install -y ubuntu-desktop-minimal xrdp\nelse\n    multipass exec $vm -- sudo apt install -y ubuntu-desktop xrdp\n    multipass exec $vm -- sudo apt remove libreoffice* thunderbird* totem* rhythmbox* transmission* -y\nfi\nmultipass exec $vm -- sudo apt autoremove -y\n\necho\necho ### 6.2. \u89e3\u51b3RDP\u767b\u5f55\u65f6\u53cd\u590d\u9a8c\u8bc1\u95ee\u9898\necho \"[Allow Wifi Scan]\nIdentity=unix-user:*\nAction=org.freedesktop.NetworkManager.wifi.scan;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.network-control\nResultAny=yes\nResultInactive=yes\nResultActive=yes\" | multipass exec $vm -- sudo tee \/etc\/polkit-1\/localauthority\/50-local.d\/47-allow-wifiscan.pkla\n\necho\necho ### 6.3. \u89e3\u51b3\u201c\u8272\u5f69\u7ba1\u7406\u8bbe\u5907\u201d \/ \u201ccolor managed device\u201d \u5f39\u7a97\necho \"[Allow Colord all Users]\nIdentity=unix-user:*\nAction=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile\nResultAny=no\nResultInactive=no\nResultActive=yes\" | multipass exec $vm -- sudo tee \/etc\/polkit-1\/localauthority\/50-local.d\/45-allow-colord.pkla\n\necho\necho ### 6.4. \u89e3\u51b3\u201c\u5237\u65b0\u7cfb\u7edf\u8f6f\u4ef6\u6e90\u9700\u8981\u8ba4\u8bc1\u201d \/ \u201crefresh the system repositories\u201d \u5f39\u7a97\necho \"[Allow Refresh Repository all Users]\nIdentity=unix-user:*\nAction=org.freedesktop.packagekit.system-sources-refresh\nResultAny=no\nResultInactive=no\nResultActive=yes\" | multipass exec $vm -- sudo tee \/etc\/polkit-1\/localauthority\/50-local.d\/46-allow-packagekit.pkla\n\necho\necho ### 6.5. \u6ce8\u91ca\u6389 `AutomaticLoginEnable` \u548c `AutomaticLogin` \u53d8\u91cf\uff1a\nmultipass exec $vm -- sudo sed -i 's\/AutomaticLoginEnable\/#AutomaticLoginEnable\/g' \/etc\/gdm3\/custom.conf\nmultipass exec $vm -- sudo sed -i 's\/AutomaticLogin\/#AutomaticLogin\/g' \/etc\/gdm3\/custom.conf\n\necho\necho ### 6.6 \u91cd\u542fRDP\u670d\u52a1\nmultipass exec $vm -- sudo systemctl restart xrdp\necho\necho ### 6.7 \u67e5\u770b XRDP\u670d\u52a1 \u548c\u865a\u62df\u673a\u73b0\u72b6\nmultipass exec $vm -- sudo systemctl status xrdp\nmultipass ls | grep $vm\n\necho\necho ### 6.8 \u4e3b\u673a\u5b89\u88c5 RDP Client app\necho macOS \u5728 App Store \u4e2d\u641c\u5bfb RDP\uff0c\u4e0b\u8f7d\u5fae\u8f6f\u7684 \u201cMicrosoft Remote Desktop\u201d \u5b89\u88c5\u3002\necho \u4ece\u524d\u9762\u7684 multipass ls | grep $vm \u547d\u4ee4\u53ef\u770b\u5230\u865a\u62df\u673a \u540d\u79f0\u548c IP\uff0c\u7528\u4e8e\u8bbe\u5b9aRDP\u8fde\u63a5\u53c2\u6570\u3002\necho \u52a0\u4e0a\u8d26\u53f7\u662f ubuntu\uff0c\u6682\u65f6\u4e0d\u7528\u5bc6\u7801\uff0c\u5c31\u53ef\u4ee5\u8bbe\u5b9a\u6b64\u865a\u62df\u673a\u7684\u73af\u5883 RDP\n\necho\necho \"====================================================================================\"\necho ### 7 \u5b89\u88c5 OpenVPN \u4e0e NetworkManager \u7684\u7ba1\u7406 GUI\necho \"    renderer: NetworkManager\" | multipass exec $vm -- sudo tee -a \/etc\/netplan\/50-cloud-init.yaml\nmultipass exec $vm -- sudo apt install -y openvpn network-manager-openvpn network-manager-openvpn-gnome\nmultipass exec $vm -- sudo netplan apply\necho\necho ### 7.1 \u5b89\u88c5 OpenVPN\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u8bbe\u5b9a\u6587\u4ef6\uff08GUI\u624b\u52a8\uff09 \necho \u9700\u8981\u81ea\u884c\u81ea\u670d\u52a1\u5668\u4e0b\u8f7d ovpn\u6587\u4ef6\uff0c\u7136\u540e\u5728 RDP\u4e0b \u900f\u8fc7 NetworkManager \u6dfb\u52a0VPN\u8bbe\u5b9a\u6587\u4ef6\u3002\u3002\u3002\n#\n\necho\necho \"====================================================================================\"\necho ### 8 \u5b89\u88c5 Google Chrome \uff08\u4ece\u5b98\u7f51\u5b89\u88c5 amd64 \u7248\u7684 deb \u5305\uff09\nmultipass exec $vm -- wget https:\/\/dl.google.com\/linux\/direct\/google-chrome-stable_current_amd64.deb\nmultipass exec $vm -- sudo dpkg -i google-chrome-stable_current_amd64.deb\necho \u5b89\u88c5\u540e\u53ef\u4ee5\u900f\u8fc7 RDP\u6267\u884c chrome\uff0c\u4f1a\u6709\u4e00\u4e9b keyring \u5bc6\u7801\u4e0e\u521d\u59cb\u5316\u8981\u6c42\u3002\u3002\u3002\n\n\necho\necho \"====================================================================================\"\necho ### 9 \u4f7f\u7528SAMBA\u534f\u8bae\u5171\u4eab\u865a\u62df\u673a\u6587\u4ef6\u5939\necho ### samba\u534f\u8bae\u662f\u5fae\u8f6fWindows\u9884\u8bbe\u7684\u5c40\u57df\u7f51\u6587\u4ef6\u5171\u4eab\u534f\u8bae\uff0cmacOS\u5185\u5efa\u652f\u6301\u3002linux\u7cfb\u7edf\u9700\u8981\u5b89\u88c5\u670d\u52a1\u3002\necho setup SAMBA server \n\necho ### 9.1 \u5b89\u88c5Samba\u670d\u52a1\nmultipass exec $vm -- sudo apt install samba samba-common -y\n\necho ### 9.2 \u914d\u7f6e\u9700\u8981\u591a\u4eba\u5171\u4eab\u7684\u76ee\u5f55\uff08\u53ef\u9009\uff09\necho ### \u6539\u53d8\u9700\u8981\u5171\u4eab\u76ee\u5f55\u7684\u6743\u9650\uff0c\u8ba9\u5176\u4ed6\u4eba\u53ef\u4ee5\u66f4\u6539\u6587\u4ef6\u548c\u76ee\u5f55\uff0c\necho ### \u4ee5 $vm_share \u4e3a\u4f8b\uff08\u82e5\u591a\u4eba\u4f7f\u7528\u540c\u4e00\u670d\u52a1\u5668\u5efa\u8bae\u5728\u6bcf\u4e2a\u7528\u6237\u5bb6\u76ee\u5f55\u5355\u72ec\u5171\u4eab\uff0c\u4e0d\u5efa\u8bae\u5171\u4eab\u6574\u4e2ahome\u76ee\u5f55\uff0c\u9632\u6b62\u8bef\u64cd\u4f5c\u5220\u9664\u4ed6\u4eba\u6587\u4ef6\uff09\nmultipass exec $vm -- mkdir -p \/home\/ubuntu\/$vm_share\nmultipass exec $vm -- sudo chmod 770 \/home\/ubuntu\/$vm_share \n\necho ### 9.3 \u6dfb\u52a0samba\u7528\u6237\u5bc6\u7801\necho ### \u6dfb\u52a0samba\u7528\u6237\/\u5bc6\u7801\uff0c\u7528\u4e8e\u5176\u4ed6\u4eba\u6216\u8bbe\u5907\u8ba4\u8bc1\uff0c\u8fd9\u91cc\u6dfb\u52a0\u7684\u7528\u6237\u9700\u8981\u5728\u7cfb\u7edf\u8d26\u53f7\u4e2d\u5b58\u5728\uff0c\u5426\u5219\u6dfb\u52a0\u5931\u8d25\nmultipass exec $vm -- sudo smbpasswd -a ubuntu\n\necho ### 9.4 \u914d\u7f6esamba\necho ### \u5148\u5907\u4efd\uff0c\u518d\u4fee\u6539 \/etc\/samba\/smb.conf  \u914d\u7f6e\u6587\u4ef6\uff0c\u6dfb\u52a0\u5171\u4eab\u6587\u4ef6\u5939\u3002\nmultipass exec $vm -- sudo cp \/etc\/samba\/smb.conf \/etc\/samba\/smb.conf.old\n\necho ### \u5728 \/etc\/samba\/smb.conf \u5c3e\u7aef\u6dfb\u52a0\u4e00\u4e2a\u5171\u4eab\u6587\u4ef6\u5939\uff1a\necho \"[$vm_share]\\\n    \\n  comment = $vm $vm_share dir\\\n    \\n  path = \/home\/ubuntu\/$vm_share\\\n    \\n  guest ok = no\\\n    \\n  browseable = yes\\\n    \\n  create mask = 0775\\\n    \\n  directory mask = 0775\\\n    \\n  valid users = ubuntu,root\\\n    \\n  write list = ubuntu,root\" | multipass exec $vm -- sudo tee -a  \/etc\/samba\/smb.conf\n\n\necho\necho ### 9.5 \u91cd\u542fSAMBA\u670d\u52a1\uff1a\nmultipass exec $vm -- sudo service smbd restart\n\necho\necho ### 9.6 \u5728\u5bbf\u4e3b\u673a\u4e0b\u5c31\u80fd\u7528\u521a\u521a\u8bbe\u5b9a\u7684 ubuntu \u7684 smb \u5bc6\u7801\uff0c\u5b58\u53d6 $vm_share \u6587\u4ef6\u5939\u4e86\u3002\necho macOS \u5728 browser \u5730\u5740\u680f\u8f93\u5165 smb:\/\/$vm\/$vm_share \u5c31\u80fd\u6253\u5f00 Finder\uff0c\u8f93\u5165SAMBA\u7528\u6237\u5bc6\u7801\uff0c\u8fde\u63a5\u7f51\u76d8\u4e86\u3002\n\n\n\necho\necho \"====================================================================================\"\necho ### 10. agl\necho\n\n#echo 10.1 AGL host tool prepare on ubuntu 20.04\n# multipass exec $vm -- sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib \\\n#     build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \\\n#     xz-utils debianutils iputils-ping libsdl1.2-dev xterm curl -y\n\necho 10.1 AGL host tool prepare on ubuntu 22.04\nmultipass exec $vm -- sudo apt install gawk wget git diffstat unzip texinfo gcc-multilib \\ \n     build-essential chrpath socat cpio python2 python3 python3-pip python3-pexpect \\\n     xz-utils debianutils iputils-ping libsdl1.2-dev xterm curl -y\n\necho\necho 10.2 AGL download\necho these code shound be executed on the VM, not through the host multipass ..\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u952e\u5b89\u88c5 multipass \u865a\u62df\u673a script macOS \/ unix shell \u4e0b\uff0c\u4f7f\u7528 multi&#8230; &raquo; <a class=\"read-more-link\" href=\"https:\/\/vm1.go2see.me\/?p=26\">\u95b1\u8b80\u5168\u6587<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-26","post","type-post","status-publish","format-standard","hentry","category-multipass"],"_links":{"self":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/26","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=26"}],"version-history":[{"count":24,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/26\/revisions"}],"predecessor-version":[{"id":82,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/26\/revisions\/82"}],"wp:attachment":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=26"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}