ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu x64 上从 tar.gz 安装 IRIS 社区版:避坑与实战

Ubuntu x64 上从 tar.gz 安装 IRIS 社区版:避坑与实战 简介这份资源是InterSystems IRIS社区版2021.1.0.215.3的Linux安装包面向Ubuntu 18.04 LTS x86_64平台适合医疗信息化开发者、后关系型数据库学习者以及需要搭建Caché实验环境的技术人员。Caché由InterSystems公司开发是后关系型数据库的代表产品支持对象访问、SQL访问和多维数据数组访问三种方式并可并发操作同一份数据在医疗行业应用广泛。压缩包为gz格式整体约781.53MB上游未提供文件总数与类型明细解压后可直接用于本地部署与功能验证。目前已有290人浏览学习说明该版本在社区中具备一定关注度。借助这份安装包读者能够快速搭建IRIS社区版环境体验多维数据模型与多种访问接口的协同工作方式为医疗数据建模、接口开发和后关系型数据库原理学习提供可落地的实践基础。1. 从 tar.gz 到可连的 IRIS这个包到底解决什么问题手上拿到一个IRIS_Community-2021.1.0.215.3-lnxubuntux64.tar.gz第一反应往往是这不就是个压缩包吗解压、跑脚本、完事。真到 Ubuntu 上装的时候才发现Caché 社区版现在官方叫 InterSystems IRIS Community Edition跟普通中间件不一样它自带一套持久化多维存储引擎、一套 ObjectScript 运行时、一套 SQL 网关还有一个管理门户。这个 tar.gz 里装的是完整实例不是库文件。这篇讲的就是怎么在 Ubuntu x64 上把这个包从零跑起来连得上、能建库、能写第一段 ObjectScript顺带把安装阶段最容易翻车的地方讲清楚。适合两类人一类是想拿 IRIS 社区版做多模型数据对象 SQL 文档验证的后端另一类是需要在本地或测试机快速起一个 Caché 兼容环境做迁移评估的运维。社区版有容量和授权边界但做技术验证完全够用。2. 装之前先想清楚为什么是 tar.gz 而不是 apt 或容器2.1 三种安装形态的取舍IRIS 社区版在 Linux 上常见有三条路官方 apt/yum 源、Docker 镜像、以及这种独立 tar.gz 分发包。三者不是随便挑的取决于你要验证什么。apt 源装起来最省事但版本跟着源走你没法精确锁定到2021.1.0.215.3这个 build。Docker 镜像隔离性好可一旦你要调内核参数、挂特定文件系统、或者在没有外网的机器上装镜像反而添乱。tar.gz 分发包的价值在于它把整个实例目录结构、安装脚本、许可证文件都摊在你面前你能控制装到哪个路径、用哪个用户跑、监听哪个端口。做迁移评估时目标环境往往就是一台裸 Ubuntu这时候 tar.gz 是最贴近真实交付形态的。提示社区版分发包的命名里lnxubuntux64已经写明平台是 Linux x86_64 Ubuntu别拿去 CentOS 上硬装glibc 版本对不上会直接报错。2.2 环境前置检查动手前先把这几项确认掉能省掉后面一半的报错。检查项要求查看命令系统架构x86_64uname -m发行版Ubuntu 18.04/20.04 一类lsb_release -a内存建议 ≥ 4GBfree -h磁盘实例目录预留 ≥ 10GBdf -h依赖库libncurses、libgomp 等ldd --version端口1972superserver、52773管理门户ss -lntp端口这块要特别说一句。1972 是 IRIS 的 superserver 端口客户端连实例走的就是它52773 是 web 管理门户和 REST 服务端口。这两个端口如果被占安装脚本不一定报错但装完你连不上会以为是安装失败其实是端口冲突。2.3 解压与目录规划我一般不在/tmp里解压因为安装过程会往解压目录写东西/tmp的清理策略可能中途把文件删了。固定用一个干净目录# 建一个专用目录避免和系统临时目录的清理策略打架 sudo mkdir -p /opt/iris-setup sudo chown $USER:$USER /opt/iris-setup cd /opt/iris-setup # 把分发包放进来后解压注意保留权限位 tar -xzvf IRIS_Community-2021.1.0.215.3-lnxubuntux64.tar.gz # 看一眼解压出来的结构确认有 install 脚本和 dist 目录 ls -la解压后通常能看到一个irisinstall或类似的安装脚本以及一个dist目录存放实际组件。tar -xzvf里的z表示走 gzip 解压v打印过程方便你确认没漏文件f指定文件名。如果包很大v的输出会刷屏可以去掉换成tar -xzf但第一次装建议留着能看出解压是否完整。3. 跑安装脚本参数怎么给实例怎么起3.1 安装脚本的交互与静默两种模式IRIS 的安装脚本默认是交互式的会问你实例名、安装目录、端口、是否装管理门户等。第一次装建议走交互把每一步看清楚批量部署或者写自动化时再转静默模式。# 进入解压目录用 root 或具备 sudo 权限的账号执行安装脚本 cd /opt/iris-setup sudo ./irisinstall # 交互过程大致会依次询问 # 1) 实例名称默认 IRIS建议保持默认避免脚本里路径写死 # 2) 安装目录例如 /usr/irissys # 3) superserver 端口默认 1972 # 4) web 门户端口默认 52773 # 5) 是否安装管理门户与 REST 支持验证场景选是实例名这一步别乱改。很多后续脚本、systemd 服务名、日志路径都默认带IRIS前缀你改成别的名字后面排查问题时对不上号。安装目录/usr/irissys是官方惯例跟着走就行。3.2 静默安装的应答文件写法要在多台机器上复现交互模式没法用。常见做法是准备一个应答文件把答案按顺序喂给脚本。不同 build 的应答文件字段名可能略有差异所以最稳的方式是先跑一次交互安装把生成的应答文件模板留下来再改。# 假设安装脚本支持 -s 指定静默应答文件 sudo ./irisinstall -s /opt/iris-setup/iris_answers.txt # 应答文件里关键字段示意字段名以你解压出来的模板为准 # INSTANCENAMEIRIS # DESTINATION/usr/irissys # SUPERSERVER_PORT1972 # WEB_PORT52773 # INSTALL_WEB1这里要提醒一句应答文件的字段名和顺序是跟 build 绑定的2021.1.0.215.3的模板不要直接套到别的版本上。我踩过的坑就是拿旧模板装新 build脚本不报错但端口没生效最后发现字段名从WEB_PORT变成了MGMT_PORT白白查了半天。3.3 安装后确认实例状态装完别急着写代码先确认实例真的起来了。# 查看 IRIS 相关进程确认 superserver 在跑 ps -ef | grep -i iris | grep -v grep # 看端口监听情况1972 和 52773 都应该在 LISTEN ss -lntp | grep -E 1972|52773 # 用自带工具连一下实例能进终端就说明核心服务正常 iris session IRISiris session IRIS会把你带进 ObjectScript 终端提示符通常是IRIS或者带命名空间的USER。能进去说明实例、命名空间、终端都通了。如果卡在这里八成是实例没起或者命名空间没建好回到上一步看进程和端口。注意社区版实例默认可能带一个USER命名空间但如果你在安装时跳过了某些步骤命名空间可能是空的。进终端后先Write $NAMESPACE确认当前命名空间。4. 连上之后干什么建库、写 ObjectScript、跑 SQL4.1 用管理门户建第一个命名空间命名空间是 IRIS 里隔离数据和代码的基本单位类似其他数据库的 database 加 schema 的组合。管理门户在http://主机IP:52773/csp/sys/UtilHome.csp用安装时设的账号登录。建命名空间的步骤进System Administration→Configuration→System Configuration→Namespaces点Create New Namespace。要填两块命名空间名以及它对应的数据库Globals 库和 Routines 库。验证场景下让 Globals 和 Routines 指向新建的库就行别复用系统库免得把系统数据搅进去。4.2 第一段 ObjectScript从终端到类方法进终端后先来一段最朴素的// 在 USER 命名空间下写一个全局变量并读回来 Set ^demo(greeting) hello iris Write ^demo(greeting), ! // 输出hello iris // 看看这个全局变量挂在哪个数据库上 Write ##class(%SYS.Namespace).GetGlobalDest(USER, ^demo), !Set ^demo(...)里的^表示这是一个持久化全局变量写下去就落盘了不是内存变量。Write把它读出来。第三行用系统类%SYS.Namespace查这个全局变量实际落在哪个数据库做数据迁移评估时这个查询很有用能确认数据物理位置。再进一步写一个类方法// 定义一个简单的持久化类带两个属性和一个类方法 Class Demo.Person Extends %Persistent { Property Name As %String; Property Age As %Integer; ClassMethod Create(name As %String, age As %Integer) As Demo.Person { Set p ##class(Demo.Person).%New() Set p.Name name Set p.Age age Do p.%Save() Quit p } }Extends %Persistent让这个类具备持久化能力%New()创建实例%Save()落盘。Quit p返回对象引用。这段代码可以直接在终端里用Do ##class(Demo.Person).Create(Tom, 30)调用。注意类名和属性名大小写不敏感但习惯上类名首字母大写。4.3 用 SQL 查同一份数据IRIS 的多模型特点在这里体现同一份持久化数据既能用对象访问也能用 SQL 查。-- 在管理门户的 SQL 执行器里跑或者用终端 Do ##class(%SQL.Statement) SELECT Name, Age FROM Demo.Person WHERE Age 20持久化类默认会映射成同名 SQL 表属性映射成列。如果表名对不上检查类定义里有没有SqlTableName参数覆盖了默认映射。这一步是很多人第一次用 IRIS 时觉得“玄学”的地方——明明类建好了SQL 查不到表多半是命名空间选错了或者类还没编译。提示新建或修改类之后记得编译。终端里用Do $System.OBJ.Compile(Demo.Person,ck)c表示编译k表示保留源文件。5. 避坑与排查安装阶段最常见的五类翻车5.1 解压后脚本没有执行权限现象./irisinstall报Permission denied。 原因tar.gz 在跨系统传输比如从 Windows 拷到 Linux时权限位丢失或者解压时用了不带权限保留的方式。 解决chmod x irisinstall如果目录下还有别的脚本一并加上。更稳的做法是解压时确认tar带了p参数保留权限或者重新用tar -xzvpf解压。5.2 端口被占导致装完连不上现象安装过程没报错但ss -lntp看不到 1972 或 52773客户端连不上。 原因机器上已有其他服务占了这两个端口安装脚本在某些 build 下不会主动检测冲突。 解决装之前先ss -lntp | grep -E 1972|52773确认空闲。如果被占安装时改端口或者先停掉占用进程。改端口后记得同步改客户端连接串。5.3 命名空间建了但终端进不去现象iris session IRIS能进但Write $NAMESPACE显示的不是你建的命名空间或者切过去报错。 原因命名空间建的时候 Globals 库或 Routines 库指向了不存在的数据库或者数据库没启动。 解决回管理门户看命名空间配置确认两个库都存在且状态正常。终端里用Set $NAMESPACE你的命名空间手动切看报什么错错误信息会指向具体缺哪个库。5.4 类编译报错但看不出原因现象Do $System.OBJ.Compile(Demo.Person,ck)返回错误提示很笼统。 原因ObjectScript 的编译错误有时藏在详细日志里终端只显示摘要。 解决编译时加b参数让它显示完整错误或者去管理门户的System Explorer→Globals附近找编译日志。常见根因是属性类型写错、类名和已有类冲突、或者命名空间里没有写权限。5.5 社区版容量边界被忽略现象验证跑到一半写入突然失败或性能骤降。 原因社区版对数据量、连接数有上限做压力测试时容易撞到。 解决心里要有数社区版适合功能验证和开发调试不适合当生产库压测。撞到边界时先确认是不是容量限制别一头扎进性能调优。6. 把安装过程脚本化一个可复用的检查清单装一次是体力活装十次就得靠脚本。我现在的习惯是把整个流程拆成一个幂等的 shell 脚本每次部署前先跑检查再跑安装最后跑验证。下面这个片段是我常用的验证部分装完自动确认实例可用#!/bin/bash # IRIS 社区版安装后自检脚本 set -e INSTANCEIRIS SS_PORT1972 WEB_PORT52773 echo [1/4] 检查进程 if ! pgrep -f iris /dev/null; then echo 实例进程未找到安装可能失败 exit 1 fi echo [2/4] 检查端口 for port in $SS_PORT $WEB_PORT; do if ! ss -lnt | grep -q :$port ; then echo 端口 $port 未监听 exit 1 fi done echo [3/4] 检查终端可连 if ! echo Write ok,! | iris session $INSTANCE /dev/null 21; then echo 终端连接失败 exit 1 fi echo [4/4] 检查命名空间 echo Write $NAMESPACE,! | iris session $INSTANCE echo 自检通过这个脚本里set -e让任何一步失败就退出避免带着问题往下走。pgrep -f iris匹配进程名ss -lnt查监听iris session配合管道喂命令做连通性测试。最后一步打印当前命名空间确认不是空的。参数上唯一要按环境改的是INSTANCE和两个端口如果你安装时改过端口这里同步改。脚本本身不复杂价值在于把“装完到底通没通”这件事变成一条命令而不是每次手动敲五六个检查。我自己的教训是早期装 IRIS 总想着赶紧写代码跳过自检结果后面调试时把安装问题误判成代码问题来回折腾。后来强制自己先跑自检确认基础设施没问题再动业务逻辑省下的时间远超写脚本的成本。希望这个思路帮到你。本文还有配套的精品资源点击获取
返回列表