mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-18 02:16:59 +02:00
feat(app-emulation/google-daemon): initial google daemon
This installs the google_daemon to /usr/share/oem/google_daemon. The service files are not installed but will instead be installed by the cloud-config.yml
This commit is contained in:
parent
773de477da
commit
e73b73b961
@ -0,0 +1,40 @@
|
||||
From 6b9c8b8ae50dd3530c80fdd26fbeef7fc9ae8dff Mon Sep 17 00:00:00 2001
|
||||
From: Ferran Rodenas <frodenas@gmail.com>
|
||||
Date: Tue, 18 Feb 2014 00:21:17 -0800
|
||||
Subject: [PATCH] Fixes authorized_keys file permissions
|
||||
|
||||
Owner and group id are not inherit when calling shutil move. This commit
|
||||
moves setting permissions logic for the authorized_keys file to be sure
|
||||
that the final destination file has the proper permissions.
|
||||
---
|
||||
google-daemon/usr/share/google/google_daemon/accounts.py | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/google-daemon/usr/share/google/google_daemon/accounts.py b/google-daemon/usr/share/google/google_daemon/accounts.py
|
||||
index 4c572ca..6f970c4 100755
|
||||
--- a/google-daemon/usr/share/google/google_daemon/accounts.py
|
||||
+++ b/google-daemon/usr/share/google/google_daemon/accounts.py
|
||||
@@ -378,10 +378,6 @@ class Accounts(object):
|
||||
user_lines = [
|
||||
lines[i] for i in range(len(lines)) if i not in google_added_ixs]
|
||||
|
||||
- # Make sure the keys_file has the right perms (u+rw).
|
||||
- self.os.fchmod(keys_file.fileno(), 0600)
|
||||
- self.os.fchown(keys_file.fileno(), uid, gid)
|
||||
-
|
||||
# First write user's entries.
|
||||
for user_line in user_lines:
|
||||
keys_file.write(EnsureTrailingNewline(user_line))
|
||||
@@ -394,5 +390,9 @@ class Accounts(object):
|
||||
# Override the old authorized keys file with the new one.
|
||||
self.system.MoveFile(new_keys_path, authorized_keys_file)
|
||||
|
||||
+ # Make sure the authorized_keys_file has the right perms (u+rw).
|
||||
+ self.os.chmod(authorized_keys_file, 0600)
|
||||
+ self.os.chown(authorized_keys_file, uid, gid)
|
||||
+
|
||||
# Set SELinux context, if applicable to this system
|
||||
self.SetSELinuxContext(authorized_keys_file)
|
||||
--
|
||||
1.8.5.2 (Apple Git-48)
|
||||
|
@ -0,0 +1,29 @@
|
||||
From 0243ab89cd941f15344ef03b63c96f3f0e1ffa45 Mon Sep 17 00:00:00 2001
|
||||
From: Brandon Philips <brandon@ifup.co>
|
||||
Date: Tue, 1 Apr 2014 11:51:13 -0700
|
||||
Subject: [PATCH] fix(google-daemon): use * for the passwd not !
|
||||
|
||||
useradd defaults to using ! as the "locked" password marker.
|
||||
Unfortunatly, openssh interprets this to mean that it shouldn't let the
|
||||
user in via ssh if PAM is missing. Work around this by using the *
|
||||
marker which also means locked but is allowed by openssh.
|
||||
---
|
||||
google-daemon/usr/share/google/google_daemon/utils.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/google-daemon/usr/share/google/google_daemon/utils.py b/google-daemon/usr/share/google/google_daemon/utils.py
|
||||
index 0f17f34..371034d 100755
|
||||
--- a/google-daemon/usr/share/google/google_daemon/utils.py
|
||||
+++ b/google-daemon/usr/share/google/google_daemon/utils.py
|
||||
@@ -69,7 +69,7 @@ class System(object):
|
||||
def UserAdd(self, user, groups):
|
||||
logging.info('Creating account %s', user)
|
||||
result = self.RunCommand([
|
||||
- '/usr/sbin/useradd', user, '-m', '-s', '/bin/bash', '-G',
|
||||
+ '/usr/sbin/useradd', user, '-m', '-s', '/bin/bash', '-p', '*', '-G',
|
||||
','.join(groups)])
|
||||
if self.RunCommandFailed(result, 'Could not create user %s', user):
|
||||
return False
|
||||
--
|
||||
1.8.5.2 (Apple Git-48)
|
||||
|
@ -0,0 +1,92 @@
|
||||
From 265f951bc8d55bfb988050dda6332511b58e72e8 Mon Sep 17 00:00:00 2001
|
||||
From: Brandon Philips <brandon@ifup.co>
|
||||
Date: Tue, 1 Apr 2014 15:18:20 -0700
|
||||
Subject: [PATCH] hack(address_manager): use CoreOS names and locations
|
||||
|
||||
ip is in /usr/bin/ip and the network interface is ens4v1 via
|
||||
http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
|
||||
---
|
||||
.../share/google/google_daemon/address_manager.py | 24 +++++++++++-----------
|
||||
1 file changed, 12 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/google-daemon/usr/share/google/google_daemon/address_manager.py b/google-daemon/usr/share/google/google_daemon/address_manager.py
|
||||
index 1b3997c..568720d 100644
|
||||
--- a/google-daemon/usr/share/google/google_daemon/address_manager.py
|
||||
+++ b/google-daemon/usr/share/google/google_daemon/address_manager.py
|
||||
@@ -15,16 +15,16 @@
|
||||
"""Manage extra network interface addresses on a GCE instance.
|
||||
|
||||
Fetch a list of public endpoint IPs from the metadata server, compare it with
|
||||
-what's configured on eth0, and add/remove addresses from eth0 to make them
|
||||
+what's configured on ens4v1, and add/remove addresses from ens4v1 to make them
|
||||
match. Only remove those which match our proto code.
|
||||
|
||||
This must be run by root. If it reads any malformed data, it will take no
|
||||
action.
|
||||
|
||||
Command used to add ips:
|
||||
- ip route add to local $IP/32 dev eth0 proto 66
|
||||
+ ip route add to local $IP/32 dev ens4v1 proto 66
|
||||
Command used to fetch list of configured IPs:
|
||||
- ip route ls table local type local dev eth0 scope host proto 66
|
||||
+ ip route ls table local type local dev ens4v1 scope host proto 66
|
||||
"""
|
||||
|
||||
|
||||
@@ -103,8 +103,8 @@ class AddressManager(object):
|
||||
return self.ParseIPAddrs(addrs_data)
|
||||
|
||||
def ReadLocalConfiguredAddrs(self):
|
||||
- """Fetch list of addresses we've configured on eth0 already."""
|
||||
- cmd = ('/sbin/ip route ls table local type local dev eth0 scope host ' +
|
||||
+ """Fetch list of addresses we've configured on ens4v1 already."""
|
||||
+ cmd = ('/usr/bin/ip route ls table local type local dev ens4v1 scope host ' +
|
||||
'proto %d' % GOOGLE_PROTO_ID)
|
||||
result = self.system.RunCommand(cmd.split())
|
||||
if self.IPCommandFailed(result, cmd):
|
||||
@@ -132,27 +132,27 @@ class AddressManager(object):
|
||||
to_remove or None))
|
||||
|
||||
def AddAddresses(self, to_add):
|
||||
- """Configure new addresses on eth0."""
|
||||
+ """Configure new addresses on ens4v1."""
|
||||
for addr in to_add:
|
||||
self.AddOneAddress(addr)
|
||||
|
||||
def AddOneAddress(self, addr):
|
||||
- """Configure one address on eth0."""
|
||||
- cmd = '/sbin/ip route add to local %s/32 dev eth0 proto %d' % (
|
||||
+ """Configure one address on ens4v1."""
|
||||
+ cmd = '/usr/bin/ip route add to local %s/32 dev ens4v1 proto %d' % (
|
||||
addr, GOOGLE_PROTO_ID)
|
||||
result = self.system.RunCommand(cmd.split())
|
||||
self.IPCommandFailed(result, cmd) # Ignore return code
|
||||
|
||||
def DeleteAddresses(self, to_remove):
|
||||
- """Un-configure a list of addresses from eth0."""
|
||||
+ """Un-configure a list of addresses from ens4v1."""
|
||||
for addr in to_remove:
|
||||
self.DeleteOneAddress(addr)
|
||||
|
||||
def DeleteOneAddress(self, addr):
|
||||
- """Delete one address from eth0."""
|
||||
+ """Delete one address from ens4v1."""
|
||||
# This will fail if it doesn't match exactly the specs listed.
|
||||
# That'll help ensure we don't remove one added by someone else.
|
||||
- cmd = '/sbin/ip route delete to local %s/32 dev eth0 proto %d' % (
|
||||
+ cmd = '/usr/bin/ip route delete to local %s/32 dev ens4v1 proto %d' % (
|
||||
addr, GOOGLE_PROTO_ID)
|
||||
result = self.system.RunCommand(cmd.split())
|
||||
self.IPCommandFailed(result, cmd) # Ignore return code
|
||||
@@ -168,7 +168,7 @@ class AddressManager(object):
|
||||
return addrs
|
||||
|
||||
def IPCommandFailed(self, result, cmd):
|
||||
- """If an /sbin/ip command failed, log and return True."""
|
||||
+ """If an /usr/bin/ip command failed, log and return True."""
|
||||
if self.system.RunCommandFailed(
|
||||
result, 'Non-zero exit status from: "%s"' % cmd):
|
||||
return True
|
||||
--
|
||||
1.8.5.2 (Apple Git-48)
|
||||
|
@ -0,0 +1,31 @@
|
||||
#
|
||||
# Copyright (c) 2014 CoreOS, Inc. All rights reserved.
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
#
|
||||
|
||||
EAPI=5
|
||||
inherit toolchain-funcs systemd
|
||||
|
||||
DESCRIPTION="Google Daemon for Compute Engine"
|
||||
HOMEPAGE="https://github.com/GoogleCloudPlatform/compute-image-packages"
|
||||
SRC_URI="https://github.com/GoogleCloudPlatform/compute-image-packages/releases/download/${PV}/google-daemon-${PV}.tar.gz"
|
||||
|
||||
LICENSE="MIT"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 x86"
|
||||
IUSE=""
|
||||
|
||||
RDEPEND="dev-lang/python-oem"
|
||||
|
||||
S="${WORKDIR}"
|
||||
|
||||
src_prepare() {
|
||||
epatch "${FILESDIR}"/0001-Fixes-authorized_keys-file-permissions.patch
|
||||
epatch "${FILESDIR}"/0001-fix-google-daemon-use-for-the-passwd-not.patch
|
||||
epatch "${FILESDIR}"/0001-hack-address_manager-use-CoreOS-names-and-locations.patch
|
||||
}
|
||||
|
||||
src_install() {
|
||||
mkdir -p ${D}/usr/share/oem/google-compute-daemon/
|
||||
cp -Ra ${WORKDIR}/usr/share/google/google_daemon/. ${D}/usr/share/oem/google-compute-daemon/ || die
|
||||
}
|
Loading…
Reference in New Issue
Block a user