事情是这样的
出生于2009年的高贵的CentOS7.9已经要停止维护了
大人,食大便了
然而作为牛马实习生的我,用惯了5.x和6.x内核的Debian和Ubuntu,但ld只会用CentOS7.9(他在口嗨),还是内核3.10那种,于是乎开始恶补相关知识
但是呢,在网上很多很多很多博客的源、教程都已经过时了,在折腾一天之后终于忍不住了,不行!我一定要拿小本本记下来,不然我下次还得找!
事情是这样的
出生于2009年的高贵的CentOS7.9已经要停止维护了
大人,食大便了
然而作为牛马实习生的我,用惯了5.x和6.x内核的Debian和Ubuntu,但ld只会用CentOS7.9(他在口嗨),还是内核3.10那种,于是乎开始恶补相关知识
但是呢,在网上很多很多很多博客的源、教程都已经过时了,在折腾一天之后终于忍不住了,不行!我一定要拿小本本记下来,不然我下次还得找!
Hyper-V,代号Viridian,旧称Windows Server Virtualization,是Microsoft的本地虚拟机管理程序,它可以在运行x86-64位的Windows上创建虚拟机。从Windows 8开始,Hyper-V取代Windows Virtual PC作为Windows客户端版本的硬件虚拟化组件。可以配置运行Hyper-V的服务器计算机能够将单个虚拟机公开到一个或多个网络。Hyper-V是与Windows Server 2008一起首次发布,自Windows Server 2012和Windows 8以来一直无需额外付费。独立的Windows Hyper-V Server是免费的,但仅具有命令行接口。
省流:Hyper-V是微软自己系统的虚拟化工具
Vmware是一家提供云计算和硬件虚拟化的软件和服务的公司。
下列的Vmware部分代指Vmware Workstation
VMware Workstation是VMware公司销售的商业软件产品之一。该工作站软件包含一个用于英特尔x86兼容电脑的虚拟机套装,其允许用户同时创建和运行多个x86虚拟机。每个虚拟机可以运行其安装的操作系统,如(但不限于)Windows、Linux、BSD变生版本。用简单术语来描述就是,VMware Workstation允许一台真实的电脑在一个操作系统中同时开启并运行数个操作系统,其它VMware产品帮助在多个宿主电脑之间管理或移植VMware虚拟机。免费版本为VMware Workstation Player。
VMware Fusion是VMware针对Mac电脑推出的一款虚拟机软件。
省流:Vmware是针对商业化使用的虚拟化软件
省流1:开了Hyper-V的Windows实际上的相当于是运行在Hyper-V中的虚拟化Windows,即Type1中的GuestOS VM。
省流2:使用VMware是在系统层上跑的虚拟化软件,实际上相当于Type2中的Hypervisor
所以开了Hyper-V后,Windows性能会有一定降低,而Vmware是运行在Host OS(宿主机系统)上的一个虚拟化软件,效率相对来说更高
(经过更新优化,现在Hyper-V性能降低感知不明显)
由于兼容性问题,两个Hypervisor层是不能共存的,这也就造成了Hyper-V系统和VMware不能同时使用。
于是VMware想了个招,将自己套在了Hyper-V中,再使用里面的资源虚拟化,这样就解决了Hyper-V和VMware共存的问题了。
(从Vmware15开始官方就解决了共存问题)
结构类似下图
由于现在Windows很多方便的功能如WSL(Linux 的 Windows 子系统),WSA(Android 的 Windows 子系统),Docker on desktop都需要用到Hyper-V技术,这也就让VMware嵌套一层Hyper-V变得无可厚非
更加详细的可以看Revercc’s Blog的内容
由于Hyper-V虚拟机再开启了Hyper-V的情况下,相对于VMware有更好的资源调度优势,运行需要高性能的应用时有一定优势,而VMware在用户界面、管理、体验上均优于Hyper-V,也成为平时使用的首选,可以经过设置在VMware和Hyper-V共享使用虚拟机
下列以Kali Linux为例
首先我们确保虚拟机的Secure Boot是关闭状态,并且磁盘格式为VHD格式,如果不是的话请用工具将其转化为VHD格式
Hyper-V Manager里面既可以实现VHD格式和VHDX格式的相互转换
记住这边的Firmware框起来的设置,后面会有用的
在转换之后记得将虚拟机的磁盘修改为VHD格式
在VMware新建虚拟机,并且选择挂载你刚刚转换的VHD磁盘
Version和Firmware Type要选对应的那个
如果是BIOS启动的话应该可以直接使用了,但是如果是UEFI要进行其他的设置
开机按F2进入Boot Manager
Enter setup->Configure boot options->Add boot option->选择你的磁盘和文件(找回上面你Hyper-V的图,一般为第一个)
找到你的EFI文件并且选择Commit changes and exit
再进入Configure boot options->Change boot order修改启动顺序,保存重启即可
然后两边都可以进入系统,两边都能正常使用了
在进入VMware后记得安装相关vmware-tools才能使用自动调节分辨率,调用GPU等一些相关功能
sudo apt update
sudo apt install open-vm-tools -y
开始快乐使用VMware的各种功能而又可以充分利用Hyper-V的高性能咯
其实不少开源镜像站给出了他们的开源代码,例如清华大学镜像管理器tunasync、中科大镜像Docker。
当时思考了很久,没有使用他们的代码,主要是认为,没什么必要,做一个简单的源没必要那么复杂,于是自己仿照着写了个Demo
Github-SZUmirrors
暂时来说,我们使用的仓库只有少部分几个,同步方式较为单一,pypi为bandersnatch同步,其余系统软件源为rsync同步,这里借用了ustcmirror-images的rsync镜像,其实就是一句rsync指令和一些配置了
守护进程采用service实现,能够开机启动,也能查看状态
流程如下
service(守护进程)->python(分配进程)->docker(工作单元)
这里还需要加上一些前端,一些数据库之类的同步信息,不过作为demo已经足够了,剩下的需要的交给各位自己完善了
TODO:增加Docker反代
[plugins]
enabled =
size_project_metadata
[size_project_metadata]
max_package_size = 100G
最近在折腾自己学校的镜像源,看到差不多20T的硬盘都被塞满了,我是很好奇系统是如何管理这些文件的,于是顺便就研究下APT源的工作原理
在Ubuntu/Debian等系统下,常见的应用安装方式为apt/apt-get
前者可以说是后者的升级版,提供了更友好的命令行界面,包含了apt-get和apt-cache等常用功能,本质上都是基于dpkg的高级包管理工具。
Ubuntu/Debian采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。由于网络环境的问题,我们可能无法正常访问官方的软件仓库,所以许多镜像服务器被建立,并且时刻保持与官方服务器的同步。在使用apt之前,我们一般都会进行换源处理【脚本】Linux换源汇总
换源主要是修改位于/etc/apt/source.list
的源文件,这个文件记录了可获取软件包的镜像站的站点地址。
我们将在其中加入自己的镜像源地址,下列是一个案例
deb http://mirrors.szu.moe/ubuntu jammy main restricted
# deb-src http://mirrors.szu.moe/ubuntu jammy main restricted
deb http://mirrors.szu.moe/ubuntu jammy-updates main restricted
# deb-src http://mirrors.szu.moe/ubuntu jammy-updates main restricted
deb http://mirrors.szu.moe/ubuntu jammy universe
# deb-src http://mirrors.szu.moe/ubuntu jammy universe
deb http://mirrors.szu.moe/ubuntu jammy-updates universe
# deb-src http://mirrors.szu.moe/ubuntu jammy-updates universe
deb http://mirrors.szu.moe/ubuntu jammy multiverse
# deb-src http://mirrors.szu.moe/ubuntu jammy multiverse
deb http://mirrors.szu.moe/ubuntu jammy-updates multiverse
# deb-src http://mirrors.szu.moe/ubuntu jammy-updates multiverse
deb http://mirrors.szu.moe/ubuntu jammy-backports main restricted universe multiverse
# deb-src http://mirrors.szu.moe/ubuntu jammy-backports main restricted universe multiverse
deb http://mirrors.szu.moe/ubuntu jammy-security main restricted
# deb-src http://mirrors.szu.moe/ubuntu jammy-security main restricted
deb http://mirrors.szu.moe/ubuntu jammy-security universe
# deb-src http://mirrors.szu.moe/ubuntu jammy-security universe
deb http://mirrors.szu.moe/ubuntu jammy-security multiverse
镜像源地址遵循以下格式
DebType AddressType://Hostaddress/ubuntu Distribution Component1 Component2.....
其中各字段含义如下所示。
1. DebType表示Deb软件包类型,使用deb表示二进制软件包,使用deb-src表示源码包;
对于大部分用户来说,二进制软件包即可完成安装,二进制软件包会被安装在系统的默认目录下(usr/share和usr/bin
)。而源码包需要自己编译安装,但可以自己指定安装位置。
源码可以通过apt-get source PackageName
获得,以下是源码安装的一个例子(g2o)
cd g2o
mkdir build && cd build
cmake ..
make -j8 -DCMAKE_INSTALL_PREFIX=/usr/local/g2o/
sudo make install
软件源配置文件只是告知系统可以访问的镜像站点地址,但那些镜像站点具体都拥有什么软件资源并不清楚。若每安装一个软件包,就在服务器上寻找一遍,效率是很低的。因而镜像源提供了索引文件,以便本地主机查询apt update
即更新索引文件
root@aurora-rsync:/home/aurora# apt update
Get:1 http://mirrors.szu.moe/ubuntu jammy InRelease [270 kB]
Hit:2 http://mirrors.szu.moe/ubuntu jammy-updates InRelease
Hit:3 http://mirrors.szu.moe/ubuntu jammy-backports InRelease
Hit:4 http://mirrors.szu.moe/ubuntu jammy-security InRelease
Fetched 270 kB in 1s (372 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
root@aurora-rsync:/home/aurora# cat /var/log/nginx/access.log
192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy/InRelease HTTP/1.1" 200 270087 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-updates/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-backports/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-security/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
对于update,会根据源的相关设置访问/ubuntu/dists/(设置的Distribution)/InRelease
的文件,这个也是一个索引,记录了有哪些相应平台的包存储在服务器上
b96c0cfe911414e1b7f2df5c88844369 1192665 main/binary-amd64/Packages.gz
84a735928def889314d9d28d0819425c 1068823 main/binary-arm64/Packages.gz
6a1ab8e4d5aa235c81e2e036e01e9926 775999 main/binary-armhf/Packages.gz
8d8471fdecfb661f6580df6096a53c6a 570121 main/binary-i386/Packages.gz
3a43d2dda28cf2e7e1d885484a1ce249 732797 main/binary-ppc64el/Packages.gz
8ac0edaecf66d4bd0631294a7908154b 690004 main/binary-riscv64/Packages.gz
fb78c7c1b05b2dba72b8ec6d99bb6462 717683 main/binary-s390x/Packages.gz
系统会根据自己的平台下载相应的包索引,本平台为amd64,所以访问main/binary-amd64/Packages.gz
下载
下列出的是其中的一部分,索引中包含如下信息
包名,优先级,类型,维护者,架构,源文件(source),版本号,依赖包,冲突性信息,包大小,文件的下载路径,MD5sum,SHA1,包描述,Xul-Appid—应用程序id,Bugs信息,Origin,Supported
......
Package: accountsservice
Architecture: amd64
Version: 22.07.5-2ubuntu1.3
Priority: optional
Section: gnome
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian freedesktop.org maintainers <pkg-freedesktop-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 500
Depends: dbus (>= 1.9.18), libaccountsservice0 (= 22.07.5-2ubuntu1.3), libc6 (>= 2.34), libglib2.0-0 (>= 2.63.5), libpolkit-gobject-1-0 (>= 0.99)
Recommends: default-logind | logind
Suggests: gnome-control-center
Filename: pool/main/a/accountsservice/accountsservice_22.07.5-2ubuntu1.3_amd64.deb
Size: 69728
MD5sum: a2acf0a225e2c30ccb985a66a4dfb848
SHA1: 1c2b73bc5c72bc44cade5ef6fa444dbea1ea69ec
SHA256: f8ed006eb680e9d8a9b55af88b3786f6892d6d2764586ec4853cf954da119596
SHA512: 9496d225169db5524f7bf9c0fb1cbdfac3ab6261b4725ed56c282d5865678881c8841c539a5b87182306ed66dcc9225a15986083dc72cf7433a30bf601507cc7
Homepage: https://www.freedesktop.org/wiki/Software/AccountsService/
Description: query and manipulate user account information
Task: ubuntu-desktop-minimal, ubuntu-desktop, ubuntu-desktop-raspi, kubuntu-desktop, xubuntu-core, xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop-core, ubuntustudio-desktop, ubuntukylin-desktop, ubuntu-mate-core, ubuntu-mate-desktop, ubuntu-budgie-desktop, ubuntu-budgie-desktop-raspi
Description-md5: 8aeed0a03c7cd494f0c4b8d977483d7e
......
然后apt再将Packages.gz里面的信息以某种数据结构形式导入本地数据库以便快速查找,即完成了
“`apt update“`的一系列操作
其后的`apt install`会借助上述Depends信息自动安装相关依赖,而源码安装则需要自己配置依赖了,所以现在十分不推荐使用
二进制安装好像是最近(2016年)才开始流行的,可能是因为计算和存储能力有了阶段性提升。Python也采用的是二进制安装与编译安装相结合的方式,二进制安装会从源上下载一个whl后缀的文件,whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件。使得可以在不具备编译环境的情况下,选择合适自己的python环境进行安装。
二进制安装更加简单和快速,不需要用户花费时间和精力去编译源代码,处理编译过程中出现的错误和问题,考虑不同的编译器和命令,也不需要用户管理不同的依赖库。与之相对应的会占用服务器资源(编译源代码),以及存储不同平台的二进制文件。
根据上述结论,我们可以通过修改APT源中的Packages.gz文件,在其中添加/修改某些包地址,使其变成恶意文件,如果没有相关签名/校验环节,理论上我们可以完成一次供应链攻击。
所以一般来说要使用足够信任的源,具体实现有待测试。
Todo:APT源实现供应链攻击
某一天,在摸鱼的时候被人拍了一下,叫我用Kali跑一下hashcat,因为hashcat可以调用CUDA(显卡)模块,加速爆破 虽然实际上,我的CPU跑起来也很快 但是,既然来了就研究一下。但是我又不想装多系统,那么就该想想怎么在WSL里面调用CUDA了。
Update: 其实做到最后我又重新做了一遍。原因在于,我的linux核心其实不支持CUDA。 GPU_CUDA_IN_WSL 在安装前,你需要确认一下你的内核版本,只有5.10.43.3以上的版本才是默认支持的
PS C:\Users\hz2016> wsl cat /proc/version
Linux version 5.10.16.3-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Fri Apr 2 22:23:49 UTC 2021
你需要打开下面的功能,并且把内核更新到最新版
由于WSL版的Ubuntu不自带gcc,所以我们在安装CUDA前要自己装一个
apt-get install gcc -y
CUDA Toolkit官网下载 我安装的十CUDA Toolkit 11.6版本,选择的是Runfile(可执行文件)安装 别问为什么,只要知道我翻车很多次就是了。
wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run
sudo sh cuda_11.6.2_510.47.03_linux.run
千万别点进去Options的Drives,别问我为什么问就是我在来了一次 安装完成
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-11.6/
Please make sure that
- PATH includes /usr/local/cuda-11.6/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-11.6/lib64, or, add /usr/local/cuda-11.6/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.6/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 510.00 is required for CUDA 11.6 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run --silent --driver
export PATH=/usr/local/cuda-11.6/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
root@hz2016-pc:~# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_Mar__8_18:18:20_PST_2022
Cuda compilation tools, release 11.6, V11.6.124
Build cuda_11.6.r11.6/compiler.31057947_0
A driver of version at least 510.00 is required for CUDA 11.6 functionality to work.
打开GPU-Z查看一下 发现自己是497.29版本的显卡驱动,于是更新一下
然后你就可以在你的WSL里面跑CUDA了~
apt-get install beignet clinfo
apt-get install beignet-dev
apt-cache search opencl
运行clinfo测试一下
root@hz2016-pc:~# clinfo
······
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM) No devices found in platform
······
还是找不到GPU,翻了下文档,还是我想多了
OpenGL-CUDA Interop is not yet supported. Applications relying on OpenGL will not work.
要用GPU跑hashcat还是去win版跑吧 实测GPU跑比CPU跑快130倍
由于换源需求过多,又不想每一次都上网查,于是有此博客记录不同系统换源过程
PS:为什么不能有一键换源脚本呢
继续阅读【脚本】Linux换源汇总