本文整理汇总了Golang中github.com/ubuntu-core/snappy/helpers.AtomicWriteFile函数的典型用法代码示例。如果您正苦于以下问题:Golang AtomicWriteFile函数的具体用法?Golang AtomicWriteFile怎么用?Golang AtomicWriteFile使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了AtomicWriteFile函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: generatePolicyForServiceBinary
func (sd *SecurityDefinitions) generatePolicyForServiceBinary(m *packageYaml, name string, baseDir string) error {
p, err := sd.generatePolicyForServiceBinaryResult(m, name, baseDir)
if err != nil {
return err
}
os.MkdirAll(filepath.Dir(p.scFn), 0755)
err = helpers.AtomicWriteFile(p.scFn, []byte(p.scPolicy), 0644, 0)
if err != nil {
logger.Noticef("Failed to write seccomp policy for %s: %v", name, err)
return err
}
os.MkdirAll(filepath.Dir(p.aaFn), 0755)
err = helpers.AtomicWriteFile(p.aaFn, []byte(p.aaPolicy), 0644, 0)
if err != nil {
logger.Noticef("Failed to write AppArmor policy for %s: %v", name, err)
return err
}
out, err := loadAppArmorPolicy(p.aaFn)
if err != nil {
logger.Noticef("Failed to load AppArmor policy for %s: %v\n:%s", name, err, out)
return err
}
return nil
}
开发者ID:General-Beck,项目名称:snappy,代码行数:27,代码来源:security.go
示例2: addPackageBinaries
func addPackageBinaries(m *snapYaml, baseDir string) error {
if err := os.MkdirAll(dirs.SnapBinariesDir, 0755); err != nil {
return err
}
for _, app := range m.Apps {
if app.Daemon != "" {
continue
}
aaProfile, err := getSecurityProfile(m, app.Name, baseDir)
if err != nil {
return err
}
// this will remove the global base dir when generating the
// service file, this ensures that /snaps/foo/1.0/bin/start
// is in the service file when the SetRoot() option
// is used
realBaseDir := stripGlobalRootDir(baseDir)
content, err := generateSnapBinaryWrapper(app, realBaseDir, aaProfile, m)
if err != nil {
return err
}
if err := helpers.AtomicWriteFile(generateBinaryName(m, app), []byte(content), 0755, 0); err != nil {
return err
}
}
return nil
}
开发者ID:alecu,项目名称:snappy,代码行数:31,代码来源:click.go
示例3: TestWriteDueToMissingValues
func (s *PartitionTestSuite) TestWriteDueToMissingValues(c *C) {
s.makeFakeUbootEnv(c)
// this file needs specific data
c.Assert(ioutil.WriteFile(bootloaderUbootEnvFile, []byte(""), 0644), IsNil)
atomiCall := false
atomicWriteFile = func(a string, b []byte, c os.FileMode, f helpers.AtomicWriteFlags) error {
atomiCall = true
return helpers.AtomicWriteFile(a, b, c, f)
}
partition := New()
u := newUboot(partition)
c.Assert(u, NotNil)
c.Check(u.MarkCurrentBootSuccessful("a"), IsNil)
c.Assert(atomiCall, Equals, true)
bytes, err := ioutil.ReadFile(bootloaderUbootEnvFile)
c.Assert(err, IsNil)
c.Check(strings.Contains(string(bytes), "snappy_mode=try"), Equals, false)
c.Check(strings.Contains(string(bytes), "snappy_mode=regular"), Equals, true)
c.Check(strings.Contains(string(bytes), "snappy_ab=a"), Equals, true)
}
开发者ID:pombredanne,项目名称:snappy-1,代码行数:25,代码来源:bootloader_uboot_test.go
示例4: MigrateToDynamicGrub
// MigrateToDynamicGrub rearranges things to work with the old,
// dynamic grub setup. Needed for when you rollback over the switch to
// static grub.
func MigrateToDynamicGrub() error {
grubConfigRaw, err := ioutil.ReadFile(bootloaderGrubConfigFile())
if err != nil && !os.IsNotExist(err) {
return err
}
grubConfig := string(grubConfigRaw)
if !isOldGrubConfig(grubConfig) {
// nothing to do
return nil
}
part := New()
// first copy current kernel/initrd to /boot/grub/$current (a or b)
if err := copyKernelAssets("/", part.rootPartition().shortName); err != nil {
return err
}
// then copy other kernel/initrd to /boot/grub/$other (a or b)
if helpers.FileExists("/writable/cache/system/boot") {
if err := copyKernelAssets("/writable/cache/system/", part.otherRootPartition().shortName); err != nil {
return err
}
}
return helpers.AtomicWriteFile(bootloaderGrubConfigFile(), []byte(newGrubConfig), 0644, 0)
}
开发者ID:General-Beck,项目名称:snappy,代码行数:30,代码来源:migrate_grub.go
示例5: enableFirstEther
func enableFirstEther() error {
oem, _ := getOem()
if oem != nil && oem.OEM.SkipIfupProvisioning {
return nil
}
var eths []string
for _, glob := range globs {
eths, _ = filepath.Glob(glob)
if len(eths) != 0 {
break
}
}
if len(eths) == 0 {
return nil
}
eth := filepath.Base(eths[0])
ethfile := filepath.Join(ethdir, eth)
data := fmt.Sprintf("allow-hotplug %[1]s\niface %[1]s inet dhcp\n", eth)
if err := helpers.AtomicWriteFile(ethfile, []byte(data), 0644, 0); err != nil {
return err
}
ifup := exec.Command(ifup, eth)
ifup.Stdout = os.Stdout
ifup.Stderr = os.Stderr
if err := ifup.Run(); err != nil {
return err
}
return nil
}
开发者ID:sergiusens,项目名称:snappy,代码行数:33,代码来源:firstboot.go
示例6: writeCompatManifestJSON
// this rewrites the json manifest to include the origin in the on-disk
// manifest.json to be compatible with click again
func writeCompatManifestJSON(clickMetaDir string, manifestData []byte, origin string) error {
var cm clickManifest
if err := json.Unmarshal(manifestData, &cm); err != nil {
return err
}
if cm.Type != pkg.TypeFramework && cm.Type != pkg.TypeOem {
// add the origin to the name
cm.Name = fmt.Sprintf("%s.%s", cm.Name, origin)
}
if origin == SideloadedOrigin {
cm.Version = filepath.Base(filepath.Join(clickMetaDir, "..", ".."))
}
outStr, err := json.MarshalIndent(cm, "", " ")
if err != nil {
return err
}
if err := helpers.AtomicWriteFile(filepath.Join(clickMetaDir, cm.Name+".manifest"), []byte(outStr), 0644, 0); err != nil {
return err
}
return nil
}
开发者ID:General-Beck,项目名称:snappy,代码行数:27,代码来源:click.go
示例7: ExtractHashes
// ExtractHashes reads "hashes.yaml" from the clickdeb and writes it to
// the given directory.
func (d *ClickDeb) ExtractHashes(dir string) error {
hashesFile := filepath.Join(dir, "hashes.yaml")
hashesData, err := d.ControlMember("hashes.yaml")
if err != nil {
return err
}
return helpers.AtomicWriteFile(hashesFile, hashesData, 0644, 0)
}
开发者ID:General-Beck,项目名称:snappy,代码行数:11,代码来源:deb.go
示例8: WriteStoreToken
// WriteStoreToken takes the token and stores it on the filesystem for
// later reading via ReadStoreToken()
func WriteStoreToken(token StoreToken) error {
targetFile := storeTokenFilename()
if err := os.MkdirAll(filepath.Dir(targetFile), 0750); err != nil {
return err
}
outStr, err := json.MarshalIndent(token, "", " ")
if err != nil {
return nil
}
return helpers.AtomicWriteFile(targetFile, []byte(outStr), 0600, 0)
}
开发者ID:robert-ancell,项目名称:snapd,代码行数:14,代码来源:auth.go
示例9: stampFirstBoot
func stampFirstBoot() error {
// filepath.Dir instead of firstbootDir directly to ease testing
stampDir := filepath.Dir(stampFile)
if _, err := os.Stat(stampDir); os.IsNotExist(err) {
if err := os.MkdirAll(stampDir, 0755); err != nil {
return err
}
}
return helpers.AtomicWriteFile(stampFile, []byte{}, 0644, 0)
}
开发者ID:robert-ancell,项目名称:snapd,代码行数:12,代码来源:firstboot.go
示例10: WriteMountUnitFile
func (s *systemd) WriteMountUnitFile(name, what, where string) (string, error) {
c := fmt.Sprintf(`[Unit]
Description=Squashfs mount unit for %s
[Mount]
What=%s
Where=%s
`, name, what, where)
mu := MountUnitPath(where, "mount")
return filepath.Base(mu), helpers.AtomicWriteFile(mu, []byte(c), 0644, 0)
}
开发者ID:alecu,项目名称:snappy,代码行数:12,代码来源:systemd.go
示例11: saveStoreManifest
func (s *RemoteSnapPart) saveStoreManifest() error {
content, err := yaml.Marshal(s.pkg)
if err != nil {
return err
}
if err := os.MkdirAll(dirs.SnapMetaDir, 0755); err != nil {
return err
}
// don't worry about previous contents
return helpers.AtomicWriteFile(RemoteManifestPath(s), content, 0644, 0)
}
开发者ID:robert-ancell,项目名称:snapd,代码行数:13,代码来源:snap_remote.go
示例12: atomicWriteEntry
func atomicWriteEntry(data []byte, secret bool, top string, subpath ...string) error {
fpath := filepath.Join(top, filepath.Join(subpath...))
dir := filepath.Dir(fpath)
err := os.MkdirAll(dir, 0775)
if err != nil {
return err
}
fperm := 0664
if secret {
fperm = 0600
}
return helpers.AtomicWriteFile(fpath, data, os.FileMode(fperm), 0)
}
开发者ID:robert-ancell,项目名称:snapd,代码行数:13,代码来源:fsentryutils.go
示例13: writeApparmorAdditionalFile
// writeApparmorAdditionalFile generate a $partID.json.additional file.
//
// This file grants additional access on top of the existing apparmor json
// rules. This is required for the OEM hardware assign code because by
// default apparmor will not allow access to /dev. We grant access here
// and the ubuntu-core-launcher is then used to generate a confinement
// based on the devices cgroup.
func writeApparmorAdditionalFile(m *packageYaml) error {
if err := os.MkdirAll(dirs.SnapAppArmorDir, 0755); err != nil {
return err
}
for _, h := range m.OEM.Hardware.Assign {
jsonAdditionalPath := filepath.Join(dirs.SnapAppArmorDir, fmt.Sprintf("%s.json.additional", h.PartID))
if err := helpers.AtomicWriteFile(jsonAdditionalPath, []byte(apparmorAdditionalContent), 0644, 0); err != nil {
return err
}
}
return nil
}
开发者ID:General-Beck,项目名称:snappy,代码行数:21,代码来源:oem.go
示例14: setPassthrough
func setPassthrough(rootDir string, pc []passthroughConfig) error {
for _, c := range pc {
path := filepath.Join(rootDir, c.Name)
if c.Content == "" {
os.Remove(path)
continue
}
if err := helpers.AtomicWriteFile(path, []byte(c.Content), 0644, helpers.AtomicWriteFollow); err != nil {
return err
}
}
return nil
}
开发者ID:pombredanne,项目名称:snappy-1,代码行数:14,代码来源:config.go
示例15: TestNoWriteNotNeeded
func (s *PartitionTestSuite) TestNoWriteNotNeeded(c *C) {
s.makeFakeUbootEnv(c)
atomiCall := false
atomicWriteFile = func(a string, b []byte, c os.FileMode, f helpers.AtomicWriteFlags) error {
atomiCall = true
return helpers.AtomicWriteFile(a, b, c, f)
}
partition := New()
u := newUboot(partition)
c.Assert(u, NotNil)
c.Check(u.MarkCurrentBootSuccessful("a"), IsNil)
c.Assert(atomiCall, Equals, false)
}
开发者ID:pombredanne,项目名称:snappy-1,代码行数:16,代码来源:bootloader_uboot_test.go
示例16: setModules
func setModules(modules []string) error {
oldModules, err := getModules()
if err != nil {
return err
}
for i := range modules {
m := strings.TrimSpace(modules[i])
if len(m) == 0 {
continue
}
if m[0] == '-' {
m = m[1:]
idx := sort.SearchStrings(oldModules, m)
if idx == len(oldModules) || oldModules[idx] != m {
// not found
continue
}
oldModules = append(oldModules[:idx], oldModules[idx+1:]...)
} else {
idx := sort.SearchStrings(oldModules, m)
if idx < len(oldModules) && oldModules[idx] == m {
// already got it
continue
}
oldModules = append(oldModules, "")
copy(oldModules[idx+1:], oldModules[idx:])
oldModules[idx] = m
}
}
var buf bytes.Buffer
// bytes' Write* methods always return nil error
buf.WriteString(modulesHeader)
for i := range oldModules {
buf.WriteString(oldModules[i])
buf.WriteByte('\n')
}
return helpers.AtomicWriteFile(modulesPath, buf.Bytes(), 0644, helpers.AtomicWriteFollow)
}
开发者ID:pombredanne,项目名称:snappy-1,代码行数:44,代码来源:config.go
示例17: addUdevRuleForSnap
func addUdevRuleForSnap(snapname, newRule string) error {
udevRulesFile := udevRulesPathForPart(snapname)
rules, err := ioutil.ReadFile(udevRulesFile)
if nil != err && !os.IsNotExist(err) {
return err
}
// At this point either rules variable contains some rules if the
// file exists, or it is nil if the file does not exist yet.
// In both cases, updatedRules will have the right content.
updatedRules := append(rules, newRule...)
if err := helpers.AtomicWriteFile(udevRulesFile, updatedRules, 0644, 0); nil != err {
return err
}
return nil
}
开发者ID:pombredanne,项目名称:snappy-1,代码行数:19,代码来源:hwaccess.go
示例18: removeUdevRuleForSnap
func removeUdevRuleForSnap(snapname, device string) error {
udevRulesFile := udevRulesPathForPart(snapname)
file, err := os.Open(udevRulesFile)
if nil != err && !os.IsNotExist(err) {
return err
}
// Get the full list of rules to keep
var rulesToKeep []string
scanner := bufio.NewScanner(file)
devicePattern := "\"" + filepath.Base(device) + "\""
for scanner.Scan() {
rule := scanner.Text()
if "" != rule && !strings.Contains(rule, devicePattern) {
rulesToKeep = append(rulesToKeep, rule)
}
}
file.Close()
// Update the file with the remaining rules or delete it
// if there is not any rule left.
if 0 < len(rulesToKeep) {
// Appending the []string list of rules in a single
// string to convert it later in []byte
var out string
for _, rule := range rulesToKeep {
out = out + rule + "\n"
}
if err := helpers.AtomicWriteFile(udevRulesFile, []byte(out), 0644, 0); nil != err {
return err
}
} else {
if err := os.Remove(udevRulesFile); nil != err {
return err
}
}
return nil
}
开发者ID:pombredanne,项目名称:snappy-1,代码行数:42,代码来源:hwaccess.go
示例19: writeHWAccessJSONFile
func writeHWAccessJSONFile(snapname string, appArmorAdditional appArmorAdditionalJSON) error {
if len(appArmorAdditional.WritePath) == 0 {
appArmorAdditional.ReadPath = nil
} else {
appArmorAdditional.ReadPath = []string{udevDataGlob}
}
out, err := json.MarshalIndent(appArmorAdditional, "", " ")
if err != nil {
return err
}
// append final newline
out = append(out, '\n')
additionalFile := getHWAccessJSONFile(snapname)
if err := helpers.AtomicWriteFile(additionalFile, out, 0640, 0); err != nil {
return err
}
return nil
}
开发者ID:pombredanne,项目名称:snappy-1,代码行数:20,代码来源:hwaccess.go
示例20: writeOemHardwareUdevRules
func writeOemHardwareUdevRules(m *packageYaml) error {
os.MkdirAll(dirs.SnapUdevRulesDir, 0755)
// cleanup
if err := cleanupOemHardwareUdevRules(m); err != nil {
return err
}
// write new files
for _, h := range m.OEM.Hardware.Assign {
rulesContent, err := h.generateUdevRuleContent()
if err != nil {
return err
}
outfile := filepath.Join(dirs.SnapUdevRulesDir, fmt.Sprintf("80-snappy_%s_%s.rules", m.Name, h.PartID))
if err := helpers.AtomicWriteFile(outfile, []byte(rulesContent), 0644, 0); err != nil {
return err
}
}
return nil
}
开发者ID:General-Beck,项目名称:snappy,代码行数:21,代码来源:oem.go
注:本文中的github.com/ubuntu-core/snappy/helpers.AtomicWriteFile函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论