Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Volume shared is incorrect, should be /var/opt/mssql not /var/opt/data #40

Open
silverham opened this issue Aug 26, 2024 · 1 comment
Open
Labels
bug Something isn't working

Comments

@silverham
Copy link

silverham commented Aug 26, 2024

In MSQL plugin, the volume shared is wrong:
It should be /var/opt/mssql not /var/opt/data.
@see https://github.com/lando/mssql/blob/main/builders/mssql.js#L44C28-L44C41

${options.data}:/var/opt/data`,

Also the folder is owned by root so I cannot create database anyway?

I'm using below workaround:

x-mssql-service-environment: &default-mssql-service-environment
  ACCEPT_EULA: Y
  MYPROJECT_DATABASE_USERNAME: &my-project-database-username sa
  MYPROJECT_DATABASE_PASSWORD: &my-project-database-password he11oTHERE
  SA_PASSWORD: *my-project-database-password

mssql_service:
  api: 3
  type: lando
  # Skip URL health check, as url only vaild during 'gulp serve'.
  scanner: false
  entrypoint: /opt/mssql/bin/sqlservr
  # The key 'creds' is not actually used, here for reference.
  creds:
    user: *my-project-database-username
    password: *my-project-database-password
  # Expose this port externally on random port (portforward: true)
  # Find port on host with `docker port [container_name] 1443`
  # In SSMS (SQL Management Studio), use tcp:127.0.0.1,[port] and trust
  # server certificate.
  # If not working:
  # - set 'portforward: 1433' (assigns that port on the host)
  # - OR do 'lando stop' and 'lando start'
  # - OR backup DB and do 'lando destroy' and 'lando start'
  portforward: true
  services:
    user: root
    # Version 16.x
    # Microsoft SQL Server 2022 (RTM-CU14) (KB5038325) - 16.0.4135.4 (X64)
    # Developer Edition (64-bit) on Linux (Ubuntu 22.04.4 LTS) <X64>
    image : mcr.microsoft.com/mssql/server:latest
    environment:
    << : *default-mssql-service-environment
    ports:
    # Find port on host with `docker port [container_name] 1443`
    # In SSMS ( SQL Management Studio), use tcp:localhost,[port]
    - "1443"
    volumes:
    # Keep database across lando rebuilds by using named volumes. (1 of 2)
    # Lando (in type type: mssql:2019-latest) uses wrong path of
    # `/var/opt/data` for some reason and overrides can't define top level
    # `volumes` so we use custom service instead.
    - data:/var/opt/mssql
  # Keep database across lando rebuilds by using named volumes. (2 of 2)
  volumes:
    data:
  build_as_root:
    - |
    echo "\e[96m#### ($LANDO_SERVICE_NAME) START: Build. ####\e[0m";
    chown mssql /var/opt/mssql -R
    echo "\e[96m#### ($LANDO_SERVICE_NAME) END: Build. ####\e[0m";
  run_as_root:
    - |
    echo "\e[96m#### ($LANDO_SERVICE_NAME) START: Running MS SQL setup commands. ####\e[0m";
    chown mssql /var/opt/mssql -R
    # Folder name could be /opt/mssql-tools/ or /opt/mssql-tools18.
    SQL_CMD_BIN=$(find /opt/ -maxdepth 1 -type d -name mssql-tools\* -print | head -n1)/bin/sqlcmd
    # Use -C to ignore SSL errors.
    $SQL_CMD_BIN -S localhost -U $MYPROJECT_DATABASE_USERNAME -P $MYPROJECT_DATABASE_PASSWORD -C -Q \
    "
    USE master
    GO
    IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'MYPROJECT_Data')
    BEGIN
      CREATE DATABASE MYPROJECT_Data
      ON
      (
      NAME = N'MYPROJECT_Data',
      FILENAME = N'/var/opt/mssql/data/MYPROJECT_Data.mdf'
      )
      LOG ON
      (
      NAME = N'MYPROJECT_Log',
      FILENAME = N'/var/opt/mssql/data/MYPROJECT_Log.ldf'
      )
    END;
    GO
    USE MYPROJECT_Data;
    GO
    RAISERROR ('Setup SQL command was run. Username is $MYPROJECT_DATABASE_USERNAME, Passwword is: $MYPROJECT_DATABASE_PASSWORD', 0, 1) WITH NOWAIT;
    "
    echo "\e[96m#### ($LANDO_SERVICE_NAME) END: Running MS SQL setup commands. ####\e[0m";
  # Skip error: OCI runtime exec failed: exec failed: unable to start
  # container process: exec: "sqlcmd": executable file not found in $PATH:
  # unknown  FAILED
  healthcheck:
    command: bash /app/.lando/container/ms_sql_health_check.sh

[contents of .lando/container/ms_sql_health_check.sh]

SQL_CMD_BIN=$(find /opt/ -maxdepth 1 -type d -name mssql-tools\* -print | head -n1)/bin/sqlcmd
$SQL_CMD_BIN -S localhost -U $MYPROJECT_DATABASE_USERNAME -P $MYPROJECT_DATABASE_PASSWORD -C -Q "Select 1"
@silverham silverham added the bug Something isn't working label Aug 26, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants
@silverham and others