@@ -19,42 +19,70 @@ detect_package_manager() {
1919 fi
2020}
2121
22+ check_required_packages () {
23+ missing_packages=0
24+ for pkg in tar gzip unzip; do
25+ if ! command -v $pkg > /dev/null 2>&1 ; then
26+ log " Package $pkg is missing"
27+ missing_packages=1
28+ fi
29+ done
30+ return $missing_packages
31+ }
32+
2233install_packages () {
34+ if check_required_packages; then
35+ log " All required packages already installed, skipping package installation"
36+ return 0
37+ fi
38+
2339 pm=$( detect_package_manager)
40+ log " Installing missing packages using $pm ..."
2441
2542 case $pm in
2643 " apt" )
2744 export DEBIAN_FRONTEND=noninteractive
28- apt-get update || {
45+ apt-get update -qq || {
2946 log " Failed to update apt repositories"
3047 exit 1
3148 }
32- apt-get install -y tar gzip unzip || {
49+ apt-get install -y -qq tar gzip unzip || {
3350 log " Failed to install required packages"
3451 exit 1
3552 }
3653 ;;
3754 " yum" |" dnf" )
38- $pm update -y || {
55+ $pm update -y -q || {
3956 log " Failed to update $pm repositories"
4057 exit 1
4158 }
42- $pm install -y tar gzip unzip || {
59+ $pm install -y -q tar gzip unzip || {
4360 log " Failed to install required packages"
4461 exit 1
4562 }
4663 ;;
4764 esac
65+ }
4866
49- curl " https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o " awscliv2.zip"
50- unzip awscliv2.zip
51- ./aws/install
67+ install_aws_cli () {
68+ if command -v aws > /dev/null 2>&1 ; then
69+ log " AWS CLI already installed, skipping installation"
70+ return 0
71+ fi
72+
73+ log " Installing AWS CLI..."
74+ curl -s " https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o " awscliv2.zip"
75+ unzip -q awscliv2.zip
76+ ./aws/install --update > /dev/null 2>&1
77+ rm -rf aws awscliv2.zip
5278}
5379
5480log " Initializing EC2 Flame Node for <%= @app %>"
5581
5682log " Installing required packages..."
83+
5784install_packages
85+ install_aws_cli
5886
5987if ! command -v aws > /dev/null 2>&1 ; then
6088 log " AWS CLI installation failed"
@@ -68,13 +96,8 @@ APP_DIR="/srv/<%= @app %>"
6896SERVICE_NAME=< %= @app %>
6997RELEASE_DIR=" ${APP_DIR} /release"
7098
71- mkdir -p " ${APP_DIR} " || {
72- log " Failed to create ${APP_DIR} "
73- exit 1
74- }
75-
76- mkdir -p " ${RELEASE_DIR} " || {
77- log " Failed to create ${RELEASE_DIR} "
99+ mkdir -p " ${APP_DIR} " " ${RELEASE_DIR} " || {
100+ log " Failed to create required directories"
78101 exit 1
79102}
80103
@@ -86,36 +109,25 @@ cd "${APP_DIR}" || {
86109log " Downloading from S3: ${S3_URL} "
87110
88111< %= if @s3_bundle_compressed? do %>
89- S3_TYPE=" compressed"
112+ aws s3 cp ${S3_URL} ./release.tar.gz --quiet || {
113+ log " Failed to download from S3"
114+ exit 1
115+ }
116+ tar xzf release.tar.gz -C ${RELEASE_DIR} || {
117+ log " Failed to extract release.tar.gz"
118+ rm -f release.tar.gz
119+ exit 1
120+ }
121+ rm release.tar.gz
90122< % else %>
91- S3_TYPE=" directory"
92- < % end %>
93-
94- if [ " ${S3_TYPE} " = " directory" ]; then
95- aws s3 sync ${S3_URL} . || {
96- log " Failed to download from S3"
97- exit 1
98- }
99- else
100- aws s3 cp ${S3_URL} ./release.tar.gz || {
101- log " Failed to download from S3"
102- exit 1
103- }
104- tar xzf release.tar.gz -C ${RELEASE_DIR} || {
105- log " Failed to extract release.tar.gz"
106- rm -f release.tar.gz
107- exit 1
108- }
109- rm release.tar.gz
110- fi
111-
112- if [ ! -d " ${RELEASE_DIR} " ]; then
113- log " Release directory ${RELEASE_DIR} not found after extraction"
123+ aws s3 sync ${S3_URL} . --quiet || {
124+ log " Failed to download from S3"
114125 exit 1
115- fi
126+ }
127+ < % end %>
116128
117- if [ ! -x " ${RELEASE_DIR} /bin/<%= @app %>" ]; then
118- log " Executable ${RELEASE_DIR} /bin/<%= @app %> not found or not executable "
129+ if [ ! -d " ${RELEASE_DIR} " ] || [ ! - x " ${RELEASE_DIR} /bin/<%= @app %>" ]; then
130+ log " Release directory or executable not found after extraction "
119131 exit 1
120132fi
121133
0 commit comments