我正在尝试使用以下脚本在我的 linux 机器上安装和启动 db2:
#!/usr/bin/env bash
MKDIR=/bin/mkdir
RM=/bin/rm
TAR=/bin/tar
DB2_SERVER_PROGRAM_PATH=/home/alok/Documents/Installers
DB2_SERVER_PROGRAM=v10.5_linuxx64_expc.tar.gz
echo "changing to $DB_SERVER_PROGRAM_PATH"
cd ${DB2_SERVER_PROGRAM_PATH}
echo "removing expc"
${RM} -rf expc
echo "untarring ${DB2_SERVER_PROGRAM}"
${TAR} zxf ${DB2_SERVER_PROGRAM}
echo "changing to expc"
cd expc
echo "Installing db2 as root"
sudo ./db2_install
echo "Adding user group db2grp1 as root"
sudo groupadd db2grp1
echo "Adding user group dasadm1 as root"
sudo groupadd dasadm1
echo "Adding user group db2fgrp1 as root"
sudo groupadd db2fgrp1
echo "Adding user db2inst1. Please provide password for new user db2inst1."
sudo useradd -g db2grp1 -G dasadm1 -m db2inst1
sudo passwd db2inst1
echo "Adding user dasusr1. Please provide password for new user dasusr1."
sudo useradd -g dasadm1 -G db2grp1 -m dasusr1
sudo passwd dasusr1
echo "Adding user db2fenc1. Please provide password for new user db2fenc1."
sudo useradd -g db2fgrp1 -m db2fenc1
sudo passwd db2fenc1
cd /opt/ibm/db2/V10.5/instance
echo "Creating DAS as root via user dasusr1."
sudo ./dascrt -u dasusr1
echo "Creating database instance as root via user db2fenc1 and db2inst1."
sudo ./db2icrt -u db2fenc1 db2inst1
echo "Setting communication protocol to tcpip as user db2inst1."
sudo -u db2inst1 ../adm/db2set DB2COMM=tcpip
echo "Setting SVCENAME 50000 for dbm cfg as user db2inst1."
sudo -u db2inst1 ../bin/db2 update dbm cfg using SVCENAME 50000
echo "starting db2 as user db2inst1."
sudo chmod +x ../adm/db2start
sudo -u db2inst1 ../adm/db2start
netstat -an | grep 50000
一切正常,直到我到达倒数第二行:
sudo -u db2inst1 ../adm/db2start
SQL1641N The db2start command failed because one or more DB2 database
manager program files was prevented from executing with root
privileges by file system mount settings.
现在我检查了一下/etc/fstab
,它说:
proc /proc proc nodev,noexec,nosuid 0 0
/dev/sda1 / ext4 errors=remount-ro,user_xattr 0 1
UUID=d4d794eb-1e68-4ddf-a9ec-249a22f084fb none swap sw 0 0
/swapfile swap swap defaults 0 0
我的安装路径,/opt/ibm/db2/V10.5/adm
基本上是打开/dev/sda1
的,并且没有使用该nosuid
选项安装。
这是输出mount
:
alok@hostname:~$ mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro,user_xattr)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
shmfs on /dev/shm type tmpfs (rw,size=2048m)
gvfs-fuse-daemon on /home/alok/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=alok)
这再次表明/
未安装在nosuid
模式下。那么为什么我会出错SQL1641N
?而是抛出此消息是一个不同的问题吗?
中的文件
/opt/ibm/db2/V10.5/
不用于特定实例。当您运行该db2icrt
命令时,它会将一系列文件和目录复制到~db2inst1/sqllib
中,并相应地设置权限。(其中的一些目录~db2inst1/sqllib
将软链接回 中的目录/opt/ibm/db2/V10.5
)。例如,您应该发现
~db2inst1/sqllib/adm/db2start
权限设置为6555
(ie-r-sr-sr-x
),由 拥有root
,并且组所有者设置为实例所有者的主要组。你不应该从
/opt/ibm/db2/V10.5/adm
. 这就是为什么该目录中文件的权限设置为它们的方式 -/opt/ibm/db2/V10.5/adm/db2start
应该是0444
.因此,要启动您的实例,您应该执行
~db2inst1/sqllib/adm/db2start
.请注意,您还需要
db2inst1
在启动实例之前初始化用户环境,因此您应该使用-i
选项 forsudo
来处理此问题:最后一点:所有这些配置(可能除了
db2start
)都可以使用响应文件和db2setup
.db2_install
已被弃用,因此使用响应文件是处理此问题的方法。