first commit
This commit is contained in:
74
Dockerfile
Normal file
74
Dockerfile
Normal file
@@ -0,0 +1,74 @@
|
||||
# 1. 基础镜像
|
||||
FROM ubuntu:24.04
|
||||
|
||||
# 2. 预备环境 (为了能跑通 InstallSDK 脚本)
|
||||
# 设置非交互模式,防止 apt 卡住
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# 安装运行 InstallSDK 脚本所需的“最小”前置工具
|
||||
# - sudo: 脚本里通常有 sudo 命令
|
||||
# - unzip: 解压你的源码包
|
||||
# - lsb-release: 脚本可能会检测系统版本
|
||||
# - file/wget: 脚本常用的工具
|
||||
RUN apt-get update && apt-get install -y \
|
||||
sudo \
|
||||
unzip \
|
||||
lsb-release \
|
||||
file \
|
||||
wget \
|
||||
nano \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 3. 准备文件
|
||||
WORKDIR /root
|
||||
# 复制源码包和安装脚本
|
||||
COPY secondo-RC_430.zip .
|
||||
COPY InstallSDK_Ubuntu_24_04.bash .
|
||||
|
||||
# 4. 解压源码
|
||||
# 解压并重命名为 secondo (模拟你物理机上的 /home/db/secondo)
|
||||
RUN unzip -q secondo-RC_430.zip \
|
||||
&& mv secondo-RC_430 secondo \
|
||||
&& rm secondo-RC_430.zip
|
||||
|
||||
# 5. 【核心步骤】执行官方安装脚本
|
||||
# - chmod: 给脚本执行权限
|
||||
# - yes | ...: 自动回答脚本中可能出现的 "Do you want to continue? [Y/n]"
|
||||
# - 脚本会自动安装 gcc, flex, bison, java 等所有依赖,并生成 .secondorc
|
||||
RUN bash InstallSDK_Ubuntu_24_04.bash
|
||||
|
||||
# 6. 配置环境加载方式
|
||||
# 脚本运行完会生成 /root/.secondorc
|
||||
# 我们将它写入 .bashrc,这样你进入容器交互时环境是好的
|
||||
RUN echo "source /root/.secondorc /root/secondo" >> /root/.bashrc
|
||||
|
||||
# 7. 源码补丁 (这是必须要做的,因为脚本只负责装环境,不负责修源码里的 GCC 13 错误)
|
||||
WORKDIR /root/secondo
|
||||
|
||||
# [修复权限] 对应你物理机的 chmod 操作
|
||||
RUN chmod -R +x .
|
||||
|
||||
# [修复 GCC 13] 去掉 -Werror,否则编译必挂
|
||||
RUN find . -name "makefile*" -print0 | xargs -0 sed -i 's/-Werror//g'
|
||||
|
||||
# [修复 API] 跳过 API 编译,防止链接错误
|
||||
# RUN sed -i '/API/d' makefile && \
|
||||
# sed -i 's/update-config \\/update-config/' makefile
|
||||
|
||||
# 8. 编译 Secondo
|
||||
# 切换 Docker 的默认 Shell 为 bash,否则 source 命令无法使用
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
|
||||
# 关键:先 source 脚本生成的配置,再编译!
|
||||
# 这样 make 就能读到 InstallSDK 设置的所有变量
|
||||
RUN source /root/.secondorc /root/secondo && \
|
||||
make clean && \
|
||||
make
|
||||
|
||||
# 9. 验证安装
|
||||
RUN ls -l bin/SecondoTTYCS bin/SecondoListener
|
||||
|
||||
# 10. 启动配置
|
||||
EXPOSE 1234
|
||||
# 容器启动时,也先加载环境,再启动 Listener
|
||||
CMD source /root/.secondorc /root/secondo && ./bin/SecondoListener
|
||||
110
InstallSDK_Ubuntu_24_04.bash
Normal file
110
InstallSDK_Ubuntu_24_04.bash
Normal file
@@ -0,0 +1,110 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# select platform
|
||||
|
||||
if [ "$1" == "-onlyrc" ]; then
|
||||
onlyrc=TRUE
|
||||
fi
|
||||
|
||||
|
||||
|
||||
platform=$(uname -i)
|
||||
|
||||
|
||||
if [ -z $onlyrc ]; then
|
||||
|
||||
# Update the system
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y upgrade
|
||||
|
||||
# Install all tools required to compile Secondo
|
||||
sudo apt-get -y install flex bison gcc g++ libdb5.3 libdb5.3-dev libdb5.3++ libdb5.3++-dev db5.3-util libjpeg62 libjpeg62-dev libgsl0-dev openjdk-8-jdk libreadline-dev librecode-dev libgmp-dev libncurses-dev libxml2-dev original-awk libgmp-dev libgmp10 original-awk libboost-all-dev libbison-dev
|
||||
|
||||
# Install latex and okular to be able to use pdview within Secondo:
|
||||
sudo apt-get -y install texlive okular
|
||||
|
||||
# Deinstall prolog / install java (not installed in a "fresh" Ubunu installation)
|
||||
sudo apt-get -y install swi-prolog swi-prolog-nox swi-prolog-x swi-prolog-java
|
||||
|
||||
fi
|
||||
|
||||
|
||||
cd $HOME
|
||||
|
||||
|
||||
PLVER=$(swipl --version | awk {'print $3'})
|
||||
|
||||
if [ "$platform" == "i686" ]; then
|
||||
echo 'if [ "$1" == "" ]; then' >$HOME/.secondorc
|
||||
echo ' SEC_DIR=$HOME/secondo' >>$HOME/.secondorc
|
||||
echo 'else' >>$HOME/.secondorc
|
||||
echo ' SEC_DIR=$1' >>$HOME/.secondorc
|
||||
echo 'fi' >>$HOME/.secondorc
|
||||
echo '' >>$HOME/.secondorc
|
||||
echo 'export SECONDO_PLATFORM=linux' >>$HOME/.secondorc
|
||||
echo 'export SECONDO_BUILD_DIR=$SEC_DIR' >>$HOME/.secondorc
|
||||
echo 'export BERKELEY_DB_LIB="db_cxx"' >>$HOME/.secondorc
|
||||
echo 'export BERKELEY_DB_DIR=/usr' >>$HOME/.secondorc
|
||||
echo 'export J2SDK_ROOT=/usr/lib/jvm/java-8-openjdk-i386/' >>$HOME/.secondorc
|
||||
echo 'export SWI_HOME_DIR=/usr/lib/swi-prolog' >>$HOME/.secondorc
|
||||
echo 'export PL_LIB_DIR=$SWI_HOME_DIR/lib/i386/' >>$HOME/.secondorc
|
||||
echo 'export PL_DLL_DIR=$PL_LIB_DIR' >> $HOME/.secondorc
|
||||
echo 'export PL_INCLUDE_DIR=$SWI_HOME_DIR/include' >>$HOME/.secondorc
|
||||
echo 'export PL_VERSION=82705' >>$HOME/.secondorc
|
||||
echo 'export JPL_DLL=$PL_LIB_DIR/libjpl.so' >>$HOME/.secondorc
|
||||
echo 'export JPL_JAR=$SWI_HOME_DIR/lib/jpl.jar' >>$HOME/.secondorc
|
||||
echo 'export readline=true' >>$HOME/.secondorc
|
||||
echo 'export PATH=$PATH:.:$SECONDO_BUILD_DIR/Tools/pd' >>$HOME/.secondorc
|
||||
echo 'export SECONDO_CONFIG=$SECONDO_BUILD_DIR/bin/SecondoConfig.ini' >>$HOME/.secondorc
|
||||
echo 'export JAVAVER="1.8"' >>$HOME/.secondorc
|
||||
echo 'export PD_HEADER=$SECONDO_BUILD_DIR/Tools/pd/pd_header_listing' >>$HOME/.secondorc
|
||||
echo 'export PD_DVI_VIEWER=/usr/bin/okular' >>$HOME/.secondorc
|
||||
echo 'export PD_PS_VIEWER=/usr/bin/evince' >>$HOME/.secondorc
|
||||
echo 'export PL_LIB=swipl' >>$HOME/.secondorc
|
||||
echo '' >>$HOME/.secondorc
|
||||
echo 'alias secroot='export SECONDO_BUILD_DIR=$PWD'' >>$HOME/.secondorc
|
||||
echo '' >>$HOME/.secondorc
|
||||
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PL_LIB_DIR' >>$HOME/.secondorc
|
||||
else
|
||||
echo 'if [ "$1" == "" ]; then' >$HOME/.secondorc
|
||||
echo ' SEC_DIR=$HOME/secondo' >>$HOME/.secondorc
|
||||
echo 'else' >>$HOME/.secondorc
|
||||
echo ' SEC_DIR=$1' >>$HOME/.secondorc
|
||||
echo 'fi' >>$HOME/.secondorc
|
||||
echo '' >>$HOME/.secondorc
|
||||
echo 'export SECONDO_PLATFORM=linux64' >>$HOME/.secondorc
|
||||
echo 'export SECONDO_BUILD_DIR=$SEC_DIR' >>$HOME/.secondorc
|
||||
echo 'export BERKELEY_DB_LIB="db_cxx"' >>$HOME/.secondorc
|
||||
echo 'export BERKELEY_DB_DIR=/usr' >>$HOME/.secondorc
|
||||
echo 'export J2SDK_ROOT=/usr/lib/jvm/java-8-openjdk-amd64/' >>$HOME/.secondorc
|
||||
echo 'export SWI_HOME_DIR=/usr/lib/swi-prolog' >>$HOME/.secondorc
|
||||
if [ -f "/usr/lib/swi-prolog/lib/x86_64/libjpl.so" ]; then
|
||||
echo 'export PL_LIB_DIR=$SWI_HOME_DIR/lib/x86_64/' >>$HOME/.secondorc
|
||||
else
|
||||
echo 'export PL_LIB_DIR=$SWI_HOME_DIR/lib/x86_64-linux/' >>$HOME/.secondorc
|
||||
fi
|
||||
echo 'export PL_DLL_DIR=$PL_LIB_DIR' >> $HOME/.secondorc
|
||||
echo 'export PL_INCLUDE_DIR=$SWI_HOME_DIR/include' >>$HOME/.secondorc
|
||||
echo 'export PL_VERSION=82705' >>$HOME/.secondorc
|
||||
echo 'export JPL_DLL=$PL_LIB_DIR/libjpl.so' >>$HOME/.secondorc
|
||||
echo 'export JPL_JAR=$SWI_HOME_DIR/lib/jpl.jar' >>$HOME/.secondorc
|
||||
echo 'export readline=true' >>$HOME/.secondorc
|
||||
echo 'export PATH=$PATH:.:$SECONDO_BUILD_DIR/Tools/pd' >>$HOME/.secondorc
|
||||
echo 'export SECONDO_CONFIG=$SECONDO_BUILD_DIR/bin/SecondoConfig.ini' >>$HOME/.secondorc
|
||||
echo 'export JAVAVER="1.8"' >>$HOME/.secondorc
|
||||
echo 'export PD_HEADER=$SECONDO_BUILD_DIR/Tools/pd/pd_header_listing' >>$HOME/.secondorc
|
||||
echo 'export PD_DVI_VIEWER=/usr/bin/okular' >>$HOME/.secondorc
|
||||
echo 'export PD_PS_VIEWER=/usr/bin/evince' >>$HOME/.secondorc
|
||||
echo '' >>$HOME/.secondorc
|
||||
echo 'export LD_LIBRARY_PATH=$BERKELEY_DB_DIR/lib:$SWI_HOME_DIR/lib:$PL_LIB_DIR' >>$HOME/.secondorc
|
||||
echo '' >>$HOME/.secondorc
|
||||
echo 'alias secroot='export SECONDO_BUILD_DIR=$PWD'' >>$HOME/.secondorc
|
||||
echo '' >>$HOME/.secondorc
|
||||
echo 'export PL_LIB=swipl' >>$HOME/.secondorc
|
||||
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PL_LIB_DIR' >>$HOME/.secondorc
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
secondo-RC_430.zip
Normal file
BIN
secondo-RC_430.zip
Normal file
Binary file not shown.
Reference in New Issue
Block a user