diff --git a/README.md b/README.md index dbd93dd..6d87098 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,16 @@ -# google-sre-ebook +# Google SRE Book/s -![Cover](cover.jpg) +Generates a EPUB/MOBI/PDF for the Google SRE Book/s. -Generates a EPUB/MOBI/PDF for the Google SRE Book. +Original sources are downloaded from https://landing.google.com/sre/books -Original sources are downloaded from https://landing.google.com/sre/ +# Books + +## Site Reliability Engineering (2016) +site reliability engineering cover + +## The Site Reliability Workbook (2018) +the site reliability workbook cover # Build @@ -14,8 +20,14 @@ Requirements: - Docker +You can generate either of books using `BOOK_SLUG` variable. + +Available values for `BOOK_SLUG`: + - `sre_book` Site Reliability Engineering. + - `srw_book` The Site Reliability Workbook. + ``` -$ docker run --rm --volume "$(pwd):/output" captn3m0/google-sre-ebook:latest +$ docker run --rm --volume "$(pwd):/output" -e BOOK_SLUG='sre_book' captn3m0/google-sre-ebook:latest ``` - You should see the final EPUB/MOBI/PDF files in the `output` directory after the above runs. @@ -26,7 +38,7 @@ $ docker run --rm --volume "$(pwd):/output" captn3m0/google-sre-ebook:latest ``` $ mkdir /tmp/sreoutput $ chcon -Rt svirt_sandbox_file_t /tmp/sreoutput -$ docker run --rm --volume "/tmp/sreoutput:/output" captn3m0/google-sre-ebook:latest +$ docker run --rm --volume "/tmp/sreoutput:/output" -e BOOK_SLUG='sre_book' captn3m0/google-sre-ebook:latest ``` The build for the above Docker image can be audited at . @@ -46,7 +58,7 @@ Requirements: # Known Issues -- metadata.xml is not complete. There are just too many authors +- metadata is not complete. There are just too many authors - Foreword/Preface is not part of the index # LICENSE diff --git a/books.sh b/books.sh new file mode 100644 index 0000000..f1f0e38 --- /dev/null +++ b/books.sh @@ -0,0 +1,23 @@ +# Google SRE Books. + +# NOTE: The indentation before inner vars should be always "tab" not "space". +declare -A BOOKS +BOOKS=( + + # Site Reliability Engineering + ["SRE_BOOK"]=' + BOOK_NAME=sre-book + BOOK_NAME_FULL=Site Reliability Engineering + BOOK_FILE=google-sre-book + BOOK_TOC_URL=https://landing.google.com/sre/sre-book/toc/index.html + ' + + # Site Reliability Workbook + ["SRW_BOOK"]=' + BOOK_NAME=workbook + BOOK_NAME_FULL=The Site Reliability Workbook + BOOK_FILE=google-sre-workbook + BOOK_TOC_URL=https://landing.google.com/sre/workbook/toc/index.html + ' + +) diff --git a/bootstrap.sh b/bootstrap.sh index 2aa6b78..79af46b 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,14 +1,18 @@ #!/bin/bash +if [[ "${DEBUG}" == 1 ]]; then + set -x +fi set -euo pipefail IFS=$'\n\t' -# Vars. -export BOOK_NAME="sre-book" -export BOOK_NAME_FULL="Site Reliability Engineering" -BOOK_FILE="google-${BOOK_NAME}" -TOC_URL="https://landing.google.com/sre/${BOOK_NAME}/toc/index.html" +# Get book details. +source books.sh +export ${BOOKS[${BOOK_SLUG^^}]} + +# Common vars. IMGS_DOMAIN="lh3.googleusercontent.com" +# # Make sure that links are relative \ # # Remove the /sre/ directories # Save stuff in html/ directory @@ -16,6 +20,7 @@ IMGS_DOMAIN="lh3.googleusercontent.com" # Enable recursion, timestamping (--mirror) # Images are hosted elsewhere, download them as well. # We need to go up a level from /toc/ where we start +# The "ture" at the end to ignore non-200 URLs like 404. wget \ --convert-links \ --directory-prefix=html \ @@ -27,18 +32,21 @@ wget \ --mirror \ --no-verbose \ --recursive \ - --domains=${IMGS_DOMAIN},landing.google.com ${TOC_URL} + --domains=${IMGS_DOMAIN},landing.google.com ${BOOK_TOC_URL} || true # +echo "Get working mode..." MODE=${1:-} if [ "$MODE" != "docker" ];then bundle install fi +# # Add extension to files. # That because `pandoc` cannot generate the right `mime type` without the extension. # https://github.com/captn3m0/google-sre-ebook/issues/19 +echo "Fix images extension issue ..." IMGS_FILES="$(ls html/${IMGS_DOMAIN}/*)" for FILE_NAME_FULL in ${IMGS_FILES}; do @@ -48,24 +56,31 @@ for FILE_NAME_FULL in ${IMGS_FILES}; do # Rename and replace file. mv "${FILE_NAME_FULL}" "${FILE_NAME_FULL}.${FILE_TYPE,,}" && - grep -rl "${FILE_NAME_BASE}" ./html | xargs sed -i "s/${FILE_NAME_BASE}/${FILE_NAME_BASE}.${FILE_TYPE,,}/g" + grep -rl -- "${FILE_NAME_BASE}" ./html | xargs sed -i -- "s/${FILE_NAME_BASE}/${FILE_NAME_BASE}.${FILE_TYPE,,}/g" done +# +# Generate epub from html. +echo "Generate book ..." bundle exec ruby generate.rb pushd html/landing.google.com/sre/${BOOK_NAME}/toc -pandoc --from=html --to=epub \ - --output=../../../../../${BOOK_FILE}.epub \ - --epub-metadata=../../../../../${BOOK_NAME}.xml \ - --epub-cover-image=../../../../../${BOOK_NAME}.jpg \ +pandoc --from=html --to=epub \ + --output=../../../../../${BOOK_FILE}.epub \ + --epub-metadata=../../../../../metadata/${BOOK_NAME}.xml \ + --epub-cover-image=../../../../../cover/${BOOK_NAME}.jpg \ complete.html popd +# +# Generate other format from epub. for EXTENSION in mobi pdf; do ebook-convert ${BOOK_FILE}.epub ${BOOK_FILE}.${EXTENSION} done -if [ "$1"=="docker" ]; then +# +# If it works inside docker. +if [ "$MODE" == "docker" ]; then chown -v $(id -u):$(id -g) ${BOOK_FILE}.* mv -f ${BOOK_FILE}.* /output fi diff --git a/cover/sre-book.jpg b/cover/sre-book.jpg new file mode 100644 index 0000000..d709f4f Binary files /dev/null and b/cover/sre-book.jpg differ diff --git a/cover/workbook.jpg b/cover/workbook.jpg new file mode 100644 index 0000000..e770711 Binary files /dev/null and b/cover/workbook.jpg differ diff --git a/sre-book.xml b/metadata/sre-book.xml similarity index 100% rename from sre-book.xml rename to metadata/sre-book.xml diff --git a/metadata/workbook.xml b/metadata/workbook.xml new file mode 100644 index 0000000..7f161bf --- /dev/null +++ b/metadata/workbook.xml @@ -0,0 +1,11 @@ +1492029459 +978-1492029458 +The Site Reliability Workbook: Practical Ways to Implement SRE +2018-08-10 +en-US + +Betsy Beyer +Niall Richard Murphy +David K. Rensin +Kent Kawahara +Stephen Thorne diff --git a/sre-book.jpg b/sre-book.jpg deleted file mode 100644 index 123b7c4..0000000 Binary files a/sre-book.jpg and /dev/null differ