11

我看到与标准文件不同的是,CoreOS文件cloud-config中没有选项。目前,我通过将以下内容添加到我的 CoreOS 机器上启用交换:runcmdcloud-configcloud-config

units:
    - name: swap.service
      command: start
      content: |
        [Unit]
        Description=Turn on swap

        [Service]
        Type=oneshot
        Environment="SWAPFILE=/1GiB.swap"
        RemainAfterExit=true
        ExecStartPre=/usr/sbin/losetup -f ${SWAPFILE}
        ExecStart=/usr/bin/sh -c "/sbin/swapon $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"
        ExecStop=/usr/bin/sh -c "/sbin/swapoff $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"
        ExecStopPost=/usr/bin/sh -c "/usr/sbin/losetup -d $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"

        [Install]
        WantedBy=local.target

然后在初始化我的 CoreOS 映像后,我必须 ssh 进入机器并运行:

sudo fallocate -l 1024m /1GiB.swap && sudo chmod 600 /1GiB.swap \
&& sudo chattr +C /1GiB.swap && sudo mkswap /1GiB.swap

sudo reboot

在启用交换之前(例如,由 证明top)。

似乎我应该能够在cloud-config文件本身中完成后面的命令,但我不清楚如何在runmcd没有cloud-config. 也许这可以通过编辑我的swap.service单元或添加另一个来完成unit,但我还没有弄清楚如何。

所以,这给我留下了两个问题:(1)这可以完成还是总是需要手动运行最后一个命令?(2) 如果是前者,那又如何?

4

2 回答 2

7

正如在 Github 上的问题的答案中所指出的,您最终会编写一个单元来调用您选择的命令。这个答案给出了使用任意命令的一个很好的例子:

#cloud-config 
....
coreos:
  units:
    - name: runcmd.service
      command: start
      content: |
        [Unit]
        Description=Creates a tmp foo file

        [Service]
        Type=oneshot
        ExecStart=/bin/sh -c "touch /tmp/foo;"
于 2014-11-24T00:24:08.310 回答
3

@cboettig - 多亏了你的单元文件示例和@philibaker 注释,我做到了 - 基本上我唯一需要做的就是将其更改ExecStartPre为:

ExecStartPre=/bin/bash -c "\
    fallocate -l 2g $SWAPFILE && \
    chmod 600 $SWAPFILE && \
    chattr +C $SWAPFILE && \
    mkswap $SWAPFILE && \
    losetup -f $SWAPFILE"

这包括 preexec 步骤中的整个设置。

于 2014-12-12T16:58:21.597 回答