The main Bubble source repository. Contains the Bubble API server, the web UI, documentation and utilities. https://getbubblenow.com
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

bpatchfull 2.3 KiB

4 år sedan
4 år sedan
Introduce packer support (#18) cleanups and fixes, packer is ready to roll add errorApi endpoint initialize mitmproxy dependencies packer deployments finally working fix virtualenv call for ubuntu 20.04 WIP. update to ubuntu 20.04. fixing algo installation WIP. packer fixes remove unused constant WIP. packer basics working for ec2 Merge branch 'master' of git.bubblev.org:bubblev/bubble into cobbzilla/introduce_packer remove automation dir, all moved to resources log pg autovacuum if longer than 250ms touch install marker for algo set mitmproxy as owner of all mitmproxy files add hostname to packer image name avoid closing progress meter prematurely WIP. parallelize node startup, fix packer bugs clarify docs add missing vars, algo tweaks add missing vars, update algo hash WIP. improving algo/mitmproxy packer stuff install packer for sage, call packer from proper location Use compute driver to get regions improve comments wait longer before polling new vultr server, avoid spurious ok status unquote simple filenames WIP. Use packer key, no more instance ssh key. Change API installation. Simplify packer/ansible. rename bubble_finalizer to just finalizer, remove default_roles filter servers/images based on installType for now, consider packer image OK if bubble version matches add algo/mitm roles to packer. add installType to BubbleNode fix NODE_ROLES file templatize packer file and playbook, use same template for sage and node WIP: refactor addAllRegions WIP: do not re-create identical images WIP: packer build for vultr now working Merge branch 'master' of git.bubblev.org:bubblev/bubble into cobbzilla/introduce_packer WIP. working on vultr packer builds WIP: packer image creation working for digitalocean WIP: packer basics working for digitalocean add packer endpoints, introduce packer support to cloud compute drivers remove roles endpoints AnsibleRole is no longer an model entity. Introduce Packer. Merge branch 'sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService' of git.bubblev.org:bubblev/bubble into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' of git.bubblev.org:bubblev/bubble into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Add instance count to script Co-authored-by: Jonathan Cobb <jonathan@kyuss.org> Co-authored-by: Svitlana <sfedoriv@itekako.com> Reviewed-on: https://git.bubblev.org/bubblev/bubble/pulls/18
4 år sedan
4 år sedan
Introduce packer support (#18) cleanups and fixes, packer is ready to roll add errorApi endpoint initialize mitmproxy dependencies packer deployments finally working fix virtualenv call for ubuntu 20.04 WIP. update to ubuntu 20.04. fixing algo installation WIP. packer fixes remove unused constant WIP. packer basics working for ec2 Merge branch 'master' of git.bubblev.org:bubblev/bubble into cobbzilla/introduce_packer remove automation dir, all moved to resources log pg autovacuum if longer than 250ms touch install marker for algo set mitmproxy as owner of all mitmproxy files add hostname to packer image name avoid closing progress meter prematurely WIP. parallelize node startup, fix packer bugs clarify docs add missing vars, algo tweaks add missing vars, update algo hash WIP. improving algo/mitmproxy packer stuff install packer for sage, call packer from proper location Use compute driver to get regions improve comments wait longer before polling new vultr server, avoid spurious ok status unquote simple filenames WIP. Use packer key, no more instance ssh key. Change API installation. Simplify packer/ansible. rename bubble_finalizer to just finalizer, remove default_roles filter servers/images based on installType for now, consider packer image OK if bubble version matches add algo/mitm roles to packer. add installType to BubbleNode fix NODE_ROLES file templatize packer file and playbook, use same template for sage and node WIP: refactor addAllRegions WIP: do not re-create identical images WIP: packer build for vultr now working Merge branch 'master' of git.bubblev.org:bubblev/bubble into cobbzilla/introduce_packer WIP. working on vultr packer builds WIP: packer image creation working for digitalocean WIP: packer basics working for digitalocean add packer endpoints, introduce packer support to cloud compute drivers remove roles endpoints AnsibleRole is no longer an model entity. Introduce Packer. Merge branch 'sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService' of git.bubblev.org:bubblev/bubble into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' of git.bubblev.org:bubblev/bubble into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Add instance count to script Co-authored-by: Jonathan Cobb <jonathan@kyuss.org> Co-authored-by: Svitlana <sfedoriv@itekako.com> Reviewed-on: https://git.bubblev.org/bubblev/bubble/pulls/18
4 år sedan
4 år sedan
Add needed stuff and fixes for bubble restore process (#20) Merge branch 'master' of git.bubblev.org:bubblev/bubble into kris/add_support_for_restore_ui Rename isWaitingRestoring Use == instead of equals on enums Use ctime instead of creationTime in backup objects Fix bin scripts after CR Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/resources/message_templates/en_US/server/post_auth/ResourceMessages.properties # bubble-web Add missing label Update web Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java # bubble-server/src/main/resources/ansible/roles/algo/tasks/main.yml # bubble-web Update web Use better check if restore is started Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java Init sage node on init self node if needed Update log message on post copy entities Update web Remove another word from host prefixes Mark restoring node as ready Add ctime to ticks-stats returned to FE Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Try resetting progress meter on each new node Add auth/ready ep in skip auth for restore node Add more logs of api exception Update web Remove some bad host prefixes Update web Deploy web if it is included in jar Merge branch 'master' into kris/add_support_for_restore_ui Add support for showing latest backup on FE Merge branch 'master' into kris/add_support_for_restore_ui Update web Use proper flag for waiting restoring bubble Use separate bash to avoid continuing within venv Start restore monitor on instance when needed Save iptables in packer instance Merge branch 'master' into kris/add_support_for_restore_ui Save iptables before corresponding service restart Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/server/BubbleConfiguration.java # bubble-web Fix iptables entries again Echo error to stderr Fix iptable rules creation Add back needed tags in algo related ansible tasks Update web Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Add new labels and update web Use network state as restore mode tag Create full jar with web on full patching Update first_time_marker file with correct value Run first time listener for restoring instances also Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Add new lib to utils pom Co-authored-by: Jonathan Cobb <jonathan@kyuss.org> Co-authored-by: Kristijan Mitrovic <kmitrovic@itekako.com> Reviewed-on: https://git.bubblev.org/bubblev/bubble/pulls/20
4 år sedan
4 år sedan
Introduce packer support (#18) cleanups and fixes, packer is ready to roll add errorApi endpoint initialize mitmproxy dependencies packer deployments finally working fix virtualenv call for ubuntu 20.04 WIP. update to ubuntu 20.04. fixing algo installation WIP. packer fixes remove unused constant WIP. packer basics working for ec2 Merge branch 'master' of git.bubblev.org:bubblev/bubble into cobbzilla/introduce_packer remove automation dir, all moved to resources log pg autovacuum if longer than 250ms touch install marker for algo set mitmproxy as owner of all mitmproxy files add hostname to packer image name avoid closing progress meter prematurely WIP. parallelize node startup, fix packer bugs clarify docs add missing vars, algo tweaks add missing vars, update algo hash WIP. improving algo/mitmproxy packer stuff install packer for sage, call packer from proper location Use compute driver to get regions improve comments wait longer before polling new vultr server, avoid spurious ok status unquote simple filenames WIP. Use packer key, no more instance ssh key. Change API installation. Simplify packer/ansible. rename bubble_finalizer to just finalizer, remove default_roles filter servers/images based on installType for now, consider packer image OK if bubble version matches add algo/mitm roles to packer. add installType to BubbleNode fix NODE_ROLES file templatize packer file and playbook, use same template for sage and node WIP: refactor addAllRegions WIP: do not re-create identical images WIP: packer build for vultr now working Merge branch 'master' of git.bubblev.org:bubblev/bubble into cobbzilla/introduce_packer WIP. working on vultr packer builds WIP: packer image creation working for digitalocean WIP: packer basics working for digitalocean add packer endpoints, introduce packer support to cloud compute drivers remove roles endpoints AnsibleRole is no longer an model entity. Introduce Packer. Merge branch 'sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService' of git.bubblev.org:bubblev/bubble into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' of git.bubblev.org:bubblev/bubble into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Add instance count to script Co-authored-by: Jonathan Cobb <jonathan@kyuss.org> Co-authored-by: Svitlana <sfedoriv@itekako.com> Reviewed-on: https://git.bubblev.org/bubblev/bubble/pulls/18
4 år sedan
4 år sedan
Introduce packer support (#18) cleanups and fixes, packer is ready to roll add errorApi endpoint initialize mitmproxy dependencies packer deployments finally working fix virtualenv call for ubuntu 20.04 WIP. update to ubuntu 20.04. fixing algo installation WIP. packer fixes remove unused constant WIP. packer basics working for ec2 Merge branch 'master' of git.bubblev.org:bubblev/bubble into cobbzilla/introduce_packer remove automation dir, all moved to resources log pg autovacuum if longer than 250ms touch install marker for algo set mitmproxy as owner of all mitmproxy files add hostname to packer image name avoid closing progress meter prematurely WIP. parallelize node startup, fix packer bugs clarify docs add missing vars, algo tweaks add missing vars, update algo hash WIP. improving algo/mitmproxy packer stuff install packer for sage, call packer from proper location Use compute driver to get regions improve comments wait longer before polling new vultr server, avoid spurious ok status unquote simple filenames WIP. Use packer key, no more instance ssh key. Change API installation. Simplify packer/ansible. rename bubble_finalizer to just finalizer, remove default_roles filter servers/images based on installType for now, consider packer image OK if bubble version matches add algo/mitm roles to packer. add installType to BubbleNode fix NODE_ROLES file templatize packer file and playbook, use same template for sage and node WIP: refactor addAllRegions WIP: do not re-create identical images WIP: packer build for vultr now working Merge branch 'master' of git.bubblev.org:bubblev/bubble into cobbzilla/introduce_packer WIP. working on vultr packer builds WIP: packer image creation working for digitalocean WIP: packer basics working for digitalocean add packer endpoints, introduce packer support to cloud compute drivers remove roles endpoints AnsibleRole is no longer an model entity. Introduce Packer. Merge branch 'sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService' of git.bubblev.org:bubblev/bubble into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' of git.bubblev.org:bubblev/bubble into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Merge branch 'master' into sfedoriv/APIAddSupportForAmazonEC2ComputeCloudService Add instance count to script Co-authored-by: Jonathan Cobb <jonathan@kyuss.org> Co-authored-by: Svitlana <sfedoriv@itekako.com> Reviewed-on: https://git.bubblev.org/bubblev/bubble/pulls/18
4 år sedan
4 år sedan
Add needed stuff and fixes for bubble restore process (#20) Merge branch 'master' of git.bubblev.org:bubblev/bubble into kris/add_support_for_restore_ui Rename isWaitingRestoring Use == instead of equals on enums Use ctime instead of creationTime in backup objects Fix bin scripts after CR Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/resources/message_templates/en_US/server/post_auth/ResourceMessages.properties # bubble-web Add missing label Update web Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java # bubble-server/src/main/resources/ansible/roles/algo/tasks/main.yml # bubble-web Update web Use better check if restore is started Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java Init sage node on init self node if needed Update log message on post copy entities Update web Remove another word from host prefixes Mark restoring node as ready Add ctime to ticks-stats returned to FE Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Try resetting progress meter on each new node Add auth/ready ep in skip auth for restore node Add more logs of api exception Update web Remove some bad host prefixes Update web Deploy web if it is included in jar Merge branch 'master' into kris/add_support_for_restore_ui Add support for showing latest backup on FE Merge branch 'master' into kris/add_support_for_restore_ui Update web Use proper flag for waiting restoring bubble Use separate bash to avoid continuing within venv Start restore monitor on instance when needed Save iptables in packer instance Merge branch 'master' into kris/add_support_for_restore_ui Save iptables before corresponding service restart Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/server/BubbleConfiguration.java # bubble-web Fix iptables entries again Echo error to stderr Fix iptable rules creation Add back needed tags in algo related ansible tasks Update web Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Add new labels and update web Use network state as restore mode tag Create full jar with web on full patching Update first_time_marker file with correct value Run first time listener for restoring instances also Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Add new lib to utils pom Co-authored-by: Jonathan Cobb <jonathan@kyuss.org> Co-authored-by: Kristijan Mitrovic <kmitrovic@itekako.com> Reviewed-on: https://git.bubblev.org/bubblev/bubble/pulls/20
4 år sedan
Add needed stuff and fixes for bubble restore process (#20) Merge branch 'master' of git.bubblev.org:bubblev/bubble into kris/add_support_for_restore_ui Rename isWaitingRestoring Use == instead of equals on enums Use ctime instead of creationTime in backup objects Fix bin scripts after CR Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/resources/message_templates/en_US/server/post_auth/ResourceMessages.properties # bubble-web Add missing label Update web Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java # bubble-server/src/main/resources/ansible/roles/algo/tasks/main.yml # bubble-web Update web Use better check if restore is started Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java Init sage node on init self node if needed Update log message on post copy entities Update web Remove another word from host prefixes Mark restoring node as ready Add ctime to ticks-stats returned to FE Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Try resetting progress meter on each new node Add auth/ready ep in skip auth for restore node Add more logs of api exception Update web Remove some bad host prefixes Update web Deploy web if it is included in jar Merge branch 'master' into kris/add_support_for_restore_ui Add support for showing latest backup on FE Merge branch 'master' into kris/add_support_for_restore_ui Update web Use proper flag for waiting restoring bubble Use separate bash to avoid continuing within venv Start restore monitor on instance when needed Save iptables in packer instance Merge branch 'master' into kris/add_support_for_restore_ui Save iptables before corresponding service restart Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/server/BubbleConfiguration.java # bubble-web Fix iptables entries again Echo error to stderr Fix iptable rules creation Add back needed tags in algo related ansible tasks Update web Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Add new labels and update web Use network state as restore mode tag Create full jar with web on full patching Update first_time_marker file with correct value Run first time listener for restoring instances also Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Add new lib to utils pom Co-authored-by: Jonathan Cobb <jonathan@kyuss.org> Co-authored-by: Kristijan Mitrovic <kmitrovic@itekako.com> Reviewed-on: https://git.bubblev.org/bubblev/bubble/pulls/20
4 år sedan
Add needed stuff and fixes for bubble restore process (#20) Merge branch 'master' of git.bubblev.org:bubblev/bubble into kris/add_support_for_restore_ui Rename isWaitingRestoring Use == instead of equals on enums Use ctime instead of creationTime in backup objects Fix bin scripts after CR Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/resources/message_templates/en_US/server/post_auth/ResourceMessages.properties # bubble-web Add missing label Update web Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java # bubble-server/src/main/resources/ansible/roles/algo/tasks/main.yml # bubble-web Update web Use better check if restore is started Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java Init sage node on init self node if needed Update log message on post copy entities Update web Remove another word from host prefixes Mark restoring node as ready Add ctime to ticks-stats returned to FE Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Try resetting progress meter on each new node Add auth/ready ep in skip auth for restore node Add more logs of api exception Update web Remove some bad host prefixes Update web Deploy web if it is included in jar Merge branch 'master' into kris/add_support_for_restore_ui Add support for showing latest backup on FE Merge branch 'master' into kris/add_support_for_restore_ui Update web Use proper flag for waiting restoring bubble Use separate bash to avoid continuing within venv Start restore monitor on instance when needed Save iptables in packer instance Merge branch 'master' into kris/add_support_for_restore_ui Save iptables before corresponding service restart Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-server/src/main/java/bubble/server/BubbleConfiguration.java # bubble-web Fix iptables entries again Echo error to stderr Fix iptable rules creation Add back needed tags in algo related ansible tasks Update web Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Add new labels and update web Use network state as restore mode tag Create full jar with web on full patching Update first_time_marker file with correct value Run first time listener for restoring instances also Merge branch 'master' into kris/add_support_for_restore_ui # Conflicts: # bubble-web Add new lib to utils pom Co-authored-by: Jonathan Cobb <jonathan@kyuss.org> Co-authored-by: Kristijan Mitrovic <kmitrovic@itekako.com> Reviewed-on: https://git.bubblev.org/bubblev/bubble/pulls/20
4 år sedan
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/bin/bash
  2. #
  3. # Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/
  4. #
  5. #
  6. # Usage:
  7. #
  8. # bpatchfull [user@]hostname [norestart]
  9. #
  10. # [user@]hostname : the hostname of the bubble node to update. Optionally, also specify a username.
  11. # Usually you will have an entry in ~/.ssh/config to set the username and ssh key
  12. # norestart : If present, do not restart the API server after updating the jar file
  13. #
  14. # Patch the bubble.jar on a remote node.
  15. # This script updates the entire jar file, and takes a lot longer than bpatch
  16. #
  17. SCRIPT="${0}"
  18. SCRIPT_DIR=$(cd $(dirname ${SCRIPT}) && pwd)
  19. . ${SCRIPT_DIR}/bubble_common
  20. HOST=${1:?no host provided}
  21. NO_RESTART=${2}
  22. BUBBLE_SERVER_DIR="${SCRIPT_DIR}/../bubble-server"
  23. if [[ ! -d "${BUBBLE_SERVER_DIR}" ]] ; then
  24. die "bubble-server dir not found: ${BUBBLE_SERVER_DIR}"
  25. fi
  26. cd ${BUBBLE_SERVER_DIR}
  27. ANY_JAR=$(find "./target" -type f -name "bubble*.jar" | head -1 | wc -l | tr -d ' ')
  28. if [[ ${ANY_JAR} -eq 0 ]] ; then
  29. ANY_CHANGES=1
  30. else
  31. ANY_CHANGES=$(find "./src/main" -type f -newer "$(find "./target" -type f -name "bubble*.jar" | head -1)" | wc -l | tr -d ' ')
  32. fi
  33. if [[ ${ANY_CHANGES} -eq 0 ]] ; then
  34. echo "No changes, not repackaging jar"
  35. scp ./target/bubble*.jar ${HOST}:/tmp/bubble.jar || die "Error copying file to remote host ${HOST}"
  36. else
  37. if [[ ${ANY_JAR} -eq 0 ]] ; then
  38. echo "No bubble jar file found, rebuilding"
  39. else
  40. echo "Files changed, rebuilding bubble jar: "
  41. find "./src/main" -type f -newer "$(find "./target" -type f -name "bubble*.jar" | head -1)"
  42. fi
  43. BUBBLE_PRODUCTION=1 mvn -DskipTests=true -Dcheckstyle.skip=true clean package || die "Error packaging jar"
  44. scp ./target/bubble*.jar ${HOST}:/tmp/bubble.jar || die "Error copying file to remote host ${HOST}"
  45. fi
  46. if [[ ! -z "${NO_RESTART}" && "${NO_RESTART}" == "norestart" ]] ; then
  47. echo "Patching but not restarting..."
  48. ssh ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar"
  49. else
  50. echo "Patching and restarting..."
  51. ssh ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar && supervisorctl restart bubble"
  52. fi
  53. if unzip -Z -1 ./target/bubble*.jar | grep -q "^site/$" ; then
  54. echo "Deploying new web..."
  55. ssh ${HOST} "cd ~bubble && unzip -o /tmp/bubble.jar 'site/*' && chown -R bubble:bubble site"
  56. fi