背景:首次接触docker。
1、拉取镜像。
2、通过初始镜像开启一个容器,并将容器重新设置一个tag,查看容器,通过exec开启终端,注:docker名称必须是小写的,查看docker容器列表。
docker run -it 861b7388600f91f3a0b82a496821eeb88733c8138b7228d3267161507af4aa89 /bin/bash
docker rename interesting_moser ubuntuforcompile
docker ps -a
docker start ubuntuforcompile
docker exec -it ubuntuforcompile /bin/bash
3、禁用root远程登录ssh,并允许ubuntu账号登录,并锁定root账户。
sed -i 's/^#?PasswordAuthentication ./PasswordAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#?PermitRootLogin ./PermitRootLogin no/' /etc/ssh/sshd_config
echo "AllowUsers ubuntu" >> /etc/ssh/sshd_config
sudo passwd -l root (反操作sudo passwd -u root)
4、将容器做成一个镜像,再创建ssh容器。
docker commit 861b7388600f91f3a0b82a496821eeb88733c8138b7228d3267161507af4aa89 ubuntuforcompile
docker run -d -p 2222:22 ubuntuforcompile /usr/sbin/sshd -D
docker rename XX ubuntuforcompile
5、安装编译环境。
点击查看代码sudo apt install -y build-essential flex bison g++ gawk gcc make gettext libncurses-dev libssl-dev python3 python3-pip unzip zlib1g-dev file wget curl rsync subversion swig libtool ccache git libelf-dev ecj fastjar java-propose-classpath ant autoconf automake libxml-parser-perl xsltproc default-jre default-jdk zstdsudo apt install -y python3.12-distutils
sudo ln -s /usr/lib/python3.12/distutils /usr/lib/python3/distutil- #!/bin/bash
- set -e
- echo "?? 更新 APT 软件源..."
- sudo apt update
- echo "?? 安装 OpenWrt 编译所需依赖包:"
- # 编译工具链相关
- sudo apt install -y \
- build-essential \ # 编译 C/C++ 必备:gcc、make、libc 等
- g++ \ # GNU C++ 编译器
- gcc \ # GNU C 编译器
- make \ # 编译自动化工具
- libtool \ # 用于构建共享库
- # 预处理器/生成器
- flex \ # 词法分析工具
- bison \ # 语法分析工具
- swig \ # 生成语言接口封装工具
- # 脚本 & 工具链支持
- gawk \ # GNU awk,makefile 中常用
- gettext \ # 国际化支持
- unzip \ # 解压 zip 包
- zlib1g-dev \ # 压缩库开发文件
- file \ # 检测文件类型
- wget \ # 网络下载工具
- curl \ # 网络请求工具
- rsync \ # 高效文件同步工具
- # OpenWrt 编译常用工具
- subversion \ # SVN,用于拉代码
- git \ # Git 同上
- ccache \ # 编译缓存加速
- libelf-dev \ # ELF 文件解析支持
- zstd \ # 新一代压缩算法支持
- # 菜单配置支持(如 menuconfig)
- libncurses-dev \ # 字符终端 UI 支持
- # 安全/加密支持
- libssl-dev \ # OpenSSL 开发头文件
- # Python 支持
- python3 \ # Python3 主程序
- python3-pip \ # Python 包管理器
- # Java 支持(某些模块会用)
- default-jre \ # Java 运行环境
- default-jdk \ # Java 开发工具
- ecj \ # Eclipse 编译器
- fastjar \ # 创建 Java jar 文件
- java-propose-classpath \# Java 类路径提示工具
- ant \ # Java 构建工具
- # XML/Perl 解析(如 feeds/patches 中会用)
- autoconf \ # 自动配置脚本生成工具
- automake \ # Makefile 辅助生成
- libxml-parser-perl \ # Perl 的 XML 解析器
- xsltproc # XML 处理工具(XSLT 转换)
- echo ""
- echo "?? 检测 Python 版本..."
- PYVER=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
- DISTUTILS_PKG="python${PYVER}-distutils"
- echo "?? 正在安装 ${DISTUTILS_PKG} ..."
- if ! sudo apt install -y "$DISTUTILS_PKG"; then
- echo "?? 未找到 ${DISTUTILS_PKG},尝试建立软链接兼容"
- sudo ln -s "/usr/lib/python${PYVER}/distutils" "/usr/lib/python3/distutils"
- fi
- echo ""
- echo "? 环境准备完成,可以开始编译 OpenWrt!"
复制代码 6、克隆openwrt,并切换到openwrt-24.10,克隆自定义的插件
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git checkout openwrt-24.10
echo "src-git myfeed https://github.com/XXX/TestOpenwrt.git" >> feeds.conf.default
./scripts/feeds update -a
./scripts/feeds install -a
7.make memuconfig
主要选中了这些
LUCI中:
luci-app-ddns
luci-app-openclash(需要dnsmasq-full,需要把dnsmasq取消)
luci-app-openvpn
luci-app-samba4
luci-app-udpxy
luci-app-vlmcsd
VPN中:
openvpn-openssl
8、编译make
nproc 查看线程个数
make -j$(nproc)
配置重新编译需要执行:make defconfig
精简配置:
1、关闭 IPv6 支持
sed -i 's/CONFIG_IPV6=y/# CONFIG_IPV6 is not set/' .config
sed -i 's/CONFIG_PACKAGE_ipv6helper=y/# CONFIG_PACKAGE_ipv6helper is not set/' .config
2. 关闭调试信息
sed -i 's/CONFIG_KERNEL_DEBUG=y/# CONFIG_KERNEL_DEBUG is not set/' .config
sed -i 's/CONFIG_KERNEL_KALLSYMS=y/# CONFIG_KERNEL_KALLSYMS is not set/' .config
3. 关闭多余功能包(示例:ppp, usb, opkg,根据需要)
sed -i '/CONFIG_PACKAGE_ppp/d' .config
sed -i '/CONFIG_PACKAGE_opkg/d' .config
sed -i '/CONFIG_PACKAGE_kmod-usb/d' .config
4、只保留中文或英文 LuCI
sed -i '/luci-i18n-.-zh_HK/d' .config
sed -i '/luci-i18n-.-fr/d' .config
5. 强制 strip 输出(默认开启,但以防万一)
sed -i 's/# CONFIG_STRIP_KERNEL_EXPORTS is not set/CONFIG_STRIP_KERNEL_EXPORTS=y/' .config
6. 设置文件系统为 squashfs(压缩)
sed -i 's/CONFIG_TARGET_ROOTFS_EXT4FS=y/# CONFIG_TARGET_ROOTFS_EXT4FS is not set/' .config
sed -i 's/# CONFIG_TARGET_ROOTFS_SQUASHFS is not set/CONFIG_TARGET_ROOTFS_SQUASHFS=y/' .confi
sed -i '/luci-i18n-.*-de/d' .config
7、 Kernel 调试符号未关闭
sed -i 's/CONFIG_KERNEL_KALLSYMS=y/# CONFIG_KERNEL_KALLSYMS is not set/' .config
sed -i 's/CONFIG_KERNEL_DEBUG_FS=y/# CONFIG_KERNEL_DEBUG_FS is not set/' .config
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |