0

Ich versuche zu automatisieren aws ec2 Memcached-Instanz Bootstrapping durch Ausführen von Memcached Kochrezept. Ich rufe einen Shell-Skript-Namen cache-init.sh aus dem UserData-Abschnitt der Cloud-Formation auf. Ich habe folgende Schritte in meiner Shell-Scripts:CHEF: HOME-Umgebungsvariable (oder HOMEDRIVE und HOMEPATH) muss gesetzt sein und auf ein Verzeichnis zeigen

I AMI RHEL 6.7 Version

!/bin/bash 

init() { 
BINARIES=/root/.binaries 
PROFILE_SCRIPT=/etc/profile.d/instance_profile.sh 
APPLICATION_RELEASE_VERSION="app-v3.0.1" 
CHEF_ZIP="app-chef-${APPLICATION_RELEASE_VERSION}.zip" 
APP_FILES="${CHEF_ZIP}" 
HOME=/root 
} 

# Initializing the script vairables. 
init 

# Create chef folders 
mkdir /root/.chef; 
mkdir /root/.metadata; 

# Disable rhui-lb plugin, this has an issue in RHEL within VPC 
sed -i 's/enabled=1/enabled=0/g' /etc/yum/pluginconf.d/rhui-lb.conf 

# Print all environment varialbes in log 
set > /root/.metadata/metadata.txt 


# Update ${PROFILE_SCRIPT} 
echo "export HOME=${HOME}" >> ${PROFILE_SCRIPT}; 
chmod 644 ${PROFILE_SCRIPT}; 
log 'Added ${PROFILE_SCRIPT}'; 

echo ${HOME} 

# Install chef 
# Set these just for Chef installation 
/usr/bin/curl -L https://www.opscode.com/chef/install.sh | bash -s -- -v 11.16.2-1; 
chef_version=`chef-solo --version`; 
log "Installed Chef Version : $chef_version in /opt/chef " ; 

log "Installing ChefDk" 
/usr/bin/curl -L https://omnitruck.chef.io/install.sh | sudo bash -s -- -c current -P chefdk 

chef-repo=/root/.chef/chef-repo 
memcached_cookbook=${chef-repo}/cookbooks/memcached 
cd ${memcached_cookbook} 


# download and package the dependencies. 
chef exec berks install 
chef exec berks vendor 

log "memcached dependencies downloaded and packaged" 

cp -r berks-cookbooks/runit /root/.chef/itduzzit/cookbooks 
cp -r berks-cookbooks/yum /root/.chef/itduzzit/cookbooks 
cp -r berks-cookbooks/yum-epel /root/.chef/itduzzit/cookbooks 
cp -r berks-cookbooks/packagecloud /root/.chef/itduzzit/cookbooks 

# Clean up the dependencies. 
rm -rf berks-cookbooks 

Nach den berks Installationsbefehl ausgeführt wird, bekomme ich folgende Fehler leite:

/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rb-readline-0.5.3/lib/rbreadline.rb:1097:in <module:RbReadline>: HOME environment variable (or HOMEDRIVE and HOMEPATH) must be set and point to a directory (RuntimeError) 
from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rb-readline- 0.5.3/lib/rbreadline.rb:17:in <top (required)> 
from ... 
from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/berkshelf-4.3.2/bin/berks:3:in `<top (required)>' 
from /usr/bin/berks:49:in `load' 
from /usr/bin/berks:49:in `<main>' 

Ich habe versucht Einstellung die Variable HOME env, indem sie am Anfang des Skripts cache-init.sh exportiert wird, aber immer noch denselben Fehler hat. Wenn ich auf die Box ssh und das Skript manuell ausführen, funktioniert es gut. Ich habe versucht, nach dem Fehler zu suchen, fand aber keine geeignete Lösung. Ich würde wirklich jede Hilfe hier zu schätzen wissen.

+0

Bitte zeigen, wie Sie die Umgebungsvariable gesetzt. – coderanger

+0

@coderanger I habe die Frage mit meinem Skript aktualisiert – sjaiswal

Antwort

0

Unter init sollte das sein export HOME=... (und das gleiche gilt für alles andere. Ohne die export Sie ein Bash-Variable erstellen, aber nicht eine Umgebungsvariable.

+0

Ich exportiere die Variable durch Speichern in /etc/profile.d/instance_profile.sh mit dem folgenden Befehl: 'echo" export HOME = $ {HOME} "$ {PROFILE_SCRIPT} ; ' – sjaiswal

+0

Das hat keine Auswirkungen auf Befehle später im selben Skript und hat im Allgemeinen keinen Einfluss auf Dienste oder andere nicht interaktive Sitzungen überhaupt. – coderanger

+0

Mein Problem wurde gelöst, danke für Ihre Hilfe, zunächst als Ich schrieb den 'export HOME =/root in die/etc/profile.d/instance_profile.sh' was mir später klar wurde, dass er nur beim Start der Shell bezogen wird. Da mein Skript direkt vom Cloud-Formations-Skript aufgerufen wurde, wurde es nie gefunden, was zu dem Fehler führte. Ich änderte mein Skript und exportierte explizit "HOME =/root" in den Skriptkörper, der es als Umgebungsvariable für den Berkshelf-Berks-Befehl verfügbar machte und das Problem behob. Schätzen Sie Ihre Hilfe! – sjaiswal