将 Postgres11 部署到 Elastic Beanstalk - 需要 /etc/redhat-release

Posted

技术标签:

【中文标题】将 Postgres11 部署到 Elastic Beanstalk - 需要 /etc/redhat-release【英文标题】:Deploy Postgres11 to Elastic Beanstalk - Requires /etc/redhat-release 【发布时间】:2019-09-11 21:49:33 【问题描述】:

我在将我的第一个应用程序部署到 Elastic Beanstalk 时非常开心,我真的需要一些帮助。尽管 RDS 正式支持 Postgres11,但我无法安装它。

问题 如果我运行eb deploy,我会收到消息说pg_config 找不到可执行文件。需要从源代码构建psycopg2

/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'project_urls'
  warnings.warn(msg)
running egg_info
creating pip-egg-info/psycopg2.egg-info
writing pip-egg-info/psycopg2.egg-info/PKG-INFO
writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'

Error: pg_config executable not found.

pg_config is required to build psycopg2 from source.  Please add the directory
containing pg_config to the $PATH or specify the full executable path with the
option: ...

我想我需要添加存储库?很公平。接下来我尝试添加我在互联网上其他帖子中发现的 repo:

[ec2-user@ip-... etc]$ sudo yum -y install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
Loaded plugins: priorities, update-motd, upgrade-helper
pgdg-centos11-11-2.noarch.rpm                                          | 5.6 kB  00:00:00     
Examining /var/tmp/yum-root-cQJP_4/pgdg-centos11-11-2.noarch.rpm: pgdg-redhat-repo-42.0-4.noarch
Marking /var/tmp/yum-root-cQJP_4/pgdg-centos11-11-2.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package pgdg-redhat-repo.noarch 0:42.0-4 will be installed
--> Processing Dependency: /etc/redhat-release for package: pgdg-redhat-repo-42.0-4.noarch
--> Processing Dependency: /etc/redhat-release for package: pgdg-redhat-repo-42.0-4.noarch
--> Finished Dependency Resolution
Error: Package: pgdg-redhat-repo-42.0-4.noarch (/pgdg-centos11-11-2.noarch)
           Requires: /etc/redhat-release

从这里我卡住了我试过符号链接/etc/system-release -> /etc/redhat-release,但没有成功。其他人似乎没有这个问题?出于某种原因,我似乎也没有梦寐以求的amazon-linux-extras

环境

环境层:Web 服务器平台:在 64 位 Amazon Linux/2.8.2 上运行的 Python 3.6


.ebextensions/packages.config

packages:
  yum:
    postgresql11-devel: []

requirements.txt

Django==2.2
psycopg2==2.8.2
pytz==2019.1
sqlparse==0.3.0

[ec2-user@ip-... etc]$ cat /etc/os-release 
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"

[ec2-user@ip-... etc]$ cat /etc/system-release 
Amazon Linux AMI release 2018.03

【问题讨论】:

我注意到os-release 指定了ID_LIKE="rhel fedora"。我尝试使用 fedora rpm 并且发生了相同的结果 -> Requires: /etc/fedora-release 我仍然很想知道我缺少什么,但为了继续前进,我已经恢复到 PostgreSQL 9.6,因为它在 EB/EC2 上很容易获得。 使用普通 Amazon Linux 2 AMI 时,您可以发出命令:amazon-linux-extras install postgresql10 以获取版本 10。 对于那些寻找 postgres 12 qiita.com/tmiki/items/00d22edc6a554f61bd04 【参考方案1】:

或者,您可以从源代码构建 posgresql:

wget https://ftp.postgresql.org/pub/source/v11.5/postgresql-11.5.tar.gz

tar zxvf postgresql-11.5.tar.gz

cd postgresql-11.5

./configure --without-readline

make

make install

【讨论】:

谢谢,使用它我能够将我的 pg 客户端升级到 12.4。 这很好用。您还需要设置路径。导出 PATH=$PATH:binDirectoryPath 就是这样。我需要安装 gcc make zlib-devel(所有这些都可以通过 AL1 上的内置 yum repos 获得),至少对于 PG13.5。【参考方案2】:

Amazon 尚未提供 PostgreSQL 11,但 PostgreSQL 10 已提供。我正在使用cat /etc/system-release 报告的 Amazon Linux 版本 2 (Karoo)。启用安装:

$ sudo amazon-linux-extras enable postgresql10

启用此附加功能后,您将看到许多可通过 yum 正常安装的 PostgreSQL 10 软件包:

$ yum list postgresql*
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
postgresql.x86_64                    10.4-5.amzn2.0.2    @amzn2extra-postgresql10
postgresql-devel.x86_64              10.4-5.amzn2.0.2    @amzn2extra-postgresql10
postgresql-libs.x86_64               10.4-5.amzn2.0.2    @amzn2extra-postgresql10
Available Packages
postgresql-contrib.x86_64            10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-docs.x86_64               10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-libs.i686                 10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-plperl.x86_64             10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-plpython.x86_64           10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-plpython3.x86_64          10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-pltcl.x86_64              10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-server.x86_64             10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-static.x86_64             10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-test.x86_64               10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-test-rpm-macros.x86_64    10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-upgrade.x86_64            10.4-5.amzn2.0.2    amzn2extra-postgresql10
postgresql-upgrade-devel.x86_64      10.4-5.amzn2.0.2    amzn2extra-postgresql10

【讨论】:

我还没有 amazon-linux-extras。知道为什么会这样吗? @Scott,这很可能是因为您(和我)在 Elastic Beanstalk 上使用 Amazon Linux 1,而“amazon-linux-extras”似乎是 Amazon Linux 2 的一项功能 (aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras , “Extras 是 Amazon Linux 2 中的一种机制,可以在稳定的操作系统上使用新版本的应用程序软件”)。 我更新了我的回答,指出是的,我在 Amazon Linux 2 上。 谢谢!我很惊讶他们在 RDS 中提供 PostgreSQL 10.6 和 11,但没有可用于在他们自己的 Linux 发行版上安装的驱动程序的匹配包。【参考方案3】:

这是我针对最新 Amazon Linux 2 ami 的特立独行的解决方案:

sudo su
cd /etc/yum.repos.d
nano pgdg.repo

然后我将其粘贴到 nano 编辑器及其新创建的 pgdg.repo 文件中:

[pgdg11]
name=PostgreSQL 11 $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7.5-x86_64
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-11

其他命令是:

sed -i "s/rhel-\$releasever-\$basearch/rhel-7.5-x86_64/g" "/etc/yum.repos.d/pgdg.repo"
yum groupinstall "PostgreSQL Database Server 11 PGDG"

创建一个新的 PostgreSQL 数据库集群:

/usr/pgsql-11/bin/postgresql-11-setup initdb

现在执行以下命令来启动和启用 postgresql 服务:

systemctl enable postgresql-11
systemctl start postgresql-11

不过,请记住此地址的注释: Link to Postgresql.org

【讨论】:

【参考方案4】:

对于 AWS Elastic Beanstalk 上的 Django 2.1 项目,我在使用 PostgreSQL 10 时遇到了同样的问题。

该问题于上周在 2019 年 4 月 17 日左右推出,以确保操作系统是实际的 Red Hat 版本(Amazon Linux 不是)。我在 PostgreSQL 邮件列表中找到了一些详细信息:

“实际上,Amazon Linux 支持在几年前就被删除了。我只是确保我们的 repo 文件反映了这一点。”(BUG #15768: Removed rpms and now require /etc/redhat-release)

邮件列表中的一位发帖人建议进行以下修复:

“我们通过使用 rpm 并明确忽略存储库依赖项暂时缓解了该问题,但这似乎是对不应该存在依赖项的真正问题的创可贴修复。 "

就我个人而言,Scott,我和你做了同样的事情,我只是恢复到 AWS 直接提供的 PostgreSQL 9.6 客户端包。只要 Django 和 psycopg 支持该版本,它就可以正常工作。

然而,长期的解决办法是让 AWS 最终为平台提供 Amazon Linux 2...

【讨论】:

感谢 goetz,您发现了这一见解。看来我只是运气不好!我会让他们先把这一切整理出来……:)

以上是关于将 Postgres11 部署到 Elastic Beanstalk - 需要 /etc/redhat-release的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Postgres 数据库从一个 Elastic Beanstalk 环境复制到另一个环境?我正在使用 Rails 5

Moqui 在 Elastic Beanstalk Tomcat 实例上部署到 AWS

将 MVC4 部署到 Elastic Beanstalk 的“处理”错误消息

将 Docker 部署到 AWS Elastic Beanstalk——如何将端口转发到主机? (端口绑定)

将简单的 .NET 4.5 Web API 模板部署到 Elastic Beanstalk

如何将 Visual Studio Flask 应用程序部署到 Elastic Beanstalk