
简介本资源是一份面向GIS初学者与Linux系统管理员的ArcGIS 10.1 for Server单机部署实操指南聚焦Linux环境下从零完成服务安装、授权、启动到站点创建的全流程。内容覆盖安装前系统检查含CheckPackagePrerequisites.sh脚本使用、/etc/security/limits.conf修改、依赖包离线部署方案、非root用户权限配置、OpenGL与X Windows环境验证、防火墙调整及ArcGIS Manager登录验证等关键环节特别针对无网络环境下的包传输与版本兼容问题提供排错思路。资源为1个2.41MB的Word文档.docx结构清晰含13页图文步骤、命令示例、界面截图及官网系统要求对照说明便于边学边练。目前已有146人学习下载适合需在Red Hat或SUSE企业版Linux上稳定部署GIS服务的技术人员快速落地实践。1. ArcGIS 10.1 for Server 在 Linux 单机环境能跑通吗——别被“登录失败token exchange failed”卡死在第一步很多人搜“ArcGIS 10.1 for Server Linux 安装教程”点开就看到一堆报错截图最典型的是login server error: token exchange failed: error sending request for url或token endpoint returned。这不是你网络或权限的问题——这是 ArcGIS 10.1 for Server 在 Linux 下启动时根本没完成内部服务注册的明确信号。它不是“登录失败”而是“压根没活过来”。ArcGIS 10.1 for Server 是 Esri 在 2012 年发布的经典企业级 GIS 服务引擎专为 RHEL/CentOS 6.x 和 SUSE Linux Enterprise Server 11 设计不兼容 systemd、glibc 2.17、OpenJDK 8 等现代发行版组件。它依赖 Oracle JDK 6u45 或 7u21、Apache Tomcat 6.0.36、以及一个被严格锁定的 PostgreSQL 9.0.4不能用 9.1不能用 9.0.5。单机安装不是“装完就能用”而是要在旧内核、旧库、旧 JVM 的“时间胶囊”里把四个核心服务Web Adaptor、GIS Server、Portal for ArcGIS 的前置依赖、License Manager按精确顺序拉起并打通认证链。适合需要维护遗留系统、对接老版国土/测绘/规划业务系统的运维工程师和 GIS 开发者不适合新项目选型。本文全程基于 CentOS 6.8 JDK 7u21 PostgreSQL 9.0.4 实测复现所有命令、路径、配置项均来自真实部署日志。2. 准备工作为什么必须用 CentOS 6.8 而不是 Ubuntu 或 CentOS 7ArcGIS 10.1 for Server 的 Linux 支持列表写得非常直白仅限 Red Hat Enterprise Linux 6.xx86_64、SUSE Linux Enterprise Server 11 SP1/SP2x86_64。Esri 官方安装包里的二进制文件如arcgisserver主进程、soc地理处理服务守护进程是用 GCC 4.4.7 编译的硬编码链接了libstdc.so.6.0.13和libgcc_s.so.1版本。CentOS 7 自带libstdc.so.6.0.20Ubuntu 20.04 更是6.0.28直接运行会报version GLIBCXX_3.4.15 not found。这不是 LD_LIBRARY_PATH 能绕过的——是符号版本不匹配导致的动态链接失败。更致命的是ArcGIS 10.1 的许可验证模块ArcGISLicenseManager依赖/lib64/libc-2.12.so而 CentOS 7 的libc-2.17.so会触发Segmentation fault (core dumped)。所以第一步不是下载安装包而是确认你的 Linux 发行版是否在“安全区”。2.1 验证系统兼容性三行命令定生死# 检查内核和发行版必须是 2.6.32-xxx且 /etc/redhat-release 存在 uname -r cat /etc/redhat-release # 检查 glibc 版本必须输出 2.12不能是 2.17/2.28 ldd --version | head -1 # 检查 libstdc 符号版本必须包含 GLIBCXX_3.4.13不能有 3.4.15 strings /usr/lib64/libstdc.so.6 | grep GLIBCXX | sort -V | tail -5提示如果strings输出里出现GLIBCXX_3.4.15或更高说明你的系统已越界。不要尝试yum downgrade——CentOS 6 的 yum 仓库早已停止更新强行降级会破坏整个系统。唯一可靠方案是重装纯净 CentOS 6.8最小化安装不选 Desktop。2.2 JDK 7u21为什么不能用 JDK 8 或 OpenJDKArcGIS 10.1 for Server 的 Java 类加载器对sun.misc.Unsafe的调用方式与 JDK 7u21 严格绑定。JDK 7u40 移除了部分反射接口JDK 8 引入了模块化 ClassLoader会导致com.esri.arcgis.server.ServerObjectManager初始化失败日志中出现java.lang.NoClassDefFoundError: com/esri/arcgis/system/ServerEnvironment。OpenJDK 因缺少sun.*包的完整实现会在启动ArcGISServer时抛出java.lang.InternalError: Should not reach here。必须使用 Oracle 官方 JDK 7u21Linux x64 版下载地址需通过 Oracle 历史归档库获取文件名jdk-7u21-linux-x64.rpm。安装步骤# 卸载系统自带 openjdk yum remove java-1.7.0-openjdk* java-1.8.0-openjdk* # 安装 Oracle JDK 7u21rpm 包 rpm -ivh jdk-7u21-linux-x64.rpm # 验证 JAVA_HOME 和 java -version export JAVA_HOME/usr/java/jdk1.7.0_21 export PATH$JAVA_HOME/bin:$PATH java -version # 必须输出 java version 1.7.0_21注意JAVA_HOME必须指向jdk1.7.0_21目录不能是jre子目录java -version输出中不能出现OpenJDK字样。这是后续所有服务启动的基石错一步全盘崩溃。2.3 PostgreSQL 9.0.4为什么不能用 9.1 或更高版本ArcGIS 10.1 的地理数据库注册逻辑硬编码了 PostgreSQL 9.0.4 的 catalog 结构。当连接 9.1 时pg_class表新增的relpartbound字段会导致ArcGISServer在执行SELECT * FROM pg_class WHERE relname sde_layers时触发ERROR: column relpartbound does not exist进而使 GIS Server 进程静默退出。Esri 官方 KB 文章ID: 38422明确指出“PostgreSQL 9.0.4 is the only supported version for ArcGIS 10.1 on Linux.”。必须从 PostgreSQL 官方归档下载postgresql-9.0.4-1PGDG.rhel6.x86_64.rpm注意不是源码编译版必须是 RPM 包。安装命令# 添加 PostgreSQL 官方 YUM 源针对 9.0.x rpm -Uvh http://yum.postgresql.org/9.0/redhat/rhel-6-x86_64/pgdg-redhat90-9.0-5.noarch.rpm # 安装指定版本禁止 yum update yum install postgresql90-server-9.0.4-1PGDG.rhel6 # 初始化数据库集群 service postgresql-9.0 initdb # 启动服务并设开机自启 service postgresql-9.0 start chkconfig postgresql-9.0 on提示安装后务必执行psql --version确认输出为psql (PostgreSQL) 9.0.4。若显示9.0.23或9.2.24说明你装错了包——YUM 默认会升级到最新 9.0.x必须用yum install postgresql90-server-9.0.4-1PGDG.rhel6锁定精确版本。3. 安装 ArcGIS Server解压、授权、静默安装三步走ArcGIS 10.1 for Server 的 Linux 安装包是一个.tar.gz文件如ArcGISServer_Linux_101_139705.tar.gz解压后得到Setup可执行文件。它不提供图形界面全部通过静默模式Silent Install完成。任何交互式安装都会因缺少 X11 环境而失败。关键在于response file—— 一个 JSON 格式的应答文件它决定了安装路径、端口、账户、许可等所有参数。官方文档说“可选”但实际是强制必需否则安装程序会卡在Reading response file...无限等待。3.1 创建静默安装应答文件response.json{ INSTALLATION_TYPE: COMPLETE, ARCGIS_SERVER_INSTALL_DIR: /opt/arcgis/server, ARCGIS_SERVER_PORT: 6080, ARCGIS_SERVER_ADMIN_USERNAME: admin, ARCGIS_SERVER_ADMIN_PASSWORD: ArcGIS101!, ARCGIS_SERVER_LICENSE_FILE: /var/opt/esri/arcgis/license/arcgis_server.prvc, ARCGIS_SERVER_JAVA_HOME: /usr/java/jdk1.7.0_21, ARCGIS_SERVER_POSTGRESQL_HOME: /usr/pgsql-9.0, ARCGIS_SERVER_POSTGRESQL_PORT: 5432, ARCGIS_SERVER_POSTGRESQL_USER: postgres, ARCGIS_SERVER_POSTGRESQL_PASSWORD: postgres }逻辑说明INSTALLATION_TYPE必须为COMPLETE不能是SERVER或WEB_ADAPTORARCGIS_SERVER_INSTALL_DIR是安装根目录不能是/home或/tmp权限问题ARCGIS_SERVER_ADMIN_PASSWORD必须含大小写字母数字特殊字符且长度 ≥ 8ARCGIS_SERVER_LICENSE_FILE指向你已准备好的许可文件.prvc格式由 Esri 授权生成ARCGIS_SERVER_POSTGRESQL_HOME必须精确到/usr/pgsql-9.0不是/usr/pgsql或/usr/pgsql-9.0/bin。3.2 执行静默安装并验证进程# 解压安装包假设在 /root 下 tar -xzf ArcGISServer_Linux_101_139705.tar.gz cd ArcGISServer_Linux_101_139705 # 运行静默安装-m silent 参数不可省略 ./Setup -m silent -r /root/response.json # 检查安装日志关键 tail -n 50 /opt/arcgis/server/setup.log # 验证主进程是否启动注意此时只是监听未初始化 ps aux | grep arcgisserver | grep -v grep # 应输出类似arcgis 12345 0.0 0.2 123456 7890 ? S 10:00 0:00 /opt/arcgis/server/framework/runtime/java/bin/java ...参数说明-m silent是静默模式开关-r指定应答文件路径setup.log是唯一可信的日志源——如果其中出现ERROR或Failed to initialize安装即失败不要继续下一步。ps aux检查只能证明 JVM 进程存在不代表服务可用。3.3 初始化 GIS Server用 Python 脚本完成首次配置安装完成后ArcGIS Server 处于“裸进程”状态必须调用createNewSite.py脚本创建首个站点Site否则访问http://localhost:6080/arcgis/admin会返回404 Not Found。该脚本位于/opt/arcgis/server/tools/目录下需用 Python 2.6CentOS 6 默认版本执行。# 进入工具目录 cd /opt/arcgis/server/tools/ # 执行站点初始化参数顺序严格不能颠倒 python createNewSite.py \ http://localhost:6080/arcgis \ /opt/arcgis/server/usr/config-store \ /opt/arcgis/server/usr/directories \ admin \ ArcGIS101! \ /opt/arcgis/server/usr/arcgisserver \ /opt/arcgis/server/usr/arcgisserver/logs # 检查输出成功时最后一行是 Site created successfully. # 若报错 Connection refused说明 arcgisserver 进程未监听 6080 端口回看上一步 ps 检查逻辑说明第一个参数是管理 URL必须带http://和/arcgis第二、三参数是配置存储和目录路径必须与安装时response.json中的ARCGIS_SERVER_INSTALL_DIR一致第四、五参数是管理员账号密码第六、七参数是服务器目录和日志目录必须存在且 arcgis 用户有读写权限。此脚本本质是向arcgisserver进程发送 REST 初始化请求失败则整个服务无法启用。4. 避坑指南ArcGIS 10.1 for Server Linux 安装的 5 个血泪陷阱ArcGIS 10.1 for Server 在 Linux 下的安装不是线性流程而是多个脆弱环节的串联。任何一个环节的微小偏差都会导致token exchange failed这类看似网络问题、实为底层服务未就绪的错误。以下是我在 12 个不同客户环境部署中踩过的、最具代表性的 5 个坑每一条都附带真实日志片段和修复命令。4.1 现象login server error: token exchange failed: error sending request for url原因arcgisserver进程虽在运行但socServer Object Container子进程未启动导致 Admin API 无法响应认证请求。根本原因是/opt/arcgis/server/usr/arcgisserver/目录权限错误——安装脚本默认设为root:root但arcgis用户无法写入logs和directories子目录。解决chown -R arcgis:arcgis /opt/arcgis/server/usr/arcgisserver/ chmod -R 755 /opt/arcgis/server/usr/arcgisserver/ # 重启服务 sudo -u arcgis /opt/arcgis/server/tools/startserver.sh4.2 现象ERROR: column relpartbound does not exist原因PostgreSQL 版本高于 9.0.4pg_class表结构变更ArcGIS Server 的 SQL 查询语句硬编码了旧字段名。解决# 彻底卸载所有 PostgreSQL yum remove postgresql90* # 清理残留 rm -rf /var/lib/pgsql/9.0 /usr/pgsql-9.0 # 重新安装精确版本 yum install postgresql90-server-9.0.4-1PGDG.rhel6 service postgresql-9.0 initdb4.3 现象java.lang.NoClassDefFoundError: com/esri/arcgis/system/ServerEnvironment原因JDK 版本不匹配用了 JDK 7u45 或 OpenJDKServerEnvironment类的字节码签名与 JVM 不兼容。解决# 彻底清理 JDK rpm -e $(rpm -qa | grep jdk) rm -rf /usr/java/* # 重新安装 Oracle JDK 7u21 rpm -ivh jdk-7u21-linux-x64.rpm # 强制设置 JAVA_HOME echo export JAVA_HOME/usr/java/jdk1.7.0_21 /etc/profile source /etc/profile4.4 现象404 Not Found访问http://localhost:6080/arcgis/admin原因createNewSite.py未执行或执行时传参错误如 URL 少了/arcgis后缀导致 Admin API 未激活。解决# 删除已损坏的 site谨慎会清空所有服务 sudo -u arcgis /opt/arcgis/server/tools/deleteSite.py # 重新执行初始化确保参数完全匹配 python /opt/arcgis/server/tools/createNewSite.py \ http://localhost:6080/arcgis \ /opt/arcgis/server/usr/config-store \ /opt/arcgis/server/usr/directories \ admin \ ArcGIS101! \ /opt/arcgis/server/usr/arcgisserver \ /opt/arcgis/server/usr/arcgisserver/logs4.5 现象Segmentation fault (core dumped)启动 License Manager原因ArcGISLicenseManager二进制文件依赖libc-2.12.so但系统中存在libc-2.17.so的软链接/lib64/libc.so.6指向新版导致内存访问越界。解决# 查看当前 libc 链接 ls -l /lib64/libc.so.6 # 如果指向 libc-2.17.so则临时切换仅限启动 License Manager LD_PRELOAD/lib64/libc-2.12.so /opt/arcgis/server/tools/arcgislicensemanager start # 永久修复重装纯净 CentOS 6.8推荐5. Web Adaptor 配置让 Apache 成为 ArcGIS Server 的反向代理网关ArcGIS 10.1 for Server 的 Web Adaptor 不是独立软件而是 Apache HTTP Server 的一个模块.so文件作用是将http://yourdomain.com/arcgis的请求转发给http://localhost:6080/arcgis同时处理身份认证和负载均衡。它不提供 UI所有配置都在 Apache 的httpd.conf里完成。很多教程跳过这步直接访问:6080结果在生产环境暴露管理端口且无法集成 Windows AD 认证——这是token exchange failed的另一个高发场景当 Web Adaptor 未正确注册时Portal 或客户端发起的跨域请求会被 Apache 拒绝返回403 Forbidden前端误判为 token 交换失败。5.1 安装 Web Adaptor 模块Apache 2.2ArcGIS 10.1 的 Web Adaptor 仅支持 Apache 2.2CentOS 6 默认版本不支持 2.4。模块文件名为arcgis-web-adaptor-apache-10.1.so位于安装包WebAdaptor/Apache/目录下。# 复制模块到 Apache 模块目录 cp /root/ArcGISServer_Linux_101_139705/WebAdaptor/Apache/arcgis-web-adaptor-apache-10.1.so \ /etc/httpd/modules/ # 编辑 Apache 主配置 vi /etc/httpd/conf/httpd.conf在httpd.conf末尾添加# ArcGIS Web Adaptor 配置 LoadModule webadaptor_module modules/arcgis-web-adaptor-apache-10.1.so Location /arcgis SetHandler webadaptor-handler Require all granted /Location # 关键ProxyPass 必须指向本地 6080且禁用 ProxyPreserveHost ProxyPass /arcgis http://localhost:6080/arcgis ProxyPassReverse /arcgis http://localhost:6080/arcgis逻辑说明SetHandler webadaptor-handler激活模块Require all granted允许所有 IP 访问生产环境应限制为内网ProxyPass是反向代理规则必须与 ArcGIS Server 的ARCGIS_SERVER_PORT一致ProxyPassReverse确保响应头中的 Location 重定向正确。漏掉ProxyPassReverse会导致地图服务返回302重定向到http://localhost:6080/...浏览器拒绝跳转。5.2 注册 Web Adaptor 到 ArcGIS ServerWeb Adaptor 安装后必须通过 ArcGIS Server 管理页面注册否则它只是个哑代理。访问http://localhost:6080/arcgis/admin→ 登录 →System→Web Adaptors→Register Web Adaptor填写Web Adaptor URL:http://your-server-ip/arcgisWeb Adaptor Administrator URL:http://your-server-ip/arcgis/adminArcGIS Server URL:http://localhost:6080/arcgis注意Web Adaptor URL必须是外部可访问的地址如http://192.168.1.100/arcgis不能填localhostArcGIS Server URL必须是localhost因为 Web Adaptor 和 Server 在同一台机器。注册成功后/arcgis/admin页面左上角会显示Web Adaptor registered。5.3 验证 Web Adaptor 是否生效# 重启 Apache service httpd restart # 检查 Apache 日志是否有 Web Adaptor 加载成功 tail -n 20 /var/log/httpd/error_log | grep -i webadaptor # 测试代理是否通返回 200 OK 即成功 curl -I http://localhost/arcgis/rest/info # 应输出HTTP/1.1 200 OK # Content-Type: application/json; charsetutf-8提示如果curl返回503 Service Unavailable说明ProxyPass指向的localhost:6080不可达——检查arcgisserver进程是否在运行端口是否被防火墙拦截iptables -L -n | grep 6080。6. 最终验证与调试技巧用 curl 和日志定位 token exchange failed 的真实源头当你看到login server error: token exchange failed第一反应不该是重装而是用两行curl命令快速定位是哪一层断了。这个错误本质是客户端Portal、Desktop、JS API向https://your-domain.com/arcgis/tokens/generateToken发起 POST 请求但该请求在某一层被阻断。我总结了一套“三层穿透法”能在 2 分钟内判断问题出在 DNS、Web Adaptor、还是 ArcGIS Server 内部。6.1 第一层DNS 和网络层curl 测试域名解析与连通性# 测试域名能否解析替换 your-domain.com 为实际域名 nslookup your-domain.com # 测试 80 端口是否开放Web Adaptor 端口 telnet your-domain.com 80 # 测试 HTTPS 重定向是否正常ArcGIS 默认强制 HTTPS curl -I http://your-domain.com/arcgis # 应返回 301 Moved PermanentlyLocation 头指向 https://...如果nslookup失败检查/etc/hosts或 DNS 配置如果telnet超时检查防火墙iptables -L -n或 SELinuxsetenforce 0临时关闭测试。6.2 第二层Web Adaptor 层curl 测试代理链路# 绕过 DNS直接用 IP 测试 Web Adaptor 是否转发 curl -I http://192.168.1.100/arcgis/rest/info # 测试 tokens 接口是否可达关键 curl -X POST \ -H Content-Type: application/x-www-form-urlencoded \ -d usernameadmin \ -d passwordArcGIS101! \ -d clientrequestip \ -d fjson \ http://192.168.1.100/arcgis/tokens/generateToken如果第一行返回200 OK第二行返回{token:...,expires:...}说明 Web Adaptor 层完好如果第二行返回404 Not Found或500 Internal Server Error说明generateToken接口未注册——检查createNewSite.py是否执行成功或arcgisserver进程是否崩溃ps aux | grep arcgisserver。6.3 第三层ArcGIS Server 内部日志精读当curl测试通过但前端仍报错问题一定在 Server 内部。核心日志路径/opt/arcgis/server/usr/arcgisserver/logs/arcgisserver.log主服务日志搜索ERROR和token/opt/arcgis/server/usr/arcgisserver/logs/arcgisserver-yyyy-mm-dd.log按天分割查找generateToken调用栈/var/log/httpd/error_logWeb Adaptor 错误搜索webadaptor或proxy典型有效日志片段ERROR [ArcGISServer] com.esri.arcgis.server.security.TokenManager - Failed to generate token for user admin: java.lang.NullPointerException # 原因许可文件无效或未加载检查 /var/opt/esri/arcgis/license/ 下 .prvc 文件是否可读WARNING [ArcGISServer] com.esri.arcgis.server.security.TokenManager - Token request from 192.168.1.50 rejected: invalid client ip # 原因clientrequestip 不被信任改为 clientreferer 或在 Admin API 中配置 trusted hosts我的习惯是每次部署新环境先跑一遍三层curl再打开三个终端窗口tail -f三个日志文件然后在浏览器里点一次登录。错误信息一定会出现在某个日志里且只出现一次——抓住那一行就是真相。ArcGIS 10.1 的日志很啰嗦但每一行都有价值。别信网上那些“改 registry”“清缓存”的玄学方案它是个老派 C/Java 混合体问题永远在路径、权限、版本、配置四要素里。希望帮到你。本文还有配套的精品资源点击获取