Skip to content
New issue

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

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

Already on GitHub? Sign in 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants
@silverham and others