我似乎找不到适用于 Arch 的预编译包。我相信我已经尝试了所有 debian 风格的软件包,但都无济于事。不再有主动管理的 mongodb 包。从源代码编译显然需要几百个空间。有没有办法在不从源代码编译的情况下为 MongoDB 在 Arch 上获取二进制文件?
editor's questions
我一直在努力解决一些奇怪的(对我而言)防火墙错误,但现在我看到了我想要的防火墙行为。但是,令我困惑的是,有效的方法似乎是drop
区域和区域的混合trusted
[root@douglasii ~]# firewall-cmd --get-active-zones
drop
interfaces: eth0 veth879317c vethaff7c39 vethb2fec6e
trusted
sources: 192.168.0.0/16
[root@douglasii ~]# firewall-cmd --zone=drop --list-all
drop (default, active)
interfaces: eth0 veth879317c vethaff7c39 vethb2fec6e
sources:
services: ssh
ports: 443/tcp 80/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
[root@douglasii ~]# firewall-cmd --zone=trusted --list-all
trusted
interfaces:
sources: 192.168.0.0/16
services: ssh
ports: 443/tcp 80/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
我的印象是您一次设置一个区域,使用set-default-zone
. 我看到我为之做的任何一个都得到了“活跃”的标签。不是这样吗?可以在任何给定时间激活多个防火墙区域吗?他们都同时申请吗?什么是默认区域?阅读FirewallD 上的文档对我来说并不清楚。
我想:
- 删除来自外部 Web 的所有传入连接,80 和 443 除外
- 允许内部机器
192.168.0.0/16
连接到 :9000 :8080
这是我通过以下方式设置我的drop
区域的方法firewall-cmd
:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
systemctl start firewalld.service
systemctl enable firewalld
firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --zone=drop --add-service=ssh
firewall-cmd --permanent --zone=drop --add-port=80/tcp
firewall-cmd --permanent --zone=drop --add-port=443/tcp
firewall-cmd --zone=drop --permanent --add-rich-rule='rule source address="192.168.0.0/16" port port="9000" protocol="tcp" accept'
firewall-cmd --zone=drop --permanent --add-rich-rule='rule source address="192.168.0.0/16" port port="8080" protocol="tcp" accept'
firewall-cmd --reload
活动drop
区域如下所示:
[root@machine ~]# firewall-cmd --zone=drop --list-all
drop (default, active)
interfaces: eth0 vethadc7c41 vethaef84e2 vethd53fa38
sources:
services: ssh
ports: 443/tcp 80/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.0.0/16" port port="9000" protocol="tcp" accept
rule family="ipv4" source address="192.168.0.0/16" port port="8080" protocol="tcp" accept
这看起来不错;但是,我在重新加载后遇到了问题:
[root@machine ~]# systemctl status firewalld -l
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since Sun 2014-12-21 19:48:53 UTC; 2s ago
Main PID: 21689 (firewalld)
CGroup: /system.slice/firewalld.service
└─21689 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Dec 21 19:48:53 machine.hostname systemd[1]: Started firewalld - dynamic firewall daemon.
Dec 21 19:48:56 machine.hostname firewalld[21689]: 2014-12-21 19:48:56 ERROR: '/sbin/iptables -t filter -A DROP_allow -s 192.168.0.0/16 -m tcp -p tcp --dport 9000 -m conntrack --ctstate NEW -j ACCEPT' failed: iptables: No chain/target/match by that name.
Dec 21 19:48:56 machine.hostname firewalld[21689]: 2014-12-21 19:48:56 ERROR: '/sbin/iptables -t filter -A DROP_allow -s 192.168.0.0/16 -m tcp -p tcp --dport 9000 -m conntrack --ctstate NEW -j ACCEPT' failed: iptables: No chain/target/match by that name.
Dec 21 19:48:56 machine.hostname firewalld[21689]: 2014-12-21 19:48:56 ERROR: COMMAND_FAILED: '/sbin/iptables -t filter -A DROP_allow -s 192.168.0.0/16 -m tcp -p tcp --dport 9000 -m conntrack --ctstate NEW -j ACCEPT' failed: iptables: No chain/target/match by that name.
Dec 21 19:48:56 machine.hostname firewalld[21689]: 2014-12-21 19:48:56 ERROR: '/sbin/iptables -t filter -A DROP_allow -s 192.168.0.0/16 -m tcp -p tcp --dport 8080 -m conntrack --ctstate NEW -j ACCEPT' failed: iptables: No chain/target/match by that name.
Dec 21 19:48:56 machine.hostname firewalld[21689]: 2014-12-21 19:48:56 ERROR: '/sbin/iptables -t filter -A DROP_allow -s 192.168.0.0/16 -m tcp -p tcp --dport 8080 -m conntrack --ctstate NEW -j ACCEPT' failed: iptables: No chain/target/match by that name.
Dec 21 19:48:56 machine.hostname firewalld[21689]: 2014-12-21 19:48:56 ERROR: COMMAND_FAILED: '/sbin/iptables -t filter -A DROP_allow -s 192.168.0.0/16 -m tcp -p tcp --dport 8080 -m conntrack --ctstate NEW -j ACCEPT' failed: iptables: No chain/target/match by that name.
我有点困惑,因为我认为firewall-cmd
这是一个抽象并且与 相互排斥iptables
,后者是我不应该混淆的东西。
这是我的版本生命力:
[machine@douglasii ~]# firewall-cmd -V
0.3.9
[machine@douglasii ~]# cat /proc/version
Linux version 3.16.7-x86_64-linode49 (maker@build) (gcc version 4.7.2 (Debian 4.7.2-5) ) #3 SMP Fri Nov 14 16:55:37 EST 2014
[machine@douglasii ~]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
[machine@douglasii ~]# iptables -v
iptables v1.4.21: no command specified
Try `iptables -h' or 'iptables --help' for more information.
在 CentOS 7 下,我知道我们正在从mysql-server
实现兼容的 MariaDB 转移。我正在使用 docker 映像centos:latest
,这使我受到 Centos 7 的支持。
mysqld_safe
在前台运行阻塞。这很容易:我只需要 0) 安装软件包 1) 更改 root 密码 2) 从Dockerfile
在 docker 范例中,我需要能够像在 bash 脚本中一样安装 MariaDB。我已经找到了在 Ubuntu 下使用的各种方法,aptitude
但还没有找到等效的答案yum
:如何在 Centos 7 上安装、配置和运行 mariadb,就好像它是通过 Bash 脚本安装的一样?mysql_secure_installation
似乎需要 TTY。
我尝试mysqladmin
手动运行密码命令,但它抱怨它无法连接到正在运行的 MySQL 实例。因为容器在步骤之间被丢弃,我相信我需要以某种方式运行 mysql 并在同一步骤中更改密码。
我尝试安装initscripts
package got me/bin/service
但它试图将我重定向到 use systemctl start mariadb.service
,这是不可用的,因为 Docker 容器得到 afakesystemd
而不是systemd
。有任何想法吗?
这是我当前的 Dockerfile 变体(在这个变体中,尝试tail -f
将进程保持为 a CMD
)
FROM centos:latest
MAINTAINER Me ([email protected])
RUN yum -y install wget epel-release
RUN cd /usr/local/src && wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && rpm -Uvh remi-*.rpm && rm remi-*.rpm
RUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/remi*.repo
RUN cd /usr/local/src && wget http://apt.sw.be/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm && rpm -Uvh rpmforge-*.rpm && rm rpmforge-*.rpm
RUN rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
RUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/rpmforge*.repo
RUN yum -y update
RUN yum -y upgrade
# mysql
RUN yum -y install mariadb-server
RUN yum -y install initscripts
WORKDIR /usr
#RUN echo "bind-address=0.0.0.0" >> /etc/my.cnf
RUN /usr/bin/mysql_install_db --datadir="/var/lib/mysql" --user=mysql
RUN /usr/bin/mysqld_safe --datadir="/var/lib/mysql" --socket="/var/lib/mysql/mysql.sock" --user=mysql >/dev/null 2>&1 &
RUN /usr/bin/mysqladmin -u root password SOMEPASSWORD
CMD tail -f /var/log/mariadb/mariadb.log
EXPOSE 3306
有关的:
- 在 Ubuntu 上脚本安装 MySQL
- https://askubuntu.com/questions/79257/how-do-i-install-mysql-without-a-password-prompt
- https://stackoverflow.com/questions/1202347/how-can-i-pass-a-password-from-a-bash-script-to-aptitude-for-installing-mysql
- https://stackoverflow.com/questions/7739645/install-mysql-on-ubuntu-without-password-prompt