Category: Linux

Linux实现惠尔顿上网认证客户端

最近公司由于某些特殊原因,需要上一套惠尔顿的上网行为管理系统,局域网内的所有设备在连接互联网时都需要通过惠尔顿上网认证客户端进行登录,或者需要管理员在上网行为管理中设置免监控。 惠尔顿官方只提供了 Windows 上的客户端进行用户登录,也可以访问网页版进行临时登录,效果如下: 不过 Linux 服务器设备就没法登录了,为此我写了个 Python 程序模拟惠尔顿的网页版客户端实现 Linux / macOS 等系统下的上网认证功能。 Python 程序 我编写的 wholeton-auth.py Python 程序可以通过 Pastebin 分享链接 下载,写的很简单粗糙,这里贴出来说明一下: […]

ARM64 Linux下ARM容器使用yum的问题

ARM 容器问题 前段时间需要验证某客户的 32 位 ARM Linux 程序,由于我们只有现成的 ARM64 设备和系统,而 ARM64 兼容 32 位 armel 和 armhf,因此想到直接在 ARM64(aarch64)Linux 系统中运行 32 位 ARM(armhf)容器来进行测试。 客户程序使用的是 CentOS 7 32 位 ARM 开发环境,这里我使用 LXC 官方镜像来创建一个完整的 CentOS 7 容器系统: 32 位 ARM 容器可以正常启动,但使用 yum 安装任何软件包会报错: yum 修改 上面 yum 命令的报错提示找不到 repo 为 base/7/arm […]

龙芯MIPS64 QEMU ioctl的问题

龙芯 QEMU 问题 最近搞了一块使用国产龙芯 3A3000 处理器的开源开发板,顺便捣鼓移植我们的服务程序,安装龙芯开源社区的 Loongnix 系统之后测试下来 3A3000 处理器的性能还是基本能用的。龙芯处理器自带的内存控制器也能到 DDR3-1600 了,只是目前还在使用 HT3.0 总线确实拖累系统性能。 我们部署的一些服务目前还依赖几个 x86 系统的闭源程序,无法直接在龙芯 MIPS64 系统下运行,就想到使用 QEMU 的 User-mode emulation 来实现了。 Loongnix 系统中的 qemu-i386 运行比较简单的 x86 程序一般都没有问题,不过我发现 […]

Linux修改ELF解决glibc兼容性问题

Linux glibc 问题 相信有不少 Linux 用户都碰到过运行第三方(非系统自带软件源)发布的程序时的 glibc 兼容性问题,这一般是由于当前 Linux 系统上的 GNU C 库(glibc)版本比较老导致的,例如我在 CentOS 6 64 位系统上运行某第三方闭源软件时会报: CentOS 6 自带的 glibc 还是很老的 2.12 版本,而下载的第三方程序依赖 glibc 2.17 版本,这种情况要么自己重新编译程序,要么只能升级系统的 glibc 版本。由于我使用的程序是第三方编写并且是闭源软件无法自己编译,升级 glibc 固然可能能解决问题,但是 glibc 做为最核 […]

Linux C++程序使用Intel OpenCL的问题

Intel OpenCL 问题 最近想在 Linux 环境下使用 Intel 核显测试我们的某个程序,该程序是用 C++ 写的,主要调用 OpenCL 库使用 GPU 进行运算。之前我用 AMD 和 NVIDIA 的显卡都测试过没有问题,还以为会比较顺利,结果在程序刚开始调用 clGetPlatformIDs 检测 OpenCL platform 的时候就直接报错退出了。 我的测试环境使用的是 Intel i3-6100 CPU,该处理器自带 Intel HD Graphics 530 核显,操作系统则是 CentOS 6.9 64 位(比较老,为了和使用环境一致),安装的也是 Intel 官 […]

在Docker容器中使用FUSE文件系统

容器使用 FUSE 的问题 我们一般使用的 Docker 容器都是非特权容器,也就是说容器内的 root 用户并不拥有真正的 root 权限,这就导致很多属于系统管理员的操作都被禁用了。 最近有个在 IBM Bluemix 容器内部挂载 FUSE 文件系统的需求,例如我使用 davfs2 挂载 WebDAV 服务器不出意外地会报错: mount.davfs 命令报错表示无法打开 fuse 设备,而 fuse 设备实际上是存在的(说明 fuse 模块也已经加载了): 从容器内部可以查看到 cgroup 实际允许访问的设备,并没有包含 fuse 设备: 手工允许 fuse 设备自然也是不可行的: […]

使用Software Collections编译最新Linux kernel

关于 Software Collections 使用 Software Collections(SCL)的契机是最近我需要在 CentOS 6 系统上编译最新版本的 Linux kernel,主要用于测试 Btrfs 的数据校验对于 AVX2 指令的支持情况。然而大家都知道 CentOS 6 自带的软件包版本都是非常老的,glibc 维持在 2.12 版本,老的 gcc 4.4 版本则根本就不支持 AVX2 指令,这样编译 Linux kernel 时会自动关闭 async xor 对 AVX2 的支持。 如果要自己动手编译新版本 gcc,这感觉还是有点吃力不讨好,幸好 Red Hat 也注意 […]

小内存OpenVZ VPS使用UML开启BBR

前言 Bottleneck Bandwidth and RTT(BBR)是 Google 最近提交到 Linux 4.9 版本内核的新 TCP 拥塞控制算法,BBR 相对于 Linux 中已经用了好多年的默认 CUBIC 算法的主要改进是在有一定丢包率的网络链路上充分利用带宽,另外也能有效降低延迟。这对于很多使用美帝 VPS + Shadowsocks 爬墙方案的人来说应该还是比较有用的,目前从一些更新了内核开启 BBR 的 KVM VPS 用户的反馈来看效果也还是不错的。 我目前使用的爬墙服务器是 AlphaRacks 的低配 OpenVZ VPS,内存只有 96 MB,到国内的线路质量倒还 […]

Bluemix容器系统更新udev的问题

Bluemix 更新 udev 的问题 最近在 IBM Bluemix 管理控制台中查看容器状态时发现一直会报 策略违例 问题,进入容器详细信息界面,可以看到漏洞顾问程序扫描到的容器系统中存在的违例情况,主要是系统中某些软件包版本比较老,Bluemix 建议进行安全更新升级: 由于我的 Bluemix 容器使用的是 Ubuntu 14.04 系统,起初想着直接运行 apt-get 命令将系统中的软件包都进行升级应该就差不多可以搞定了: 但是在升级 udev 软件包的时候发现能正确下载软件包但升级失败,提示 /etc/modprobe.d 内核模块配置目录无法正常写入: 我如果跳过升级 udev […]

Win10年度更新开启Bash on Ubuntu

关于 Bash on Ubuntu 之前为了能在 Windows 上使用 Bash 等类似 Unix(Linux)系统的体验,我都是安装了 Cygwin、MSYS 等运行环境,都体验上都存在一些问题:Cygwin 上的程序基本都需要重新编译出基于其运行库(cygwin1.dll)的版本,MSYS 虽然提供了 Linux 下常用的开发工具链、移植过的运行库等等,但基本还是受限于 Windows API 本身的。 当我看到 Windows 10 Build 14316 内部预览版时爆出的 Bash on Ubuntu 功能之后还是比较期待的,因为微软并不是以虚拟机的方式运行 Ubuntu 系统,而 […]