欧拉系统openEuler 22.03一键安装Docker脚本

完整脚本内容

#!/bin/bash
# openEuler 22.03 一键安装Docker脚本
# 作者:LMZF
# 日期:2025-11-19

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查系统版本
check_os_version() {
    if [ ! -f /etc/openEuler-release ]; then
        log_error "当前系统不是openEuler,脚本退出"
        exit 1
    fi

    OS_VERSION=$(cat /etc/openEuler-release | grep -oP 'release \K[0-9.]+')
    log_info "检测到系统版本: openEuler $OS_VERSION"

    if [[ "$OS_VERSION" != "22.03" ]]; then
        log_warn "此脚本专为openEuler 22.03设计,当前版本可能不兼容"
    fi
}

# 卸载旧版本Docker
remove_old_docker() {
    log_info "检查并卸载旧版本Docker..."
    yum remove -y docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  2>/dev/null || true
}


# 安装依赖包
install_dependencies() {
    log_info "安装必要依赖包..."
    yum install -y dnf-plugins-core device-mapper-persistent-data lvm2
}

# 配置Docker仓库
setup_docker_repo() {
    log_info "配置Docker CE仓库..."

    # 添加Docker官方仓库(使用华为云镜像加速)
    dnf config-manager --add-repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    # 修改仓库配置,将$releasever替换为8(因为openEuler 22.03基于CentOS 8)
    sed -i 's+\$releasever+8+' /etc/yum.repos.d/docker-ce.repo

    # 更新yum缓存
    dnf makecache
}

# 安装Docker CE
install_docker() {
    log_info "开始安装Docker CE..."

    # 查询可用版本
    log_info "可用的Docker版本:"
    dnf list docker-ce --showduplicates | sort -r | head -10

    # 安装指定版本(推荐安装较新的稳定版本)
    DOCKER_VERSION="24.0.7"
    log_info "安装Docker版本: $DOCKER_VERSION"

    dnf install -y docker-ce-$DOCKER_VERSION \
                   docker-ce-cli-$DOCKER_VERSION \
                   containerd.io \
                   docker-buildx-plugin \
                   docker-compose-plugin
}

# 配置Docker
configure_docker() {
    log_info "配置Docker..."

    # 创建配置目录
    mkdir -p /etc/docker

    # 创建daemon.json配置文件
    cat > /etc/docker/daemon.json << EOF
{
  "data-root": "/var/lib/docker",
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://docker.1ms.run",
    "https://dytt.online",
    "https://docker-0.unsee.tech",
    "https://lispy.org",
    "https://docker.xiaogenban1993.com",
    "https://666860.xyz",
    "https://hub.rat.dev",
    "https://docker.m.daocloud.io",
    "https://demo.52013120.xyz",
    "https://proxy.vvvv.ee",
    "https://registry.cyou",
    "https://mirror.ccs.tencentyun.com"
  ],
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
}

# 启动Docker服务
start_docker_service() {
    log_info "启动Docker服务..."

    # 启动并设置开机自启
    systemctl enable docker --now

    # 检查服务状态
    if systemctl is-active --quiet docker; then
        log_info "Docker服务启动成功"
    else
        log_error "Docker服务启动失败"
        journalctl -u docker --no-pager -n 20
        exit 1
    fi
}

# 验证安装
verify_installation() {
    log_info "验证Docker安装..."

    # 检查Docker版本
    docker --version

    # 运行测试容器
    if docker run --rm hello-world; then
        log_info "Docker安装验证成功!"
    else
        log_error "Docker安装验证失败"
        exit 1
    fi

    # 显示Docker信息
    docker info | grep -E "Server Version|Containers|Running|Paused|Stopped|Images|Storage Driver"
}

# 安装后优化
post_install_optimization() {
    log_info "进行安装后优化..."

    # 将当前用户加入docker组(避免每次使用sudo)
    if id -u $SUDO_USER >/dev/null 2>&1; then
        usermod -aG docker $SUDO_USER
        log_info "已将用户 $SUDO_USER 添加到docker组,重新登录后生效"
    fi

    # 显示使用提示
    echo ""
    log_info "=== Docker安装完成 ==="
    log_info "常用命令:"
    log_info "  docker ps                  # 查看运行中的容器"
    log_info "  docker images             # 查看镜像"
    log_info "  docker run -it ubuntu bash # 运行Ubuntu容器"
    log_info "  docker-compose up -d       # 启动docker-compose服务"
}

# 主函数
main() {
    log_info "开始openEuler 22.03 Docker一键安装..."

    # 检查是否为root用户
    if [[ $EUID -ne 0 ]]; then
        log_error "请使用root用户运行此脚本"
        echo "使用: sudo bash $0"
        exit 1
    fi

    # 执行安装步骤
    check_os_version
    remove_old_docker
    install_dependencies
    setup_docker_repo
    install_docker
    configure_docker
    start_docker_service
    verify_installation
    post_install_optimization

    log_info "Docker安装全部完成!"
}

# 执行主函数
main "$@"

<think>嗯,用户想在OpenEuler 22.03安装Oracle 12.2c数据库。这需要仔细规划,因为Oracle数据库对操作系统环境要求严格,而OpenEuler作为国产系统需要额外适配。 用户提供的引用信息很有价值:[^1]提到在OpenEuler 22.03 SP3成功安装了12.2 RAC,说明技术可行性;[^3]指出19c支持RPM安装但12c需要传统方式;[^4]展示的目录结构可参考环境变量配置。不过要注意用户明确要求的是12.2c而非19c。 安装的核心难点在于:OpenEuler默认使用glibc 2.34,而Oracle 12.2官方要求glibc<=2.17。引用[^1]中通过补丁35966787解决了兼容性问题,这个补丁很关键。另外需要特别注意: 1 必须使用特定内核参数,如semaphore设置需包含250 32000 100 128 2 依赖库方面要补充compat-libstdc++和libnsl 3 交换空间配置需为内存的1.5倍以上 安装流程要分七个阶段:环境准备→参数调整→依赖安装→用户组配置→解压安装包→图形界面安装→验证。其中有两个风险点:如果dbca静默建库失败需要手动清理OCR文件;监听器启动报错可能是/etc/hosts配置问题。 用户可能是DBA或系统工程师,语气专业但透着急切,可能面临迁移任务。需要强调回退方案:建议先用虚拟机测试,并备份整个系统盘。相关问题的设计要覆盖故障排除和性能优化,比如第3个问题专门针对共享存储配置——这在RAC环境很常见但用户当前问的是单机版,可能是为后续扩展铺垫。</think>在OpenEuler 22.03安装Oracle 12.2c数据库需严格遵循以下步骤(基于引用[^1]的实践验证): --- ### **一、环境准备** 1. **系统要求** - 确认系统版本:`cat /etc/openEuler-release`(需为22.03 LTS SP3) - 磁盘空间:`/u01` 分区建议 ≥ 50GB(数据文件+软件) - 内存:≥ 8GB,交换空间:`物理内存×1.5`(16GB内存则需24GB交换空间) 2. **依赖包安装** ```bash sudo yum install -y binutils compat-libcap1 compat-libstdc++* gcc-c++ glibc-devel ksh libaio libaio-devel libXext libXtst libX11 libXau libxcb libXi make sysstat smartmontools net-tools ``` 3. **内核参数调整** 编辑 `/etc/sysctl.conf` 并添加: ```conf fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_max = 1048576 ``` 生效配置:`sudo sysctl -p` 4. **用户与目录配置** ```bash sudo groupadd -g 54321 oinstall sudo groupadd -g 54322 dba sudo useradd -u 54321 -g oinstall -G dba oracle sudo passwd oracle # 设置密码 sudo mkdir -p /u01/app/oracle/product/12.2.0/db_1 sudo chown -R oracle:oinstall /u01 sudo chmod -R 775 /u01 ``` --- ### **二、Oracle软件安装** 1. **配置环境变量** 以 `oracle` 用户编辑 `~/.bash_profile`: ```bash export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib ``` 生效:`source ~/.bash_profile` 2. **解压安装包** 上传安装包至服务器(如 `linuxx64_12201_database.zip`),执行: ```bash unzip linuxx64_12201_database.zip -d /tmp/oracle cd /tmp/oracle/database ``` 3. **图形界面安装** ```bash ./runInstaller ``` - 选择 **仅安装数据库软件** - 忽略预检查警告(部分OpenEuler组件需手动修复) - 安装中弹出的root脚本执行: ```bash sudo /u01/app/oraInventory/orainstRoot.sh sudo /u01/app/oracle/product/12.2.0/db_1/root.sh ``` --- ### **三、数据库创建** 1. **使用DBCA静默建库** ```bash dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl -sid orcl \ -sysPassword oracle_123 \ -systemPassword oracle_123 \ -emConfiguration NONE \ -datafileDestination /u01/app/oracle/oradata \ -storageType FS \ -characterSet AL32UTF8 \ -memoryPercentage 40 ``` 2. **验证安装** ```sql sqlplus / as sysdba SQL> SELECT status FROM v$instance; -- 应返回 "OPEN" ``` --- ### **四、关键问题修复** 1. **OPatch更新** 下载最新OPatch替换 `$ORACLE_HOME/OPatch`(解决兼容性问题,引用[^1]中补丁号 `35966787` 为必需) 2. **监听器启动失败** 若 `lsnrctl start` 报错,检查 `/etc/hosts` 是否包含: ```conf 127.0.0.1 localhost $(hostname) ``` --- ### **安装验证** ```bash [oracle@openeuler01 ~]$ sqlplus -v SQL*Plus: Release 12.2.0.1.0 Production # 成功输出版本 [oracle@openeuler01 ~]$ opatch lspatches 35966787;Database Jan 2024 Release Update : 12.2.0.1.240116 (35966787) # 确认补丁[^1] ``` --- ### **注意事项** 1. **防火墙配置** ```bash sudo firewall-cmd --add-port=1521/tcp --permanent sudo firewall-cmd --reload ``` 2. **备份建议** 安装前使用 `snapshot` 创建系统快照,避免失败需重装系统。 --- ### 相关问题 1. OpenEuler 22.03 安装 Oracle 12.2c 时如何解决 `libnsl` 缺失问题? 2. Oracle 12.2c 在 ARM 架构的 OpenEuler 系统上是否兼容? 3. 如何配置 Oracle RAC 在 OpenEuler 环境下的共享存储? 4. 安装后出现 `ORA-01078: failure in processing system parameters` 如何排查? 5. OpenEuler 与 CentOS 的 Oracle 安装步骤有何差异? > 引用说明:安装步骤基于华为欧拉环境实践验证[^1],补丁依赖关系参考Oracle官方文档[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值