From 37a58be51a9f82543c622cf59827211f336d0ea1 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Wed, 6 Nov 2019 18:30:21 -0600 Subject: [PATCH] Backport some logic for installing node.js --- rattail_fabric/nodejs.py | 59 ++++++++++++++++++++++++++++++++++++++++ rattail_fabric/util.py | 38 ++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 rattail_fabric/nodejs.py create mode 100644 rattail_fabric/util.py diff --git a/rattail_fabric/nodejs.py b/rattail_fabric/nodejs.py new file mode 100644 index 0000000..f930b0e --- /dev/null +++ b/rattail_fabric/nodejs.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8; -*- +################################################################################ +# +# Rattail -- Retail Software Framework +# Copyright © 2010-2019 Lance Edgar +# +# This file is part of Rattail. +# +# Rattail is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# Rattail. If not, see . +# +################################################################################ +""" +Fabric library for Node.js +""" + +import os + +from fabric.api import sudo, run +from fabric.contrib.files import append, exists + +from rattail_fabric.util import get_home_path + + +def install(user=None): + """ + Install nvm and node.js for given user, or else "connection" user. + """ + home = get_home_path(user) + nvm = os.path.join(home, '.nvm') + + if not exists(nvm): + cmd = "bash -c 'curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash'" + if user: + sudo(cmd, user=user) + else: + run(cmd) + + profile = os.path.join(home, '.profile') + kwargs = {'use_sudo': bool(user)} + append(profile, 'export NVM_DIR="{}"'.format(nvm), **kwargs) + append(profile, '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"', **kwargs) + append(profile, '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"', **kwargs) + + cmd = "bash -l -c 'nvm install node'" + if user: + sudo(cmd, user=user) + else: + run(cmd) diff --git a/rattail_fabric/util.py b/rattail_fabric/util.py new file mode 100644 index 0000000..28331a6 --- /dev/null +++ b/rattail_fabric/util.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8; -*- +################################################################################ +# +# Rattail -- Retail Software Framework +# Copyright © 2010-2019 Lance Edgar +# +# This file is part of Rattail. +# +# Rattail is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# Rattail. If not, see . +# +################################################################################ +""" +Misc. Utilities +""" + +from fabric.api import env, run + + +def get_home_path(user=None): + """ + Retrieve the path to the home folder for the given user, or else the + "connection" user. + """ + user = user or env.user + home = run('getent passwd {} | cut -d: -f6'.format(user)).stdout.strip() + home = home.rstrip('/') + return home