2013-12-14 5 views
2

사내 정책으로 인해/usr 대신/opt/myapp와 같이 사용자 정의 디렉토리에 설치되는 sbt-native-packager로 rpm 패키지를 빌드하려고합니다. 요구 사항.sbt native-packager로 rpm의 설치 디렉토리 수정

표준 rpm을 빌드하는 build.sbt가 있는데 디렉토리를 수정할 때 문제가 있습니다. 사과드립니다. 스칼라, 스 베이 트, 토착 pacakger를 처음 접했습니다.

mapGenericFilesToLinux를 사용 중이며 대상 디렉토리의 첫 번째 부분 만 수정하면 구조를 유지하려고합니다.

나는 내가 어떤 도움

안녕 사전에

linuxPackageMappings in Rpm <++= <SOMETHING HERE> { 
    // for loop that steps through the source and destination and modifies the directory 
} 

감사를 제외하고 비슷한 일을하고 싶은 생각 https://github.com/sbt/sbt-native-packager/issues/4#issuecomment-6731183

linuxPackageMappings <+= target map { target => 
    val src = target/"webapp" 
    val dest = "/opt/app" 
    LinuxPackageMapping(
    for { 
    path <- (src ***).get 
    if !path.isDirectory 
    } yield path -> path.toString.replaceFirst(src.toString, dest) 
) 
} 

자식 허브 월호에이 코드 조각을 발견 팸

+0

sbt 0.12 또는 0.13? 0.13이면, 키에'++ ='와 새로운'.value'를 사용하십시오. 그렇지 않으면 전 대답으로 응답하겠습니다. 응답을위한 – jsuereth

+0

감사합니다. 그것은 sbt 버전 0.12.4이며 그것은 놀이 프레임 워크 (v2.2.0)의 일부로 사용되고 있습니다. – pamduffy

답변

2

그래서, sbt 0.12 원하는 값을 선언하기 전에 사용할 모든 종속 키를 지정해야합니다. 그럼 두 가지를 가장하자 :

  1. linuxPackageMappings에는 포장에 대한 모든 매핑이 있습니다.
  2. linuxPackageMappings in Rpm 아무 것도 직접 추가하지 않았습니다.
우리는 linuxPackageMappings의 값을 가지고 linuxPackageMappings in Rpm에 대한 디렉토리 변경 겁니다

:이 파일을 gzip을 할 것인지 여부를 포함 리눅스 패키지 매핑 (찢어입니다 무엇을

linuxPackageMappings in Rpm <<= (linuxPackageMappings) map { mappings => 
    // Let's loop through the mappings and alter their on-disc location.... 
    for(LinuxPackageMapping(filesAndNames, meta, zipped) <- mappings) yield { 
    val newFilesAndNames = for { 
     (file, installPath) <- filesAndNames 
    } yield file -> installPath.replaceFirst("/usr/share/app", "/opt/app") 
    LinuxPackageMapping(newFilesAndNames, meta, zipped) 
    } 
} 

을, 사용자/그룹 소유자/사용 권한)를 수정하고 각 파일의 설치 경로를 수정하십시오.

희망 하시겠습니까? IN sbt-native-packager.NEXT (릴리스되지 않음) 기본 설치 위치를 구성 할 수 있습니다.

+0

종합적인 답변 주셔서 감사합니다. 내 build.sbt에서 코드를 그대로 사용하면 최종 "LinuxPackageMapping"라인을 참조하는 다음 오류가 발생합니다. 오류 : 찾을 수 없음 : value newFilesAndNames – pamduffy

+0

위의 중괄호 안에이 행을 이동하여 val과 동일한 범위에 있었으므로이 컴파일 된 후 나중에 심볼릭 링크에 "파일 존재"오류가있는 문제가 발생했습니다. 코드가 여러 번 호출 되었기 때문입니다. 심볼릭 링크를 수정해야합니까? 그렇지 않으면 첫 번째 오류를 수정하기 위해 수행해야 할 다른 작업이 있습니까? – pamduffy

+0

올바른 코드를 수정했습니다. 문제는 내 << ++ = 대신에 << =, 죄송합니다. 이전의 리눅스 패키지 매핑을 대체하고 싶다. 전에 나열한 것은 * 이전에 추가 한 것입니다. – jsuereth