Linux 上的 DB2 Express
DB2 Express on Linux
我已经尝试了大约 30 个小时来在 AWS Linux Ubuntu 实例上获取 DB2 Express 运行ning。我在我的 Macbook 上 运行ning 很好,我可以在那里工作,但想在真正的服务器中使用它。
我已经卸载并重新安装了好几次,一直运行宁陷入同样的问题:
这是我所做工作的一般历史:
source /home/db2instl/sqllib/db2profile
./db2icrt db2instl
sudo -i -u db2instl /home/db2instl/sqllib/adm/db2start
~/sqllib/adm$ ./db2start
SQL1063N DB2START processing was successful.
当使用 SQL Alchemy 运行ning python 连接代码时,我得到这个:
sqlalchemy.exc.OperationalError: (OperationalError) ibm_db_dbi::OperationalError: [IBM][CLI Driver] SQL1639N
The database server was unable to perform authentication because security
related database manager files on the server do not have the required
operating system permissions.
SQLSTATE=08001 SQLCODE=-1639 None None
根据 IBM 知识中心:
必须执行 db2rfe 才能通过此操作。
阅读那里的说明,db2rfe 应该在以某种方式操作配置文件后以 root 身份执行。
我把ENABLE_OS_AUTHENTICATION改成是:
ENABLE_OS_AUTHENTICATION=是
执行成功后:
sudo ./db2rfe -f db2rfe.cfg
我试图 运行 看着这个:
我执行:
sudo -i -u db2instl /home/db2instl/sqllib/adm/db2start
Which gives me this error:
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.
这是一个 AWS Ubuntu 实例:
~/sqllib$ mount
/dev/xvda1 on / type ext4 (rw,discard)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
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)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
none on /sys/fs/pstore type pstore (rw)
/dev/xvdb on /mnt type ext3 (rw)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
因此,正如其他发问者所发, / 未安装在 "nosuid" 模式下。但是,作为上述问题之一的回答者,我没有进行 Root 安装。
这台计算机是 AWS Ubuntu 12.04 安装:
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
补充说明:
由于奇怪的 DB2 长度限制,我不得不将这台机器上的散列算法更改为使用 256 字节。我已经克服了很多障碍,这似乎是最后一步了。
我可以更改 db2start 的权限似乎可以解决这个问题并使其归 root 所有,但它说我不允许 运行 作为 root。
这是对我的第 22 条军规的非正式表述:
如果没有 运行ning db2rfe,我无法启用 OS 身份验证。当我运行db2rfe
,启用OS认证,
由于权限问题,我无法重启服务器,但错误消息似乎与条件不符。
请注意,在这种情况下,我很乐意使用客户端身份验证或任何其他类型的身份验证——这不是生产代码,只是为了演示而设置的。
如果您能提供任何帮助,我们将不胜感激。
根据您的描述,您可能混淆了 DB2 的根安装和非根安装步骤。
在非 root 用户安装中,所有 DB2 二进制文件和其他文件都安装在执行安装的用户的主目录中。某些任务仍然需要 root 权限,这就是你 运行 db2rfe
的地方。非root安装虽然有很多限制,所以只有在没有其他选择的情况下才应该选择它。
root 安装复制 /opt
下的二进制文件,并在您在安装期间指定的实例所有者用户的主目录中创建一个 DB2 实例。从那里创建到实际二进制文件的符号链接。
root 用户安装的安全性不亚于非 root 用户,甚至可能更安全,因为二进制文件归 root 用户所有。
控制台与 GUI 安装与 root 与非 root 无关。过去 db2setup
用于基于 GUI 的安装,而 db2_install
用于控制台安装。但是,db2_install
现在已弃用;要执行控制台安装,请使用响应文件选项 (db2setup -r <response file name>
),如 the manual.
中所述
我已经尝试了大约 30 个小时来在 AWS Linux Ubuntu 实例上获取 DB2 Express 运行ning。我在我的 Macbook 上 运行ning 很好,我可以在那里工作,但想在真正的服务器中使用它。
我已经卸载并重新安装了好几次,一直运行宁陷入同样的问题:
这是我所做工作的一般历史:
source /home/db2instl/sqllib/db2profile
./db2icrt db2instl
sudo -i -u db2instl /home/db2instl/sqllib/adm/db2start
~/sqllib/adm$ ./db2start
SQL1063N DB2START processing was successful.
当使用 SQL Alchemy 运行ning python 连接代码时,我得到这个:
sqlalchemy.exc.OperationalError: (OperationalError) ibm_db_dbi::OperationalError: [IBM][CLI Driver] SQL1639N
The database server was unable to perform authentication because security
related database manager files on the server do not have the required
operating system permissions.
SQLSTATE=08001 SQLCODE=-1639 None None
根据 IBM 知识中心:
必须执行 db2rfe 才能通过此操作。
阅读那里的说明,db2rfe 应该在以某种方式操作配置文件后以 root 身份执行。
我把ENABLE_OS_AUTHENTICATION改成是:
ENABLE_OS_AUTHENTICATION=是
执行成功后:
sudo ./db2rfe -f db2rfe.cfg
我试图 运行 看着这个:
我执行:
sudo -i -u db2instl /home/db2instl/sqllib/adm/db2start
Which gives me this error:
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.
这是一个 AWS Ubuntu 实例:
~/sqllib$ mount
/dev/xvda1 on / type ext4 (rw,discard)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
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)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
none on /sys/fs/pstore type pstore (rw)
/dev/xvdb on /mnt type ext3 (rw)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
因此,正如其他发问者所发, / 未安装在 "nosuid" 模式下。但是,作为上述问题之一的回答者,我没有进行 Root 安装。
这台计算机是 AWS Ubuntu 12.04 安装:
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
补充说明:
由于奇怪的 DB2 长度限制,我不得不将这台机器上的散列算法更改为使用 256 字节。我已经克服了很多障碍,这似乎是最后一步了。
我可以更改 db2start 的权限似乎可以解决这个问题并使其归 root 所有,但它说我不允许 运行 作为 root。
这是对我的第 22 条军规的非正式表述:
如果没有 运行ning db2rfe,我无法启用 OS 身份验证。当我运行db2rfe
,启用OS认证,
由于权限问题,我无法重启服务器,但错误消息似乎与条件不符。
请注意,在这种情况下,我很乐意使用客户端身份验证或任何其他类型的身份验证——这不是生产代码,只是为了演示而设置的。
如果您能提供任何帮助,我们将不胜感激。
根据您的描述,您可能混淆了 DB2 的根安装和非根安装步骤。
在非 root 用户安装中,所有 DB2 二进制文件和其他文件都安装在执行安装的用户的主目录中。某些任务仍然需要 root 权限,这就是你 运行 db2rfe
的地方。非root安装虽然有很多限制,所以只有在没有其他选择的情况下才应该选择它。
root 安装复制 /opt
下的二进制文件,并在您在安装期间指定的实例所有者用户的主目录中创建一个 DB2 实例。从那里创建到实际二进制文件的符号链接。
root 用户安装的安全性不亚于非 root 用户,甚至可能更安全,因为二进制文件归 root 用户所有。
控制台与 GUI 安装与 root 与非 root 无关。过去 db2setup
用于基于 GUI 的安装,而 db2_install
用于控制台安装。但是,db2_install
现在已弃用;要执行控制台安装,请使用响应文件选项 (db2setup -r <response file name>
),如 the manual.