慕尼黑美食图鉴 - 环境配置
type: channel
link: https://nizhfpoi.moe/index.php/tag/environment_setup/
items: 安装部署Ubuntu网页服务器
items: Ubuntu 22.04安装轻量级Win10虚拟机来实现OneDrive同步文件夹
items: 在Conda的PyTorch环境中编译运行Cuda代码的坑
items: 在Conda环境下装ROS以及Azure Kinect驱动的大坑

安装部署Ubuntu网页服务器
type: item
date: 2025-12-09T13:10:00+00:00
description: 前言部署一个网页本身并没有太大难度，租个服务器用默认密码ssh登入root装上Nginx把网页复制到/var/www里然后改一下Nginx的设置，再去Cloudflare把域名解析到你的IP地址，基本就搞定了。问题在于这么做过不了多久你就会发现服务器密码已经被穷举攻破，然后你就变成了肉鸡用于ddos。即使你手动改了个很复杂的密码，也会发现你命令行用起来非常卡，因为你服务器在后台拒绝大量的错误密码登录。因此，为了在这个险恶的互联网环境下生存下去，必须学会如何保护自己的服务器。服务器安全设置开服后第一件要做的事就是提升安全性。其实你部署完网页再做也行，但这一段每一项操作出错都有可能让你再也登录不了服务器，只能重装。为了少折腾，还是建议最开始就把这些危险操作都搞定。修改ssh端口并配置防火墙第一步我们把默认的ssh端口给改掉，并直接屏蔽22端口的访问。首先打开全局ssh配置文件sudo nano /etc/ssh/sshd_config，root账户可以不用sudo，找到Port 22这一行，把它改成任意与其他服务不冲突的端口，例如Port 1234，按Ctrl+X保存并退出。接着配置ufw防火墙，用sudo ufw allow 1234/tcp添加一个允许1234端口TCP连接的规则。为了防止输入错误导致再也连不上服务器，建议再临时添加一个sudo ufw allow 22/tcp，让当前的远程连接在激活防火墙后还能不断线。确保ssh端口和防火墙都配置正确后，先用sudo systemctl restart ssh重启ssh服务，这时可以再开一个控制台，用ssh -p 1234 root@your-server-ip-address连接服务器，如果能连上说明ssh配置是正确的。再在任意一个控制台里输入sudo ufw enable激活防火墙，如果新的连接没中断，说明防火墙配置也没问题。不放心可以再开个控制台测试一下。之后就可以把临时的22端口规则删掉了sudo ufw delete allow 22/tcp，这样那些对22端口的穷举爆破就会直接被拦住，不会影响服务器性能了。创建账户并赋予sudo权限直接使用root操作服务器是非常危险的行为，容易出现经典的rm -rf不慎删掉整个根目录的失误，因此，我们最好创建一个新账户，并赋予sudo的权限，这样可以避免一些操作失误干掉整个系统，多人使用服务器还能分别记录每个人各自的操作。我们用sudo adduser abc创建一个叫abc的用户，跟着提示输入密码等信息，然后将该用户添加进sudo用户组sudo usermod -aG sudo abc。接着开个新的控制台，用ssh -p 1234 abc@your-server-ip-address登入服务器，然后看看sudo命令是否能用，如果一切正常，可以去ssh设置里禁止直接用root登录，进一步提高安全性。找到/etc/ssh/sshd_config里的PermitRootLogin yes，改成PermitRootLogin no，用sudo systemctl restart ssh重启服务。以后所有root级操作都用新用户的sudo来提权运行，如果真的有什么需要用root用户的操作，可以用su root切换到root。设置仅允许密钥对登录即使改掉了ssh的端口号，如果攻击者真的想要爆破你的服务器，他们还可以直接扫描你的所有端口找到哪个用于ssh。禁用root登录可以有效防止陌生人找到正确的用户名穷举出你的密码，但是如果用上了社工手段，你的用户名很有可能能被猜出来，于是你的服务器还是有一定的危险。这里最安全的手段是只允许服务器使用密钥登录，这样除非你的私钥泄漏了，不然仅有你这台设备能登录。我们先在本地的控制台里，用ssh-keygen -t RSA -b 4096 -C 'comments'创建一个私钥公钥对，comments是备注，你可以改成自己当前电脑的信息。保存位置使用默认的就行，passphrase是解锁这个私钥的密码，设置一个你保证能记住的，最好把passphrase记在纸上。然后去刚才保存的位置，Windows通常在%USERPROFILE%/.ssh/，Ubuntu在~/.ssh/，里面能看到一个id_rsa文件和一个id_rsa.pub文件，没有后缀名的是你的私钥，不要让其他任何人知道。id_rsa.pub是公钥，把它发给别人，你用私钥加密的信息他们可以用公钥来解密。本地生成了私钥公钥对后，先照常用密码登录服务器，把你的公钥添加到服务器的信任列表中，用nano ~/.ssh/authorized_keys创建一个文件，把本地的id_rsa.pub里的内容完整地复制进去，Ctrl+X保存并退出。再打开/etc/ssh/…

Ubuntu 22.04安装轻量级Win10虚拟机来实现OneDrive同步文件夹
type: item
date: 2023-12-05T18:05:00+00:00
description: 背景其实对于绝大部分人来说，Linux系统想要使用OneDrive同步，直接装一个第三方客户端就能用了，比如我之前用的这个，虽然基本都不支持自动同步，但每次有什么更改手动输命令同步一下也够用了。然而某一天，大概是学校新换了个IT管理员，ban掉了所有没有微软官方认证的第三方客户端，纯纯的脑瘫。但没办法人家就是头头，只能认栽，找别的办法来同步Linux上的OneDrive文件夹。最终决定是装一个轻量级的Win10虚拟机，利用RDP远程桌面协议来操作，然后把Windows里的OneDrive文件夹共享，并挂载在Ubuntu的文件系统里。有意思的是这顺便还达成了自动同步，坏处就是CPU和内存占用高了一点，但影响并不是很大。操作流程配置虚拟机这里使用了KVM虚拟机平台实现一个轻量级的虚拟机，可以再配合WinApps把一些Windows软件直接做成一个Ubuntu里的小程序。配置流程基本完全参考了这篇教程。安装KVM：sudo apt-get install virt-manager。从微软官网下载Win10的ISO镜像，必须下载Pro版本的以使用远程桌面。太长了懒得一步步写了，直接跟着这个流程配置虚拟机，我只考虑使用OneDrive，所以分配的资源比较少，CPU两个核，最大4G内存，64G硬盘。继续跟着下一个流程安装Win10，注意在安装virt-win-gt-64.exe后还要安装一下同一文件夹下的virtio-win-guest-tools.exe来共享剪贴板，然后再安装那个Spice Guest Tools。可以把分辨率调低一些节省更多资源，比如800x600。如果想要使用WinApps，可以跟着这个步骤来安装配置。共享Windows虚拟机的文件夹先在网络设置里把当前网络设置为专用网络，并在网络和共享中心里打开专用网络下的网络发现和文件共享。右键OneDrive文件夹 -> 属性 -> 共享，选择高级共享，勾选共享此文件夹，下面的权限里删除所有人，添加自己的用户名，勾选完全控制，一路确认。Windows里打开Powershell，输入ipconfig获得虚拟机的IP地址。Ubuntu里创建一个挂载点文件夹，比如sudo mkdir /mnt/OneDrive。Ubuntu里用Samba挂载OneDrive文件夹sudo mount -t cifs '//windows_ip_address/OneDrive' /mnt/OneDrive -o username=username,password=password,dir_mode=0777,file_mode=0777，windows_ip_address、OneDrive文件夹名字、username、password改成你的。如果想要达成Ubuntu开机自动挂载OneDrive，需要虚拟机的Win10不设密码，开机能自动登入系统。但是Windows默认不允许无密码用户共享文件夹，参考这个网站，在Windows里win+r运行gpedit.msc组策略编辑器，Windows设置 -> 安全设置 -> 本地策略 -> 安全选项 -> 账户：使用空密码的本地账户只允许进行控制台登录，选择已禁用。英语的选项为Windows Settings -> Security Settings -> Local Policies -> Security Options -> Account: Limit local account use of blank passwords to console logon only，设置为disabled。然后刚刚的挂载命令的password=留空。在Ubuntu的Startup Application中添加一条bash -c "sleep 10 && echo sudo_password | sudo -S -k mount -t cifs '//windows_ip_address/OneDrive' /mnt/OneDrive -o username=username,password=,dir_mode=0777,file_mode=0777"，sudo_password改成自己的sudo密码。sleep 10是为了等待Windows开机进系统。共享Linux主机的文件夹虚拟机的内存设置里要勾选Enable shared Memory。选择Add Hardware，选择Filesystem，Driver用virtiofs，Source path选择Ubuntu主机里要共享的文件夹位置，Target path自己起个名字，比如VMShare。下载并安装Windows File System Proxy。在Windows的服务里找到VirtIO-FS S…

在Conda的PyTorch环境中编译运行Cuda代码的坑
type: item
date: 2023-07-17T13:47:00+00:00
description: 背景在深度学习的工作中有时候会用到C++写的Cuda函数来提高运行效率，例如这个Point-Bert，需要自行编译Chamfer Distance和Earth Mover's Distance (EMD)模块。但是在Conda环境里，跟着PyTorch一起安装的pytorch-cuda或cudatoolkit只有基本的Runtime，并不能用来编译Cuda代码。如果系统环境内安装了跟Conda环境里一样的Cuda版本，那可能能顺利编译。但通常我们用Conda环境就是为了能在安装不同PyTorch版本的时候不用折腾系统的Cuda，所以基本都会在编译时遇到系统Cuda和PyTorch Cuda版本不一样的错误。前段时间NVIDIA推出了官方的Conda环境Cuda安装包，这里参考这个官方教程来配置我们的Conda环境。具体操作这里直接记录下个人对Point-BERT的环境配置步骤，其他工作应该也大同小异。确定安装哪个版本的PyTorch，去官网查看需要哪个Cuda版本，安装Cuda。安装所有Conda能装的包，除了PyTorch。pip安装PyTorch，注意选择正确的Cuda版本。pip安装其他conda没有的包。注意opencv的pip版本可能会有些Qt的不兼容问题，可能装Conda版本更好。设置C++编译器的Linker路径到Conda环境。编译Cuda代码并安装到Conda环境。每次开新的命令行运行代码前都要设置C++的Linker路径。mamba create -n pointbert python=3.7 # mamba的速度比conda快多了 conda activate pointbert mamba install cuda -c nvidia/label/cuda-11.7.1 # 改为需要的cuda版本 mamba install easydict h5py matplotlib numpy opencv pyyaml scipy tensorboardX tqdm transforms3d termcolor scikit-learn ninja gcc=11.4 gxx_linux-64 libgcc notebook flake8 ipywidgets urllib3 requests charset-normalizer # gcc的版本需要根据之后编译时的报错来更改 pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117 # 用pip来装PyTorch，不用装PyTorch提供的cuda包 pip install open3d==0.9 timm==0.4.5 argparse # 安装其他pip包 export LD_LIBRARY_PATH=/path/to/conda/envs/pointbert/lib # 手动设置C++ Linker路径，之后运行Python代码前也要设置一下 cd extensions/chamfer_dist python setup.py install # 会装到/path/to/conda/envs/pointbert/lib/python3.7/site-packages cd ../emd python setup.py install cd ../.. pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib" pip install --upgrade "https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl"

在Conda环境下装ROS以及Azure Kinect驱动的大坑
type: item
date: 2023-06-27T15:27:00+00:00
description: 前言ROS是机器人控制领域绕不开的一个框架，用起来也确实很方便，但这框架用官方安装教程只能装在系统的Python环境里。这样装写点最基础的控制没问题，但通常大家不会在系统Python环境里装太多包，特别是PyTorch这类神经网络框架，可能不同模型要装不同的版本。通常大家会用Conda这种包管理软件来创建一个新的环境专门用于某个项目，然而在Conda环境里是没法使用ROS的，所以对于涉及机器人学习的项目，我们需要把ROS的包给装进Conda环境里。最近发现有个叫RoboStack的项目可以实现这个Conda环境，还可以安装非官方支持的ROS版本（比如在20.04里装Humble），但同时也会带来一堆麻烦的依赖问题，特别是C++项目的编译。这里记录一下如何安装以及如何丑陋地解决Azure Kinect相机驱动没法编译的问题。安装前准备Mamba是一个基于Conda但比Conda快得多的包安装软件。如果还没装Conda，可以选择直接去官网下载并安装Mambaforge，会自动安装Conda和Mamba以及设置一些channel。如果已经装了Conda，可以在base环境下设置并安装Mamba。安装Mamba conda install mamba -c conda-forge，如果base环境里包有点多（例如装了Anaconda而不是Miniconda）或者好久没更新，可能这一步要花几十分钟时间解析依赖，这没啥办法只能硬等。然后可以把conda-forge源给添加到conda的设置里，这样就不用每次都-c conda-forge了。先把环境里的包都换源到conda-forge的mamba update --all -c conda-forge，然后执行conda config --add channels conda-forge和conda config --set channel_priority strict。这步可以不做，或者只在特定的环境里加上--env来只设置当前环境的默认源。安装ROS和PyTorch如果没有添加conda-forge到默认源，以下每一步都要加上-c conda-forge。首先创建一个新环境：mamba create -n ros_torch conda activate ros_torch # 如果直接装了Mambaforge，这里conda改为mambaROS 1和ROS 2选一个装，如果不想打-c robostack-staging，也可以把这个源加进环境设置里conda config --add channels robostack-staging。ROS 1：mamba install ros-noetic-desktop -c robostack-staging mamba install compilers cmake pkg-config make ninja catkin_tools -c robostack-stagingROS 2：mamba install ros-humble-dekstop -c robostack-staging mamba install compilers cmake pkg-config make ninja colcon-common-extensions -c robostack-staging跟apt安装的ROS差不多，有很多额外的ROS库可以安装，只需要mamba install ros-<distro>-<name> -c robostack-staging，可以去RoboStack官网看他们支持哪些库，目前还没碰到要用的库他们没收录的。安装好后可以先测试一下ROS能不能用，打开一个新的命令行，激活ros_torch环境后就可以运行内置的demo了，不要source系统的ROS安装目录。注意Conda环境的ROS不能跟系统环境的共用同一个workspace，需要为Conda的ROS创建一个新的workspace并在Conda环境下build。然后就可以安装PyTorch等神经网络框架了，需要注意的是如果没添加conda-forge源，必须每个命令都手打-c conda-forge，即使PyTorch的教程没有写。当前PyTorch安装命令为：conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia。还可以再顺手安装一些常用的库：mamba install tqdm matplotlib numpy pandas seaborn Pillow scipy pyyaml easydict gdown black flake8 noteb…