I was not particularly thrilled to see that I have to build ranger myself to get the various binaries needed for it.
Anyway, the first thing I did was download a “release”. There is surprisingly little information on what a “release” is or how to use it. But, given that all installation documentation seems to ask for artifacts named like “ranger-%version-number%-admin.tar.gz” and I didn’t see any gz files, I assumed it was more like a bundled source code release that had to be built.
Note: referring to documentation here: https://ranger.apache.org/quick_start_guide.html and he release I used is here: http://mirrors.sonic.net/apache/ranger/1.2.0/apache-ranger-1.2.0.tar.gz.
Docker Build Script
My initial thought was to do the build using the convenient sounding “build_ranger_using_docker.sh” script which is in the root directory. So, I installed docker quickly, did a docker login, and ran it. It failed! (on Centos 7 for the record).
It tried to download a version of maven which doesn’t exist on the maven site currently. If you switch to a slightly newer one the script breaks due to the maven release artifacts being a little different too. So, I reverted to 3.3.9 which required changes to multiple lines.
After that, it went through to the end and failed on the last step with “gosu: not found”. There had been some scary red text higher up about “no ultimately trusted keys found” related to installing gosu.
I tried various ways of fixing this and they all failed (on Centos 7.x)… but to be honest, I didn’t invest my own time in reading up on gosu or why the various proposed solutions were failing.
Build with Maven
Giving up and building with Maven failed on Centos and my Windows 10 box with similar python errors about half way through despite one being on Python 2 and one being on Python 3. So, building straight from source wasn’t great either.
Success
I decided to go back to the docker build. This time, I removed some of the maven validations, used a newer version of maven (which I’m confident doesn’t matter much). But I also removed the gosu install and usage from the final build commands.
This finally worked. Note that my copy is hacky and doesn’t bother using the “builder” account to do the build. But it worked at least and built the artifacts. So, I’m happy enough for my own purposes. If it was a long-running web app or something, I’d go work out the bugs in the docker container/gosu/etc – but that’s not required for a build utility.
After this, you see a nice listing of tar.gz files in the ./target folder like so:
antrun ranger-1.2.0-kafka-plugin.zip ranger-1.2.0-sqoop-plugin.zip archive-tmp ranger-1.2.0-kms.tar.gz ranger-1.2.0-src.tar.gz maven-shared-archive-resources ranger-1.2.0-kms.zip ranger-1.2.0-src.zip ranger-1.2.0-admin.tar.gz ranger-1.2.0-knox-plugin.tar.gz ranger-1.2.0-storm-plugin.tar.gz ranger-1.2.0-admin.zip ranger-1.2.0-knox-plugin.zip ranger-1.2.0-storm-plugin.zip ranger-1.2.0-atlas-plugin.tar.gz ranger-1.2.0-kylin-plugin.tar.gz ranger-1.2.0-tagsync.tar.gz ranger-1.2.0-atlas-plugin.zip ranger-1.2.0-kylin-plugin.zip ranger-1.2.0-tagsync.zip ranger-1.2.0-hbase-plugin.tar.gz ranger-1.2.0-migration-util.tar.gz ranger-1.2.0-usersync.tar.gz ranger-1.2.0-hbase-plugin.zip ranger-1.2.0-migration-util.zip ranger-1.2.0-usersync.zip ranger-1.2.0-hdfs-plugin.tar.gz ranger-1.2.0-ranger-tools.tar.gz ranger-1.2.0-yarn-plugin.tar.gz ranger-1.2.0-hdfs-plugin.zip ranger-1.2.0-ranger-tools.zip ranger-1.2.0-yarn-plugin.zip ranger-1.2.0-hive-plugin.tar.gz ranger-1.2.0-solr-plugin.tar.gz rat.txt ranger-1.2.0-hive-plugin.zip ranger-1.2.0-solr-plugin.zip version ranger-1.2.0-kafka-plugin.tar.gz ranger-1.2.0-sqoop-plugin.tar.gz
Here was my final docker file. Note that you should read up on gosu/etc before using it and I take no responsibility for any security issues; you should use the official one – if you can :).
default_command="mvn -DskipTests=true clean compile package install assembly:assembly" build_image=0 if [ "$1" = "-build_image" ]; then build_image=1 shift fi params=$* if [ $# -eq 0 ]; then params=$default_command fi image_name="ranger_dev" remote_home= container_name="--name ranger_build" if [ ! -d security-admin ]; then echo "ERROR: Run the script from root folder of source. e.g. $HOME/git/ranger" exit 1 fi images=`docker images | cut -f 1 -d " "` [[ $images =~ $image_name ]] && found_image=1 || build_image=1 if [ $build_image -eq 1 ]; then echo "Creating image $image_name ..." docker rmi -f $image_name docker build -t $image_name - < /scripts/mvn.sh RUN echo 'set -x; if [ "\$1" = "mvn" ]; then usermod -u \$(stat -c "%u" pom.xml) bash -c '"'"'ln -sf /.m2 \$HOME'"'"'; exec "\$@"; fi; exec "\$@" ' >> /scripts/mvn.sh RUN chmod -R 777 /scripts RUN chmod -R 777 /tools ENTRYPOINT ["/scripts/mvn.sh"] Dockerfile fi src_folder=`pwd` LOCAL_M2="$HOME/.m2" mkdir -p $LOCAL_M2 set -x docker run --rm -v "${src_folder}:/ranger" -w "/ranger" -v "${LOCAL_M2}:${remote_home}/.m2" $container_name $image_name $params