<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Devops - Category - ICHARM</title>
        <link>http://example.org/categories/devops/</link>
        <description>Devops - Category - ICHARM</description>
        <generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 17 Jun 2024 02:52:25 &#43;0000</lastBuildDate><atom:link href="http://example.org/categories/devops/" rel="self" type="application/rss+xml" /><item>
    <title>Proxmox核显开启SR-IOV直通给Win11虚拟机</title>
    <link>http://example.org/pve-sr-iov/index.zh-cn.html</link>
    <pubDate>Mon, 17 Jun 2024 02:52:25 &#43;0000</pubDate>
    <author>LakeMei</author>
    <guid>http://example.org/pve-sr-iov/index.zh-cn.html</guid>
    <description><![CDATA[环境信息 CPU: i5-12500T （核显UHD770） PVE：8.2.2 Kernel: 6.8.4 BIOS设置 开启VT-d 开启VT-x 开启IOMMU 开启SR-IOV 调整内核 因为需要编译i915-sriov-dkms 这个内核相关的项目
在不同的内核编译会出现兼容性问题
比如我试过6.2.16、6.8.4、6.5.13-5、6.5.13-3
最后在6.5.13-3内核上成功编译安装了i915-sriov-dkms项目
查看当前安装的内核
root@pve:~# proxmox-boot-tool kernel list Manually selected kernels: None. Automatically selected kernels: 6.5.13-3-pve 6.8.4-3-pve Pinned kernel: 6.5.13-3-pve 6.8.4是升级pve到8.2.2版本后自动安装，参考i915-sriov-dkms项目的readme文件是明确不支持6.8的内核的，所以需要安装低版本的内核并启动，相同硬件环境的可以直接安装6.5.13-3内核，避免重蹈覆辙。
安装6.5.13-3版本内核
root@pve:~# apt install proxmox-kernel-6.5.13-3-pve 移除不需要的内核版本
root@pve:~# apt purge proxmox-kernel-6.x.x-x-pve 锁定内核版本
root@pve:~# proxmox-boot-tool kernel pin 6.5.13-3-pve 设置grub，开机的时候自动选择6.5.13-3内核
需要先重启看下，在Grub选择界面，选择Advanced Options for xxx
记录下 6.5.13-3 内核在 列表的第几项，如何说我的环境是: 因此需要的启动项处于列表的第2项（从0开始）
6.8.4 6.8.4 recovery 6.5.13 6.5.13 recovery 修改/etc/default/grub配置
root@pve:~# vim /etc/default/grub 将GRUB_DEFAULT=0注释掉，并添加GRUB_DEFAULT=&quot;1&gt;2&quot;, 1代表选择Advanced Options， 2代表选择 6.]]></description>
</item>
<item>
    <title>将whl依赖打包成RPM</title>
    <link>http://example.org/rpmbuild-whls/index.zh-cn.html</link>
    <pubDate>Sat, 11 May 2024 03:38:54 &#43;0000</pubDate>
    <author>LakeMei</author>
    <guid>http://example.org/rpmbuild-whls/index.zh-cn.html</guid>
    <description><![CDATA[项目上在适配信创环境（统信系统UOS），遇到了python3相关的依赖问题，UOS官方源中提供的cherrypy版本过低，通过pip3才能安装最新的cherrypy版本，但是项目是通过yum来管理依赖，所以需要将cherrypy打包成rpm包，然后通过yum来安装。
本文提供了一种暴力的方式，直接通过pip3 download将相关联的whl都下载下来，然后编写spec文件，然后将这些whl包都打包成一个rpm包
当通过yum install这个rpm包的时候，执行python3 -m pip install *.whl的方式将这个whl安装好
项目结构 新建一个项目，类似如下，将所有的whl放在BUILD/dist目录下
➜ tree python3-CherryPy-uel20/ python3-CherryPy-uel20/ ├── BUILD │ └── dist │ ├── CherryPy-18.9.0-py3-none-any.whl │ ├── Routes-2.5.1-py2.py3-none-any.whl │ ├── autocommand-2.2.2-py3-none-any.whl │ ├── cheroot-10.0.1-py3-none-any.whl │ ├── importlib_metadata-6.7.0-py3-none-any.whl │ ├── importlib_resources-5.12.0-py3-none-any.whl │ ├── inflect-6.0.5-py3-none-any.whl │ ├── jaraco.collections-4.2.0-py3-none-any.whl │ ├── jaraco.context-4.3.0-py3-none-any.whl │ ├── jaraco.functools-3.7.0-py3-none-any.whl │ ├── jaraco.text-3.11.1-py3-none-any.whl │ ├── more_itertools-9.1.0-py3-none-any.whl │ ├── portend-3.1.0-py3-none-any.whl │ ├── pydantic-1.10.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl │ ├── pytz-2024.1-py2.py3-none-any.whl │ ├── repoze.lru-0.7-py3-none-any.whl │ ├── setuptools-68.]]></description>
</item>
<item>
    <title>Linux配置xrdp远程桌面</title>
    <link>http://example.org/linux-xrdp/index.zh-cn.html</link>
    <pubDate>Thu, 25 Apr 2024 18:36:07 &#43;0000</pubDate>
    <author>Lake</author>
    <guid>http://example.org/linux-xrdp/index.zh-cn.html</guid>
    <description><![CDATA[在PVE中创建了一台Debian12的虚拟机，桌面选的xfce4，非常轻量化，准备将该vm配置成远程工作环境
安装xrdp 安装
sudo apt install xrdp 启动xrdp服务
systemctl start xrdp 设置开机自动启动
systemctl enable xrdp 配置xrdp xrdp服务使用的是xrdp用户，所以需要添加xrdp用户到ssl-cert组，授权证书的访问权限，否则会报错[ERROR] Cannot read private key file /etc/xrdp/key.pem:Permission denied
sudo adduser xrdp ssl-cert 最后检查一下防火墙，网络是否联通
客户端 客户端一般使用微软官方的mircosoft remote desktop, 在MacOS下也能使用
创建用户
3 用户即vm登录的账号密码
创建PC
3 PC name 直接填ip地址即可
User account 选上一步创建的用户
问题 操作下来，发现使用root账号连接，无法显示桌面，看xrdp的日志没有发现异常，连接是正常的，也没有断开（已解决，应该是xfce4不支持同时登录两个root账号，因为我在pve的console登录root账号导致的）
使用其他账号连接使用正常，流畅度比noVNC好不少]]></description>
</item>
<item>
    <title>LXC非特权容器绑定宿主机目录nobody</title>
    <link>http://example.org/unprivileged-lxc/index.zh-cn.html</link>
    <pubDate>Wed, 01 Nov 2023 04:36:07 &#43;0000</pubDate>
    <author>Lake</author>
    <guid>http://example.org/unprivileged-lxc/index.zh-cn.html</guid>
    <description><![CDATA[简介 非特权容器使用了新内核特性user namespaces。所有的容器内部 UID（用户 ID）和 GID（组 ID）都被映射到了与宿主机上不同的ID，通常 root（UID 0）变成了 100000，1 变成了 100001，以此类推。这意味着那些容器中的大多数安全问题（容器逃逸，资源滥用等）将会影响到一个宿主机上随机的非特权用户，即使容器本身以 root 用户身份执行，一定程度上不会对宿主机造成危害，如何有问题也会成为一个通用的内核安全漏洞，LXC 团队认为，通过设计，非特权容器是安全的。
从理论上讲，非特权容器应该无需任何更改即可正常运行，与特权容器没有任何区别。他们的高 UID 映射 ID 将在主机机器的工具（ps，top 等）中显示。
问题 非特权容器挂载宿主机上的目录时，如果目录的权限设置不合理，可能会导致容器内部用户无法访问宿主机上的文件。
例如将宿主机的/mnt/sda挂载到容器的/mnt/sda
容器内查看每一个文件和目录都被映射成nobody (uid 65534)，创建文件和文件夹提示无权限
root@BaseServices:/mnt/sda# ls -l total 0 drwxr-xr-x 2 nobody nogroup 6 Oct 17 06:09 ebooks drwxr-xr-x 2 nobody nogroup 6 Mar 30 2023 images drwxr-xr-x 6 nobody nogroup 57 Feb 24 2023 jellyfin drwxr-xr-x 2 nobody nogroup 45 Feb 19 2023 phone drwxr-xr-x 3 nobody nogroup 40 Oct 17 05:57 projects root@BaseServices:/mnt/sda# touch test.]]></description>
</item>
<item>
    <title>Proxmox扩容local-lvm</title>
    <link>http://example.org/pve-lvmresize/index.zh-cn.html</link>
    <pubDate>Tue, 29 Aug 2023 20:46:29 &#43;0800</pubDate>
    <author>Lake</author>
    <guid>http://example.org/pve-lvmresize/index.zh-cn.html</guid>
    <description><![CDATA[背景 最近m.2固态硬盘价格性价比较高，于是入手一块7800m/s的硬盘，淘汰下来一块2000m/s的m.2的七彩虹2T硬盘，于是想换到家里的pve机器上（原pve机器上是一个512G的m.2）
硬盘克隆 pve机器上只有一个m.2的插口，网上买了一个pcie转m.2转接卡，把七彩虹的硬盘插到pve机器上，通过装在u盘的PE系统里的硬盘工具，直接进行硬盘扇区对扇区的完整克隆。
512G的硬盘克隆花了4个小时，结束后，将原来的512G硬盘拆下来。
local-lvm 扩容 PVE版本： Linux 5.15.74-1-pve #1 SMP PVE 5.15.74-1
重启启动后，可以看到nvme0n1已经是1.8T了，但是nvme0n1p3仍然只有476.4GB，需要先对nvme0n1p3进行扩容
root@pve:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931.5G 0 disk /mnt/sda sdb 8:16 0 1.8T 0 disk /mnt/sdb sdc 8:32 0 1.8T 0 disk /mnt/sdc nvme0n1 259:0 0 1.8T 0 disk |-nvme0n1p1 259:1 0 1007K 0 part |-nvme0n1p2 259:2 0 512M 0 part /boot/efi `-nvme0n1p3 259:3 0 476.4G 0 part |-pve-swap 253:0 0 8G 0 lvm [SWAP] |-pve-root 253:1 0 96G 0 lvm / |-pve-data_tmeta 253:2 0 3.]]></description>
</item>
<item>
    <title>VS2013自带的数据库SQL Server Express LocalDB使用介绍</title>
    <link>http://example.org/vs2013%E8%87%AA%E5%B8%A6%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93sql-server-express-localdb%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D.html</link>
    <pubDate>Sun, 15 Nov 2015 12:17:15 &#43;0000</pubDate>
    <author>Elias Mei</author>
    <guid>http://example.org/vs2013%E8%87%AA%E5%B8%A6%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93sql-server-express-localdb%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D.html</guid>
    <description><![CDATA[博主这几天在做实践周的项目，一个餐馆点餐系统，需要使用到数据库，遇到了很多的问题，百度了很久也没什么头绪。主要还是关于VS自带的数据库操作的问题。这里我来总结一下吧。
首先需要说明的是博主在装VS2013的时候是全选了所有组件安装的。所以默认会自动安装一个SQL Server Express LocalDB。
SQL Server Express LocalDB简介 首先来说一下这个SQL Server Express LocalDB吧，大家应该都知道Express版是一个精简版，而LocalDB呢是SQL Server Express的一种运行模式，比较适合在开发环境使用。所以被内置在VS2013中。
在下文中我们使用SSEL来代替SQL Server Express LocalDB。
在VS中使用SSEL 1.使用SSEL新建一个数据库
视图——打开SQL Server对象资源管理器
1 2.展开其中一个数据库实例——右键点击数据库，选择添加新数据库
2 博主添加一个Test数据库作为演示，位置可以更改。
3 3.给新建的Test数据库添加一个Users表
4 5 4.给新建的Users表添加内容
右键新建的表名，点击查看数据：
6 7 新建数据库实例 可以看到博主是在已有的数据库实例上新建数据库的，那么怎样创建一个新的实例呢，博主没有在VS中找到方法，所以下面会介绍SSEL的命令行工具SqlLocalDB.exe
这个工具默认在 C:\Program Files\Microsoft SQL Server\110\Tools\Binn（博主是64为系统，如果是32位的话应该是在C:\Program Files（x86）下）。SqlLocalDB.exe不能直接运行，需要使用cmd打开。
下面是cmd命令：
C:\Users\Myl-Cloud&amp;gt;cd C:\Program Files\Microsoft SQL Server\110\Tools\Binn C:\Program Files\Microsoft SQL Server\110\Tools\Binn&amp;gt;SqlLocalDB.exe 下面是SqlLocalDB.exe运行后的提示信息。
Microsoft (R) SQL Server Express LocalDB 命令行工具 版本 11.0.2100.60 版权所有 (c) Microsoft Corporation。保留所有权利。 用法: SqlLocalDB 操作 [参数.]]></description>
</item>
<item>
    <title>IIS&#43;PHP上传的图片没有访问权限</title>
    <link>http://example.org/iisphp%E4%B8%8A%E4%BC%A0%E7%9A%84%E5%9B%BE%E7%89%87%E6%B2%A1%E6%9C%89%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90.html</link>
    <pubDate>Sat, 14 Nov 2015 11:56:32 &#43;0000</pubDate>
    <author>Elias</author>
    <guid>http://example.org/iisphp%E4%B8%8A%E4%BC%A0%E7%9A%84%E5%9B%BE%E7%89%87%E6%B2%A1%E6%9C%89%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90.html</guid>
    <description><![CDATA[网站搬家到wimp，真是问题不断，刚刚解决了个，现在又遇到了个。写了一篇博文说说，发现上传的图片不能显示（对外提示500，对内提示URL重写错误），醉了
初步百度了一下，有两种可能，
路径不对 没有权限。 检查了路径，没问题，那就是权限的问题了。
找到这张图片，在属性-安全里-发现没有父目录uploads的Users用户的读取权限，
1 2 于是手动给添加个User用户权限，发现正常了，但是新上传的图片又不能访问。
一般上传的文件会继承父目录的权限，但是在这里上传的文件却没有继承父目录的权限，而且还多了个I开头的用户组
再次百度google找原因，原来是PHP在上传文件的时候，会先放在一个临时的文件夹里（这时会继承该文件夹的权限，所以多了个I开头的用户组）），然后再移动到指定文件夹
那么问题就出现在，上传的临时文件夹没有Users用户权限，移动的过程中不会继承新的父目录的权限，所以没有Users用户权限。
解决方法 既然知道了原因，那么该怎么解决呢，最简单的方法是指定PHP上传的临时文件夹为uploads的子目录
哀差闷具体的解决步骤如下
1.uploads下面新建了个phpUpLoadTemp文件夹，然后再属性-安全里添加IUSR用户组（这个是必须的，php.ini 的upload_tmp_dir 目录权限必须要包含 IUSR）
3 2.打开php.ini，查找upload_tmp_dir将前面的分号去掉 后面添加上phpUpLoadTemp文件夹的路径
upload_tmp_dir = &#34;D:\xxxxx\www\wp-content\uploads\PHPupLoadTemp&#34; 最后还需要注意一点：上传的文件名不能带有中文，否则会出现找不到的问题，原因不多说了，因为编码不同。]]></description>
</item>
</channel>
</rss>
