{"id":221,"date":"2022-12-24T01:03:35","date_gmt":"2022-12-23T17:03:35","guid":{"rendered":"https:\/\/vm1.go2see.me\/?p=221"},"modified":"2023-02-04T09:51:57","modified_gmt":"2023-02-04T01:51:57","slug":"221","status":"publish","type":"post","link":"https:\/\/vm1.go2see.me\/?p=221","title":{"rendered":"macOS\u4e0b\u7684 multipass-vscode \u7f16\u8bd1\u73af\u5883\u5efa\u7acb"},"content":{"rendered":"<h1>macOS\u4e0b\u7684 multipass-vscode \u7f16\u8bd1\u73af\u5883\u5efa\u7acb<\/h1>\n<blockquote><p>\n  \u4f9d\u64da\u6b64\u7bc7\u505a\u4e86\u4e00\u500bscript\u3002<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u592a\u9577\u4e0d\u770b\u7684\u53ef\u4ee5<strong><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/vm1.go2see.me\/2022\/11\/30\/%e4%b8%80%e9%94%ae%e5%ae%89%e8%a3%85-multipass-%e8%99%9a%e6%8b%9f%e6%9c%ba-shell\/\">\u53bb\u9019\u88e1<\/a><\/strong><\/span>\n<\/p><\/blockquote>\n<p>[toc]<\/p>\n<h1>Part 1. \u865a\u62df\u673a\u4e0e\u5de5\u5177\u8bbe\u7f6e<\/h1>\n<h2>0. \u4ecb\u7ecd<\/h2>\n<p>Canonical \u516c\u53f8\u4e3a\u5176 Ubuntu\u7cfb\u7edf\u5236\u4f5c\u4e86 multipass \u8f7b\u91cf\u7684\u8de8\u5e73\u53f0\u7684\u865a\u62df\u73af\u5883\uff0c\u53ef\u5728linux\u7684KVM\u3001 Windows \u7684 Hyper-V \u548c macOS \u7684 HyperKit \u865a\u62df\u6280\u672f\u4e0b\uff0c\u4ee5\u8f03\u5c11\u7684\u8d44\u6e90\u548c\u6027\u80fd\u635f\u8017\uff0c\u5feb\u901f\u7684\u5efa\u7acb\u8f7b\u91cf\u7684\u865a\u62df\u673a\u5b9e\u4f53\uff0c\u7528\u8d77\u4f86\u6bd4docker\u7c21\u55ae\u65b9\u4fbf\u3002<\/p>\n<p>Canonical\u5b98\u65b9\u7ef4\u62a4\u7684ubuntu\u955c\u50cf\uff0c\u90fd\u53ef\u4ee5\u7528\u6765\u5feb\u901f\u7684\u5efa\u7acb\u865a\u62df\u673a\u5b9e\u4f53\u3002\u76ee\u524d\u5bf9x86 macOS\u5bbf\u4e3b\u63d0\u4f9b\u7684\u865a\u62df\u673a\u955c\u50cf\u6709\uff1a<\/p>\n<pre><code class=\"language-bash line-numbers\">$ multipass find\n\nImage                       Aliases           Version          Description\nsnapcraft:core18            18.04             20201111         Snapcraft builder for Core 18\nsnapcraft:core20            20.04             20210921         Snapcraft builder for Core 20\nsnapcraft:core22            22.04             20220426         Snapcraft builder for Core 22\n18.04                       bionic            20221207         Ubuntu 18.04 LTS\n20.04                       focal             20221213         Ubuntu 20.04 LTS\n22.04                       jammy,lts         20221214         Ubuntu 22.04 LTS\nanbox-cloud-appliance                         latest           Anbox Cloud Appliance\ncharm-dev                                     latest           A development and testing environment for charmers\ndocker                                        latest           A Docker environment with Portainer and related tools\njellyfin                                      latest           Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.\nminikube                                      latest           minikube is local Kubernetes\n<\/code><\/pre>\n<blockquote><p>\n  \u5e95\u4e0b\u5e7e\u500b\u7279\u6b8a\u7684\u93e1\u50cf\u6211\u76ee\u524d\u6c92\u6709\u5617\u8a66\uff0c\u5176\u4e2ddocker\u93e1\u50cf\u53ef\u53c3\u8003<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/www.cnblogs.com\/somefuture\/p\/16773236.html\">\u7db2\u4e0a\u627e\u7684\u9019\u7bc7\u3002\u3002\u3002<\/a>\n<\/p><\/blockquote>\n<p>\u4e0d\u540c\u9879\u76ee\u7684SDK\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u7cfb\u7edf\u5e93\u9700\u6c42\uff0c\u5f80\u5f80\u4f1a\u9020\u6210\u76f8\u4e92\u95f4\u7684\u51b2\u7a81\u3002\u5bf9\u6bcf\u4e2a\u5f00\u53d1\u73af\u5883\u5efa\u7acb\u8f7b\u91cf\u3001\u5e72\u51c0\u7684\u865a\u62df\u73af\u5883\u6765\u6267\u884c\u5de5\u4f5c\uff0c\u662f\u5f88\u597d\u7684\u89e3\u51b3\u529e\u6cd5\u3002<\/p>\n<blockquote><p>\n  \u4f8b\u5982 OpenWRT SDK\uff0c\u4e0d\u80fd\u5728 ubuntu 20.04 \u53ca\u4ee5\u4e0a\u7684\u73af\u5883\u65e0\u75db\u7684\u7f16\u8bd1\u3002\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 multipass \u8f7b\u6613\u7684\u5efa\u7acb\u4e00\u4e2a ubuntu 18.04 \u5f00\u53d1\u73af\u5883\uff0c\u5c06 OpenWRT \u7684 SDK\u548c\u5bfc\u5165\u7684\u7cfb\u7edf\u5e93\uff0c\u9694\u79bb\u5230\u6b64\u865a\u62df\u673a\u5b9e\u4f53\u4e0a\u8fd0\u884c\u3002\n<\/p><\/blockquote>\n<p>VS Code\u8d8a\u6765\u8d8a\u591a\u4eba\u4f7f\u7528\u4e86\uff0c\u8de8\u5e73\u53f0\u3001\u63d0\u4f9b\u5927\u91cf\u63d2\u4ef6\u3001\u4e14\u5bb9\u6613\u5ba2\u5236\u5316\u3002\u65b0\u7248\u7684 VS Code\u63d0\u4f9b\u4e86 Remote SSH\u63d2\u4ef6\uff0c\u8fd9\u6837\u6211\u4eec\u53ea\u8981\u5728\u5bbf\u4e3b\u673a\u5b89\u88c5\u4e00\u5957 VSCode\uff0c\u8bbe\u5b9a\u597d\u6bcf\u4e2a\u865a\u62df\u673a\u5b9e\u4f53\u7684 sshd \u670d\u52a1\uff0c\u6240\u6709\u7684\u865a\u62df\u673a\u5b9e\u4f53\u53ef\u4f7f\u7528\u540c\u4e00\u5957 VS Code\uff0c\u4e0d\u540c\u7684\u63d2\u4ef6\u73af\u5883\u914d\u7f6e\uff0c\u5b9a\u5236\u81ea\u5df1\u7684IDE\u73af\u5883\u6765\u5de5\u4f5c\u3002<\/p>\n<p>\u6709\u7684\u5e94\u7528\u573a\u666f\u4f1a\u9700\u8981\u6267\u884c\u865a\u62df\u673a\u4e2d\u7684\u56fe\u5f62\u5e94\u7528\u3002\u9664\u4e86\u5728\u865a\u62df\u673a\u4e0b\u5b89\u88c5X11\u684c\u9762\u73af\u5883\uff0c\u518d\u4f7f\u7528 RDP\u6216VNC\u8fde\u63a5\u865a\u62df\u673a\u684c\u9762\u7684\u65b9\u6cd5\u5916\uff0c\u6211\u4eec\u53ef\u5728host\u4e0a\u5efa\u7acbX11 \u670d\u52a1\uff0c\u76f4\u63a5\u5c06\u865a\u62df\u673a\u7684X11 GUI\u8f93\u51fa\u8f6c\u5411\u5230\u5bbf\u4e3b\u673a\u3002\u4e09\u5927\u5e73\u53f0\u90fd\u6709\u53ef\u7528\u7684X11\u670d\u52a1\u5668\u3002\u5bbf\u4e3b\u673a\u82e5\u662fLinux\u53ef\u76f4\u63a5\u4f7f\u7528X11\u670d\u52a1\uff0cWindows \u4e0b\u53ef\u4f7f\u7528Xming\/VCXrv \u5e94\u7528\uff0cmacOS\u4e0b\u53ef\u4f7f\u7528XQuartz \u5e94\u7528\u6765\u63d0\u4f9bX11\u670d\u52a1\u3002<\/p>\n<p>HyperKit\/Hyper-V \u7b49\u8f7b\u91cf\u865a\u62df\u5316\u6280\u672f\u4f7f\u7528\u7cfb\u7edf\u8d44\u6e90\u8f83\u4f4e\uff0c\u4f46\u5e76\u672a\u6a21\u62df\u6574\u673a\u3002\u5728\u5d4c\u5165\u5f0f\u5f00\u53d1\u7684\u573a\u666f\u4e0b\uff0c\u4f1a\u9700\u8981\u900f\u8fc7USB\u6216\u5176\u4ed6\u5468\u8fb9\u6765\u5b8c\u6210\u70e7\u5f55\u3001\u4eff\u771f\u7b49\u5de5\u4f5c\uff0c\u6b64\u65f6\u6211\u4eec\u4f1a\u9700\u8981\u900f\u8fc7\u5bbf\u4e3b\u673a\u7684\u5de5\u5177\u6765\u8fd0\u884c\u3002\u5229\u7528scp\u3001sshfs\u3001\u6216SAMBA \u6587\u4ef6\u670d\u52a1\u53ef\u4ee5\u5c06\u6587\u4ef6\u590d\u5236\uff0c\u6216\u5c06\u6587\u4ef6\u7cfb\u7edf\u5171\u4eab\u7ed9\u5bbf\u4e3b\u673a\u6765\u5b8c\u6210\u8fd9\u4e9b\u786c\u4ef6\u9700\u6c42\u7684\u5de5\u4f5c\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220107204249422.png\" alt=\"\" \/><\/p>\n<p>\u4f7f\u7528Multipass\u4e5f\u53ef\u5c06\u5efa\u7acb\u597d\u7684\u865a\u62df\u673a\u5b9e\u4f53\u5207\u6362\u5230 Virtualbox \u865a\u62df\u73af\u5883\u6267\u884c\uff0c\u6709\u673a\u4f1a\u5229\u7528 Virtualbox \u6302\u8f7dUSB\u5468\u8fb9\uff0c\u5728\u865a\u62df\u673a\u4e2d\u63a7\u5236\u7ba1\u7406\u8bbe\u5907\u3002\u4f46\u5f53\u865a\u62df\u7cfb\u7edf\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u76f4\u63a5\u91c7\u7528 Parallels\/Virtualbox\/Vmware \u6216\u5176\u4ed6\u5b8c\u6574\u7684\u6a21\u62df\u5668\u5de5\u4f5c\u4f1a\u66f4\u4e3a\u76f4\u89c2\u3002<\/p>\n<p>\u5728\u6b64\u6211\u4eec\u4f9d\u7167\u5b9a\u5236\u9879\u76ee\u7684\u9700\u6c42\uff0c\u4e00\u6b65\u6b65\u7684\u5b8c\u6210 multipass + VS Code IDE \u5f00\u53d1\u73af\u5883\u5efa\u8bbe\u5de5\u4f5c\u3002<\/p>\n<p>\u5728\u6b64\u6211\u4eec\u4f7f\u7528\u4e00\u4e2a\u81ea\u52a8\u5316\u7684\u811a\u672c\uff0c\u7528\u5f88\u5c11\u7684\u9009\u9879\u81ea\u52a8\u751f\u6210\u865a\u62df\u673a\uff0c\u5e76\u505a\u9700\u8981\u7684\u8bbe\u5b9a\u3002\u4ee5\u4e0b\u5206\u7ae0\u8282\u4ecb\u7ecd\u6b64\u811a\u672c\u3002\u5e76\u5728\u9644\u5f55\u5f20\u8d34\u5b8c\u6574\u811a\u672c\u3002<\/p>\n<h2>0. \u4f7f\u7528 brew \u5728Mac\u4e0a \u5b89\u88c5 multipass<\/h2>\n<p>\u4f7f\u7528 brew cask \u5b89\u88c5\u7ba1\u7406 multipass\uff0c\u4ee5\u540e\u53ef\u4ee5\u968f brew upgrade \u66f4\u65b0\uff1a<\/p>\n<pre><code class=\"language-bash line-numbers\">brew cask install multipass\n<\/code><\/pre>\n<hr \/>\n<h2>1. \u5efa\u7acb multipass \u865a\u62df\u673a<\/h2>\n<p>multipass \u4f7f\u7528 <code>launch<\/code> \u547d\u4ee4\u5efa\u7acb\u865a\u62df\u673a\uff0c\u6211\u4eec\u7528 <code>vm<\/code>\uff08\u865a\u62df\u673a\u540d\uff09\u3001<code>img<\/code>\uff08\u9009\u62e9\u7684ubuntu\u955c\u50cf\uff09\u3001<code>usr<\/code>\uff08RDP\u8fdc\u7aef\u684c\u9762\u7528\u6237\u540d\uff09\u3002<code>core<\/code>\uff08\u865a\u62df\u673aCPU\u6838\u5fc3\u6570\uff09\u3001<code>mem<\/code>\uff08\u865a\u62df\u673aRAM\u5927\u5c0f\uff09\u3001<code>disk<\/code>\uff08\u865a\u62df\u673a\u78c1\u76d8\u5927\u5c0f\uff09\u5f53\u9009\u62e9\u53c2\u6570\u3002<\/p>\n<p><code>usr<\/code> \u53c2\u6570\u53ea\u5728\u5b89\u88c5RDP\u65f6\u6dfb\u52a0\u989d\u5916\u7684\u7528\u6237\u8d26\u6237\uff0c\u5efa\u7acb\u865a\u62df\u673a\u65f6\u4e0d\u4f7f\u7528\u3002<\/p>\n<pre><code class=\"language-bash line-numbers\">#==============================================================\n# 1. \u5efa\u7acb multipass \u865a\u62df\u673a\n# 1.1 Script \u7f3a\u7701\u7684\u53c2\u6570\u4f9d\u5e8f\u4e3a\uff1a\u865a\u62df\u673a\u540d\u7a31\u3001\u9009\u62e9\u7684ubuntu\u955c\u50cf\u3001RDP\uff08\u8fdc\u7aef\u684c\u9762\uff09\u7528\u6237\u540d\u3002\nexport vm=u20 \nexport img=20.04\nexport usr=cyue\nif [ \"\" != \"$1\" ];then export vm=$1; fi\nif [ \"\" != \"$2\" ];then export img=$2; fi\nif [ \"\" != \"$3\" ];then export usr=$3; fi\n\n# 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=8G\nexport disk=80G\n\n# 1.3 \u5b89\u88c5 multipass app \uff08\u4f7f\u7528\u4e07\u80fd\u7684 brew\uff09\uff1a\n#     brew install --cask multipass\n\n# 1.4 \u4f9d\u636e\u524d\u9762\u7684\u53c2\u6570\u5efa\u7acb\u865a\u62df\u673a\uff1a\necho multipass launch  -c $core -m $mem -d $disk -n $vm  $img\nmultipass launch  -c $core -m $mem -d $disk -n $vm  $img\n<\/code><\/pre>\n<hr \/>\n<h2>2. \u56fd\u5185\u6e90\u5904\u7406<\/h2>\n<p>\u6ca1\u6709\u68af\u5b50\u662f\u5f88\u56f0\u6270\u7684\uff0c\u5404\u79cd\u5de5\u7a0b\u4e0b\u8f7d\u7f13\u6162\u6216\u5931\u8d25\u3002\u8fd8\u597dubuntu\u7684apt\u4e0esnap\u56fd\u5185\u6709\u955c\u50cf\u53ef\u4f7f\u7528\u3002<\/p>\n<p>snap proxy \u7684\u4e24\u4e2a\u5305\u5f88\u5927\uff0c\u5e76\u4e14\u4e5f\u662f\u7528 snap \u4e0b\u8f7d\uff0c\u7531\u4e8e\u6211\u4eec\u73b0\u5728\u53ea\u9700\u8981\u7528snap\u4e0b\u8f7d <code>multipass-sshfs<\/code>\uff0c\u53ef\u4f9d\u81ea\u5df1\u7684\u9700\u6c42\u51b3\u5b9a\u662f\u5426\u5b89\u88c5\u3002<\/p>\n<pre><code class=\"language-bash line-numbers\">#==============================================================\n# 2. \u56fd\u5185\u6e90\u5904\u7406\n# 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\n\n# 2.2 snap \u56fd\u5185proxy\u8bbe\u5b9a(\u89c6\u9700\u8981)\n# multipass exec $vm --  sudo snap install snap-store-proxy\n# multipass exec $vm --  sudo snap install snap-store-proxy-client\n<\/code><\/pre>\n<hr \/>\n<h2>3. \u6302\u8f7d\u4e3b\u6a5f\u5171\u4eab\u6587\u4ef6\u5939<\/h2>\n<p>\u8bb8\u591a\u4e3b\u673a\u8d44\u6e90\u53ef\u4ee5\u63d0\u4f9b\u865a\u62df\u673a\u4f7f\u7528\uff0cmultipass\u5185\u90e8\u4f7f\u7528\u53d8\u79cd\u7684sshfs\uff0c\u53ef\u4ee5\u8ba9\u865a\u62df\u673a\u6302\u8f7d(mount) \u4e3b\u673a\u7684\u5206\u533a\u6216\u6587\u4ef6\u5939\u3002\u6b64script\u793a\u8303\u6302\u8f7d\u4e24\u4e2a\u4e3b\u673a\u76ee\u5f55\u5230\u865a\u62df\u673a\u7684 <code>\/mnt<\/code> \u4e0b\uff0c\u4e00\u4e2a\u662f\u7528\u6237 home\uff08<code>~<\/code>\uff09\uff0c\u4e00\u4e2a\u662f\u4e3b\u673a\u7684\u533a\u5206\u5927\u5c0f\u5199\u5206\u533a\uff08<code>\/Volume\/Work<\/code>\uff09<\/p>\n<pre><code class=\"language-bash line-numbers\">#==============================================================\n# 3. \u6302\u8f7d\u4e3b\u6a5f\u5171\u4eab\u6587\u4ef6\u5939\n# 3.1. \u5b89\u88c5 multipass-sshfs \u4ee5\u6302\u8f7d\u4e3b\u673a\u6587\u4ef6\u5939\nmultipass exec $vm --  sudo snap install multipass-sshfs\n\n# 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   ~  $vm:\/mnt\/host\n\n# 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\n#   \u6253\u5f00 \u8bbe\u5b9aapp --&gt; \u5b89\u5168\u6027\u4e0e\u9690\u79c1 --&gt; \u9690\u79c1\u9875 --&gt; \u5de6\u4e0b\u89d2\u89e3\u9501 --&gt; \u5b8c\u5168\u78c1\u76d8\u8bbf\u95ee\u6743\u9650 --&gt; \u52fe\u9009\u5141\u8bb8 multipassd\n<\/code><\/pre>\n<blockquote><p>\n  \u26a0\ufe0f\u6ce8\u610f\uff1a\u7531\u4e8e macOS\u65b0\u589e\u52a0\u4e86\u5e94\u7528\u7684\u6587\u4ef6\u53ef\u5b58\u53d6\u6743\u9650\u7ba1\u7406\uff0c\u5b89\u88c5 multipass\u540e\u5e94\u8be5\u6253\u5f00 multipassd\u7684\u5b8c\u5168\u78c1\u76d8\u8bbf\u95ee\u6743\u9650\uff0c\u53d7macOS\u4fdd\u62a4\u7684\u6587\u4ef6\u7cfb\u7edf\u5185\u5bb9\u624d\u80fd\u6302\u8f7d\u5230\u865a\u62df\u673a\u4e2d\u4f7f\u7528\u3002\u65b9\u6cd5\uff1a<br \/>\n    <code>\u6253\u5f00 \u8bbe\u5b9aapp --&gt; \u5b89\u5168\u6027\u4e0e\u9690\u79c1 --&gt; \u9690\u79c1\u9875 --&gt; \u5de6\u4e0b\u89d2\u89e3\u9501 --&gt;  4. \u5b8c\u5168\u78c1\u76d8\u8bbf\u95ee\u6743\u9650 --&gt; \u52fe\u9009\u5141\u8bb8 multipassd<\/code> \uff0c\u53c2\u8003\u4e0b\u56fe\uff1a<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220115123339069.png\" alt=\"\" \/>\n<\/p><\/blockquote>\n<hr \/>\n<h2>4. ssh \u8fde\u63a5\u8bbe\u7f6e<\/h2>\n<p>ssh \u662f\u5b89\u5168\u52a0\u5bc6\u7684\u901a\u4fe1\u65b9\u5f0f\u3002\u867d\u7136 multipass \u63d0\u4f9b\u4e86 <code>shell<\/code> \uff08<code>sh<\/code>\uff09\u547d\u4ee4\u53ef\u4ee5\u5feb\u901f\u5207\u5165\u865a\u62df\u673a\u7684\u7ec8\u7aef\uff0c\u4f46 VScode \u7b49\u5176\u4ed6\u5e94\u7528\u4f7f\u7528\u7684\u8fd8\u662f\u6807\u51c6ssh\u3002<\/p>\n<p>\u8fd9\u91cc\u7684script\u9664\u4e86\u4e3a\u865a\u62df\u673a\u5b89\u88c5 ssh\uff0c\u8fd8\u8bbe\u7f6e\u4e86\u91d1\u94a5\uff0c\u5e76\u8ba9\u4e3b\u673a\u4e0e\u865a\u62df\u673a\u4ea4\u6362\u91d1\u94a5\uff0c\u53ef\u4ee5\u65b9\u4fbf\u3001\u514d\u5bc6\u7684ssh\u5230\u865a\u62df\u673a\u3002<\/p>\n<h3>4.1 \u5bbf\u4e3b\u673a\u5b89\u88c5\u914d\u7f6essh\u68c0\u67e5<\/h3>\n<blockquote>\n<ul>\n<li>Linux Desktop \u548c macOS\u4e00\u822c\u5df2\u5b89\u88c5\u597d\u4e86ssh client\/server\u3002<\/li>\n<li>Windows\u8981\u4ece\u5e02\u573a\u5b89\u88c5 OpenSSH\u3002<\/li>\n<li>\u82e5\u5bbf\u4e3b\u673a\u8d26\u6237\u4e0b <code>~\/.ssh\/id_rsa.pub<\/code> \u6587\u4ef6\u4e0d\u5b58\u5728\uff0c\u6267\u884c <code>ssh-keygen<\/code> \u5efa\u7acb\u91d1\u94a5\u3002<br \/>\n    \u26a0\ufe0f\uff1a\u82e5\u6587\u4ef6\u5b58\u5728\u8bf7\u4e0d\u8981\u91cd\u5efa\u91d1\u94a5\uff0c\u4ee5\u514d\u5bf9\u5176\u4ed6\u7f51\u8def\u8bbe\u5907\u8fde\u63a5\u5931\u8d25\u3002<\/li>\n<\/ul>\n<\/blockquote>\n<pre><code class=\"language-bash line-numbers\"># 1 \u5bbf\u4e3b\u673a\u4e5f\u4f7f\u7528 `ssh-keygen` \u5efa\u7acb ssh \u516c\u94a5\u3002\n#    \u82e5\u5df2\u6709 ~\/.ssh\/id_rsa.pub \u6587\u4ef6\uff0c\u8bf7\u52ff\u6267\u884c `ssh-keygen`\uff0c\u4ee5\u514d\u5bf9\u5176\u4ed6\u7f51\u8def\u8bbe\u5907\u8fde\u63a5\u5931\u8d25\u3002\n\n# 2 VM \u5b89\u88c5 ssh\uff0c\u5e76\u6267\u884c `ssh-keygen` \n#    \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\n\n# 3 sshd \u5b88\u62a4\u8fdb\u7a0b\u8bbe\u5b9a\n#     \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\n\n# 4 \u7ed1\u5b9aVM\u7684ssh\u522b\u540d\u3001\u5e76\u4ea4\u6362\u516c\u94a5\n# \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\n# \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\n# \u5141\u8bb8VM\u7684ubuntu\u8d26\u53f7\uff0c\u514d\u5bc6ssh\u8fdb\u4e3b\u673a\nmultipass exec $vm -- cat \/home\/ubuntu\/.ssh\/id_rsa.pub &gt;&gt; ~\/.ssh\/authorized_keys\n\n# 5 \u5c06inode\u6570\u8c03\u5230\u6700\u5927\uff0c\u4ee5\u5229\u672a\u6765VSCode\u5de5\u4f5c\n#    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\n\n#\u663e\u793a\u5b89\u88c5\u7684\u865a\u62df\u673a\u4fe1\u606f\nmultipass info $vm \n<\/code><\/pre>\n<h2>5 \u5bbf\u4e3b\u673a VScode \u5b89\u88c5\u8bbe\u7f6e\uff08\u53ef\u6539\u6210\u76f4\u63a5\u865a\u62df\u673a\u5b89\u88c5\uff09<\/h2>\n<p>VScode\u662f\u5fae\u8f6f\u7684\u8de8\u5e73\u53f0\u3001\u591a\u8bed\u79cd\u3001\u53ef\u6269\u5c55\u7684\u6574\u5408\u5f00\u53d1\u73af\u5883\uff08IDE\uff09\u3002<\/p>\n<h3>5.1 \u5bbf\u4e3b\u673a\u5b89\u88c5 Vscode<\/h3>\n<ul>\n<li>\u4ece\u5fae\u8f6f<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/go.microsoft.com\/fwlink\/?LinkID=534106\">\u4e0b\u8f7d<\/a>\u9002\u7528\u4e8e\u4e0d\u540c\u5e73\u53f0\u7684 <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/go.microsoft.com\/fwlink\/?LinkID=534106\">Visual Studio \u5e94\u7528<\/a>\u3002\u89e3\u538b\u540e\u653e\u5230 Applications \u6587\u4ef6\u5939\u3002<\/p>\n<\/li>\n<li>\n<p>macOS\u53ef\u4f7f\u7528 brew \u547d\u4ee4\u4e0b\u8f7d\uff1a<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\"># 6 \u5bbf\u4e3b vscode\u5b89\u88c5\uff1a\nbrew install visual-studio-code\n<\/code><\/pre>\n<h3>5.2 Vscode \u4e2d\u5b89\u88c5Remote SSH \u6269\u5c55<\/h3>\n<p>\u70b9\u51fb\u6269\u5c55\u56fe\u6807\uff0c\u641c\u7d22\u5b89\u88c5 &#8220;Remote &#8211; SSH&#8221; \u6269\u5c55\uff0c\u7528\u4e8e\u8fde\u63a5\u5230 SSH \u5bbf\u4e3b\u673a\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220106235257265.png\" alt=\"\" \/><\/p>\n<h3>5.3 Vscode \u8fdc\u7aef\u8fde\u7ebf\u8bbe\u7f6e<\/h3>\n<p>\u767b\u5165\u6216\u4fee\u6539 ssh\u5bbf\u4e3b\u673aconfig<\/p>\n<ul>\n<li>\u5b89\u88c5\u8fdc\u7a0b &#8211; SSH \u6269\u5c55\u540e\uff0c\u60a8\u5c06\u5728\u6700\u5de6\u4e0b\u89d2\u770b\u5230\u4e00\u4e2a\u65b0\u7684\u72b6\u6001\u680f\u9879\u76ee\uff08\u8fde\u7ebf\u56fe\u6807\uff09\u3002\u70b9\u51fb\u540e\u5f39\u51fa\u8fde\u63a5\u9009\u9879\uff1a<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220106235502780.png\" alt=\"\" \/><\/p>\n<ul>\n<li>\u70b9\u51fb &#8220;Connect to Host&#8221; \u53ef\u5bfb\u627e <code>~\/.ssh\/config<\/code> \u6587\u4ef6\u5df2\u5b9a\u4e49\u7684ssh\u670d\u52a1\u5668\/\u865a\u62df\u673a\uff0c\u6216\u6dfb\u52a0\u5df2\u77e5\u673a\u5668\u3002\u4e5f\u53ef\u4ee5\u70b9\u51fb\u201cOpen SSH Configuration File\u201d \u53bb\u4fee\u6539 <code>~\/.ssh\/config<\/code> \u6587\u4ef6\u5185\u5bb9\uff0c\u589e\u5220 ssh \u865a\u62df\u673a\u8bbe\u5b9a\u3002<br \/>\n\u6211\u4eec\u9009\u62e9\u4e4b\u524d\u5df2\u6dfb\u52a0\u7684 tina \u865a\u62df\u673a\u3002<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220107000214095.png\" alt=\"\" \/><\/p>\n<ul>\n<li>\u7b2c\u4e00\u6b21\u5c1d\u8bd5\u8fde\u63a5\u65f6\uff0c\u4f1a\u8be2\u95ee\u662f\u5426\u5b89\u88c5\u8fdc\u7aef\u673a\u5668\u91d1\u94a5\uff08\u5b89\u88c5\u5230\u672c\u5730 <code>~\/.ssh\/known_hosts<\/code> \uff09\uff0c\u9009 continue \u7ee7\u7eed\u3002VSCode\u8fd8\u4f1a\u5728\u8fdc\u7aef\u673a\u5668\u4e0a\u5b89\u88c5 VSCode Server\uff0c\u4ee5\u63d0\u4f9b\u8fdc\u7aef\u534f\u540c\u5f00\u53d1\u7684\u80fd\u529b\u3002<br \/>\n<img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220217000217653.png\" alt=\"\" \/><\/p>\n<\/li>\n<li>\n<p>\u82e5\u4e4b\u524d\u6709\u5c06\u4e3b\u673a\u7684\u8d26\u6237\u91d1\u94a5\u4fdd\u5b58\u5230\u865a\u62df\u673a\u8d26\u6237\u7684 <code>.ssh\/authorized_keys<\/code> \uff0c\u767b\u5f55\u65f6\u5c31\u4e0d\u4f1a\u8be2\u95ee\u8fde\u7ebf\u8d26\u6237\u7684\u5bc6\u7801\u4e86\u3002<\/p>\n<\/li>\n<li>\u8fde\u63a5\u6210\u529f\u540e\uff0c\u70b9\u51fb\u5de6\u4e0a\u89d2\u6587\u4ef6\u5939\u56fe\u6807\uff0c\u6253\u5f00\u865a\u62df\u673a\u4e2d\u7684\u5de5\u7a0b\u6587\u4ef6\u5939\u3002<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220107000345110.png\" alt=\"\" \/><\/p>\n<ul>\n<li>\u53ef\u4ee5\u7f16\u8bd1\u5de5\u7a0b\u6587\u4ef6\u4e86\u3002\u5728Vscode \u4e3b\u83dc\u5355\u7684 \u201c\u67e5\u770b\u201d\u4e0b\u9009\u62e9\u201c\u7ec8\u7aef\u201d\uff0capp \u53f3\u4e0b\u65b9\u4f1a\u5207\u5272\u51fa\u4e00\u4e2a\u767b\u5165\u5230\u865a\u62df\u673a\u7684\u7ec8\u7aef\u6846\u3002\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u5728\u6b64\u7ec8\u7aef\u6846\u505a\u7f16\u8bd1\u5de5\u7a0b\u7684\u547d\u4ee4\uff0c\u6216\u5176\u4ed6\u5bf9\u865a\u62df\u673a\u7684\u64cd\u4f5c\u4e86\u3002<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220107000746451.png\" alt=\"\" \/><\/p>\n<p>\u53ef\u4ee5\u7528 VS code IDE\u505a\u5f00\u53d1\u5de5\u4f5c\u4e86\u3002\u3002\u3002<\/p>\n<hr \/>\n<h2>6. \u4e3a\u865a\u62df\u673a\u6dfb\u52a0\u56fe\u5f62\u754c\u9762<\/h2>\n<blockquote><p>\n  \u9700\u6c42\u573a\u666f\u6848\u4f8b\uff1a<\/p>\n<ul>\n<li>\u573a\u666f1: \u82e5\u6211\u4eec\u5f00\u53d1\u7684\u662f Linux\u4e0b\u7684GUI\u7a0b\u5f0f\uff0c\u5f53\u7136\u4f1a\u9700\u8981\u80fd\u80fd\u900f\u8fc7X11\u6765\u663e\u793a\u4e86\u3002<\/li>\n<li>\u573a\u666f2: \u6709\u4e9bGUI\u5de5\u5177\u53ea\u6709Linux\u7248\u672c\uff0c\u6ca1\u6709macOS\/Wondows\u7248\u672c\uff0c\u6211\u4eec\u5c31\u9700\u8981\u5728\u865a\u62df\u673a\u4e2d\u8fd0\u884c\u4ed6\u4eec\u3002<\/li>\n<\/ul>\n<\/blockquote>\n<p>\u9664\u4e86\u53ef\u4ee5\u5728\u865a\u62df\u673a\u5b89\u88c5\u5404\u79cd\u684c\u9762\u73af\u5883\uff0c\u5e76\u5b89\u88c5VNC\u6216RDP\u670d\u52a1\uff0c\u4f9b\u5bbf\u4e3b\u673a\u767b\u5165\u7684\u65b9\u5f0f\u5916\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u5bbf\u4e3b\u673a\u7aef\u5b89\u88c5 X11\u670d\u52a1\uff0c\u76f4\u63a5\u5c06\u865a\u62df\u673a\u7684GUI\u663e\u793a\u8f93\u51fa\u6307\u5411\u5230\u5bbf\u4e3b\u673a\u3002\u8fd9\u662f\u8fd9\u7ae0\u8981\u505a\u7684\u3002<\/p>\n<p>\u672c\u7ae0\u63d0\u4f9b\u4e24\u79cd\u65b9\u5f0f\u8ba9\u865a\u62df\u673a\u8f93\u51fa\u56fe\u50cf\u5230\u4e3b\u673a\u4e0a\uff1a<\/p>\n<ul>\n<li>\u7b2c\u4e00\u79cd\u65b9\u6cd5\u662f\u5728\u5bbf\u4e3b\u673a\u7aef\u5b89\u88c5 X11\u670d\u52a1\uff08\u5982 macOS\u7684XQuartz\uff09\uff0c\u76f4\u63a5\u5c06\u865a\u62df\u673a\u7684GUI\u663e\u793a\u8f93\u51fa\u6307\u5411\u5230\u5bbf\u4e3b\u673a\u3002\u8fd9\u4e2a\u65b9\u6cd5\u4e0d\u5fc5\u5b89\u88c5X11\u684c\u9762\uff0c\u76f4\u63a5\u628a\u5e94\u7528\u7684 X11 \u56fe\u5f62\u9700\u6c42\u5bfc\u5411\u5bbf\u4e3b\u673a\u7684 XQuartz\u663e\u793a\u3002<\/p>\n<\/li>\n<li>\n<p>\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u662f\u5bbf\u4e3b\u673a\u4f7f\u7528\u5fae\u8f6f\u7684RDP\u5de5\u5177\uff08Windows\u81ea\u5e26\uff0cmacOS\u4e5f\u53ef\u4ece\u5fae\u8f6f\u53d6\u5f97\uff09\uff0c\u8fdc\u7aef\u8fde\u63a5\u865a\u62df\u673a\u684c\u9762\u3002<\/p>\n<\/li>\n<\/ul>\n<h3>6.1 \u4f7f\u7528 XQuartz \u63d0\u4f9b\u865a\u62df\u673a X11 GUI\uff08\u53ef\u9009\uff0c\u975e\u5fc5\u8981\uff09<\/h3>\n<blockquote>\n<p>\u82e5\u6709\u5b8c\u6574GUI\u684c\u9762\u9700\u6c42\uff0c\u53ef\u8df3\u5230\u4e0b\u4e00\u8282\u3002\u4f7f\u7528RDP\u6bd4 Xquartz\u66f4\u5bb9\u6613\uff0c\u4e0d\u8fc7\u8f83\u5360\u7528\u7a7a\u95f4\u3002\n<\/p><\/blockquote>\n<h4>6.1.1 \u5b89\u88c5\u8bbe\u5b9a XQuartz\uff1a<\/h4>\n<pre><code class=\"language-bash line-numbers\">#==============================================================\n# 6.1 \u63d0\u4f9b\u865a\u62df\u673a X11 GUI - \u4f7f\u7528 XQuartz\uff08\u82e5\u53ea\u60f3\u8981\u5b8c\u6574\u684c\u9762\u8df3\u5230\u4e0b\u4e00\u7ae0\uff09\n# 6.1.1. \u5b89\u88c5 XQuartz, \u53ef\u7528\u842c\u80fd\u7684 brew\uff1a\nbrew install --cask xquartz\n\n# 6.1.2. \u8a2d\u5b9a XQuartz app: \n#  xhost&amp; \u5728\u80cc\u666f\u6253\u5f00 XQuartz.app\u3002\n#  - app\u83dc\u5355 --&gt; \u504f\u597d --&gt; \u5b89\u5168\u6027\u9875\u9762\uff0c\u52fe\u9009\u5141\u8bb8\u4ece\u7f51\u8def\u5ba2\u6237\u7aef\u94fe\u63a5\u3002\nxhost&amp;\n\n# 6.1.3. \u5b89\u88c5\u57fa\u7840 X11\u5eab\uff0c\u7528\u4e8e\u76f4\u8fde host\u7684 X11 \u3002\nmultipass exec $vm -- sudo apt install xinit -y\n\n# 6.1.4. VM X11\u76f8\u5173\u7684\u8a2d\u5b9a\uff1a\n#  - \u8bbe\u5b9a DISPLAY \u73af\u5883\u53d8\u91cf\u3001\u94fe\u63a5\u4e3b\u673a .Xauthority \u6587\u4ef6\u3001\u6302\u8f7d\u4e3b\u673a X11 \u6682\u5b58\u76ee\u5f55\u3002\nmultipass exec $vm -- sed -i \"$ a\\export DISPLAY=$\\(echo $\\SSH_CLIENT |awk '{print $\\1}'):0\"  \/home\/ubuntu\/.bashrc \nmultipass exec $vm -- ln -s \/mnt\/host\/.Xauthority .Xauthority\nmultipass mount \/tmp\/.X11-unix $vm:\/tmp\/.X11-unix\n\n<\/code><\/pre>\n<p>\u5b89\u88c5 script \u5728\u6267\u884c <code>xhost&amp;<\/code> \u540e\uff0c\u5373\u5728\u540e\u53f0\u6253\u5f00 xquartz app\u3002\u6211\u4eec\u9700\u8981\u5bf9\u6b64app\u505a\u8bbe\u5b9a\uff1b<\/p>\n<p>\u6253\u5f00 Xquartz \u83dc\u5355 &#8211;>  \u504f\u597d\u8bbe\u7f6e &#8212; > \u5b89\u5168\u6027\uff0c\u52fe\u9009\u5141\u8bb8\u4ece\u7f51\u8def\u5ba2\u6237\u7aef\u94fe\u63a5\u5373\u53ef\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220118112144555.png\" alt=\"\" \/><\/p>\n<h4>6.1.2 \u8981\u6c42\u865a\u62df\u673a\u6267\u884c GUI\u7a0b\u5f0f\u7684 shell script<\/h4>\n<p>\u5728\u865a\u62df\u673aGUI\u7a0b\u5e8f\u5f00\u59cb\u524d\u9700\u8981\u542f\u52a8 xhost\uff0c\u5e76\u5c06\u865a\u62df\u673a\u7684IP\u6dfb\u52a0\u7ed9 xhost\u3002<\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u7528\u4ee5\u4e0b  <code>vmup.sh<\/code> script \u6765 sh \u8fdb\u5165\u865a\u62df\u673a\uff0c\u5c31\u53ef\u4ee5\u786e\u4fddX11\u73af\u5883\u5df2\u5de5\u4f5c\uff0c\u76f4\u63a5\u6267\u884c GUI\u7a0b\u5f0f\u3002<\/p>\n<p>script\u7684\u53c2\u6570\u662f\u865a\u62df\u673a\u540d\u3002<\/p>\n<pre><code class=\"language-bash line-numbers\">#! sh\n# 1. \u7f3a\u7701\u7684\u865a\u62df\u673a\u540d\u7a31\u3002\nexport vm=tina\n\n# 2. \u82e5script\u6709\u53c2\u6570\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u5f53\u865a\u62df\u673a\u540d\u3002\nif [ \"\" != \"$1\" ];then export vm=$1; fi\n\n# 3. \u786e\u8ba4macOS\u5df2\u5f00\u542fxquartz\nxhost&amp;\n\n# 4. \u786e\u8ba4\u865a\u62df\u673a\u5df2\u542f\u52a8\u3002\nif [ \"Running\" != \"$(multipass ls | grep $vm | awk '{print $2}')\" ];then\nmultipass start $vm\nfi\n\n# 5. xhost \u6dfb\u52a0\u5141\u8bb8\u865a\u62df\u673aIP\u8fde\u7ebf\u3002\nxhost +$(multipass ls | grep $vm | awk '{print $3}')\n\n# 6. ~\/.Xauthority \u5df2\u6539\u7528\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d\uff0c\u4e0d\u7528\u5728 script \u4e2d\u590d\u5236\u3002\n#if [ \"\" = \"$(multipass exec $vm -- ls -lia | grep .Xauthority)\" ];then\n# multipass transfer ~\/.Xauthority $vm:\/home\/ubuntu\/.Xauthority\n#fi\n\n# 7. \u8fdb\u5165\u865a\u62df\u673a\u7684shell\nmultipass sh $vm\n\n<\/code><\/pre>\n<p>\u6267\u884c\u6b64script\u5c31\u4f1a\u542f\u52a8\u5bbf\u4e3b\u673a\u7684X11\u670d\u52a1\uff0c\u5e76\u6253\u5f00\u865a\u62df\u673a shell\u3002\u5728\u6b64shell\u6267\u884c X11 GUI \u5373\u53ef\u5c06GUI\u753b\u9762\u8f6c\u5230\u5bbf\u4e3b\u673a\u3002<\/p>\n<p>\u5230\u6b64\u53ef\u6267\u884cGUI\u7684\u865a\u62df\u73af\u5883\u5efa\u7acb\u5b8c\u6210\u3002\u53ef\u4ee5\u8bd5\u8bd5\u5b89\u88c5 xterm\uff0c\u6216\u4f7f\u7528 apt\/snap \u5b89\u88c5\u5176\u4ed6 GUI \u7a0b\u5f0f\u3002<\/p>\n<h3>6.2 \u4f7f\u7528 XRDP \u63d0\u4f9b\u865a\u62df\u673a\u8fdc\u7aef\u684c\u9762\u73af\u5883<\/h3>\n<p>\u60f3\u8981\u5b8c\u6574\u7684Ubuntu\u684c\u9762\uff1f<\/p>\n<p>\u5e0c\u671b\u76f4\u63a5\u4f7f\u7528\u4e3b\u673a\u5468\u8fb9\uff08\u5982\u5587\u53ed\u3001\u9ea6\u514b\u98ce\u3001\u6444\u50cf\u5934\u3001\u6253\u5370\u673a\u3001\u667a\u6167\u5361\uff09\uff1f\uff08\u9700\u8981\u6709 Virtual Driver\u5b9e\u73b0\uff0c\u4f46 LibVrt\u8fd8\u5728\u8bd5\u9a8c\u4e2d\uff09<br \/>\n\u867d\u7136\u4f1a\u5360\u7528\u8bb8\u591a\u8d44\u6e90\uff0c\u4f46\u771f\u7684\u6709\u9700\u6c42\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u865a\u62df\u673a\u5b89\u88c5 XRDP\u670d\u52a1\uff0c\u8ba9\u4e3b\u673a\u6216\u5176\u4ed6\u673a\u5668\u53ef\u4ee5Windows RDP\u6a21\u5f0f\u8fde\u63a5\u865a\u62df\u673a\u684c\u9762\u3002<\/p>\n<h4>6.2.1 \u865a\u62df\u673a\u5b89\u88c5ubuntu\u684c\u9762\u5957\u4ef6\u4e0exrdp\u670d\u52a1<\/h4>\n<p>\u865a\u62df\u673a\u4e2d\u5b89\u88c5\u6700\u5c0f\u684c\u9762\u4e0e xrdp \u5957\u4ef6\uff0c\u5e76\u67e5\u770b\u865a\u62df\u673a IP\uff1a<\/p>\n<pre><code class=\"language-bash line-numbers\">multipass exec $vm -- sudo apt install -y ubuntu-desktop-minimal xrdp\n\n# 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\n# 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\n# 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\n# 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\n# \u91cd\u542fRDP\u670d\u52a1\nmultipass exec $vm -- sudo systemctl restart xrdp\n# \u67e5\u770b XRDP\u670d\u52a1\nmultipass exec $vm -- sudo systemctl status xrdp\n\n\nmultipass ls | grep $vm\n<\/code><\/pre>\n<p>\u6700\u540e\u7684\u865a\u62df\u673aIP\u663e\u793a\u5982\u4e0b:<\/p>\n<pre><code class=\"language-bash line-numbers\">4:u20                     Running           192.168.64.5     Ubuntu 20.04 LTS\n<\/code><\/pre>\n<p>\u770b\u5230\u5f53\u524d\u865a\u62df\u673a <code>u20<\/code> \u7684 IP \u662f <code>192.168.64.5<\/code>\u3002\u865a\u62df\u673a\u662f\u5728\u672c\u673a\u7f51\u57df\uff0c\u8db3\u591f\u5b89\u5168\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4f7f\u7528\uff0c\u6211\u4eec\u4e0d\u4e3a\u9884\u8bbe\u7528\u6237\uff08ubuntu\uff09\u8bbe\u5b9a\u5bc6\u7801\u3002<\/p>\n<blockquote><p>\n  Cyue: XRDP \u7b2c\u4e00\u6b21\u8fdb\u5165\u65f6\u5fc5\u987b\u8981\u5bc6\u7801\uff0c\u5426\u5219\u65e0\u6cd5\u8fdb\u5165\u3002\u6211\u4eec\u53ef\u4ee5\u5148\u5bf9 ubuntu \u8bbe\u5bc6\u7801\uff0c\u8fde\u63a5 RDP\u684c\u9762\u6210\u529f\u540e\uff0c\u518d\u53d6\u6d88\u5bc6\u7801\uff1a<\/p>\n<ul>\n<li>\u8bbe\u5b9a ubuntu \u7684\u5bc6\u7801\uff1a\n<pre><code class=\"language-sh line-numbers\">sudo passwd ubuntu\n<\/code><\/pre>\n<\/li>\n<li>\u5220\u9664 ubuntu \u7684\u5bc6\u7801\uff1a\n<pre><code class=\"line-numbers\">sudo passwd -d ubuntu\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/blockquote>\n<h4>6.2.2 \u4e3b\u673a\u5b89\u88c5 RDP Client app<\/h4>\n<p>\u5728 App Store \u4e2d\u641c\u5bfb RDP\uff0c\u4e0b\u8f7d\u5fae\u8f6f\u7684 \u201cMicrosoft Remote Desktop\u201d \u5957\u4ef6\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220214133139783.png\" alt=\"\" \/><\/p>\n<ul>\n<li>RDP\u6dfb\u52a0 multipass\u865a\u62df\u673a IP\u3001\u8d26\u6237\u3001\u6635\u79f0\u3002\u4e4b\u540e\u5c31\u53ef\u4ee5\u900f\u8fc7 RDP\u8fde\u865a\u62df\u673a\u4e86\u3002<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220214133513573.png\" alt=\"\" \/><\/p>\n<p>\u5c06 IP\u3001\u7528\u6237\u540d\u79f0\u3001\u865a\u62df\u673a\u540d\u586b\u5165\uff0c\u70b9\u51fb\u6dfb\u52a0\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220217103424685.png\" alt=\"\" \/><\/p>\n<p>\u70b9\u51fb\u521a\u6dfb\u52a0\u7684\u865a\u62df\u673a\u56fe\u6807\u6267\u884c\u8fdc\u7aef\u684c\u9762\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220217103514265.png\" alt=\"\" \/><\/p>\n<p>\u6211\u4eec\u6ca1\u7ed9 ubuntu \u7528\u6237\u5bc6\u7801\uff0c\u76f4\u63a5\u9009 OK\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220217103607502.png\" alt=\"\" \/><\/p>\n<p>\u4e4b\u540e\u5c31\u8fdb\u5165 Ubuntu\u684c\u9762\u73af\u5883\u4e86\u3002\u521d\u59cb\u5316\u65f6\u53ef\u4ee5\u90fd Skip\u8df3\u8fc7\uff0c\u5c31\u8fdb\u5165ubuntu\u684c\u9762\u4e86\u3002<\/p>\n<p>\u70b9 Active &#8212; \u6240\u6709App \u56fe\u6807\uff0c\u53ef\u770b\u5230\u6700\u5c0f\u5b89\u88c5\u6240\u5b89\u88c5\u7684\u5e94\u7528\uff08\u6709\u4e24\u9875\uff09\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220217104103220.png\" alt=\"\" \/><\/p>\n<h3>6.3 \u6dfb\u52a0 OpenVPN Client \u652f\u6301\uff1a<\/h3>\n<p>\u5728 network \u4e0b \u6dfb\u52a0\u4e00\u884c <code>renderer: NetworkManager<\/code>\u3002<\/p>\n<pre><code class=\"language-bash line-numbers\"># netplan \u4f7f\u7528 NetworkManager renderer\uff0c\u6216\u53ef\u5f80\u524d\u79fb\u5230 `network\uff1a` \u540e\necho \"    renderer: NetworkManager\" | sudo tee -a \/etc\/netplan\/50-cloud-init.yaml\n\nsudo apt install -y openvpn network-manager-openvpn network-manager-openvpn-gnome\nsudo netplan apply\n<\/code><\/pre>\n<h4>6.3.1 \u81ea\u670d\u52a1\u5668\u4e0b\u8f7d ovpn\u6587\u4ef6\uff0c\u7136\u540e\u5728 RDP\u4e0b \u900f\u8fc7 NetworkManager \u8bbe\u5b9a\u3002\u3002\u3002<\/h4>\n<p>\u81ea\u670d\u52a1\u5668\u4e0b\u8f7d ovpn\u6587\u4ef6\uff0c\u7136\u540e\u5728 RDP\u4e0b \u900f\u8fc7 NetworkManager \u8bbe\u5b9a VPN\u3002\u3002\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20221129232437092.png\" alt=\"image-20221129232437092\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20221129232551586.jpg\" alt=\"image-20221129232551586\" \/><\/p>\n<blockquote><p>\n  <strong>\u6ce8\u610f\uff1a<\/strong>\u5bbf\u4e3b\u6a5f\u4e0d\u80fd\u767b\u5165 OpenVPN\uff0c\u7db2\u8def\u6703\u885d\u7a81\u3002\u865b\u64ec\u6a5f\u53ef\u4ee5\u3002\n<\/p><\/blockquote>\n<h3>6.4 \u6dfb\u52a0 Google Chrome \u6d4f\u89c8\u5668<\/h3>\n<pre><code class=\"language-sh line-numbers\"># \u4ece\u5b98\u7f51 amd64 \u7248\u7684chrome deb \u5305\u5b89\u88c5 chrome\uff1a\nwget https:\/\/dl.google.com\/linux\/direct\/google-chrome-stable_current_amd64.deb\nsudo dpkg -i google-chrome-stable_current_amd64.deb\n# \u5b89\u88c5\u540e\u900f\u8fc7 RDP \u684c\u9762\u6267\u884c chrome\uff0c\u4f1a\u6709\u4e00\u4e9b keyring \u5bc6\u7801\u4e0e\u521d\u59cb\u5316\u8981\u6c42\u3002\u3002\u3002\n<\/code><\/pre>\n<h3>6.5 \u76f4\u63a5\u5728\u865a\u62df\u673a\u5b89\u88c5 VsCode<\/h3>\n<p>\u4f7f\u7528RDP\uff0c\u5c31\u76f4\u63a5\u91c7\u7528 linux\u7248\u7684 VSCode \u5f53\u5f00\u53d1\u5de5\u5177\u597d\u4e86\u3002\u5b98\u7f51 https:\/\/code.visualstudio.com\/<\/p>\n<p>https:\/\/code.visualstudio.com\/Download \u627earm64\u7684deb\u4e0b\u8f7d\u5305\u3002<\/p>\n<pre><code class=\"language-sh line-numbers\"># \u76ee\u524d\u662f 1.73.1 \u7248\nwget https:\/\/az764295.vo.msecnd.net\/stable\/6261075646f055b99068d3688932416f2346dd3b\/code_1.73.1-1667966450_arm64.deb\n# \u5b89\u88c5\nsudo dpkg -i code_1.73.1-1667966450_arm64.deb \n<\/code><\/pre>\n<p>\u5b89\u88c5\u540e\u53ef\u4ee5\u4ece\u684c\u9762 Activities\u4e0b\u627e\u5230 \u5e94\u7528\u6267\u884c\u3002\u53ef\u957f\u6309icon\uff0c\u9009 pin to dash\uff0c\u4fdd\u7559icon\u5728 dashboard\u4e0a\u3002<\/p>\n<hr \/>\n<h1>Part 2 \u5168\u5fd7 D1-tina \u7f16\u8bd1\u73af\u5883\u8bbe\u5b9a<\/h1>\n<h2>2.1 \u5b89\u88c5\u7f16\u8bd1\u76f8\u4f9d\u5957\u4ef6<\/h2>\n<p>\u5168\u5fd7 D1-tina \u662f\u57fa\u4e8eopenWrt\u5de5\u7a0b\u5efa\u6784\u3002\u5728 Ubuntu18.04 \u53ca\u4ee5\u4e0b\u7684\u73af\u5883\u624d\u53ef\u65e0\u95ee\u9898\u7684\u7f16\u8bd1\u3002\u9996\u5148\u5148\u5b89\u88c5\u76f8\u4f9d\u5957\u4ef6\uff1a<\/p>\n<pre><code class=\"language-bash line-numbers\">#\u5b89\u88c5\u76f8\u4f9d\u5957\u4ef6\nsudo apt install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 automake -y\n\n<\/code><\/pre>\n<h2>2.2 \u5efa\u7acb\u5168\u5fd7\u8d26\u53f7<\/h2>\n<p>\u8bf7\u5728\u5168\u5fd7\u5b98\u7f51\u5efa\u7acb\u8d26\u53f7 <code>https:\/\/open.allwinnertech.com\/<\/code> \uff0c\u624d\u80fd\u4e0b\u8f7d code\u3002<\/p>\n<h2>2.3 \u5728\u5b98\u7f51\u66f4\u65b0\u672c\u673a\u516c\u94a5<\/h2>\n<p>git\u4ed3\u5e93\u9700\u8981 rsa\u516c\u94a5\u624d\u80fd\u5de5\u4f5c\u3002\u82e5\u672c\u673a\u8fd8\u6ca1\u6709\u516c\u94a5\uff0c\u9700\u8981\u6267\u884c <code>ssh-keygen<\/code> \u751f\u6210\u3002<\/p>\n<pre><code class=\"language-bash line-numbers\">#\u751f\u6210\u672c\u673a\u516c\u94a5, \u9700\u8981\u8fde\u6309\u51e0\u6b21 return\nssh-keygen \n# \u663e\u793a\u672c\u673a\u516c\u94a5\uff0c\u5e76\u590d\u5236\u663e\u793a\u7684\u6587\u4ef6\u5185\u5bb9\u3002(\u4ece \u201cssh-rsa\u201d \u5230 \u201c\u7528\u6237@\u4e3b\u673a\u201d \u7684\u6574\u4e2a\u5185\u5bb9)\ncat ~\/.ssh\/id_rsa.pub \n\n\n# \u5c06\u590d\u5236\u7684\u516c\u94a5\u9ecf\u8d34\u5230\u5168\u5fd7\u8d26\u6237\u5b98\u7f51\u7684\u516c\u94a5\u680f\u4f4d\u4e2d\uff1a\nhttps:\/\/open.allwinnertech.com\/#\/sdk\/0\/key\n\n<\/code><\/pre>\n<h2>2.4 \u66f4\u6539repo\u4e3a\u5168\u5fd7\u7684\u7248\u672c\uff1a<\/h2>\n<pre><code class=\"language-bash line-numbers\">#\u4e0b\u8f7d\u5168\u5fd7\u7248\u672c\u7684 repo\uff0ccyue12\u6539\u6210\u4f60\u7684\u5168\u5fd7\u8d26\u53f7\ngit clone ssh:\/\/cyue12@sdk.allwinnertech.com\/git_repo\/repo.git\n# \u7528 sed\u5c06 repo\/repo\u5185\u7684 username \u66f4\u6362\u6210\u81ea\u5df1\u7684\u8d26\u53f7\uff08cyue12\uff09\nsed -i 's@username@cyue12@g' repo\/repo\n# \u628a repo\u653e\u5230\u7cfb\u7edf\u4e2d\nsudo cp repo\/repo \/usr\/bin\/repo &amp;&amp; sudo chmod 777 \/usr\/bin\/repo\n<\/code><\/pre>\n<h2>2.5 \u4f7f\u7528 repo \u4e0b\u8f7d\u5b98\u7f51 tina SDK \u5de5\u7a0b<\/h2>\n<pre><code class=\"language-bash line-numbers\">#\u5efa\u7acb\u5de5\u7a0b\u76ee\u5f55\nmkdir tina-d1-open  \ncd tina-d1-open \n\n# \uff08\u82e5\u6ca1\u8bbe\u5b9a\u8fc7\uff09\u8bbe\u5b9a\u5168\u5fd7 git \u4ed3\u5e93\u7684\u8d26\u6237\u548cemail\n  git config --global user.name \"cyue12\"\n  git config --global user.email \"cyue12@gmail.com\"\n\n# cyue12\u66ff\u6362\u4e3a\u60a8\u7684\u5168\u5fd7\u5ba2\u6237\u670d\u52a1\u5e73\u53f0\u8d26\u53f7\nrepo init -u ssh:\/\/cyue12@sdk.allwinnertech.com\/git_repo\/D1_Tina_Open\/manifest.git -b master -m tina-d1-open.xml \n\n#\u540c\u6b65 repo \u4ed3\u5e93\nrepo sync \n# \u4ed3\u5e93\u5168\u90e8\u4e0b\u8f7d\u5b8c\u6210\u4e4b\u540e\uff0c\u521b\u5efa\u5206\u652f \nrepo start product-smartx-d1-tina-v1.0-release --all  \n<\/code><\/pre>\n<h2>2.6 \u7f16\u8bd1\u4e0e\u6253\u5305<\/h2>\n<pre><code class=\"language-bash line-numbers\"># \u5b9a\u4e49\u81ea\u5df1\u7684\u65b0 branch\nrepo start d1-cyue-1.0 --all \nsource build\/envsetup.sh \n\nlaunch\n# \u9009 d1_nezha-tina\n\nmake -j18\n#\u6253\u5305\u6210\u53ef\u70e7\u5f55\u7684 img \u6587\u4ef6\npack \n#\u70e7\u5f55\u6587\u4ef6\u5728: \/home\/ubuntu\/tina-d1-open\/out\/d1-nezha\/tina_d1-nezha_uart0.img\n# -rwxr-xr-x  1 ubuntu 501 32619520 Dec 19 15:46 tina_d1-nezha_uart0.img*\n<\/code><\/pre>\n<blockquote><p>\n  <strong>\u865a\u62df\u673a\u6027\u80fd\u9a8c\u8bc1\uff1a<\/strong><\/p>\n<blockquote>\n<ul>\n<li>\u4e3b\u673a\u4f7f\u7528MBP15\/2015<\/p>\n<\/li>\n<li>\n<p>\u4e09\u661f970Evo Plus SSD\u7684 \u3010\u8bfb\uff5c\u5199\u3011 \u901f\u5ea6\u7ea6\u5728 \u30102040MB\/s\uff5c2378MB\/s\u3011<\/p>\n<\/li>\n<\/ul>\n<\/blockquote>\n<p><strong>\u7ed3\u679c\uff1a<\/strong>\u51e0\u4e4e\u4e0d\u5f71\u54cd\u7f16\u8bd1\uff0c8\u6838CPU\u80fd\u7ef4\u6301\u5728\u63a5\u8fd1 99%\u7684\u4f7f\u7528\u7387\uff0c\u7f16\u8bd1\u8017\u65f6\u4e0e Parallels\u4e0b\u51e0\u4e4e\u4e00\u81f4\u3002<\/p>\n<p>  &#8220;`bash<br \/>\n    #### make completed successfully (41:27 (mm:ss)) #### \u9996\u6b21\u7f16\u8bd1\u8017\u65f6<br \/>\n    #### make completed successfully (25:37 (mm:ss)) #### clean\u540e\u91cd\u7f16\u8bd1\u8017\u65f6<br \/>\n    &#8220;`<\/p>\n<\/blockquote>\n<h2>2.7 \u70e7\u5f55\u8fd0\u884c<\/h2>\n<p>multipass HyperV\/Hyperkit \u865a\u62df\u673a\u4e0d\u80fd\u6302\u8f7dusb\u786c\u4ef6\uff0c\u9700\u8981\u7528\u5bbf\u4e3b\u673a\u5de5\u5177\u5c06 img \u6587\u4ef6\u70e7\u5f55\u5230\u76ee\u6807\u5e73\u53f0\u3002\u6211\u4eec\u53ef\u4ee5\u7528SAMBA\u670d\u52a1\u5c06\u6587\u4ef6\u5939\u5171\u4eab\u7ed9\u5bbf\u4e3b\u673a\u505a\u64cd\u4f5c\u3002\u6211\u4eec\u5728\u7b2c\u56db\u7ae0\u505aSAMBA\u670d\u52a1\u5668\u5b89\u88c5\u4ecb\u7ecd\u3002<br \/>\n\u5168\u5fd7\u63d0\u4f9bWindows\/Linux\/MacOS\u5168\u5e73\u53f0\u7684\u70e7\u5f55\u5de5\u5177 <strong>LiveSuit<\/strong>\u3002\u7528\u6cd5\u5982\u4e0b\uff1a<\/p>\n<ul>\n<li>\u5728 LiveSuit app\u4e2d\u9009\u597dImage\u3002<\/li>\n<li>\u6309\u4e0bD1 \u4e3b\u677f fex\u6309\u952e\u4e0d\u653e\u3002<\/li>\n<li>USB TypeC\u53e3\u63d2\u5165 host\uff0c\u653e\u5f00 fex\u6309\u952e\u3002<\/li>\n<li>LiveSuit\u5c06\u81ea\u52a8\u5347\u7ea7 Firmware\u3002<\/li>\n<li>\u5347\u7ea7\u5b8c\u540e\u53ef\u6539\u7528 type-C power \u63a5\u53e3\u4f9b\u7535\u5f00\u673a\uff0c\u5e76\u7528USB\u8f6cTTL UART\u7ebf\u8fde\u63a5\u5230\u4e3b\u673a\u3002<\/li>\n<li>Linux\/macOS\u76f4\u63a5\u7528 screen\u547d\u4ee4\uff0c115200bps \u5c31\u53ef\u4ee5\u8fde\u63a5\u5f00\u53d1\u677f\u7684UART terminal\u3002<br \/>\n(screen \u4f7f\u7528 Ctrl-A + Ctrl-D \u9000\u51fa)<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\">screen \/dev\/cu.usbserial-A50285BI 115200\nroot@TinaLinux:\/# \nroot@TinaLinux:\/# exit\nPlease press Enter to activate this console.\n\n\n\nBusyBox v1.27.2 () built-in shell (ash)\n\n _____  _              __     _\n|_   _||_| ___  _ _   |  |   |_| ___  _ _  _ _\n  | |   _ |   ||   |  |  |__ | ||   || | ||_'_|\n  | |  | || | || _ |  |_____||_||_|_||___||_,_|\n  |_|  |_||_|_||_|_|  Tina is Based on OpenWrt!\n ----------------------------------------------\n Tina Linux (Neptune, 5C1C9C53)\n ----------------------------------------------\nroot@TinaLinux:\/# \n<\/code><\/pre>\n<p><strong>LiveSuit \u4e0b\u8f7d\u94fe\u63a5\uff1a<\/strong><br \/>\nhttps:\/\/androidmtk.com\/download-livesuit-all-versions<br \/>\nhttps:\/\/linux-sunxi.org\/LiveSuit<br \/>\nhttps:\/\/androiddatahost.com\/wp-content\/uploads\/LiveSuit_ForMac.zip<br \/>\nhttps:\/\/github.com\/linux-sunxi\/sunxi-livesuite<\/p>\n<hr \/>\n<h1>Part 3 \u5b58\u53d6\u865a\u62df\u673a\u5185\u6587\u4ef6<\/h1>\n<blockquote><p>\n  Note\uff1a<\/p>\n<ul>\n<li>multipass\u7684mount\u547d\u4ee4\uff08\u76ee\u524d\uff09\u53ea\u80fd\u5355\u5411\u7684\u5c06\u5bbf\u4e3b\u673a\u7684\u6587\u4ef6\u76ee\u5f55\u6302\u8f7d\u5230\u865a\u62df\u673a\u4e0a\u3002<br \/>\n    \u5c06\u865a\u62df\u673a\u7684\u6587\u4ef6\u7cfb\u7edf\u5171\u4eab\/\u6302\u8f7d\u5230\u4e3b\u673a\uff0c\u4e3b\u673a\u5c31\u53ef\u7528\u5404\u79cd\u672c\u5730\u5de5\u5177\u64cd\u4f5c\u865a\u62df\u673a\u6587\u4ef6\u5185\u5bb9\u3002<\/p>\n<\/li>\n<li>\n<p>ubuntu\u684c\u9762\u73af\u5883\u5df2\u7ecf\u5b89\u88c5\u4e86samba\u3002<\/p>\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>\u865a\u62df\u673a\u7684\u6587\u4ef6\u5171\u4eab\uff0c\u53ef\u4ee5\u4f7f\u7528<strong>sshfs<\/strong>\u3001<strong>samba<\/strong> \u6216 <strong>nfs<\/strong>\u3002\u6027\u80fd\u53c2\u8003<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.ja-ke.tech\/2019\/08\/27\/nas-performance-sshfs-nfs-smb.html\">\u6b64\u7bc7\u6587\u7ae0<\/a>\u5185\u5bb9\u3002<\/p>\n<ul>\n<li>sshfs \u5e95\u5c42\u4f20\u8f93\u8d70SSH\uff0c\u6587\u4ef6\u4f20\u8f93\u7528SFTP\uff0c\u505a\u6cd5\u662f\u5c06\u670d\u52a1\u5668\u7684SFTP\u670d\u52a1\uff0c\u5229\u7528FUSE\u5728\u7528\u6237\u6a21\u5f0f\u4e0b\u6253\u5305\u6210\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d\u3002\u7531\u4e8essh\u5df2\u6709\u9632\u706b\u5899\u548c\u5bc6\u94a5\uff0c\u53ef\u5b89\u5168\u7684\u3001\u8fdc\u8ddd\u79bb\u7684\u5b58\u53d6\u6587\u4ef6\u3002\u865a\u62df\u673a\u4e0d\u5fc5\u53e6\u5b89\u88c5 driver\uff0c\u5bbf\u4e3b\u673a\u8981\u5b89\u88c5\u6587\u4ef6\u7cfb\u7edf\u3002\u5982 macOS\u4e0b\u662f\u91c7\u7528macFUSE \u5b89\u88c5\u5185\u6838driver\uff0c\u518d\u628asshfs\u5728\u7528\u6237\u6a21\u5f0f\u5b9e\u73b0\u3002\u865a\u62df\u673a\u4e0a\u65e0sshfs\u670d\u52a1\u5e7f\u64ad\uff0c\u53ea\u80fd\u9759\u6001\u624b\u52a8\u6302\u8f7d\u3002<\/li>\n<li>samba\u662fwindows\u7684\u5c40\u57df\u7f51\u8def\u6587\u4ef6\u5171\u4eab\u534f\u8bae\uff0cmacOS\u548cwindows\u90fd\u9884\u8bbe\u80fd\u4f7f\u7528\u3002\u4f46\u865a\u62df\u673a\u8981\u5b89\u88c5\u76f8\u5173\u534f\u8bae\u5e76\u4f5c\u6743\u9650\u8bbe\u5b9a\u3002\u53ef\u5728\u7f51\u8def\u82b3\u90bb\u53d1\u73b0\u5c40\u57df\u7f51\u5185\u4e3b\u673a\u6240\u5171\u4eab\u7684\u6587\u4ef6\u3002<\/li>\n<\/ul>\n<p>\u4ee5\u591a\u865a\u62df\u673a\u73af\u5883\u6765\u770b\uff0c sshfs\u53ea\u8981\u5728\u4e3b\u673a\u5b89\u88c5\u3001\u6302\u8f7d\uff0c\u800csamba\u9700\u8981\u5728\u6bcf\u4e2a\u865a\u62df\u673a\u5b89\u88c5\u534f\u8bae\u5e76\u53e6\u4f5c\u6743\u9650\u8bbe\u5b9a\uff0c\u7cfb\u7edf\u8d1f\u62c5\u8f83\u91cd\u3002<\/p>\n<blockquote><p>\n  \u26a0\ufe0f\uff082021-1-12\uff09\u6ce8\u610f\uff1a sshfs \u4f7f\u7528\u7684 macFUSE \u670d\u52a1\u4e0d\u7a33\u5b9a\uff0c\u5728\u67d0\u4e9b\u65f6\u5019\uff08\u5982mount\u65f6\uff1f\uff09\u4f1a\u62c9\u4f4f\u5bbf\u4e3b\u7cfb\u7edf\u3002\u4e3a\u514d\u56f0\u6270\uff0cmacOS\u4e0b\u5efa\u8bae\u91c7\u7528 SAMBA \u5b58\u53d6\u865a\u62df\u673a\u6587\u4ef6\u3002\n<\/p><\/blockquote>\n<h2>1 \u4f7f\u7528SAMBA\u534f\u8bae<\/h2>\n<p>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<\/p>\n<p>###1.1 \u5b89\u88c5Samba\u670d\u52a1<\/p>\n<pre><code class=\"language-bash line-numbers\">sudo apt install samba samba-common -y\n<\/code><\/pre>\n<h3>1.2 \u914d\u7f6e\u9700\u8981\u591a\u4eba\u5171\u4eab\u7684\u76ee\u5f55\uff08\u53ef\u9009\uff09<\/h3>\n<pre><code>\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\u4ee5\/home\/xxx\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\n<\/code><\/pre>\n<pre><code class=\"language-bash line-numbers\">sudo chmod 770 \/home\/ubuntu\/xxx -R\n<\/code><\/pre>\n<h3>1.3 \u6dfb\u52a0samba\u7528\u6237<\/h3>\n<pre><code>\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\n<\/code><\/pre>\n<pre><code class=\"language-bash line-numbers\">sudo smbpasswd -a ubuntu\n<\/code><\/pre>\n<h3>1.4 \u914d\u7f6esamba<\/h3>\n<pre><code>\u5148\u5907\u4efd\uff0c\u518d\u4fee\u6539 \/etc\/samba\/smb.conf  \u914d\u7f6e\u6587\u4ef6\uff0c\u6dfb\u52a0\u5171\u4eab\u6587\u4ef6\u5939\u3002\n<\/code><\/pre>\n<pre><code class=\"language-bash line-numbers\">sudo cp \/etc\/samba\/smb.conf \/etc\/samba\/smb.conf.old\nsudo pico \/etc\/samba\/smb.conf\n<\/code><\/pre>\n<p>\u200b       \u5728\u914d\u7f6e\u5c3e\u7aef\u6dfb\u52a0\u4e00\u4e2a\u5171\u4eab\u6587\u4ef6\u5939\uff1a<\/p>\n<pre><code class=\"language-bash line-numbers\">[tina]\n   comment = tina home dir\n   path = \/home\/ubuntu\n   guest ok = no\n   browseable = yes\n   create mask = 0775\n   directory mask = 0775\n   valid users = ubuntu,root\n   write list = ubuntu,root\n<\/code><\/pre>\n<pre><code>    valid users \u548c write list \u662f\u8fd9\u4e2a\u5171\u4eab\u9879\u76ee\u7684\u53ef\u7528\u548c\u53ef\u5199\u7684\u7528\u6237\u5217\u8868\u3002\n<\/code><\/pre>\n<h3>1.5 \u91cd\u542fSAMBA\u670d\u52a1\uff1a<\/h3>\n<pre><code class=\"language-bash line-numbers\">sudo service smbd restart\n<\/code><\/pre>\n<h3>1.6 \u5728\u5bbf\u4e3b\u673a\u4e0b\u5c31\u80fd\u7528\u521a\u521a\u8bbe\u5b9a\u7684 ubuntu \u7684 smb \u5bc6\u7801\uff0c\u5b58\u53d6 tina \u6587\u4ef6\u5939\u4e86\u3002<\/h3>\n<p>macOS\u4e0b\uff1a\u5148\u7528 browser\u6253\u5f00smb\u8fde\u63a5\u6765\u8fdb\u5165Finder\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220115151152920.png\" alt=\"\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220115151246808.png\" alt=\"\" \/><\/p>\n<p>\u518d\u8bbe\u5b9a\u4f7f\u7528ubuntu\u7528\u6237\u5bc6\u7801\uff1a<\/p>\n<p>\u200b       <img decoding=\"async\" src=\"https:\/\/vm1.go2see.me\/wp-content\/uploads\/image-20220115144909165.png\" alt=\"\" \/><\/p>\n<p>\u7136\u540e finder\u4e2d\u5c31\u53ef\u4ee5\u770b\u5230\u5171\u4eab\u4e86\u3002<\/p>\n<h3>1.7 \u4f7f\u7528 multipass \u6267\u884cSAMBA\u81ea\u52a8\u5b89\u88c5script\u8303\u4f8b<\/h3>\n<p>\u5047\u8bbe\u8981\u5b89\u88c5 SAMBA\u670d\u52a1\u5230\u865a\u62df\u673a <code>$vm<\/code> \u4e2d\uff0c\u5171\u4eab\u7684\u76ee\u5f55\u540d\u79f0\u4e3a <code>vm_work<\/code> \u3002<\/p>\n<pre><code class=\"language-sh line-numbers\"># 7 \u4f7f\u7528SAMBA\u534f\u8bae\u5171\u4eab\u865a\u62df\u673a\u6587\u4ef6\u5939\n# 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\n# 7.1 \u5b89\u88c5Samba\u670d\u52a1\nmultipass exec $vm -- sudo apt install samba samba-common -y\n\n# 7.2 \u914d\u7f6e\u9700\u8981\u591a\u4eba\u5171\u4eab\u7684\u76ee\u5f55\uff08\u53ef\u9009\uff09\n# \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\n# \u4ee5\/home\/vm_work \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 vm_work \nmultipass exec $vm -- sudo chmod 770 \/home\/ubuntu\/vm_work -R\n\n# 7.3 \u6dfb\u52a0samba\u7528\u6237\u5bc6\u7801\n# \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\n# 7.4 \u914d\u7f6esamba\n# \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\n# \u5728 \/etc\/samba\/smb.conf \u5c3e\u7aef\u6dfb\u52a0\u4e00\u4e2a\u5171\u4eab\u6587\u4ef6\u5939\uff1a\necho \"[vm_work]\\\n    \\n  comment = $vm vm_work dir\\\n    \\n  path = \/home\/ubuntu\/vm_work\\\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\n# 7.5 \u91cd\u542fSAMBA\u670d\u52a1\uff1a\nmultipass exec $vm -- sudo service smbd restart\n\n# 7.6 \u5728\u5bbf\u4e3b\u673a\u4e0b\u5c31\u80fd\u7528\u521a\u521a\u8bbe\u5b9a\u7684 ubuntu \u7684 smb \u5bc6\u7801\uff0c\u5b58\u53d6 vm_work \u6587\u4ef6\u5939\u4e86\u3002\necho macOS \u5728 browser \u5730\u5740\u680f\u8f93\u5165 smb:\/\/$vm\/vm_work \u5c31\u80fd\u6253\u5f00 Finder\uff0c\u8f93\u5165SAMBA\u7528\u6237\u5bc6\u7801\uff0c\u8fde\u63a5\u7f51\u76d8\u4e86\u3002\n<\/code><\/pre>\n<h2>2 \u4f7f\u7528 sshfs\u534f\u8bae<\/h2>\n<blockquote><p>\n  macOS\u4e0b\u4f7f\u7528sshfs\u7684\u4ecb\u7ecd\u3002\n<\/p><\/blockquote>\n<h3>2.1 \u5b89\u88c5sshfs + macFUSE\uff1a<\/h3>\n<p>sshfs \u9879\u76ee\u9700\u8981fuse\u4f9d\u8d56\uff0c\u76ee\u524dbrew\u5ba3\u79f0macFUSE\u6709\u7248\u6743\u95ee\u9898\u5173\u95ed\u652f\u63f4\uff0c\u9700\u8981\u76f4\u63a5\u7531osxfuse\u5b98\u7f51\u7684git\u4e0b\u8f7d\u5b89\u88c5\uff1a<\/p>\n<ol>\n<li>git\u4e0b\u8f7d\u5b89\u88c5  <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/github.com\/osxfuse\/osxfuse\/releases\/download\/macfuse-4.2.4\/macfuse-4.2.4.dmg\">macFUSE<\/a> \uff0cmacOS\u7684 \u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e-\u5b89\u5168\u4e0e\u9690\u79c1-\u5141\u8bb8 macFUSE \u540e\uff0c\u4f9d\u6307\u793a\u91cd\u542f\u52a8\u3002<\/li>\n<li>git\u4e0b\u8f7d\u5b89\u88c5 <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/github.com\/osxfuse\/sshfs\/releases\/\">sshfs<\/a>\u3002<\/li>\n<\/ol>\n<h3>2.2 \u6302\u8f7d\uff1a<\/h3>\n<p>\u4f7f\u7528 sshfs \u547d\u4ee4\u6302\u8f7d\u8fdc\u7aef\u6587\u4ef6\/\u76ee\u5f55\u3002\u4e0e\u5176\u4ed6\u6587\u4ef6\u7cfb\u7edf\u7684 mount \u547d\u4ee4\u4e00\u6837\uff0c\u9700\u8981\u5148\u5efa\u7acb\u4e00\u4e2a\u76ee\u5f55\u6302\u8f7d\u6587\u4ef6\u7cfb\u7edf\u3002<br \/>\n\u7531\u4e8e\u5728\u4e4b\u524d\u5df2\u7ecf\u4e3a tina\u7533\u8bf7ssh\u522b\u540d\uff0c\u5e76\u8ba9\u5bbf\u4e3b\u673a\u514d\u5bc6 ssh\u5230 tina\u4e86\uff0c\u4ee5\u4e0b\u547d\u4ee4\u53ef\u7528 tina \u53d6\u4ee3 [remote_user]@[remote_server] \u3002<\/p>\n<pre><code class=\"language-bash line-numbers\">mkdir tina\n#sshfs [remote_user]@[remote_server]:[remote_directory] [mountpoint] -o allow_other\nsshfs tina:\/home\/ubuntu tina -o allow_other\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u770b\u5230 tina\u4e0b\u5df2\u7ecf\u662f tina\u865a\u62df\u673a\u7684ubuntu\u7528\u6237\u76ee\u5f55\u4e86\u3002<\/p>\n<h3>2.3 \u53d6\u6d88\u6302\u8f7d\uff1a<\/h3>\n<pre><code>\u4f7f\u7528\u7cfb\u7edf\u7684 umount \u547d\u4ee4\u5373\u53ef\u3002\n<\/code><\/pre>\n<pre><code class=\"language-bash line-numbers\">umount tina\n<\/code><\/pre>\n<h3>2.4 Linux \u5f00\u673a\u6302\u8f7d sshfs:<\/h3>\n<pre><code>\u5728fstab\u4e2d\u6dfb\u52a0\u5982\u4e0b\u6302\u8f7d\u6761\u76ee\n<\/code><\/pre>\n<pre><code class=\"language-bash line-numbers\">sshfs#[remote_user]@[remote_server]:[remote_directory] [mountpoint] [mountpoint] fuse allow_other 0 0\n<\/code><\/pre>\n<h3>2.5 \u6302\u8f7d\u5931\u8d25\u5904\u7f6e\uff1a<\/h3>\n<pre><code>\u6587\u4ef6\u7cfb\u7edf\u51fa\u95ee\u9898\u9700\u8981\u91cd\u6302\u8f7d\uff0c\u5728\u53d6\u6d88\u6302\u8f7d\uff08umount\uff09\u9047\u5230\u5931\u8d25\u65f6\uff0c\u8981\u5254\u9664\u8fdb\u7a0b\u624d\u80fd\u91cd\u6302\u8f7d\u3002\n<\/code><\/pre>\n<pre><code class=\"language-bash line-numbers\">pgrep -lf sshfs\npkill -9 sshfs\n<\/code><\/pre>\n<hr \/>\n<h1>\u9644\u5f55<\/h1>\n<h2>\u66f4\u6539\u865a\u62df\u673a\u7684\u4e3b\u7528\u6237\u540d?<\/h2>\n<blockquote><p>\n  \u26a0\ufe0f\uff1a\u4e3b\u7528\u6237\u540d\u53ef\u4ee5\u66f4\u6539\uff0c\u4f46\u4e4b\u540emultipass\u53ea\u80fd\u7528 ssh \u767b\u5165\uff0c\u4e0d\u80fd\u7528 multipass sh \u547d\u4ee4\u8fdb\u5165\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0cmultipass \u5de5\u5177\u4f1a\u51fa\u72b6\u51b5\uff0c\u8fd8\u4e0d\u77e5\u600e\u4e48\u5904\u7406\uff0c\u8fd8\u8bf7\u8c28\u614e\uff0c\u82e5\u6709\u7528\u6237\u540d\u9700\u6c42\uff0c\u8fd8\u662f\u6dfb\u52a0\u7528\u6237\u597d\u4e86\u3002\u3002\u3002<\/p>\n<p>  \u26a0\ufe0f\u6ce8\u610f\uff1a\u66f4\u6539\u7528\u4e3b\u6236\u540d\u53ef\u80fd\u9020\u6210\u7121\u6cd5\u767b\u5165\uff0c\u6267\u884c\u8bf7\u5c0f\u5fc3\uff1a<\/p>\n<p>  \u57f7\u884c\u524d\uff0c\u8acb\u78ba\u8a8d\u4ee5\u4e0b\u90fd\u505a\u4e86\uff1a<\/p>\n<pre><code class=\"language-sh line-numbers\"># \u26a0\ufe0f\u9700\u8981\u5b8c\u5168\u5728 root\u4e0b\u5de5\u4f5c\nsudo -s\n\n# \u26a0\ufe0f\u5141\u8a31\u7528\u5bc6\u78bc ssh\uff08no \u6539 yes\uff09,\u4e0d\u5fc5\u4e00\u76f4\u7528 ssh-key\uff08\u53ef\u80fd\u5f71\u97ff\u767b\u5165\u5b89\u5168\uff09\u767b\u5165\uff1a\nsed -i 's\/#   PasswordAuthentication\/PasswordAuthentication\/g' \/etc\/ssh\/sshd_config\nsed -i 's\/PasswordAuthentication no\/PasswordAuthentication yes\/g' \/etc\/ssh\/sshd_config\/\n\n# \u26a0\ufe0f\u8981\u5148\u7ed9 ubuntu \u8d26\u6237\u52a0\u5bc6\u7801\uff0c\u5426\u5219\u66f4\u540d\u4e4b\u5f8c\u53ef\u80fd\u65e0\u6cd5 sudo \u4e86\u3002\u3002\u3002\npasswd ubuntu\n<\/code><\/pre>\n<\/blockquote>\n<p>\u958b\u59cb\u4fee\u6539\u76f8\u5173\u6587\u4ef6\uff1a<\/p>\n<pre><code class=\"language-sh line-numbers\">cd \/\n\n# \u6539\u53d8 \/etc \u4e0b\u7684 passwd\u3001shadow\u3001group \u7528\u6237\u540d\u3002\u53ef\u4ee5\u7528 nano \u7f16\u8f91\uff0c\u6216 sed \u81ea\u52a8\u4fee\u6539\n  # \u8d26\u6237\u5bc6\u7801\u7684 \u6237\u540d\u3001\u5168\u540d\u3001\u5de5\u4f5c\u76ee\u5f55\uff1a\n  sed -i 's\/ubuntu\/cyue\/g' \/etc\/passwd\n  sed -i 's\/Ubuntu\/CYUE\/g' \/etc\/passwd\n\n  # shadow\u7684 \u6237\u540d\uff1a\n  sed -i 's\/ubuntu\/cyue\/g' \/etc\/shadow\n  # \u65e7\u5e10\u6237\u52a0\u5165\u7684\u7fa4\u7ec4\uff1a\n  sed -i 's\/ubuntu\/cyue\/g' \/etc\/group\n  # \u5de5\u4f5c\u76ee\u5f55\u540d\u53d8\u6362\n  mv \/home\/ubuntu \/home\/cyue\n\n  #.ssh\/ \u4e0b\u7528\u6237\u540d\u66f4\u6362\uff1a\n  sed -i 's\/ubuntu\/cyue\/g' \/home\/cyue\/.ssh\/authorized_keys\n  sed -i 's\/ubuntu\/cyue\/g' \/home\/cyue\/.ssh\/id_rsa.pub\n\n# nano \/etc\/sudoers\uff0c\u5728root\u540e\u6dfb\u52a0\u65b0\u7528\u6237\u540d(\u4ee5cyue\u4e3a\u4f8b)\uff0c\u4e3a\u53ef\u4ee5\u6267\u884c sudo\u7684\u7528\u6237\u3002\n    echo 'cyue    ALL=(ALL:ALL) ALL' &gt;&gt; \/etc\/sudoers\n\n# reboot\u5b8c\u6210vm\u7684\u7528\u6237\u66f4\u540d\uff01\uff01\n  reboot\n\n\n<\/code><\/pre>\n<p>\u4e4b\u540e ssh \u53ef\u4ee5\u7528 cyue + \u5bc6\u7801 \u767b\u5165\u4e86\uff0c\u4e0d\u8fc7\uff0chost\u7aef\u4e5f\u8981\u4fee\u6539 ssh \u767b\u5165\u7684\u7528\u6237\u540d\u3002\u3002\u3002<\/p>\n<pre><code class=\"language-sh line-numbers\">sed -i 's\/ubuntu\/cyue\/g' ~\/.ssh\/config\n<\/code><\/pre>\n<hr \/>\n<h1>\u81ea\u52a8\u5b89\u88c5\u8bbe\u5b9a\u865a\u62df\u673a script<\/h1>\n<p>\u8fd9\u91cc\u63d0\u4f9b\u81ea\u52a8\u5316script\uff0c\u81ea\u52a8\u5efa\u7acbmultipass\u865a\u62df\u673a\u3002<\/p>\n<h2>1. vmbuild.sh  :<\/h2>\n<p>\u5728\u4e00\u4e2a\u591a\u6708\u7684\u5d4c\u5165\u7cfb\u7edf\u5f00\u53d1\u64cd\u4f5c\u4e0a\uff0c\u53d1\u73b0 XRDP\u684c\u9762\u6bd4 XQuartz\u597d\u7528\uff0cSAMBA\u6587\u4ef6\u5171\u4eab\u6bd4\u7528\u5230 macFUSE\u7684ssh\u6587\u4ef6\u7cfb\u7edf\u7b80\u5355\u6613\u7528\uff0c\u6211\u4eec\u7684\u81ea\u52a8\u5b89\u88c5 Script\u5c31\u76f4\u63a5\u9009\u7528\u4e86\u3002Script\u7684\u5de5\u4f5c\u6b69\u9a7a\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u5efa\u7acb multipass \u865a\u62df\u673a<\/li>\n<li>\u56fd\u5185\u6e90\u5904\u7406<\/li>\n<li>\u6302\u8f7d\u4e3b\u6a5f\u5171\u4eab\u7684\u6587\u4ef6\u5939<\/li>\n<li>\u8bbe\u7f6essh\u670d\u52a1\uff0c\u5e76\u4e3aVSCode\u8bbe\u7f6e\u6781\u9650\u6587\u4ef6\u6570<\/li>\n<li>\u4e3b\u673aVSCode\u8bbe\u5b9a\u8bf4\u660e\uff08script\u65e0\u5de5\u4f5c\uff09<\/li>\n<li>\u5b89\u88c5 XRDP \u4ee5\u53ca\u6700\u5c0f\u684c\u9762\u73af\u5883<\/li>\n<li>\u4f7f\u7528SAMBA\u534f\u8bae\u5171\u4eab\u865a\u62df\u673a\u6587\u4ef6\u5939\uff08\u4e3b\u76ee\u5f55\u4e0b\u7684\u5de5\u4f5c\u76ee\u5f55\uff09<\/li>\n<\/ol>\n<p>Script \u4f7f\u7528\u6cd5\uff1a<code>source vmbuild.sh [vm_name [ubuntu_ver [share_path]]]<\/code> \uff0c\u53ef\u8c03\u7684\u53c2\u6570\uff1a<\/p>\n<ul>\n<li>vm_name: \u865a\u62df\u673a\u540d\u7a31<\/li>\n<li>ubuntu_ver: \u5efa\u7acb\u865a\u62df\u673a\u7684 ubuntu\u955c\u50cf\u7248\u6b21<\/li>\n<li>share_path: \u865a\u62df\u673a\u5c06\u5171\u4eab\u51fa\u6765\u7684\u7684\u6587\u4ef6\u5939\u540d\u79f0<\/li>\n<\/ul>\n<p>\u5176\u4ed6 cpu core\u6570\u3001\u865a\u62df\u78c1\u76d8\u5927\u5c0f\u3001\u4f7f\u7528\u8bb0\u5fc6\u4f53\u5927\u5c0f\u56fa\u5b9a\u5728 script\u91cc\uff0c\u9700\u8981\u65f6\u518d\u4fee\u6539\u3002<\/p>\n<h4>vmbuild.sh  \u5185\u5bb9:<\/h4>\n<pre><code class=\"language-bash line-numbers\">#! sh\n#====================================================================================\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\"\n\n# 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\u3002\"\n# 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\n\n# 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=4\nexport mem=6G\nexport disk=80G\n\n\n# 1.3 macOS\uff1a\u5b89\u88c5 multipass app \uff08\u4f7f\u7528\u4e07\u80fd\u7684 brew\uff09\uff1a\n#     brew install --cask multipass\n\n# 1.4 \u4f9d\u636e\u524d\u9762\u7684\u53c2\u6570\u5efa\u7acb\u865a\u62df\u673a\uff1a\nif [ \"\" != \"$2\" ];then export img=$2; fi\nif [ \"\" != \"$1\" ];then export vm=$1; fi \n\n# SAMBA sharefolder...\nexport vm_share=${vm}_share\n\necho multipass launch  -c $core -m $mem -d $disk -n $vm  $img\nmultipass launch  -c $core -m $mem -d $disk -n $vm  $img\n\n#====================================================================================\n# 2. \u56fd\u5185\u6e90\u5904\u7406\n# 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 \n#multipass exec $vm --  sudo apt upgrade -y\n\n# 2.2 snap \u56fd\u5185proxy\u8bbe\u5b9a(\u89c6\u9700\u8981)\n# multipass exec $vm --  sudo snap install snap-store-proxy\n# multipass exec $vm --  sudo snap install snap-store-proxy-client\n\n#====================================================================================\n# 3. \u6302\u8f7d\u4e3b\u6a5f\u5171\u4eab\u6587\u4ef6\u5939\n# 3.1. \u5b89\u88c5 multipass-sshfs \u4ee5\u6302\u8f7d\u4e3b\u673a\u6587\u4ef6\u5939\nmultipass exec $vm --  sudo snap install multipass-sshfs\n\n# 3.2 \u6302\u8f7d\u4e3b\u673a\u6587\u4ef6\u5939\uff08\u5230 \/mnt \u4e0b\uff09\u5982\uff1a\nmultipass mount   ~  $vm:\/mnt\/host\n\n# 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\n#   \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\n\n#====================================================================================\n# 4. \u4e3a VSCode \u8bbe\u7f6e ssh  \n# \u5bbf\u4e3b\u673a VSCode \u53ef\u900f\u8fc7 ssh \u76f4\u63a5\u7f16\u8bd1\u865a\u62df\u673a\u7684\u5de5\u7a0b\n# 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\n#    \u4f7f\u7528\u7f3a\u7701\u591a\u6b21 enter\u540e\uff0c\u516c\u94a5\u653e\u5728 ~\/.ssh\/id_rsa.pub\n\n# 4.2 VM \u5b89\u88c5 ssh\uff0c\u5e76\u6267\u884c `ssh-keygen` \n#    \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\n\n# 4.3 sshd \u5b88\u62a4\u8fdb\u7a0b\u8bbe\u5b9a\n#     \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\n\n# 4.4 \u7ed1\u5b9aVM\u7684ssh\u522b\u540d\u3001\u5e76\u4ea4\u6362\u516c\u94a5\n# \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\n# \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\n# \u5141\u8bb8VM\u7684ubuntu\u8d26\u53f7\uff0c\u514d\u5bc6ssh\u8fdb\u4e3b\u673a\n# (\u7b49\u540c\u4e8e\u6267\u884c\uff1a `ssh-copy-id -i ~\/.ssh\/id_rsa.pub ubuntu@${vm}`)\n# (multipass exec $vm -- cat ~\/.ssh\/id_rsa.pub &gt;&gt; ~\/.ssh\/authorized_keys)\n\n\n\n# 4.5 \u5c06inode\u6570\u8c03\u5230\u6700\u5927\uff0c\u4ee5\u5229VSCode\u5de5\u4f5c\n#    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\n\n#====================================================================================\n# 5. \u5b89\u88c5 VSCode \u5e76\u8bbe\u7f6e\u8fdc\u7a0b\u8fde\u63a5  \n# 5.1 \u5bbf\u4e3b vscode\u5b89\u88c5\uff1a\n#    brew install visual-studio-code\n# 5.2 \u6267\u884c vscode app\uff0c\u5e76\u5b89\u88c5 Remote - SSH \u6269\u5c55\uff1a\n\n# 5.3 \u7528 vscode \u8fdc\u7aef\u8fde\u63a5\u865a\u62df\u673a\n#    vscode\u5b89\u88c5 ssh remote\u6269\u5c55\uff0c\u7136\u540e\u7528\u5de6\u4e0b\u89d2\u7684\u8fde\u63a5\u6309\u94ae\u8fde\u63a5VM\n#    \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\n#    \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 \n#====================================================================================\n# 6. \u4e3a\u865a\u62df\u673a $vm \u6dfb\u52a0\u56fe\u5f62\u754c\u9762\n# 6.2 \u4f7f\u7528 XRDP \u63d0\u4f9b\u865a\u62df\u673a\u8fdc\u7aef\u684c\u9762\u73af\u5883\n# 6.2.1 \u865a\u62df\u673a\u5b89\u88c5\u6700\u7b80ubuntu\u684c\u9762\u5957\u4ef6\u4e0exrdp\u670d\u52a1\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 ubuntu-desktop xrdp -y \nfi\n\nmultipass exec $vm -- sudo apt remove libreoffice* thunderbird* totem* rhythmbox* transmission* -y\nmultipass exec $vm -- sudo apt autoremove -y\n\nmultipass ls | grep $vm\n\n# \u4e3a\u7528\u6237 ubuntu \u6dfb\u52a0\u5bc6\u7801\uff0cRDP\u9700\u6c42\u3002\nmultipass exec $vm -- sudo passwd ubuntu\n\n# 6.2.2 \u4e3b\u673a\u5b89\u88c5 RDP Client app\n# \u5728 App Store \u4e2d\u641c\u5bfb RDP\uff0c\u4e0b\u8f7d\u5fae\u8f6f\u7684 \u201cMicrosoft Remote Desktop\u201d \n# \u4e0a\u4e2a multipass ls | grep $vm \u547d\u4ee4\u53ef\u770b\u5230\u865a\u62df\u673a \u540d\u79f0\u548c IP\uff0c\u52a0\u4e0a\u8d26\u53f7 ubuntu\uff0c\u4e0d\u7528\u5bc6\u7801\uff0c\n# \u5c31\u53ef\u4ee5\u8bbe\u5b9a\u6b64\u865a\u62df\u673a\u7684\u73af\u5883 RDP\n\n\n\n\n#====================================================================================\n# 7 \u4f7f\u7528SAMBA\u534f\u8bae\u5171\u4eab\u865a\u62df\u673a\u6587\u4ef6\u5939\n# 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\n# 7.1 \u5b89\u88c5Samba\u670d\u52a1\nmultipass exec $vm -- sudo apt install samba samba-common -y\n\n# 7.2 \u914d\u7f6e\u9700\u8981\u591a\u4eba\u5171\u4eab\u7684\u76ee\u5f55\uff08\u53ef\u9009\uff09\n# \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\n# \u4ee5\/home\/$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 -- sudo mkdir -p \/home\/$vm_share \nmultipass exec $vm -- sudo chown ubuntu:ubuntu \/home\/$vm_share -R\nmultipass exec $vm -- sudo chmod 770 \/home\/$vm_share -R\n\n# 7.3 \u6dfb\u52a0samba\u7528\u6237\u5bc6\u7801\n# \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\n# 7.4 \u914d\u7f6esamba\n# \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\n# \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\/$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\n# 7.5 \u91cd\u542fSAMBA\u670d\u52a1\uff1a\nmultipass exec $vm -- sudo service smbd restart\n\n# 7.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<\/code><\/pre>\n<h2>2. vmadd_xquartz.sh  \u548c vmup.sh:<\/h2>\n<p>\u8fd8\u60f3\u4f7f\u7528 XQuartz? \u53ef\u4ee5\u7528 vmadd_xquartz.sh \u4ee5\u4e0b\u9644\u52a0script\u6765\u6dfb\u52a0\u3002<\/p>\n<ul>\n<li><code>vmadd_xquartz.sh<\/code>:<br \/>\n\u5047\u8bbe\u4e4b\u524d \u4f7f\u7528 source \u6267\u884c\u8fc7 vmbuild.sh\uff0c\u53d8\u91cf vm \u8fd8\u4fdd\u6301\u4e86\u865a\u62df\u673a\u7684\u540d\u79f0\u3002<\/li>\n<\/ul>\n<pre><code class=\"language-sh line-numbers\">#! sh\n\n# 6. \u4e3a\u865a\u62df\u673a $vm \u6dfb\u52a0\u56fe\u5f62\u754c\u9762\n# 6.1 \u63d0\u4f9b\u865a\u62df\u673a X11 GUI - \u4f7f\u7528 XQuartz\uff08\u82e5\u53ea\u60f3\u8981\u5b8c\u6574\u684c\u9762\u8df3\u5230\u4e0b\u4e00\u7ae0\uff09\n# 6.1.1. \u5b89\u88c5 XQuartz, \u53ef\u7528\u842c\u80fd\u7684 brew\uff1a\nbrew install --cask xquartz\n# 6.1.2. \u8a2d\u5b9a XQuartz app: \n#  xhost&amp; \u4f1a\u5728\u80cc\u666f\u6253\u5f00 XQuartz.app\u3002\n#  - app\u83dc\u5355 --&gt; \u504f\u597d --&gt; \u5b89\u5168\u6027\u9875\u9762\uff0c\u52fe\u9009\u5141\u8bb8\u4ece\u7f51\u8def\u5ba2\u6237\u7aef\u94fe\u63a5\u3002\nxhost&amp;\n# 6.1.3. \u5b89\u88c5\u57fa\u7840 X11\u5eab\uff0c\u7528\u4e8e\u76f4\u8fde host\u7684 X11 \u3002\nmultipass exec $vm -- sudo apt install xinit -y\n\n# 6.1.4. VM X11\u76f8\u5173\u7684\u8a2d\u5b9a\uff1a\n#  - \u8bbe\u5b9a DISPLAY \u73af\u5883\u53d8\u91cf\u3001\u94fe\u63a5\u4e3b\u673a .Xauthority \u6587\u4ef6\u3001\u6302\u8f7d\u4e3b\u673a X11 \u6682\u5b58\u76ee\u5f55\u3002\nmultipass exec $vm -- sed -i \"$ a\\export DISPLAY=$\\(echo $\\SSH_CLIENT |awk '{print $\\1}'):0\"  \/home\/ubuntu\/.bashrc \nmultipass exec $vm -- ln -s \/mnt\/host\/.Xauthority .Xauthority\nmultipass mount \/tmp\/.X11-unix $vm:\/tmp\/.X11-unix\n<\/code><\/pre>\n<ul>\n<li><code>vmup.sh<\/code> \uff1a\n<p>\u4e3b\u673a\u5f00\u542fxquartz\u8bbe\u5b9a\u540e\uff0c\u518d\u4f7f\u7528 vamp.sh \u767b\u5165\u865a\u62dfshell\uff0cshell\u4e2d\u5c31\u53ef\u4ee5\u6267\u884c X11 GUI\u5e94\u7528\u3002<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\">#! sh\n# 1. \u7f3a\u7701\u7684\u865a\u62df\u673a\u540d\u7a31\u3002\nexport vm=tina\n\n# 2. \u82e5script\u6709\u53c2\u6570\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u5f53\u865a\u62df\u673a\u540d\u3002\nif [ \"\" != \"$1\" ];then export vm=$1; fi\n\n# 3. \u786e\u8ba4macOS\u5df2\u5f00\u542fxquartz\nxhost&amp;\n\n# 4. \u786e\u8ba4\u865a\u62df\u673a\u5df2\u542f\u52a8\u3002\nif [ \"Running\" != \"$(multipass ls | grep $vm | awk '{print $2}')\" ];then\nmultipass start $vm\nfi\n\n# 5. xhost \u6dfb\u52a0\u5141\u8bb8\u865a\u62df\u673aIP\u8fde\u7ebf\u3002\nxhost +$(multipass ls | grep $vm | awk '{print $3}')\n\n# 6. ~\/.Xauthority \u5df2\u6539\u7528\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d\uff0c\u4e0d\u7528\u5728 script \u4e2d\u590d\u5236\u3002\n#if [ \"\" = \"$(multipass exec $vm -- ls -lia | grep .Xauthority)\" ];then\n# multipass transfer ~\/.Xauthority $vm:\/home\/ubuntu\/.Xauthority\n#fi\n\n# 7. \u8fdb\u5165\u865a\u62df\u673a\u7684shell\nmultipass sh $vm\n<\/code><\/pre>\n<hr \/>\n<h1>Multipass \u5feb\u901f\u4e0a\u624b<\/h1>\n<h2>0. \u53d6\u5f97\u547d\u4ee4\u8f85\u52a9\u8bf4\u660e<\/h2>\n<ul>\n<li>\n<p><code>multipass<\/code> \u547d\u4ee4\u540e\u52a0\u4e0a <code>-h<\/code> \uff0c\u5373\u53ef\u67e5\u770b\u76f8\u5173\u547d\u4ee4\u4f7f\u7528\u8bf4\u660e\u3002<\/p>\n<\/li>\n<li>\n<p><code>multipass version<\/code> \u53ef\u770b\u7248\u6b21\u4fe1\u606f\u3002<\/p>\n<\/li>\n<\/ul>\n<h2>1. \u67e5\u8be2\u76f8\u5173\u547d\u4ee4 find\u3001list(ls)\u3001info<\/h2>\n<ul>\n<li><code>find<\/code>\uff1a \u67e5\u8be2\u5b98\u65b9\u53ef\u7528\u955c\u50cf\u3002<\/li>\n<\/ul>\n<pre><code class=\"language-sh line-numbers\">#find\uff1a \u67e5\u8be2\u5b98\u65b9\u53ef\u7528\u955c\u50cf\u3002\n$ multipass find\nImage                       Aliases           Version          Description\n18.04                       bionic            20211129         Ubuntu 18.04 LTS\n20.04                       focal,lts         20211129         Ubuntu 20.04 LTS\n21.04                       hirsute           20211130         Ubuntu 21.04\n21.10                       impish            20211209         Ubuntu 21.10\nanbox-cloud-appliance                         latest           Anbox Cloud Appliance\nminikube   \n<\/code><\/pre>\n<ul>\n<li><code>list<\/code> (<code>ls<\/code>)\uff1a  \u5df2\u6709\u865a\u62df\u673a\u5217\u8868\u3002<\/li>\n<\/ul>\n<pre><code class=\"language-sh line-numbers\"># list\uff1a\u5df2\u6709\u865a\u62df\u673a\u5217\u8868\u3002\n$ multipass ls\nName                    State             IPv4             Image\ntina                    Running           192.168.64.6     Ubuntu 18.04 LTS\n<\/code><\/pre>\n<ul>\n<li><code>info<\/code>\uff1a \u663e\u793a\u865a\u62df\u673a\u72b6\u6001\u3002<code>--all<\/code> \u53c2\u6570\u663e\u793a\u6240\u6709\u865a\u62df\u673a\u3002<\/li>\n<\/ul>\n<pre><code class=\"language-sh line-numbers\"># \u663e\u793a\u865a\u62df\u673a\u72b6\u6001\u3002`--all` \u53c2\u6570\u663e\u793a\u6240\u6709\u865a\u62df\u673a\u3002\n$ multipass info tina\nName:           tina\nState:          Running\nIPv4:           192.168.64.6\nRelease:        Ubuntu 18.04.6 LTS\nImage hash:     eeff819e8474 (Ubuntu 18.04 LTS)\nLoad:           0.00 0.00 0.00\nDisk usage:     26.1G out of 38.6G\nMemory usage:   183.3M out of 7.8G\nMounts:         \/Volumes\/Work =&gt; \/home\/ubuntu\/work\n                    UID map: 501:default\n                    GID map: 20:default\n                \/Users\/cyue   =&gt; \/home\/ubuntu\/host\n                    UID map: 501:default\n                    GID map: 20:default\n<\/code><\/pre>\n<h2>2. \u521b\u5efa\u3001\u5220\u9664\u3001\u548c\u6062\u590d\u865a\u62df\u673a\uff1a launch \uff5c delete \uff5c recover<\/h2>\n<ul>\n<li><code>launch<\/code>\uff1a\u4ece\u955c\u50cf\u521b\u5efa\u865a\u62df\u673a\u5b9e\u4f53\u3002\u53ef\u4ece\u540c\u4e2a\u955c\u50cf\u5efa\u7acb\u591a\u4e2a\u5b9e\u4f53\u3002\n<ul>\n<li>\u8bed\u6cd5\uff1amultipass launch [\u53c2\u6570] [\u865a\u62df\u673a\u540d\u79f0 [\u4f7f\u7528\u955c\u50cf]]<\/li>\n<li>\u53c2\u6570\uff1a\n<ul>\n<li>-n, &#8211;name: \u540d\u79f0, \u9ed8\u8ba4\u503c: primary<\/li>\n<li>-c, &#8211;cpus: cpu\u6838\u5fc3\u6570, \u9ed8\u8ba4\u503c: 1<\/li>\n<li>-m, &#8211;mem: \u5185\u5b58\u5927\u5c0f, \u9ed8\u8ba4\u503c: 1G<\/li>\n<li>-d, &#8211;disk: \u786c\u76d8\u5927\u5c0f, \u9ed8\u8ba4\u503c: 5G<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><code class=\"language-sh line-numbers\">multipass launch -n u18 -c 4 -m 4G -d 40G 18.04\n<\/code><\/pre>\n<ul>\n<li><code>delete<\/code>\uff1a\u5220\u9664\u7cfb\u7edf\u4e2d\u955c\u50cf\u3002\u53ef\u9009 -p \u53c2\u6570\uff0c\u5c06\u5b8c\u5168\u5220\u9664\u4e0d\u80fd\u6062\u590d\u3002<\/li>\n<li><code>recover<\/code>\uff1a\u6062\u590d\u5220\u9664\u7684\u865a\u62df\u673a\u3002<\/li>\n<\/ul>\n<pre><code class=\"language-sh line-numbers\">multipass delete u18\nmultipass recover u18 #\u6062\u590d\u5220\u9664\u7684\u865a\u62df\u673a\nmultipass delete -p u18 #\u5f7b\u5e95\u5220\u9664\uff0c\u4e0d\u80fd\u6062\u590d\n<\/code><\/pre>\n<h2>3. \u5f00\uff5c\u5173\uff5c\u91cd\u542f\uff5c\u6302\u8d77 \u865a\u62df\u673a\u547d\u4ee4\uff1astart\uff5cstop\uff5crestart\uff5csuspend<\/h2>\n<pre><code class=\"language-sh line-numbers\">multipass start\nmultipass stop\nmultipass restart\nmultipass suspend u18\n<\/code><\/pre>\n<h2>4. \u64cd\u4f5c\u865a\u62df\u673a shell(sh)\u3001exec<\/h2>\n<ul>\n<li><code>sh<\/code> : \u8fdb\u5165\u865a\u62df\u673a\u7ec8\u7aef\u3002<\/li>\n<\/ul>\n<p>\u8bed\u6cd5\uff1a<code>multipass sh [\u865a\u62df\u673a\u540d\u79f0]<\/code><\/p>\n<pre><code class=\"line-numbers\">multipass sh u18\n<\/code><\/pre>\n<p>\u5728\u865a\u62df\u673a shell \u4e2d\uff0c\u4f7f\u7528 exit \u547d\u4ee4\u5373\u9000\u51fa shell\uff0c\u4f46\u865a\u62df\u673a\u4ecd\u5728\u6267\u884c\u72b6\u6001\uff0c\u53ef\u5feb\u901fsh\u91cd\u65b0\u8fdb\u5165\u3002<\/p>\n<ul>\n<li><code>exec<\/code> : \u6267\u884c\u865a\u62df\u673ashell\u547d\u4ee4\u3002<\/li>\n<\/ul>\n<p>\u8bed\u6cd5\uff1amultipass exec [\u865a\u62df\u673a\u540d\u79f0] &#8212; \u547d\u4ee4<br \/>\n\u76f8\u5f53\u4e8e sh \u8fdb\u865a\u62df\u673a shell\uff0c\u6267\u884c\u547d\u4ee4\u540e\uff0cexit \u9000\u51fa \u865a\u62df\u673a shell\u3002<\/p>\n<pre><code class=\"language-sh line-numbers\">multipass exec u18 -- ls  # \u5728 u18\u865a\u62df\u673a\u6267\u884c ls \u547d\u4ee4\u540e\u8fd4\u56de\n<\/code><\/pre>\n<h2>5. \u4f20\u9012\u6587\u4ef6\uff0c\u53ca\u6302\u8f7d\u4e3b\u673a\u6587\u4ef6\u5939 transfer\u3001mount\u3001umount<\/h2>\n<ul>\n<li><code>transfer<\/code> : \u6587\u4ef6\u4f20\u9001\u3002\u53ef\u6709\u591a\u4e2a\u6765\u6e90\u6587\u4ef6\u4f20\u5230\u5355\u4e00\u76ee\u7684\u5730\u6587\u4ef6<\/li>\n<\/ul>\n<p>\u8bed\u6cd5\uff1a<code>multipass transfer [options] &lt;\u6765\u6e90&gt; [&lt;\u6765\u6e90&gt; ...] &lt;\u76ee\u7684\u5730&gt;<\/code><\/p>\n<p>\u590d\u5236\u4e00\u6216\u591a\u4e2a\u6587\u4ef6\u5230\u5355\u4e00\u76ee\u7684\u5730\u3002<\/p>\n<p>&lt;\u6765\u6e90>\u6216&lt;\u76ee\u7684\u5730> \u53c2\u6570\u524d\u82e5\u52a0 &#8220;name:&#8221; \uff0c\u662f\u6307\u865a\u62df\u673a\u201cname\u201d\u5185\u7684\u6587\u4ef6\u3002<\/p>\n<pre><code class=\"language-sh line-numbers\">#\u590d\u5236\u4e3b\u673a\u7528\u6237\u76ee\u5f55\u4e0b\u7684 .Xauthority\u6587\u4ef6\u5230u18\u865a\u62df\u673a\u7684\u590d\u5236\u4f20\u9001\nmultipass transfer ~\/.Xauthority $vm:\/home\/ubuntu\/.Xauthority \n<\/code><\/pre>\n<ul>\n<li><code>mount<\/code> : \u6302\u8f7d host\u76ee\u5f55\u3002<\/li>\n<\/ul>\n<p>\u8bed\u6cd5\uff1a<code>multipass mount [\u53c2\u6570] \u5bbf\u4e3b\u673a\u76ee\u5f55 \u865a\u62df\u673a\u540d\u79f0[:\u76ee\u5f55\u540d\u79f0 ]<\/code><\/p>\n<p>\u53c2\u6570\uff1a<\/p>\n<p>\u200b   <code>-u host_id:instance_id<\/code> : \u5c06 host \u76ee\u5f55\u7684 user id \u5bf9\u5e94\u5230\u865a\u62df\u673a\u76ee\u5f55\u7684 user id<\/p>\n<p>\u200b   <code>-g host_id:instance_id<\/code> : \u5c06 host \u76ee\u5f55\u7684 group id \u5bf9\u5e94\u5230\u865a\u62df\u673a\u76ee\u5f55\u7684 group id<\/p>\n<pre><code class=\"line-numbers\">multipass mount \/mnt u18\nmultipass mount \/mnt u18:\/mnt\n<\/code><\/pre>\n<blockquote><p>\n  \u26a0\ufe0f<strong>\u6ce8\u610f1\uff1a<\/strong> \u865a\u62df\u673a ubuntu\u7684\u7b2c\u4e00\u4e2a\u7528\u6237 id \u901a\u5e38\u662f 1000\uff0cmacOS\u7684\u7b2c\u4e00\u4e2a\u7528\u6237 id \u53ef\u80fd\u662f 501\u3002<\/p>\n<p>  \u53ef\u5728\u5bbf\u4e3b\u673a\u548c\u865a\u62df\u673a\u5185\u7528 id \u547d\u4ee4\u67e5\u770b id\u53f7\u3002\u5728\u91cd\u65b0\u5b9a\u4e49\u3002\u8fd9\u6837\u624d\u80fd\u63a7\u5236\u597d\u5b58\u53d6\u6743\u9650\u3002<\/p>\n<p>  \u26a0\ufe0f<strong>\u6ce8\u610f2\uff1a<\/strong> \u505c\u6b62\uff08stop\uff09\u865a\u62df\u673a\u540e\uff0c\u518d\u505a\u6302\u5728\u52a8\u4f5c\uff0c\u518d\u91cd\u5f00\u542f\u865a\u62df\u673a\uff0c\u4ee5\u514d\u72b6\u51b5\u4e0d\u540c\u6b65\u3002<\/p>\n<\/blockquote>\n<ul>\n<li><code>umont<\/code> : \u5378\u8f7d\u865a\u62df\u673a\u5185\u6302\u5728\u7684host\u76ee\u5f55\u3002<\/li>\n<\/ul>\n<p>\u8bed\u6cd5\uff1a<code>multipass unmount \u865a\u62df\u673a\u540d\u79f0[:\u76ee\u5f55\u540d\u79f0 ]<\/code><\/p>\n<p>\u82e5\u6ca1\u6709\u6307\u5b9a\u76ee\u5f55\uff0c<u>\u6240\u6709\u865a\u62df\u673a\u5185\u7684host\u6302\u8f7d<\/u>\u90fd\u4f1a\u88ab\u5378\u8f7d\u3002<\/p>\n<pre><code class=\"line-numbers\">multipass unmount u18\n<\/code><\/pre>\n<ul>\n<li>\u6b64\u5916\u5728\u4e3b\u673a\u6216\u865a\u62df\u673a\u7ec8\u7aef\u4e2d\u53ef\u7528 <code>scp<\/code>\u3001<code>ssh<\/code> \u7b49 unix shell \u547d\u4ee4\uff0c\u900f\u8fc7 IP \u4e0e\u4e3b\u673a\u6216\u5176\u4ed6\u673a\u5668\u8054\u7cfb\u3002<\/li>\n<\/ul>\n<h2>6. \u66f4\u6539Multipass\u5b9e\u4f8b\u7684\u5185\u5b58\u548cCPU\u6570<\/h2>\n<pre><code class=\"language-sh line-numbers\"># \u5148\u505c\u6b62 multipassd \u670d\u52a1\nsudo launchctl unload \/Library\/LaunchDaemons\/com.canonical.multipassd.plist\n\n# \u4fee\u6539\u914d\u7f6e\u6587\u4ef6\nsudo pico \/var\/root\/Library\/Application\\ Support\/multipassd\/qemu\/multipassd-vm-instances.json\n\n# \u518d\u542f\u52a8 multipassd \u670d\u52a1\nsudo launchctl load \/Library\/LaunchDaemons\/com.canonical.multipassd.plist\n<\/code><\/pre>\n<p>\u914d\u7f6e\u6587\u4ef6\u7684\u683c\u5f0f\u5e94\u8be5\u5f88\u5bb9\u6613\u7406\u89e3\uff1a<\/p>\n<pre><code class=\"language-json line-numbers\">{\n    \"primary\": {\n        \"deleted\": false,\n        \"disk_space\": \"10737418240\",\/\/ 10G\n        \"mac_addr\": \"52:54:00:5d:ed:45\",\n        \"mem_size\": \"4294967296\",\/\/4096M\n        \"metadata\": {\n        },\n        \"mounts\": [\n        ],\n        \"num_cores\": 2,\n        \"ssh_username\": \"ubuntu\",\n        \"state\": 0\n    }\n}\n<\/code><\/pre>\n<hr \/>\n<h2>multipass \u5e38\u7528\u547d\u4ee4\u5feb\u901f\u53c2\u8003<\/h2>\n<blockquote><p>\n  multipass -help \u53ef\u67e5\u9605\u4f7f\u7528\u65b9\u5f0f\u3002\n<\/p><\/blockquote>\n<ul>\n<li><code>multipass ls<\/code>: \u67e5\u770b\u5df2\u5b89\u88c5\u7684VM\uff0c<code>multipass find<\/code>: \u641c\u5bfb\u5b98\u65b9\u63d0\u4f9b\u7684\u7cfb\u7edf\u955c\u50cf(image)\u3002<\/li>\n<li><code>multipass launch [-n vm_name] [-c cpu_cores] [-d disk_size] [-m mem_size] [image]<\/code>: \u3010\u4f7f\u7528 \u6307\u5b9a \u955c\u50cf\u3011\u521b\u5efa\u3010\u6307\u5b9a\u540d\u79f0\u3011\u3001\u3010cpu\u6838\u5fc3\u6570\u3011\u3001\u3010\u78c1\u789f\u5927\u5c0f\u3011\u3001\u3010\u8bb0\u5fc6\u4f53\u5927\u5c0f\u3011\u7684\u865a\u62df\u673a\u5b9e\u4f53\u3002<\/li>\n<li><code>multipass delete [-p] [vm]<\/code>: \u5220\u9664VM\u5b9e\u4f53\uff08-p \u5f3a\u5236\u91ca\u653e\u865a\u62df\u673a\u78c1\u76d8\u7a7a\u95f4\uff0c\u4e0d\u80fdrecover\u56de\u6765\uff09\u3002<\/li>\n<li><code>multipass sh [vm]<\/code>: \u8fdb\u5165\u6307\u5b9aVM\u7684 shell\u3002<\/li>\n<li><code>multipass start [vm]<\/code>: \u542f\u52a8\u5df2\u521b\u5efa\u7684VM\u5b9e\u4f53\u3002<code>multipass stop [vm\uff5c--all]<\/code>:\u505c\u6b62VM\u6216\u5168\u90e8VM\u3002 <code>multipass restart [vm]<\/code>: \u91cd\u542fVM\u3002<\/li>\n<li><code>multipass mount [-u uid&gt;:vm_uid] [-g gid:vm_gid]  &lt;host_path&gt; &lt;vm1:path&gt; [&lt;vm2:path&gt; ...]<\/code>: \u5c06\u4e3b\u673a\u76ee\u5f55\u6302\u8f7d\u5230(\u591a\u4e2a)\u865a\u62df\u673a\u76ee\u5f55\u4e2d\u3002\u53ef\u6620\u5c04\u76ee\u5f55\u7684\u7528\u6237id\/\u7fa4\u7ec4id\u5230\u865a\u62df\u673a\u7684\u7528\u6237id\/\u7fa4\u7ec4id\u4ee5\u8bbe\u5b9a\u5b58\u53d6\u6743\u9650\u3002<\/li>\n<li><code>multipass transfer [options] &lt;source&gt; [&lt;source&gt; ...] &lt;dest&gt;<\/code>: \u4f20\u9001\uff08\u591a\u4e2a\uff09\u6765\u6e90\u5230\u76ee\u7684\u5730\u3002<br \/>\nsource \u548c dest \u53ef\u4ee5\u662f\u4e3b\u673a\u7684 <code>path<\/code> \u6216\u662f  <code>vm:path<\/code> \u683c\u5f0f\u7684\u865a\u62df\u673avm\u7684path\u3002\u53ef\u4f20\u9012\u6574\u4e2a\u76ee\u5f55\u3002<br \/>\npath \u82e5\u662f <code>-<\/code> \u8868\u793a\u662f stdin \u6216 stdout \u3002<\/li>\n<li><code>multipass exec &lt;vm&gt; [--] &lt;command&gt;<\/code>: \u76f4\u63a5\u5728\u5bbf\u4e3b\u673a\u6267\u884c\u865a\u62df\u673a\u5b9e\u4f53\u7684\u547d\u4ee4\uff0c\u4e0d\u8fdb\u5165\u865a\u62df\u673a\u3002\u6ce8\u610f\u6ca1\u6267\u884c\u865a\u62df\u673a\u7684 <code>~\/.bashrc<\/code> \uff0c\u73af\u5883\u53d8\u91cf\u4e0e sh\u8fdb\u865a\u62df\u673a\u7684\u4e0d\u540c\u3002<\/li>\n<\/ul>\n<hr \/>\n<p>#\u67d0\u4f7f\u752832bit\u5de5\u5177\u5f00\u53d1\u9879\u76eeXX\u7684\u7f16\u8bd1\u73af\u5883\u8bbe\u5b9a<\/p>\n<p>\u8fd9\u91cc\u64cd\u4f5c\u5728 Ubuntu 20.04 \u955c\u50cf\u7684\u865a\u62df\u673a\u540e\uff0c\u5b89\u88c5\u4e00\u4e2a\u9700\u898132bit\u73af\u5883\u7684\u8001SDK\u7684\u4e00\u822c\u9700\u6c42\u3002\u786e\u8ba4 multipass\u73af\u5883\u80fd\u4e3a\u8be5SDK\u5efa\u7acb\u826f\u597d\u7684\u865a\u62df\u5f00\u53d1\u73af\u5883\u3002<\/p>\n<h2>\u6dfb\u52a032bit\u652f\u6301<\/h2>\n<ul>\n<li>\u7531\u4e8e SDK \u4e2d\u8fd8\u670932bit\u5de5\u5177\uff08\u5982uboot\u7528\u7684gcc\uff09\uff0c\u8981\u6dfb\u52a032bit\u652f\u6301\uff1a<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\">sudo dpkg --add-architecture i386\n\nsudo apt update\nsudo apt purge libc6-dev -y\nsudo apt install libc6-dev libc6-dev-i386 -y\n<\/code><\/pre>\n<h2>\u5b89\u88c5SDK\u76f8\u4f9d\u7684\u7cfb\u7edf\u7a0b\u5f0f\u5e93<\/h2>\n<ul>\n<li>\u7528 apt \u5b89\u88c5SDK\u76f8\u4f9d\u7684\u7cfb\u7edf\u7a0b\u5f0f\u5e93<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\">sudo apt install build-essential make ccache libncurses5 libncurses5-dev  libssl-dev openssl zlibc minizip libidn11-dev libelf-dev bison flex gawk -y\n<\/code><\/pre>\n<h2>\u89e3\u538b\u7f29\u6e90\u7801\u4e0esdk\u5de5\u5177<\/h2>\n<ul>\n<li>\u89e3\u538b\u7f29sdk\u4e0ecode<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\">tar -xvf \/mnt\/sourcezip\/srcXX.tgz\n<\/code><\/pre>\n<h2>\u8bbe\u5b9a\u7f16\u8bd1\u73af\u5883\u53c2\u6570<\/h2>\n<ul>\n<li>\u521d\u59cb\u5316\u7f16\u8bd1\u73af\u5883\uff1a<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\">cd XX\n. scripts\/XXenv.sh\n<\/code><\/pre>\n<h2>\u9009\u62e9\u7f16\u8bd1\u9879\u76ee<\/h2>\n<ul>\n<li>\u7f16\u8bd1\u9009\u9879\u76ee\uff082\uff09\uff1a<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\">make -id 2\n<\/code><\/pre>\n<h2>\u4fee\u6539\u7f16\u8bd1\u9879\u76ee\u7684\u53c2\u6570\u8bbe\u5b9a<\/h2>\n<ul>\n<li>\u7f16\u8bd1\u53c2\u6570\u4fee\u6539\uff1a<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\">make menuconfig\n<\/code><\/pre>\n<h2>\u7f16\u8bd1<\/h2>\n<ul>\n<li>\u7f16\u8bd1\uff1a<\/li>\n<\/ul>\n<pre><code class=\"language-bash line-numbers\"># make all\ntime make all -j18\n<\/code><\/pre>\n<p>\u5927\u7ea615\uff5e20min \u7b2c\u4e00\u6b21\u5b8c\u6574\u7f16\u8bd1\u5b8c\u6210\u3002<\/p>\n<pre><code class=\"language-bash line-numbers\">real    19m52.255s\nuser    75m19.688s\nsys 10m22.632s\n<\/code><\/pre>\n<p>Parallels :<\/p>\n<pre><code class=\"line-numbers\">real    21m2.057s\nuser    74m37.298s\nsys 13m30.170s\n<\/code><\/pre>\n<p>clean \u540e\u91cdbuild<\/p>\n<pre><code class=\"language-bash line-numbers\">make clean\ntime make all -j16\n<\/code><\/pre>\n<p>clean\u540e\u7b2c\u4e8c\u6b21\u7f16\u8bd1\u6027\u80fd<\/p>\n<pre><code class=\"line-numbers\">real    5m25.158s\nuser    13m29.415s\nsys 3m29.612s\n<\/code><\/pre>\n<h2>\u70e7\u5f55<\/h2>\n<p>TBD\u3002\u8be5\u9879\u76ee\u6709Windows\u7684\u70e7\u5f55\u5de5\u5177\uff0c\u6ca1\u6709macOS\u7684\u3002\u3002\u3002<\/p>\n<hr \/>\n<h1>Multipass \u5bf9\u5df2\u7ecf\u5b58\u5728\u7684\u5b9e\u4f8b\u8fdb\u884c\u8c03\u6574<\/h1>\n<p>https:\/\/zhuanlan.zhihu.com\/p\/435237515<\/p>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/www.zhihu.com\/people\/wang-ling-zhi-mao\">\u4ea1\u7075\u4e4b\u732b<\/a><\/p>\n<p>\u6700\u8fd1\u4e0a\u624b\u5c1d\u8bd5\u4e86 Canonical \u5bb6\u641e\u51fa\u6765\u7684\u8de8\u5e73\u53f0 Ubuntu \u8f7b\u91cf\u865a\u62df\u5316\u65b9\u6848\u2014\u2014Multipass\u3002<\/p>\n<p>\u867d\u7136\u4f53\u9a8c\u786e\u5b9e\u4e0d\u9519\uff0c\u4f46\u662f\u5b98\u65b9\u63d0\u4f9b\u7684\u8d44\u6599\u786e\u5b9e\u592a\u7c97\u7cd9\u4e86\uff0c\u5f88\u591a\u95ee\u9898\u8fd8\u8981\u9760\u793e\u533a\u89e3\u51b3\u3002<\/p>\n<p>Multipass \u5e0c\u671b\u80fd\u628a\u865a\u62df\u673a\u50cf docker \u4e00\u6837\u7684\u4f7f\u7528\uff0c\u4ed6\u786e\u5b9e\u4e5f\u505a\u5230\u4e86\u8fd9\u6837\u7684\u6548\u679c\uff1b\u7136\u800c\u865a\u673a\u6bd5\u7adf\u8fd8\u662f\u865a\u673a\uff0c\u6709\u5f88\u591a\u4e0e\u5bb9\u5668\u7684\u4e0d\u540c\u4e4b\u5904\uff0c\u66f4\u4f55\u51b5 Multipass \u8fd0\u884c\u7684\u662f\u5e26\u6709 systemd \u7684\u5b8c\u6574\u53d1\u884c\u7248 Ubuntu\uff0c\u76f4\u63a5\u5bf9\u865a\u673a\u7684\u8c03\u6574\u8fd8\u662f\u4f1a\u6709\u9700\u8981\u3002<\/p>\n<p>\u5bf9\u4e8e\u542f\u52a8\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u884c\u53c2\u6570\u7ed9\u865a\u62df\u673a\u5206\u914d\u8d44\u6e90\uff0c\u4f8b\u5982<\/p>\n<pre><code class=\"language-text line-numbers\">multipass launch --name myubuntu --cpus 2 --mem 2G --disk 10G\n<\/code><\/pre>\n<p>\u90a3\u4e48\u7b49\u4f60\u4ec0\u4e48\u90fd\u5df2\u7ecf\u914d\u7f6e\u597d\u4e4b\u540e\uff0c\u53d1\u73b0\u8d44\u6e90\u7d27\u5f20\u600e\u4e48\u529e\uff1f\u91cd\u5efa\u660e\u663e\u4ee3\u4ef7\u592a\u5927\u4e86\uff0c\u5176\u5b9e\u4f5c\u4e3a\u865a\u673a\uff0c\u8fd9\u4e9b\u91cd\u65b0\u8c03\u6574\u90fd\u4e0d\u96be\u3002<\/p>\n<p>\u8fd9\u91cc\u4e3b\u8981\u9488\u5bf9 MacOS \u8fdb\u884c\u8bf4\u660e\uff0c\u8981\u80fd\u6b63\u786e\u914d\u7f6e multipass \u9700\u8981\u60f3\u4e86\u89e3\u5b83\u7684\u5b89\u88c5\u548c\u5de5\u4f5c\u8def\u5f84\uff0c\u8fd9\u4e9b\u65b9\u9762 multipass \u6709\u70b9\u4e0d\u592a\u8d70\u5bfb\u5e38\u8def\uff1a<\/p>\n<ul>\n<li>multipass \u7a0b\u5e8f\u4e3b\u8981\u5de5\u4f5c\u5728 <span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\/Library\/Application Support\/com.canonical.multipass<\/span><\/p>\n<\/li>\n<li>\n<p>\u5982\u679c\u6ca1\u6709\u7279\u522b\u5904\u7406\uff0cmultipass \u4f7f\u7528 qemu \u4f5c\u4e3aHypervisor\uff0c\u865a\u62df\u76d8\u4e3a COW2 \u683c\u5f0f\uff0c\u7f51\u7edc\u4f7f\u7528\u865a\u62df\u7f51\u6865\u8fde\u63a5<\/p>\n<\/li>\n<li>\n<p>\u865a\u62df\u673a\u7684\u914d\u7f6e\u6587\u4ef6\u4e3a <code>\/var\/root\/Library\/Application Support\/multipassd\/multipassd-vm-instances.json<\/code> <strong>\u9700\u8981 root \u6743\u9650<\/strong>\uff1a<\/p>\n<pre><code class=\"language-sh line-numbers\">sudo pico \/var\/root\/Library\/Application Support\/multipassd\/multipassd-vm-instances.json\n<\/code><\/pre>\n<\/li>\n<li>multipass \u9ed8\u8ba4\u4f1a\u901a\u8fc7 luanchd \u968f\u7cfb\u7edf\u542f\u52a8\uff0c\u542f\u52a8\u914d\u7f6e\u6587\u4ef6\u5728 \/Library\/LaunchDaemons\/com.canonical.multipassd.plist<\/p>\n<\/li>\n<\/ul>\n<p>\u5bf9\u4e8e\u865a\u673a\u7684\u8c03\u6574\u4e00\u822c\u90fd\u5efa\u8bae\u5148\u505c\u6b62 multipass \u670d\u52a1\uff1a<\/p>\n<pre><code class=\"language-text line-numbers\">sudo launchctl unload \/Library\/LaunchDaemons\/com.canonical.multipassd.plist\n<\/code><\/pre>\n<p>\u542f\u52a8 multipass \u670d\u52a1\uff1a<\/p>\n<pre><code class=\"language-text line-numbers\">sudo launchctl load \/Library\/LaunchDaemons\/com.canonical.multipassd.plist\n<\/code><\/pre>\n<p>\u4fee\u6539\u5b9e\u4f8b\u5185\u5b58\u548cCPU\uff0c\u9700\u8981\u5230\u865a\u673a\u76ee\u5f55\u4e0b\u5bfb\u627e\u5bf9\u5e94\u7684\u5b9e\u4f8b\uff1a<\/p>\n<blockquote><p>\n  \/var\/root\/Library\/Application Support\/multipassd\/\n<\/p><\/blockquote>\n<p>\u4e0d\u540c\u7684\u7cfb\u7edf\u53ef\u80fd\u60c5\u51b5\u4f1a\u6709\u6240\u4e0d\u540c\uff0c\u732b\u8fd9\u91cc\u662f MacOS 12.0.1 + multipassd 1.8.1\uff0c<span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\">\u5b9e\u4f8b\u914d\u7f6e\u6587\u4ef6\u4e3a<\/span>\uff1a<\/p>\n<blockquote><p>\n  <code>\/var\/root\/Library\/Application Support\/multipassd\/multipassd-vm-instances.json<\/code>\n<\/p><\/blockquote>\n<p>\u5bf9\u5e94\u5b9e\u4f8b\u4e0b\u4e3b\u8981\u7684\u914d\u7f6e\u9879\u76ee\u6709\uff1a<\/p>\n<ul>\n<li>disk_space: \u865a\u62df\u76d8\u5927\u5c0f\uff0c\u5355\u4f4d\u5b57\u8282\uff0c\u5b9e\u4f8b\u5efa\u7acb\u540e\u8c03\u6574\u8be5\u53c2\u6570\u65e0\u6548<\/li>\n<li>mac_addr: \u865a\u673a MAC \u5730\u5740<\/li>\n<li>mem_size: \u865a\u673a\u5185\u5b58\u5927\u5c0f\uff0c\u5355\u4f4d\u5b57\u8282\uff0c\u91cd\u542f\u865a\u673a\u751f\u6548<\/li>\n<li>metadata: qemu \u542f\u52a8\u547d\u4ee4\u884c\u5217\u8868<\/li>\n<li>mounts: \u6302\u8f7d\u4e3b\u673a\u8def\u5f84\u4fe1\u606f\uff0c\u6302\u8f7d\u8def\u5f84\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u884c\u5b9e\u73b0\uff0c\u4e0d\u5efa\u8bae\u5728\u8fd9\u91cc\u8c03\u6574<\/li>\n<li>num_cores: \u865a\u62df CPU \u6838\u5fc3\u6570\uff0c\u91cd\u542f\u865a\u673a\u751f\u6548<\/li>\n<\/ul>\n<p>\u5bf9\u4e8e\u865a\u673a\u7684\u78c1\u76d8\u8fdb\u884c\u8c03\u6574\u662f\u65e0\u6cd5\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u5b9e\u73b0\u7684\uff0c\u9700\u8981\u5bf9\u5e94\u7684\u5de5\u5177\u8fdb\u884c\u8c03\u6574\uff0c\u8fd9\u91cc\u4e3b\u8981\u9488\u5bf9 qemu \u7684<\/p>\n<p>\u865a\u62df\u673a\u7684\u865a\u62df\u76d8\u4f4d\u4e8e\uff1a<\/p>\n<blockquote><p>\n  \/var\/root\/Library\/Application Support\/multipassd\/qemu\/vault\/instances\/\u5b9e\u4f8b\u540d\/ubuntu-\u7248\u672c-server-cloudimg-\u67b6\u6784.img\n<\/p><\/blockquote>\n<p>\u4f7f\u7528 qemu-img \u5de5\u5177\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u8c03\u6574\uff0cmultipass \u81ea\u5e26\u7684 qemu-img \u5de5\u5177\u4f4d\u4e8e<\/p>\n<blockquote><p>\n  \/Library\/Application Support\/com.canonical.multipass\/bin\/\n<\/p><\/blockquote>\n<p>\u53ef\u4ee5\u5c06\u5176\u52a0\u5165\u5230 PATH \u73af\u5883\u53d8\u91cf\u6216\u8005\u8f6f\u94fe\u5230 \/usr\/local\/bin \u4e0b\u65b9\u4fbf\u4f7f\u7528\uff0c\u64cd\u4f5c\u865a\u62df\u76d8\u65f6\uff0c\u8bf7\u5148\u505c\u6b62\u865a\u62df\u673a\u5b9e\u4f8b<\/p>\n<p>\u67e5\u770b\u865a\u62df\u76d8\u4fe1\u606f<\/p>\n<pre><code class=\"language-text line-numbers\">qemu-img check \u955c\u50cf\u6587\u4ef6\n<\/code><\/pre>\n<p>\u4fee\u6539\u865a\u62df\u76d8\u5927\u5c0f\uff08\u5355\u4f4d\u5b57\u8282\uff09\uff1a<\/p>\n<pre><code class=\"language-text line-numbers\">qemu-img resize \u955c\u50cf\u6587\u4ef6 size\n<\/code><\/pre>\n<p>\u4fee\u6539\u5b8c\u6210\u540e\uff0c\u76f4\u63a5\u542f\u52a8\u865a\u62df\u673a\u5b9e\u4f8b\u5c31\u80fd\u770b\u5230\u4fee\u6539\u751f\u6548<\/p>\n<p>\u6700\u540e\uff0cmultipass \u5b58\u5728\u4e00\u4e2a\u9ed8\u8ba4\u865a\u62df\u673a\uff0c\u4e00\u822c\u540d\u4e3a \u201cprimary\u201d\uff0c\u76f4\u63a5 <code>multipass shell<\/code>\u3001<code>multipass start<\/code> \u542f\u52a8\u7684\u90fd\u662f\u9ed8\u8ba4\u865a\u62df\u673a\u3002<\/p>\n<p>\u5982\u679c\u5e0c\u671b\u7528\u81ea\u5df1\u5df2\u7ecf\u521b\u5efa\u597d\u7684\u5b9e\u4f8b\u66ff\u6362\u9ed8\u8ba4\u865a\u62df\u673a\uff0c\u53ef\u4ee5\u76f4\u63a5\u7528\u547d\u4ee4\u884c\u64cd\u4f5c\u4fee\u6539\uff1a<\/p>\n<pre><code class=\"language-text line-numbers\">multipass set client.primary-name=\u81ea\u5df1\u7684\u5b9e\u4f8b\u540d\n<\/code><\/pre>\n<p>\u9a8c\u8bc1\u4fee\u6539<\/p>\n<pre><code class=\"language-text line-numbers\">multipass get client.primary-name\n<\/code><\/pre>\n<hr \/>\n<h1>\u5982\u4f55\u63d0\u9ad8Multipass\u6302\u8f7d\u6027\u80fd<\/h1>\n<blockquote><p>\n  https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309<\/p>\n<p>  \u4e5f\u89c1: <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/multipass.run\/docs\/share-data-with-an-instance\">\u5982\u4f55\u4e0e\u5b9e\u4f8b\u5171\u4eab\u6570\u636e<\/a>, <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309\">mount<\/a>\n<\/p><\/blockquote>\n<p>Multipass\u9ed8\u8ba4\u4f7f\u7528SSHFS\u5728\u5b9e\u4f8b\u4e0a\u6302\u8f7d\u4e3b\u673a\u6587\u4ef6\u5939. \u8fd9\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5728\u6027\u80fd, \u5b89\u5168\u548c\u529f\u80fd\u4e4b\u95f4\u6bd4\u8f83\u597d\u7684\u4e2d\u548c\u65b9\u6848, \u5176\u4ed6\u65b9\u6cd5\u4e5f\u53ef\u4ee5\u624b\u52a8\u5b8c\u6210\u8fd9\u4e2a\u4efb\u52a1.<\/p>\n<blockquote><p>\n  \u5b9e\u6d4b\uff1a<code>time dd if=FreeRTOSv202112.00.zip of=xxx bs=8k count=1000000<\/code><\/p>\n<table>\n<thead>\n<tr>\n<th>\u73af\u5883<\/th>\n<th>\u8bfb\u5199\u901f\u5ea6(MB\/s)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>macOS\u539f\u751f SSD\uff08MBP15 2015\uff09<\/td>\n<td>500-730<\/td>\n<\/tr>\n<tr>\n<td>Parallels Virtual HDD<\/td>\n<td>440-660<\/td>\n<\/tr>\n<tr>\n<td>multipass\u865a\u62df\u673a Virtual HDD<\/td>\n<td>500<\/td>\n<\/tr>\n<tr>\n<td>multipass\u865a\u62df\u673a sshfs \u6302\u8f7d\u4e3b\u673a SSD\u786c\u76d8<\/td>\n<td>30<\/td>\n<\/tr>\n<tr>\n<td>Sftp \u8fde\u63a5\u4e3b\u673aSSD\u786c\u76d8<\/td>\n<td>6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/blockquote>\n<p>\u6211\u4eec\u5728\u5f88\u591a\u6302\u8f7d\u65b9\u6cd5\u4e0a\u8fdb\u884c\u4e86\u5f7b\u5934\u5f7b\u5c3e\u7684\u6d4b\u8bd5. \u5728\u8fd9\u91cc, \u6211\u4eec\u5c06\u7b80\u8ff0\u5982\u4f55\u4f7f\u7528\u6211\u4eec\u627e\u5230\u7684\u9ad8\u6548\u65b9\u6cd5\u5728\u6bcf\u4e2a\u7cfb\u7edf\u4e0a\u5982\u4f55\u521b\u5efa\u5171\u4eab, \u5982\u4f55\u5728Multipass\u5b9e\u4f8b\u4e2d\u6302\u8f7d\u4ed6\u4eec<\/p>\n<h2><strong>\u5185\u5bb9:<\/strong><\/h2>\n<ul>\n<li>SMB\/CIFS\u6302\u8f7d[]\n<ul>\n<li>\u4f7f\u7528SMB\u5171\u4eab\u6587\u4ef6\u5939<\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309#refa11\">Windows<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309#refa12\">MacOS<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309#refa13\">Linux<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309#refa2\">\u5728\u5b9e\u4f8b\u4e2d\u4f7f\u7528SMB\u5171\u4eab\u6302\u8f7d\u6587\u4ef6\u5939<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309#refb\">virtio-fs\u6302\u8f7d<\/a><\/li>\n<li>NFS\u6302\u8f7d\n<ul>\n<li>\u4f7f\u7528NFS\u5171\u4eab\u6587\u4ef6\u5939<\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309#refc11\">MacOS<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309#refc12\">Linux<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/sinat_41870148\/article\/details\/125464309#refc2\">\u5728\u5b9e\u4f8b\u4e2d\u4f7f\u7528NFS\u5171\u4eab\u6302\u8f7d\u6587\u4ef6\u5939<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>SMB\/CIFS\u6302\u8f7d [Windows\u3001macOS\u3001Linux]<\/h2>\n<p>\u5728\u6211\u4eec\u7684\u6d4b\u8bd5\u4e2d, SMB\u5728Multipass\u6240\u6709\u642d\u5efa\u4e2d\u90fd\u662f\u6027\u80fd\u4f18\u826f\u7684. Windows\u548cMacOS\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7cfb\u7edfSMB\u670d\u52a1\u5668, Linux\u4e0a\u4e5f\u662f\u5f88\u5bb9\u6613\u5b89\u88c5\u7684(\u8f83\u65b0\u6838\u5fc3\u7248\u672c\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7cfb\u7edf\u670d\u52a1\u5668, \u800c\u6211\u4eec\u5728\u8fd9\u63cf\u8ff0\u7684\u4e5f\u53ef\u4ee5\u9488\u5bf9\u4e8e\u8001\u65e7Linux\u7248\u672c).<\/p>\n<h3>\u4f7f\u7528SMB\u5171\u4eab\u6587\u4ef6\u5939<\/h3>\n<h4>Windows<\/h4>\n<p>\u9996\u5148, \u8fd9\u4e00\u90e8\u5206\u662f\u53ef\u9009\u64cd\u4f5c, \u6211\u4eec\u53ef\u4ee5\u542f\u52a8\u5728Windows\u4e2d\u5185\u7f6e\u7684SMB\u670d\u52a1\u5668\u4e0a\u7684RDMA. \u5728\u63a7\u5236\u9762\u677f\u4e2d, \u6211\u4eec\u53ef\u4ee5\u627e\u5230Windows\u529f\u80fd\u5f00\u5173. \u5728\u8fd9\u4e2a\u7a97\u53e3, \u6211\u4eec\u9700\u8981\u542f\u7528SMB\u9a71\u52a8. Windows\u53ef\u80fd\u9700\u8981\u542f\u52a8.<\/p>\n<p>\u7136\u540e, \u6211\u4eec\u53ef\u4ee5\u7528<code>PowerShell<\/code>\u5171\u4eab\u6587\u4ef6\u5939. \u770b\u4e0b\u9762\u7684\u547d\u4ee4:<\/p>\n<pre><code class=\"language-shell line-numbers\">New-SmbShare -Name \"share_name\" -Path \"C:\\my_path\"\n<\/code><\/pre>\n<p>\u6211\u4eec\u4f1a\u5728\u4e3b\u673a\u4e0a\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a<code>\\\\hostname\\share_name<\/code>\u7684\u5171\u4eab. \u547d\u4ee4<code>New-SmbShare<\/code>\u6709\u5f88\u591a\u9009\u9879\u53ef\u4ee5\u63a7\u5236\u8fde\u63a5\u548c\u7f16\u7801, \u4f46\u662f\u8fd9\u4e0d\u662f\u8fd9\u7bc7\u6587\u7ae0\u7684\u8bdd\u9898.<\/p>\n<h4>MacOS<\/h4>\n<p>\u8fd9\u4e9b\u5b8c\u5168\u53ef\u4ee5\u4f7f\u7528\u754c\u9762\u64cd\u4f5c(GUI)\u5b8c\u6210, \u53ea\u662f\u6709\u4e9b\u6b65\u9aa4\u4ece\u547d\u4ee4\u884c\u64cd\u4f5c\u6bd4\u8f83\u7b80\u5355. \u5982\u679c\u53ef\u4ee5, \u6211\u4eec\u540e\u9762\u4f1a\u5c55\u793a\u540e\u8005.<\/p>\n<p>\u6211\u4eec\u9700\u8981\u6309\u7167\u4e0b\u9762\u7684\u547d\u4ee4\u542f\u52a8\u5171\u4eab\u7cfb\u7edf:<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo defaults write \/Library\/Preferences\/SystemConfiguration\/com.apple.smb.server.plist EnabledServices -aaray disk\n$ sudo launchctl load -w \/System\/Library\/LaunchDaemons\/com.apple.smbd.plist\n<\/code><\/pre>\n<p>\u7136\u540e, \u53bb\u5171\u4eab\u6307\u5b9a\u6587\u4ef6\u5939:<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo sharing -a \/Volumes\/Work \n<\/code><\/pre>\n<p>\u6700\u540e, \u6211\u4eec\u9700\u8981\u5141\u8bb8\u7528\u6237\u901a\u8fc7SMB\u8fde\u63a5\u5230\u5171\u4eab\u6587\u4ef6\u5939. \u56e0\u6b64, \u6211\u4eec\u9700\u8981\u5bfc\u822a\u5230\u7cfb\u7edf\u504f\u597d(System Preferences), \u627e\u5230\u5171\u4eab\u56fe\u6807. \u5728\u5171\u4eab\u83dc\u5355\u6709\u4e00\u4e2a\u9009\u9879\u6309\u94ae. \u8fd9\u4e2a\u6309\u94ae\u4f1a\u6253\u5f00\u4e00\u4e2a\u7a97\u53e3, \u6211\u4eec\u53ef\u4ee5\u5728\u5176\u4e2d\u9009\u62e9\u54ea\u4e9b\u7528\u6237\u80fd\u591f\u6302\u8f7d. \u63a5\u4e0b\u6765\u9009\u62e9\u60f3\u8981\u6388\u6743\u7684\u7528\u6237\u5e76\u8f93\u5165\u5bc6\u7801.<\/p>\n<p>\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u4f1a\u5728\u4e3b\u673a\u4e0a\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a<code>\/\/hostname\/my_path\/<\/code>\u7684\u6302\u8f7d\u70b9.<\/p>\n<h4>Linux<\/h4>\n<p>\u5728Ubuntu(\u6216\u5176\u4ed6\u4efb\u4f55\u57fa\u4e8eDebian\u7684\u53d1\u884c\u7248)\u4e2d, <code>samba-common<\/code> \u5305\u5305\u542b\u4e86SMB\u670d\u52a1\u5668. \u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u547d\u4ee4\u5b89\u88c5\u5b83<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo apt update &amp;&amp; sudp apt install -y samba-common\n<\/code><\/pre>\n<p>\u7136\u540e, \u7f16\u8f91\u6587\u4ef6<code>\/etc\/samba\/smb.conf<\/code>, \u4f7f\u6211\u4eec\u53ef\u4ee5\u6dfb\u52a0\u5171\u4eab, \u65b0\u589e\u8bcd\u6761, \u5982\u4e0b:<\/p>\n<pre><code class=\"language-bash line-numbers\">[test_smb_mount]\n  comment = smb mount test\n  path = \/my_path\/\n  read only = no\n  browsable = yes\n  kernel oplocks = yes\n<\/code><\/pre>\n<h3>\u5728\u5b9e\u4f8b\u4e2d\u4f7f\u7528SMB\u5171\u4eab\u6302\u8f7d\u6587\u4ef6\u5939<\/h3>\n<p>\u4e00\u65e6\u4e3b\u673a\u64cd\u4f5c\u7cfb\u7edf\u53ef\u4ee5\u5171\u4eab\u6587\u4ef6\u5939, \u6211\u4eec\u5c31\u53ef\u4ee5\u5728\u5b9e\u4f8b\u4e2d\u6302\u8f7d\u5b83. \u4e3a\u6b64, \u9700\u8981<code>cifs-tools<\/code>\u5305, \u53ef\u4ee5\u7528\u4e0b\u9762\u547d\u4ee4\u5b89\u88c5<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo apt upadte &amp;&amp; sudo apt install -y cifs-utils\n<\/code><\/pre>\n<p>\u6302\u8f7d\u9700\u8981\u4e0b\u9762\u547d\u4ee4\u884c\u6700\u7ec8\u5b8c\u6210<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo mount -t cifs \/\/hostname\/my_path_or_share_name mount_folder\/ -o user=my_name,uid=1000\n<\/code><\/pre>\n<p><code>my_name<\/code>\u662f\u4e3b\u673a\u4e0a\u5171\u4eab\u6587\u4ef6\u5939\u7684\u7528\u6237. \u5728\u7ec8\u7aef\u4e2d\u4f1a\u88ab\u8981\u6c42\u8f93\u5165\u5bc6\u7801, \u8f93\u5165\u5c31\u5b8c\u6210\u4e86.<\/p>\n<p>\u8fd9\u4e00\u6b65\u53ef\u9009. \u6211\u4eec\u53ef\u4ee5\u5728<code>\/etc\/fstab<\/code>\u65b0\u589e\u4e00\u884c, \u8ba9\u64cd\u4f5c\u7cfb\u7edf\u542f\u52a8\u65f6\u81ea\u52a8\u6302\u8f7d\u6587\u4ef6\u5939, \u6216\u81f3\u5c11\u4e0d\u9700\u8981\u6307\u5b9a\u6302\u8f7d\u540d\u79f0\u6216\u9009\u9879. \u547d\u4ee4\u884c\u5e94\u5982\u4e0b:<\/p>\n<pre><code class=\"language-bash line-numbers\">\/\/hostname\/my_path_or_share_name mount_folder\/ cifs user=my_name,uid=1000 0 0\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u6587\u4ef6\u4e2d\u7684\u8bcd\u6761\u4f7f\u7528\u7a7a\u683c\u6216\u8005\u5236\u8868\u7b26\u5206\u9694. \u7b2c\u4e00\u4e2a\u662f\u5171\u4eab\u540d\u79f0\u6216\u8def\u5f84, \u7b2c\u4e8c\u4e2a\u662f\u8981\u6302\u8f7d\u6587\u4ef6\u5939\u7684\u76ee\u5f55, \u7b2c\u4e09\u4e2a\u662f\u6302\u8f7d\u7c7b\u578b, \u7b2c\u56db\u4e2a\u662f\u4e00\u4e2a\u9017\u53f7\u5206\u9694\u7684\u9009\u9879\u5217\u8868(\u6dfb\u52a0noatuo\u907f\u514d\u542f\u52a8\u65f6\u6302\u8f7d), \u6700\u540e\u4e24\u4e2a\u9009\u9879\u6700\u597d\u4fdd\u6301\u4e3a0.<\/p>\n<p>\u5047\u8bbe<code>noauto<\/code>\u5728\u9009\u9879\u4e2d\u88ab\u6307\u5b9a\u4e86, \u6587\u4ef6\u5939\u5c31\u9700\u8981\u7528\u4e0b\u9762\u65b9\u5f0f\u6302\u8f7d<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo mount mount_folder\/\n<\/code><\/pre>\n<h2>virtio-fs\u6302\u8f7d [Linux]<\/h2>\n<p>\u5982\u679c\u5728Linux\u4e0a\u4f7f\u7528LXD\u540e\u7aef, \u6211\u4eec\u53ef\u53d7\u76ca\u4e8e\u6709\u4e00\u4e2a\u4f18\u826f\u7684\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d, \u9274\u4e8e\u7cfb\u7edf\u8fd0\u884c\u65f6\u65e0\u6cd5\u6302\u8f7d\u7684\u82b1\u9500. \u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u5728\u5b9e\u4f8b\u4e0a\u6302\u8f7d\u6587\u4ef6\u5939:<\/p>\n<pre><code class=\"language-bash line-numbers\">$ lxc --project multipass config device add lxdinstance mount_lxd disk source=\/my_path path=\/\/mount_folder\n<\/code><\/pre>\n<p>\u9274\u4e8e<code>lxdinstance<\/code>\u662f\u5b9e\u4f8b\u540d\u79f0, <code>mount_lxd<\/code>\u662f\u4e00\u4e2a\u6302\u8f7d\u8fc7\u4e8e\u968f\u610f\u7684\u8bbe\u5907\u540d\u79f0, <code>source<\/code>\u6307\u5b9a\u4e86\u5171\u4eab\u8def\u5f84, <code>path<\/code>\u6307\u5b9a\u4e86\u6e90\u6587\u4ef6(source)\u9700\u8981\u6302\u8f7d\u7684\u76ee\u5f55. \u53ea\u9700\u8981\u8fd9\u4e2a\u547d\u4ee4, LXD\u641e\u5b9a\u4e86\u6240\u6709\u4e8b\u60c5: \u65e0\u9700\u5728\u5b9e\u4f8b\u8fd0\u884c\u547d\u4ee4.<\/p>\n<p>virtio-fs\u4e5f\u5728qemu\u548clibvirt\u540e\u7aef\u53ef\u7528, \u5c3d\u7ba1\u9700\u8981\u989d\u5916\u5b89\u88c5.<\/p>\n<h2>NFS\u6302\u8f7d [Linux\u3001macOS]<\/h2>\n<blockquote><p>\n  Linux\u548cMacOS\u5728\u7cfb\u7edf\u4e0a\u63d0\u4f9b\u4e86NFS\u670d\u52a1\u5668.\n<\/p><\/blockquote>\n<h3>\u4f7f\u7528NFS\u5171\u4eab\u6587\u4ef6\u5939<\/h3>\n<h4>MacOS<\/h4>\n<p>MacOS\u4e0a\u7684NFS\u670d\u52a1\u5668\u662f\u4f7f\u7528<code>nfsd<\/code>\u547d\u4ee4\u548c\u6587\u4ef6<code>\/etc\/exports<\/code>\u63a7\u5236. \u6211\u4eec\u901a\u8fc7\u65b0\u589e\u6587\u4ef6\u5939\u5230\u6587\u4ef6\u4e2d\u53bb\u5171\u4eab, \u4f7f\u7528\u7c7b\u4f3c\u4e8e\u4e0b\u9762\u7684\u4e00\u884c\u6587\u672c:<\/p>\n<pre><code class=\"language-bash line-numbers\">\/my_path -mapall=host_user -network 192.168.0.0 -mask=255.255.0.0\n<\/code><\/pre>\n<p><code>-network<\/code>\u548c<code>-mask<\/code>\u63a7\u5236\u7740\u5171\u4eab\u53ef\u4ee5\u8fde\u63a5\u5230\u7684\u7f51\u7edc. \u7136\u540e, \u6211\u4eec\u4f7f\u7528\u547d\u4ee4\u542f\u52a8\u670d\u52a1\u5668<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo nfsd start\n<\/code><\/pre>\n<p>(\u6216\u8005\u670d\u52a1\u5668\u5df2\u7ecf\u6b63\u5728\u8fd0\u884c\u5219\u4f7f\u7528<code>restart<\/code>)<\/p>\n<h4>Linux<\/h4>\n<p>\u5728Ubuntu(\u6216\u5176\u4ed6\u4efb\u4f55\u57fa\u4e8eDebian\u7684\u53d1\u884c\u7248), <code>nfs-kernel-server<\/code>\u5305\u5305\u542b\u4e86\u6838\u5fc3\u4e2d\u9700\u8981\u4f7f\u7528NFS\u670d\u52a1\u5668\u7684\u6587\u4ef6. \u6211\u4eec\u53ef\u4ee5\u7528\u547d\u4ee4\u5b89\u88c5\u5b83<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo apt update &amp;&amp; sudo apt install -y nfs-kernel-server\n<\/code><\/pre>\n<p>\u7528\u4e0b\u9762\u547d\u4ee4\u5171\u4eab\u6587\u4ef6\u5939:<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo exportfs *:\/my_path\n<\/code><\/pre>\n<p><code>*<\/code>\u8868\u793a&#8221;\u5bfc\u51fa\u4efb\u4f55\u4e3b\u673a&#8221;; \u6211\u4eec\u5728\u8fd9\u53ef\u4ee5\u6307\u5b9a\u4e3b\u673a\u540d\u6216IP\u5730\u5740<\/p>\n<h3>\u5728\u5b9e\u4f8b\u4e2d\u4f7f\u7528NFS\u5171\u4eab\u6302\u8f7d\u6587\u4ef6\u5939<\/h3>\n<p>\u6211\u4eec\u9996\u5148\u9700\u8981\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u5728\u5b9e\u4f8b\u4e2d\u5b89\u88c5NFS\u5ba2\u6237\u7aef<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo apt update &amp;&amp; sudo apt install -y nfs-common\n<\/code><\/pre>\n<p>\u7136\u540e, \u6211\u4eec\u53ef\u4ee5\u7528\u4e0b\u9762\u547d\u4ee4\u6302\u8f7d\u5171\u4eab\u6587\u4ef6\u5939<\/p>\n<pre><code class=\"language-bash line-numbers\">$ sudo mount -t nfs HPST_IP:\/my_path \/mount_folder -o user=host_user, uid=instance_uid,gid=instance_gid\n<\/code><\/pre>\n<blockquote><p>\n  Note: \u5bf9\u4e8e\u6302\u8f7d\u6587\u4ef6\u7cfb\u7edf\u7684\u6027\u80fd\u82e5\u6709\u8981\u6c42\uff0c\u53ef\u4ee5\u53c2\u8003\uff1a<br \/>\n  &#8211; <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/multipass.run\/docs\/improve-mount-performance#heading--nfs-mounts\">How to improve mounts performance in Multipass<\/a>\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>macOS\u4e0b\u7684 multipass-vscode \u7f16\u8bd1\u73af\u5883\u5efa\u7acb \u4f9d\u64da\u6b64\u7bc7\u505a\u4e86\u4e00\u500bscript\u3002\u592a\u9577\u4e0d\u770b\u7684\u53ef\u4ee5\u53bb&#8230; &raquo; <a class=\"read-more-link\" href=\"https:\/\/vm1.go2see.me\/?p=221\">\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":[10,11,12],"tags":[],"class_list":["post-221","post","type-post","status-publish","format-standard","hentry","category-embedded","category-linux","category-multipass"],"_links":{"self":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/221","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=221"}],"version-history":[{"count":18,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/221\/revisions"}],"predecessor-version":[{"id":270,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=\/wp\/v2\/posts\/221\/revisions\/270"}],"wp:attachment":[{"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm1.go2see.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}