Typically, when attempting to stop a container via `docker stop` or
`podman stop`, the container engine will send a stop signal (SIGTERM by
default) to the container's main process. There are two common ways this
can go wrong:
1. The main process is run as PID 1 and doesn't register a signal
handler for the stop signal and is consequently ignored
2. The main process is a shell script running a foreground process with
no `trap`s and is consequently ignored by the *shell*
In either case, because the graceful stop signal is ignored, the
container engine will then send a `SIGKILL` to the container process
after a default timeout of 10 seconds. This is why some containers can
be observed to "hang" when being stopped when they have no other reason
to do so. Unlike `SIGTERM` or `SIGINT`, `SIGKILL` is an immediate,
ungraceful stop that doesn't give the process time to clean up.
There is a fair bit of nuance in how `sh` and `bash` handle signals in
different circumstances. The behavior relevant to the second case above
and Dawarich's entrypoints in particular is that the shell ignores
signals like `SIGTERM` and `SIGINT` when waiting on a foreground job; in
this case, that would be: `bundle exec ${@}`. The reason that `SIGINT`
is not ignored after pressing `Ctrl+C` while running the docker compose
stack is because in that case the shell is **interactive** and the shell
*does* respond to `SIGINT` then (c.f. the aforementioned nuance).
Thankfully, the fix is simple: `exec` the main process, which causes the
server process to *replace* the shell process and directly receive any
signals sent. Additionally, the stop signal for the app process should
be set to `SIGINT`, as that is the expected signal for graceful
shutdown. Sidekiq is fine with either `SIGTERM` or `SIGINT`, which is
convenient.
* Add a plan to use MapLibre GL JS for the frontend map rendering, replacing Leaflet
* Implement phase 1
* Phases 1-3 + part of 4
* Fix e2e tests
* Phase 6
* Implement fog of war
* Phase 7
* Next step: fix specs, phase 7 done
* Use our own map tiles
* Extract v2 map logic to separate manager classes
* Update settings panel on v2 map
* Update v2 e2e tests structure
* Reimplement location search in maps v2
* Update speed routes
* Implement visits and places creation in v2
* Fix last failing test
* Implement visits merging
* Fix a routes e2e test and simplify the routes layer styling.
* Extract js to modules from maps_v2_controller.js
* Implement area creation
* Fix spec problem
* Fix some e2e tests
* Implement live mode in v2 map
* Update icons and panel
* Extract some styles
* Remove unused file
* Start adding dark theme to popups on MapLibre maps
* Make popups respect dark theme
* Move v2 maps to maplibre namespace
* Update v2 references to maplibre
* Put place, area and visit info into side panel
* Update API to use safe settings config method
* Fix specs
* Fix method name to config in SafeSettings and update usages accordingly
* Add missing public files
* Add handling for real time points
* Fix remembering enabled/disabled layers of the v2 map
* Fix lots of e2e tests
* Add settings to select map version
* Use maps/v2 as main path for MapLibre maps
* Update routing
* Update live mode
* Implement OmniAuth GitHub authentication
* Fix omniauth GitHub scope to include user email access
* Remove margin-bottom
* Implement Google OAuth2 authentication
* Implement OIDC authentication for Dawarich using omniauth_openid_connect gem.
* Add patreon account linking and patron checking service
* Update docker-compose.yml to use boolean values instead of strings
* Add support for KML files
* Add tests
* Update changelog
* Remove patreon OAuth integration
* Move omniauthable to a concern
* Update an icon in integrations
* Update changelog
* Update app version
* Fix family location sharing toggle
* Move family location sharing to its own controller
* Update changelog
* Implement basic tagging functionality for places, allowing users to categorize and label places with custom tags.
* Add places management API and tags feature
* Add some changes related to places management feature
* Fix some tests
* Fix sometests
* Add places layer
* Update places layer to use Leaflet.Control.Layers.Tree for hierarchical layer control
* Rework tag form
* Add hashtag
* Add privacy zones to tags
* Add notes to places and manage place tags
* Update changelog
* Update e2e tests
* Extract tag serializer to its own file
* Fix some tests
* Fix tags request specs
* Fix some tests
* Fix rest of the tests
* Revert some changes
* Add missing specs
* Revert changes in place export/import code
* Fix some specs
* Fix PlaceFinder to only consider global places when finding existing places
* Fix few more specs
* Fix visits creator spec
* Fix last tests
* Update place creating modal
* Add home location based on "Home" tagged place
* Save enabled tag layers
* Some fixes
* Fix bug where enabling place tag layers would trigger saving enabled layers, overwriting with incomplete data
* Update migration to use disable_ddl_transaction! and add up/down methods
* Fix tag layers restoration and filtering logic
* Update OIDC auto-registration and email/password registration settings
* Fix potential xss
Split long RUN commands in Dockerfile.dev and Dockerfile.prod into multiple lines for better readability and maintainability. No functional changes were made.
Updated both Dockerfile.dev and Dockerfile.prod to include 'apt-get upgrade -qq' after 'apt-get update -qq' to ensure all packages are upgraded before installing dependencies. Addresses issue #1793